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