platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Product.java
@@ -7,20 +7,18 @@ import jakarta.persistence.Entity; import jakarta.persistence.Transient; import lombok.Data; import org.hibernate.annotations.Comment; import jakarta.persistence.Table; import java.util.List; /** * @author wjli * @author * @description * @date 2026/4/29 10:51 **/ @Data @Entity @Table(name = "product") @Comment("产品信息") @Entity//加了才能自动生成表 @org.hibernate.annotations.Table(appliesTo="product",comment = "产品")//给表加注释 @jakarta.persistence.Table(name = "product")//数据库创建的表明 public class Product extends BaseModel<Product> { //产品名称、产品编码(主数据、ERP)、产品价格、税点、所属上级 platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ProductTreeVo.java
New file @@ -0,0 +1,16 @@ package com.by4cloud.platformx.business.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class ProductTreeVo { private Long id; @Schema(description = "产品名称") private String productName; private Long parentId; } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductController.java
@@ -1,11 +1,14 @@ package com.by4cloud.platformx.business.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.by4cloud.platformx.business.vo.ProductTreeVo; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.log.annotation.SysLog; import com.by4cloud.platformx.business.entity.Product; @@ -95,8 +98,7 @@ LambdaQueryWrapper<Product> wrapper = Wrappers.lambdaQuery(); wrapper.like(StrUtil.isNotEmpty(product.getProductName()),Product::getProductName,product.getProductName()); wrapper.eq(product.getParentId()!=null,Product::getParentId,product.getParentId()); wrapper.last("limit 30"); return R.ok(productService.listByScope(wrapper)); return R.ok(BeanUtil.copyToList(productService.listByScope(wrapper), ProductTreeVo.class)); } /** @@ -135,6 +137,9 @@ @PostMapping @PreAuthorize("@pms.hasPermission('business_product_add')" ) public R save(@RequestBody Product product) { if (ArrayUtil.isNotEmpty(productService.listByScope(Wrappers.lambdaQuery(product).eq(Product::getErpCode,product.getErpCode())).toArray())){ return R.failed("产品Erp编码已存在"); } return R.ok(productService.save(product)); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ProductService.java
@@ -3,6 +3,7 @@ import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.extension.service.IService; import com.by4cloud.platformx.business.entity.Product; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.mybatis.IIService; import java.util.List; @@ -12,4 +13,5 @@ List<Tree<Long>> treeList(Long parentId, String productName); List<Product> getProductList(Product product); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java
@@ -627,11 +627,12 @@ } } } //更新合同开票状态 contract.setBillingStatus("2"); contract.setBillingAmout(contract.getBillingAmout().subtract(invoice.getInvoiceTotalPriceTax())); contractMapper.updateById(contract); //更新合同开票状态 前提出库完成 if (StrUtil.equals(contract.getBillingStatus(),"3")) { contract.setBillingStatus("2"); contract.setBillingAmout(contract.getBillingAmout().subtract(invoice.getInvoiceTotalPriceTax())); contractMapper.updateById(contract); } blueInvoice.setRedReversal("1"); baseMapper.updateById(blueInvoice); @@ -652,18 +653,25 @@ @Override public void refuseApproval(Long id) { ContractInvoice invoice = baseMapper.selectById(id); //更新合同出库单状态 String[] outBoundIds = invoice.getOutBoundId().split(","); Arrays.stream(outBoundIds).forEach(outBoundId -> { ContractOutBound bound = contractOutBoundMapper.selectById(outBoundId); bound.setInvoiceStatus("0"); contractOutBoundMapper.updateById(bound); }); invoice.setApprovalStatus("2"); baseMapper.updateById(invoice); ContractInvoice blueInvoice = baseMapper.selectById(invoice.getBlueInvoiceId()); blueInvoice.setRedReversal("0"); baseMapper.updateById(blueInvoice); //蓝票 if (invoice.getInvoiceCategory().equals("1")) { //更新合同出库单状态 List<ContractOutBoundInvoiceVo> outBoundInvoiceVoList = BeanUtil.copyToList(JSONArray.parseArray(invoice.getInvoicePreviewParam()),ContractOutBoundInvoiceVo.class); if (ArrayUtil.isNotEmpty(outBoundInvoiceVoList.toArray())){ outBoundInvoiceVoList.stream().forEach(contractOutBoundInvoiceVo -> { ContractOutBound contractOutBound = contractOutBoundMapper.selectById(contractOutBoundInvoiceVo.getContractOutBoundId()); contractOutBound.setInvoiceNum(contractOutBound.getInvoiceNum().subtract(contractOutBoundInvoiceVo.getInvoiceNum())); contractOutBoundMapper.updateById(contractOutBound); }); } } //红票 if (invoice.getInvoiceCategory().equals("2")) { ContractInvoice blueInvoice = baseMapper.selectById(invoice.getBlueInvoiceId()); blueInvoice.setRedReversal("0"); baseMapper.updateById(blueInvoice); } } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java
@@ -1,19 +1,26 @@ package com.by4cloud.platformx.business.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.lang.tree.TreeNode; import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platformx.business.entity.Product; import com.by4cloud.platformx.business.mapper.ProductMapper; import com.by4cloud.platformx.business.service.ProductService; import com.by4cloud.platformx.business.vo.ProductTreeVo; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.datascope.DataScope; import com.github.yulichang.wrapper.MPJLambdaWrapper; import jakarta.validation.constraints.NotNull; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -56,6 +63,7 @@ return baseMapper.getProductListByScope(product,DataScope.of("comp_id")); } @NotNull private Function<Product, TreeNode<Long>> getNodeFunction() { return product -> {