shiyunteng
2026-06-11 45847670fea5d7354c2bfb4b53a321887271dcd4
feat:产品页面体验优化
5个文件已修改
1个文件已添加
85 ■■■■ 已修改文件
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Product.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ProductTreeVo.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ProductService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ContractInvoiceServiceImpl.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 -> {