diff --git a/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java b/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java index 452fe029..2723ee62 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java +++ b/src/main/java/com/xujie/sys/modules/ecss/controller/CoDelController.java @@ -571,4 +571,42 @@ public class CoDelController { List> templateList = coDelService.getCustomerTemplateList(params); return R.ok().put("rows", templateList); } + + /** + * @Description 根据site、buNo、partNo获取物料包装属性(每卷数量、每箱卷数、箱重量) + * @Title getPartPackageProperties + * @param params 包含site、buNo、partNo的参数Map + * @author AI Assistant + * @date 2025-10-15 + * @return R 返回包装属性信息,包含rollQty(每卷数量)、boxRolls(每箱卷数)、boxWeight(箱重量) + */ + @PostMapping("/getPartPackageProperties") + @ResponseBody + public R getPartPackageProperties(@RequestBody Map params) { + String site = (String) params.get("site"); + String buNo = (String) params.get("buNo"); + String partNo = (String) params.get("partNo"); + + // 参数校验 + if (site == null || site.trim().isEmpty()) { + return R.error("站点(site)不能为空"); + } + if (buNo == null || buNo.trim().isEmpty()) { + return R.error("业务单元(buNo)不能为空"); + } + if (partNo == null || partNo.trim().isEmpty()) { + return R.error("物料编号(partNo)不能为空"); + } + + Map result = coDelService.getPartPackageProperties(site, buNo, partNo); + + // 根据业务结果返回 + Boolean success = (Boolean) result.get("success"); + if (success != null && !success) { + String message = (String) result.get("message"); + return R.error(message != null ? message : "获取物料包装属性失败"); + } + + return R.ok().put("data", result); + } } diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java b/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java index 41b939b2..b2fc0a93 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/CoDelService.java @@ -166,4 +166,13 @@ public interface CoDelService { void modifyNotifyDetailByExcel(MultipartFile file, EcssCoDelNotifyHeaderData inData); List> getCustomerTemplateList(Map params); + + /** + * @Description 根据site、buNo、partNo获取物料包装属性(每卷数量、每箱卷数、箱重量) + * @param site 站点 + * @param buNo 业务单元 + * @param partNo 物料编号 + * @return 包装属性信息Map + */ + Map getPartPackageProperties(String site, String buNo, String partNo); } diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java index 81851884..9bbbb438 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelServiceImpl.java @@ -4177,4 +4177,83 @@ public class CoDelServiceImpl implements CoDelService { return emailContent.toString(); } + /** + * @Description 根据site、buNo、partNo获取物料包装属性(每卷数量、每箱卷数、箱重量) + * @Author AI Assistant + * @Date 2025-10-15 + * @param site 站点 + * @param buNo 业务单元 + * @param partNo 物料编号 + * @return 包装属性信息Map,包含rollQty(每卷数量)、boxRolls(每箱卷数)、boxWeight(箱重量) + */ + @Override + public Map getPartPackageProperties(String site, String buNo, String partNo) { + log.info("开始获取物料包装属性 - site: {}, buNo: {}, partNo: {}", site, buNo, partNo); + + Map result = new HashMap<>(); + + try { + // 获取物料属性列表 + List propertiesValues = coDelMapper.getPropertiesListByTypeAndCodeNo( + site, "ECSSPART", "BG001", buNo, partNo); + + if (propertiesValues == null || propertiesValues.isEmpty()) { + log.warn("未找到物料 {} 的属性配置", partNo); + result.put("success", false); + result.put("message", "未找到物料的属性配置"); + return result; + } + + // 按属性项编号分组 + Map> partNoAndItemNoMap = propertiesValues.stream() + .collect(Collectors.groupingBy(PartSubPropertiesValue::getPropertiesItemNo)); + + // 获取每卷数量 + PartSubPropertiesValueData propertiesRollQty = null; + if (partNoAndItemNoMap.containsKey("ROLLQTY") && !partNoAndItemNoMap.get("ROLLQTY").isEmpty()) { + propertiesRollQty = partNoAndItemNoMap.get("ROLLQTY").get(0); + result.put("rollQty", propertiesRollQty.getNumValue()); + } else { + log.warn("物料 {} 未配置ROLLQTY属性", partNo); + result.put("rollQty", null); + } + + // 获取每箱卷数 + PartSubPropertiesValueData propertiesBoxRolls = null; + if (partNoAndItemNoMap.containsKey("BOXROLLS") && !partNoAndItemNoMap.get("BOXROLLS").isEmpty()) { + propertiesBoxRolls = partNoAndItemNoMap.get("BOXROLLS").get(0); + result.put("boxRolls", propertiesBoxRolls.getNumValue()); + } else { + log.warn("物料 {} 未配置BOXROLLS属性", partNo); + result.put("boxRolls", null); + } + + // 获取箱重量 + PartSubPropertiesValueData propertiesBoxWeight = null; + if (partNoAndItemNoMap.containsKey("BOXWEIGHT") && !partNoAndItemNoMap.get("BOXWEIGHT").isEmpty()) { + propertiesBoxWeight = partNoAndItemNoMap.get("BOXWEIGHT").get(0); + result.put("boxWeight", propertiesBoxWeight.getNumValue()); + } else { + log.warn("物料 {} 未配置BOXWEIGHT属性", partNo); + result.put("boxWeight", null); + } + + result.put("success", true); + result.put("site", site); + result.put("buNo", buNo); + result.put("partNo", partNo); + + log.info("物料包装属性获取成功 - partNo: {}, rollQty: {}, boxRolls: {}, boxWeight: {}", + partNo, result.get("rollQty"), result.get("boxRolls"), result.get("boxWeight")); + + } catch (Exception e) { + log.error("获取物料包装属性失败 - site: {}, buNo: {}, partNo: {}, error: {}", + site, buNo, partNo, e.getMessage(), e); + result.put("success", false); + result.put("message", "获取物料包装属性失败: " + e.getMessage()); + } + + return result; + } + }