diff --git a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java index 3f9c84df..6ad7bf5e 100644 --- a/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java +++ b/src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java @@ -3669,55 +3669,29 @@ public class CoDelExcelServiceImpl implements CoDelExcelService { */ private BigDecimal fscWeight(Map> partNoAndItemNoMap, String partNo, BigDecimal totalQty, String lossratio) { - PartSubPropertiesValueData FSC001 = partNoAndItemNoMap.get("FSC001")==null?null:partNoAndItemNoMap.get("FSC001").get(0);//P距 - PartSubPropertiesValueData FSC002 = partNoAndItemNoMap.get("FSC002")==null?null:partNoAndItemNoMap.get("FSC002").get(0);//排数 - PartSubPropertiesValueData FSC003 = partNoAndItemNoMap.get("FSC003")==null?null:partNoAndItemNoMap.get("FSC003").get(0);//1米标签面积 - PartSubPropertiesValueData FSC004 = partNoAndItemNoMap.get("FSC004")==null?null:partNoAndItemNoMap.get("FSC004").get(0);//底纸宽度 - PartSubPropertiesValueData FSC005 = partNoAndItemNoMap.get("FSC005")==null?null:partNoAndItemNoMap.get("FSC005").get(0);//BOM分配张数 - PartSubPropertiesValueData FSC0012 = partNoAndItemNoMap.get("FSC001-02")==null?null:partNoAndItemNoMap.get("FSC001-02").get(0);//P距 - PartSubPropertiesValueData FSC0022 = partNoAndItemNoMap.get("FSC002-02")==null?null:partNoAndItemNoMap.get("FSC002-02").get(0);//排数 - PartSubPropertiesValueData FSC0032 = partNoAndItemNoMap.get("FSC003-02")==null?null:partNoAndItemNoMap.get("FSC003-02").get(0);//1米标签面积 - PartSubPropertiesValueData FSC0042 = partNoAndItemNoMap.get("FSC004-02")==null?null:partNoAndItemNoMap.get("FSC004-02").get(0);//底纸宽度 - PartSubPropertiesValueData FSC0052 = partNoAndItemNoMap.get("FSC005-02")==null?null:partNoAndItemNoMap.get("FSC005-02").get(0);//BOM分配张数 - BigDecimal fscWeight = BigDecimal.valueOf(0); - BigDecimal fscWeight2 = BigDecimal.valueOf(0); - // 千张理论用量(M)=((BOM分配张数/排数)*P距)/1000 - if (FSC001!=null && FSC002!=null && FSC003!=null && FSC004!=null && FSC005!=null) { - BigDecimal bom = FSC005.getNumValue()!=null?BigDecimal.valueOf(FSC005.getNumValue()):BigDecimal.ZERO; - BigDecimal row = FSC002.getNumValue()!=null?BigDecimal.valueOf(FSC002.getNumValue()):BigDecimal.ZERO; - BigDecimal area = FSC003.getNumValue()!=null?BigDecimal.valueOf(FSC003.getNumValue()):BigDecimal.ZERO; - BigDecimal width = FSC004.getNumValue()!=null?BigDecimal.valueOf(FSC004.getNumValue()):BigDecimal.ZERO; - BigDecimal pju = FSC001.getNumValue()!=null?BigDecimal.valueOf(FSC001.getNumValue()):BigDecimal.ZERO; - if (bom.compareTo(BigDecimal.ZERO)!=0 && row.compareTo(BigDecimal.ZERO)!=0 && area.compareTo(BigDecimal.ZERO)!=0 - && width.compareTo(BigDecimal.ZERO)!=0 && pju.compareTo(BigDecimal.ZERO)!=0) { - fscWeight = getFSC(totalQty, lossratio, bom, row, area, width, pju); - } - } - if (FSC0012!=null && FSC0022!=null && FSC0032!=null && FSC0042!=null && FSC0052!=null) { - BigDecimal bom = FSC0052.getNumValue()!=null?BigDecimal.valueOf(FSC0052.getNumValue()):BigDecimal.ZERO; - BigDecimal row = FSC0022.getNumValue()!=null?BigDecimal.valueOf(FSC0022.getNumValue()):BigDecimal.ZERO; - BigDecimal area = FSC0032.getNumValue()!=null?BigDecimal.valueOf(FSC0032.getNumValue()):BigDecimal.ZERO; - BigDecimal width = FSC0042.getNumValue()!=null?BigDecimal.valueOf(FSC0042.getNumValue()):BigDecimal.ZERO; - BigDecimal pju = FSC0012.getNumValue()!=null?BigDecimal.valueOf(FSC0012.getNumValue()):BigDecimal.ZERO; - if (bom.compareTo(BigDecimal.ZERO)!=0 && row.compareTo(BigDecimal.ZERO)!=0 && area.compareTo(BigDecimal.ZERO)!=0 - && width.compareTo(BigDecimal.ZERO)!=0 && pju.compareTo(BigDecimal.ZERO)!=0) { - fscWeight2 = getFSC(totalQty, lossratio, bom, row, area, width, pju); - } - } - return fscWeight.add(fscWeight2).setScale(2, RoundingMode.DOWN); - } - - private BigDecimal getFSC(BigDecimal totalQty, String lossratio, - BigDecimal bom, BigDecimal row, BigDecimal area, BigDecimal width, BigDecimal pju) { - BigDecimal fscWeight; - BigDecimal qianzhang = ((bom.divide(row,6, RoundingMode.HALF_UP)).multiply(pju)). - divide(BigDecimal.valueOf(1000),6, RoundingMode.HALF_UP); - fscWeight = qianzhang.multiply(totalQty.divide(BigDecimal.valueOf(1000),6, RoundingMode.HALF_UP)). - multiply(width.divide(BigDecimal.valueOf(1000),6, RoundingMode.HALF_UP)). - multiply(BigDecimal.valueOf(0.16)). - multiply(area.divide(width.divide(BigDecimal.valueOf(1000),6, RoundingMode.HALF_UP),6, RoundingMode.HALF_UP)). - multiply(BigDecimal.valueOf(Double.parseDouble(lossratio))); - return fscWeight; + // 加损耗系数:1.01-1.05(1%-5%的损耗) + //(发货数量小于等于100W,系数取1.05;发货数量大于100W小于等于300W,系数取1.03;发货数量大于300W,系数取1.01) + // FSC出货净重=发货数量(张)*加损耗系数*单张标签的克重(千克) + PartSubPropertiesValueData fsc006 = partNoAndItemNoMap.get("FSC006") == null ? null + : partNoAndItemNoMap.get("FSC006").getFirst();//单张标签的克重(g) + BigDecimal fscWeight = BigDecimal.ZERO; + if (fsc006 != null && fsc006.getNumValue() != null && lossratio != null) { + // 损耗系数 + BigDecimal lossRatio; + if (totalQty.compareTo(new BigDecimal("1000000")) <= 0) { + lossRatio = new BigDecimal("1.05"); + } else if (totalQty.compareTo(new BigDecimal("3000000")) <= 0) { + lossRatio = new BigDecimal("1.03"); + } else { + lossRatio = new BigDecimal("1.01"); + } + // 单张克重(g → kg) + BigDecimal unitWeightKg = new BigDecimal(String.valueOf(fsc006.getNumValue())) + .divide(BigDecimal.valueOf(1000), 6, RoundingMode.HALF_UP); + // 计算 + fscWeight = totalQty.multiply(lossRatio).multiply(unitWeightKg); + } + return fscWeight.setScale(2, RoundingMode.DOWN); } private void clearPalletData(EcssCoDelNotifyHeaderData inData) { @@ -4314,18 +4288,8 @@ public class CoDelExcelServiceImpl implements CoDelExcelService { String lengthStr = getCellValueAsString(row.getCell(6), dataFormatter); String widthStr = getCellValueAsString(row.getCell(7), dataFormatter); String heightStr = getCellValueAsString(row.getCell(8), dataFormatter); - - // 读取FSC标签属性字段:P距 排数 1米标签面积 底纸宽度(MM) BOM分配张数 P距-2 排数-2 1米标签面积-2 底纸宽度(MM)-2 BOM分配张数-2 - String fsc001Str = getCellValueAsString(row.getCell(9), dataFormatter); // P距 - String fsc002Str = getCellValueAsString(row.getCell(10), dataFormatter); // 排数 - String fsc003Str = getCellValueAsString(row.getCell(11), dataFormatter); // 1米标签面积 - String fsc004Str = getCellValueAsString(row.getCell(12), dataFormatter); // 底纸宽度(MM) - String fsc005Str = getCellValueAsString(row.getCell(13), dataFormatter); // BOM分配张数 - String fsc00102Str = getCellValueAsString(row.getCell(14), dataFormatter); // P距-2 - String fsc00202Str = getCellValueAsString(row.getCell(15), dataFormatter); // 排数-2 - String fsc00302Str = getCellValueAsString(row.getCell(16), dataFormatter); // 1米标签面积-2 - String fsc00402Str = getCellValueAsString(row.getCell(17), dataFormatter); // 底纸宽度(MM)-2 - String fsc00502Str = getCellValueAsString(row.getCell(18), dataFormatter); // BOM分配张数-2 + // 读取FSC标签属性字段: 单张标签的克重(克) + String fsc006Str = getCellValueAsString(row.getCell(9), dataFormatter); // 单张标签的克重(克) // 跳过空行 if (StringUtils.isBlank(sku)) { continue; @@ -4342,16 +4306,7 @@ public class CoDelExcelServiceImpl implements CoDelExcelService { rowData.put("height", heightStr); // FSC标签属性字段 - rowData.put("fsc001", fsc001Str); - rowData.put("fsc002", fsc002Str); - rowData.put("fsc003", fsc003Str); - rowData.put("fsc004", fsc004Str); - rowData.put("fsc005", fsc005Str); - rowData.put("fsc001-02", fsc00102Str); - rowData.put("fsc002-02", fsc00202Str); - rowData.put("fsc003-02", fsc00302Str); - rowData.put("fsc004-02", fsc00402Str); - rowData.put("fsc005-02", fsc00502Str); + rowData.put("fsc006", fsc006Str); // 验证BU if (StringUtils.isBlank(buNo)) { @@ -4395,15 +4350,9 @@ public class CoDelExcelServiceImpl implements CoDelExcelService { int updatedPartCount = 0; // 处理属性值:每卷数量(ROLLQTY)、每箱卷数(BOXROLLS)、每卷重量(ROLLWEIGHT)、箱重量(BOXWEIGHT)、FSC标签属性 - String[] itemNos = {"ROLLQTY", "BOXROLLS", "ROLLWEIGHT", "BOXWEIGHT", - "FSC001", "FSC002", "FSC003", "FSC004", "FSC005", - "FSC001-02", "FSC002-02", "FSC003-02", "FSC004-02", "FSC005-02"}; - String[] itemValues = {rollQtyStr, boxRollsStr, rollWeightStr, boxWeightStr, - fsc001Str, fsc002Str, fsc003Str, fsc004Str, fsc005Str, - fsc00102Str, fsc00202Str, fsc00302Str, fsc00402Str, fsc00502Str}; - String[] itemNames = {"每卷数量", "每箱卷数", "每卷重量", "箱重量", - "P距", "排数", "1米标签面积", "底纸宽度(MM)", "BOM分配张数", - "P距-2", "排数-2", "1米标签面积-2", "底纸宽度(MM)-2", "BOM分配张数-2"}; + String[] itemNos = {"ROLLQTY", "BOXROLLS", "ROLLWEIGHT", "BOXWEIGHT", "FSC006"}; + String[] itemValues = {rollQtyStr, boxRollsStr, rollWeightStr, boxWeightStr, fsc006Str}; + String[] itemNames = {"每卷数量", "每箱卷数", "每卷重量", "箱重量", "单张标签的克重(克)"}; // 为每个匹配的part设置属性 for (PartData partData : partList) { diff --git a/src/main/resources/mapper/ecss/CoDelMapper.xml b/src/main/resources/mapper/ecss/CoDelMapper.xml index 026b33cf..065368f7 100644 --- a/src/main/resources/mapper/ecss/CoDelMapper.xml +++ b/src/main/resources/mapper/ecss/CoDelMapper.xml @@ -131,7 +131,7 @@