Browse Source

FSC出货净重=发货数量(张)*加损耗系数*单张标签的克重

ecss-tx
han\hanst 2 months ago
parent
commit
8a72ee0d43
  1. 109
      src/main/java/com/xujie/sys/modules/ecss/service/impl/CoDelExcelServiceImpl.java
  2. 2
      src/main/resources/mapper/ecss/CoDelMapper.xml

109
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<String, List<PartSubPropertiesValueData>> 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.051%-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) {

2
src/main/resources/mapper/ecss/CoDelMapper.xml

@ -131,7 +131,7 @@
<select id="checkEcssCoDelNotifyHeaderByDelNo" resultType="EcssCoDelNotifyHeaderData">
select a.site,a.bu_no,a.delNo,a.erp_delNo,a.ready_date,a.notifyDate,a.customer_name,a.Destination,a.shipping_mode,a.erp_flag,
a.notify_status,a.remark,a.createDate,a.createBy,a.cmc_invoice,a.updateDate,a.updateBy,dbo.get_bu_desc(a.site,a.bu_no) as buDesc
,a.overseasShipper,a.overseasAddress,a.cnative,a.localShipAddress,a.salesArea
,a.overseasShipper,a.overseasAddress,a.cnative,a.localShipAddress,a.salesArea,a.walMartOrderFlag,a.fscFlag,a.boxSizeFlag,a.templateNo
from ecss_CoDelNotifyHeader a
where a.site = #{site}
AND a.delNo = #{delNo}

Loading…
Cancel
Save