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 >= 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>