gongchunyi
2 天以前 1536165d57b3c8450cbd53f45c61c36f66cc177c
fix: 生产计划的产品规格与物料编码数据为空
已修改4个文件
115 ■■■■ 文件已修改
src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/production/service/impl/ProductMaterialServiceImpl.java
@@ -350,17 +350,13 @@
        for (ProductMaterialConfig materialConfig : materialConfigList) {
            LambdaQueryWrapper<ProductMaterial> wrapper = new LambdaQueryWrapper<>();
            wrapper.eq(ProductMaterial::getMaterialTypeId, materialConfig.getId())
                    .select(ProductMaterial::getId, ProductMaterial::getMaterialName)
                    .like(materialName != null && !materialName.isEmpty(), ProductMaterial::getMaterialName, materialName);
            List<ProductMaterial> productMaterialList = list(wrapper);
            if (productMaterialList != null && !productMaterialList.isEmpty()) {
                ProductMaterialGroupDto dto = new ProductMaterialGroupDto();
                dto.setConfigId(materialConfig.getId());
                dto.setConfigName(materialConfig.getConfigName());
                dto.setMaterialList(productMaterialList);
                productMaterialMap.add(dto);
            }
            ProductMaterialGroupDto dto = new ProductMaterialGroupDto();
            dto.setConfigId(materialConfig.getId());
            dto.setConfigName(materialConfig.getConfigName());
            dto.setMaterialList(productMaterialList);
            productMaterialMap.add(dto);
        }
        return productMaterialMap;
    }
src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
@@ -59,10 +59,31 @@
    private String customerName;
    /**
     * 物料编码
     */
    @ApiModelProperty("物料编码")
    @Excel(name = "物料编码")
    private String materialCode;
    /**
     * 产品名称
     */
    @ApiModelProperty("产品名称")
    @Excel(name = "产品名称")
    private String productName;
    /**
     * 产品规格
     */
    @ApiModelProperty("产品规格")
    @Excel(name = "产品规格")
    private String productSpec;
    /**
     * 关联物料信息表ID
     */
    @ApiModelProperty("关联物料信息表ID")
    private Integer productMaterialId;
    private Long productMaterialSkuId;
    /**
     * 长
src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -15,8 +15,10 @@
import com.ruoyi.common.utils.http.HttpUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.config.AliDingConfig;
import com.ruoyi.production.pojo.ProductMaterial;
import com.ruoyi.production.pojo.ProductMaterialSku;
import com.ruoyi.production.pojo.ProductOrder;
import com.ruoyi.production.service.ProductMaterialService;
import com.ruoyi.production.service.ProductMaterialSkuService;
import com.ruoyi.production.service.ProductOrderService;
import com.ruoyi.productionPlan.dto.ProductionPlanDto;
@@ -73,6 +75,9 @@
    @Autowired
    private ProductMaterialSkuService productMaterialSkuService;
    @Autowired
    private ProductMaterialService productMaterialService;
    /**
     * 同步锁,确保手动和定时任务不同时执行
@@ -384,13 +389,23 @@
                plan.setCustomerName(formData.getString("textField_lbkozohg"));
                String materialCode = row.getString("textField_l9xo62q5");
                plan.setMaterialCode(materialCode);
                // 根据物料编码查询物料信息表,关联物料ID
                if (StringUtils.isNotEmpty(materialCode)) {
                    LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>();
                    skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, materialCode);
                    ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper);
                    if (sku != null && sku.getMaterialId() != null) {
                        plan.setProductMaterialId(sku.getMaterialId().intValue());
                    if (sku != null) {
                        plan.setProductMaterialSkuId(sku.getId());
                        if (sku.getMaterialId() != null) {
                            // 设置产品名称
                            ProductMaterial material = productMaterialService.getById(sku.getMaterialId());
                            if (material != null) {
                                plan.setProductName(material.getMaterialName());
                            }
                        }
                        // 设置规格型号
                        plan.setProductSpec(sku.getSpecification());
                    }
                }
@@ -467,19 +482,19 @@
        //  Map (formInstanceId + materialCode)
        Map<String, ProductionPlan> existMap = new HashMap<>();
        for (ProductionPlan p : existList) {
            String key = p.getFormInstanceId() + "_" + p.getProductMaterialId();
            String key = p.getFormInstanceId() + "_" + p.getProductMaterialSkuId();
            existMap.put(key, p);
        }
        //  遍历同步数据
        for (ProductionPlan plan : list) {
            String key = plan.getFormInstanceId() + "_" + plan.getProductMaterialId();
            String key = plan.getFormInstanceId() + "_" + plan.getProductMaterialSkuId();
            ProductionPlan exist = existMap.get(key);
            if (exist == null) {
                // 新增
                this.save(plan);
                affected++;
                log.info("新增数据 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialId());
                log.info("新增数据 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialSkuId());
            } else {
                // 判断是否需要更新
                if (exist.getFormModifiedTime() == null || !exist.getFormModifiedTime().equals(plan.getFormModifiedTime())) {
@@ -487,7 +502,7 @@
                    plan.setCreateTime(exist.getCreateTime());
                    this.updateById(plan);
                    affected++;
                    log.info("更新数据 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialId());
                    log.info("更新数据 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialSkuId());
                }
            }
        }
@@ -541,6 +556,23 @@
            entity.setDataSourceType(2);
            entity.setDataSyncType(1);
            // 根据物料编码填充关联ID
            if (StringUtils.isNotEmpty(dto.getMaterialCode())) {
                LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>();
                skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, dto.getMaterialCode());
                ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper);
                if (sku != null) {
                    entity.setProductMaterialSkuId(sku.getId());
                    if (sku.getMaterialId() != null) {
                        ProductMaterial material = productMaterialService.getById(sku.getMaterialId());
                        if (material != null) {
                            entity.setProductName(material.getMaterialName());
                        }
                    }
                    entity.setProductSpec(sku.getSpecification());
                }
            }
            entityList.add(entity);
        }
        this.saveBatch(entityList);
src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml
@@ -11,10 +11,7 @@
        <result property="serialNo" column="serial_no"/>
        <result property="applyNo" column="apply_no"/>
        <result property="customerName" column="customer_name"/>
        <result property="materialCode" column="material_code"/>
        <result property="productMaterialId" column="product_material_id"/>
        <result property="productName" column="product_name"/>
        <result property="productSpec" column="product_spec"/>
        <result property="productMaterialSkuId" column="product_material_sku_id"/>
        <result property="length" column="length"/>
        <result property="width" column="width"/>
        <result property="height" column="height"/>
@@ -38,28 +35,28 @@
        <result property="totalCount" column="total_count"/>
    </resultMap>
    <select id="listPage" resultType="com.ruoyi.productionPlan.dto.ProductionPlanDto">
        SELECT
        pp.*,
        pm.product_name,
        pm.specification,
        pm.material_code,
        pms.material_code AS materialCode,
        pms.specification AS specification,
        pm.material_name AS productName,
        pm.base_unit
        FROM production_plan pp
        left join product_material pm on pp.product_material_id = pm.id
        left join product_material_sku pms on pp.product_material_sku_id = pms.id
        left join product_material pm on pms.material_id = pm.id
        WHERE 1 = 1
        <if test="c.customerName != null and c.customerName != '' ">
            AND pp.customer_name LIKE CONCAT('%',#{c.customerName},'%')
        </if>
        <if test="c.productName != null and c.productName != '' ">
            AND pm.product_name LIKE CONCAT('%',#{c.productName},'%')
        </if>
        <if test="c.specification != null and c.specification != '' ">
            AND pm.specification LIKE CONCAT('%',#{c.specification},'%')
            AND pm.material_name LIKE CONCAT('%',#{c.productName},'%')
        </if>
        <if test="c.materialCode != null and c.materialCode != '' ">
            AND pm.material_code LIKE CONCAT('%',#{c.materialCode},'%')
            AND pms.material_code LIKE CONCAT('%',#{c.materialCode},'%')
        </if>
        <if test="c.specification != null and c.specification != '' ">
            AND pms.specification LIKE CONCAT('%',#{c.specification},'%')
        </if>
        <if test="c.startDate != null">
            AND pp.start_date &gt;= DATE_FORMAT(#{c.startDate},'%Y-%m-%d')
@@ -101,12 +98,13 @@
    <select id="selectWithMaterialByIds" resultType="com.ruoyi.productionPlan.dto.ProductionPlanDto">
        SELECT
        pp.*,
        pm.product_name,
        pm.specification,
        pm.material_code,
        pms.material_code AS materialCode,
        pms.specification AS specification,
        pm.material_name AS productName,
        pm.base_unit
        FROM production_plan pp
        LEFT JOIN product_material pm ON pp.product_material_id = pm.id
        LEFT JOIN product_material_sku pms ON pp.product_material_sku_id = pms.id
        LEFT JOIN product_material pm ON pms.material_id = pm.id
        WHERE pp.id IN
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}