huminmin
2 天以前 4a82ac1bfb3e3cd04d6dd6c07aaee6c0d70df13e
主生产计划:产品信息改为关联查询
已修改5个文件
101 ■■■■■ 文件已修改
src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/productionPlan/dto/ProductionPlanDto.java
@@ -1,6 +1,7 @@
package com.ruoyi.productionPlan.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.framework.aspectj.lang.annotation.Excel;
import com.ruoyi.productionPlan.pojo.ProductionPlan;
import io.swagger.annotations.ApiModelProperty;
@@ -13,6 +14,31 @@
@Data
public class ProductionPlanDto extends ProductionPlan {
    /**
     * 物料编码
     */
    @ApiModelProperty("物料编码")
    @Excel(name = "物料编码")
    private String materialCode;
    /**
     * 产品名称
     */
    @ApiModelProperty("产品名称")
    @Excel(name = "产品名称")
    private String productName;
    /**
     * 产品规格
     */
    @ApiModelProperty("产品规格")
    @Excel(name = "产品规格")
    private String specification;
    @ApiModelProperty("产品单位")
    @Excel(name = "产品单位")
    private String baseUnit;
    @ApiModelProperty(value = "生产计划id集合")
    private List<Long> ids;
src/main/java/com/ruoyi/productionPlan/mapper/ProductionPlanMapper.java
@@ -24,4 +24,6 @@
    List<ProductionPlanSummaryDto> selectSummaryByProductType(ProductionPlanSummaryDto query);
    List<ProductionPlanDto> selectWithMaterialByIds(@Param("ids") List<Long> ids);
}
src/main/java/com/ruoyi/productionPlan/pojo/ProductionPlan.java
@@ -59,32 +59,10 @@
    private String customerName;
    /**
     * 物料编码
     */
    @ApiModelProperty("物料编码")
    @Excel(name = "物料编码")
    private String materialCode;
    /**
     * 关联物料信息表ID
     */
    @ApiModelProperty("关联物料信息表ID")
    private Integer productMaterialId;
    /**
     * 产品名称
     */
    @ApiModelProperty("产品名称")
    @Excel(name = "产品名称")
    private String productName;
    /**
     * 产品规格
     */
    @ApiModelProperty("产品规格")
    @Excel(name = "产品规格")
    private String productSpec;
    /**
     * 长
src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -111,8 +111,7 @@
        }
        //  查询主生产计划
        List<ProductionPlan> plans = productionPlanMapper.selectBatchIds(productionPlanDto.getIds());
        plans.sort(Comparator.comparingLong(ProductionPlan::getId));
        List<ProductionPlanDto> plans = productionPlanMapper.selectWithMaterialByIds(productionPlanDto.getIds());
        //  校验是否存在不同的产品名称
        String firstProductName = plans.get(0).getProductName();
@@ -121,11 +120,10 @@
        }
        // 校验是否存在不同的产品规格
        String firstProductSpec = plans.get(0).getProductSpec();
        if (plans.stream().anyMatch(p -> !p.getProductSpec().equals(firstProductSpec))) {
        String firstProductSpec = plans.get(0).getSpecification();
        if (plans.stream().anyMatch(p -> !p.getSpecification().equals(firstProductSpec))) {
            throw new BaseException("合并失败,存在不同的产品规格");
        }
        // 叠加剩余方数
        BigDecimal totalRemainingVolume = plans.stream()
@@ -386,8 +384,6 @@
                plan.setCustomerName(formData.getString("textField_lbkozohg"));
                String materialCode = row.getString("textField_l9xo62q5");
                plan.setMaterialCode(materialCode);
                // 根据物料编码查询物料信息表,关联物料ID
                if (StringUtils.isNotEmpty(materialCode)) {
                    LambdaQueryWrapper<ProductMaterial> queryWrapper = new LambdaQueryWrapper<>();
@@ -398,8 +394,6 @@
                    }
                }
                plan.setProductName(row.getString("textField_l9xo62q7"));
                plan.setProductSpec(row.getString("textField_l9xo62q8"));
                plan.setLength(row.getInteger("numberField_lb7lgatg_value"));
                plan.setWidth(row.getInteger("numberField_lb7lgath_value"));
                plan.setHeight(row.getInteger("numberField_lb7lgati_value"));
@@ -473,19 +467,19 @@
        //  Map (formInstanceId + materialCode)
        Map<String, ProductionPlan> existMap = new HashMap<>();
        for (ProductionPlan p : existList) {
            String key = p.getFormInstanceId() + "_" + p.getMaterialCode();
            String key = p.getFormInstanceId() + "_" + p.getProductMaterialId();
            existMap.put(key, p);
        }
        //  遍历同步数据
        for (ProductionPlan plan : list) {
            String key = plan.getFormInstanceId() + "_" + plan.getMaterialCode();
            String key = plan.getFormInstanceId() + "_" + plan.getProductMaterialId();
            ProductionPlan exist = existMap.get(key);
            if (exist == null) {
                // 新增
                this.save(plan);
                affected++;
                log.info("新增数据 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getMaterialCode());
                log.info("新增数据 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialId());
            } else {
                // 判断是否需要更新
                if (exist.getFormModifiedTime() == null || !exist.getFormModifiedTime().equals(plan.getFormModifiedTime())) {
@@ -493,7 +487,7 @@
                    plan.setCreateTime(exist.getCreateTime());
                    this.updateById(plan);
                    affected++;
                    log.info("更新数据 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getMaterialCode());
                    log.info("更新数据 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialId());
                }
            }
        }
src/main/resources/mapper/productionPlan/ProductionPlanMapper.xml
@@ -40,20 +40,26 @@
    <select id="listPage" resultType="com.ruoyi.productionPlan.dto.ProductionPlanDto">
        SELECT *
        SELECT
        pp.*,
        pm.product_name,
        pm.specification,
        pm.material_code,
        pm.base_unit
        FROM production_plan pp
        left join product_material pm on pp.product_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 pp.product_name LIKE CONCAT('%',#{c.productName},'%')
            AND pm.product_name LIKE CONCAT('%',#{c.productName},'%')
        </if>
        <if test="c.productSpec != null and c.productSpec != '' ">
            AND pp.product_spec LIKE CONCAT('%',#{c.productSpec},'%')
        <if test="c.specification != null and c.specification != '' ">
            AND pm.specification LIKE CONCAT('%',#{c.specification},'%')
        </if>
        <if test="c.materialCode != null and c.materialCode != '' ">
            AND pp.material_code LIKE CONCAT('%',#{c.materialCode},'%')
            AND pm.material_code LIKE CONCAT('%',#{c.materialCode},'%')
        </if>
        <if test="c.startDate != null">
            AND pp.start_date &gt;= DATE_FORMAT(#{c.startDate},'%Y-%m-%d')
@@ -92,4 +98,19 @@
        height
    </select>
    <select id="selectWithMaterialByIds" resultType="com.ruoyi.productionPlan.dto.ProductionPlanDto">
        SELECT
        pp.*,
        pm.product_name,
        pm.specification,
        pm.material_code,
        pm.base_unit
        FROM production_plan pp
        LEFT JOIN product_material pm ON pp.product_material_id = pm.id
        WHERE pp.id IN
        <foreach collection="ids" item="id" open="(" separator="," close=")">
            #{id}
        </foreach>
        ORDER BY pp.id ASC
    </select>
</mapper>