diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java index 151eab7..585e938 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java @@ -27,6 +27,7 @@ import com.cim.idm.wmsextend.generic.errorHandler.CustomException; import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy; import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking; import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey; +import com.cim.idm.wmspackage.materialpacking.management.info.CreateInfo; import com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo; import com.cim.idm.wmspackage.materialreceiverequestact.MaterialReceiveRequestActServiceProxy; import com.cim.idm.wmspackage.materialreceiverequestact.management.info.CreateReceiveRequestBatchInfo; @@ -34,6 +35,7 @@ import com.cim.idm.wmspackage.materialreceiverequestactdetail.MaterialReceiveReq import com.cim.idm.wmspackage.materialreceiverequestactdetail.management.info.ActDetailIncreaseInfo; import com.cim.idm.wmspackage.materialreceiverequestactdetail.management.info.CreateActDetailInfo; import com.cim.idm.wmspackage.materialreceivetactdetail.management.data.MaterialReceiveActDetailKey; +import groovy.lang.Lazy; import org.apache.commons.collections4.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -55,7 +57,10 @@ public class InvoiceServiceImpl implements InvoiceService { private ToSAPServiceImpl toSAPService; @Autowired - private ChargeSplitService ChargeSplitService; + @Lazy + private ChargeSplitService chargeSplitService; + + private EventInfo makeEventInfo; private MaterialShipRequestServiceImpl ms = new MaterialShipRequestServiceImpl(); @@ -337,7 +342,7 @@ public class InvoiceServiceImpl implements InvoiceService { StringBuffer cklx = new StringBuffer(); // cklx.append("SELECT DISTINCT m.ERPLOCATION FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME IN "); // cklx.append("SELECT m.MATERIALQUANTITY,m.MATERIALQUANTITY2,m.MATERIALPACKINGNAME,m.CHARGE,m.SITENAME FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME IN "); - cklx.append("SELECT * FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME IN "); + cklx.append("SELECT m.MATERIALPACKINGNAME,m.SITENAME FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME IN "); String str = ""; str += "("; for (String materialPacking : materialPackingKeyList) { @@ -348,7 +353,7 @@ public class InvoiceServiceImpl implements InvoiceService { // List> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(cklx.toString() + str, hashMap); // 查询MATERIALQUANTITY 与 MATERIALQUANTITY2是否相等,如果相等则未修改数量,不相等则修改数量 - List> qtyQueryForList1 = IDMFrameServiceProxy.getSqlTemplate().queryForList(cklx.toString() + str, hashMap); + List> packingQueryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(cklx.toString() + str, hashMap); // List qtyQueryForList = MaterialPackingServiceProxy.getMaterialPackingService().select(cklx.toString() + str, bindSet,MaterialPacking.class); String billCode = ""; @@ -387,64 +392,63 @@ public class InvoiceServiceImpl implements InvoiceService { // 查询MATERIALQUANTITY 与 MATERIALQUANTITY2是否相等,如果相等则未修改数量,不相等则修改数量 // 如果已修改数量,则进行拆单 -// for (int z = 0; z < qtyQueryForList1.size(); z++) { -// String MATERIALPACKINGNAME = qtyQueryForList1.get(z).get("MATERIALPACKINGNAME").toString(); -// Object[] bindSet = {MATERIALPACKINGNAME}; -// String qtysql = "SELECT * FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME = ?"; -// List qtyQueryForList = MaterialPackingServiceProxy.getMaterialPackingService().select(qtysql, bindSet); -// String qty = String.valueOf(qtyQueryForList.get(z).getMaterialQuantity());` -// -// String qty2 = new Double(qtyQueryForList.get(z).getMaterialQuantity2()) == null ? "0" : String.valueOf(qtyQueryForList.get(z).getMaterialQuantity2()); -// String materialPackingName = qtyQueryForList.get(z).getMaterialPackingName(); -// String charge = qtyQueryForList.get(z).getCharge(); -// BigDecimal bigQty = new BigDecimal(qty); -// // 已拆数量 -// BigDecimal bigQty2 = new BigDecimal(qty2); -// -// // 如果已拆数量不等于原数量,并且已拆数量为0(未拆分数量) -// if(bigQty.compareTo(bigQty2) != 0 && !"0".equals(qty2)) { -// // 剩余数量 -// BigDecimal restQty = bigQty.subtract(bigQty2); -// // 生成新的拆分条码 -// String stringBigQty2 = bigQty2.toString(); -// String newPalletNo = CodeGenerator.packingGenerateCode(materialPackingName,stringBigQty2,charge); -// -// // 写入拆分的新条码,更新原数据库 -// List boxList = new ArrayList(); -//// MaterialPackingKey materialpackingKey = new MaterialPackingKey(); -// MaterialPacking materialpacking = new MaterialPacking(); -//// materialpackingKey.setSiteName("SDK"); -//// materialpackingKey.setMaterialPackingName(newPalletNo); -//// materialpacking.setKey(materialpackingKey); -// if (z < 0 || z >= qtyQueryForList.size()) { -// throw new IndexOutOfBoundsException("Invalid index z: " + z); -// } -// // 复制一个当前的原标签数据 -// MaterialPacking materialpackingNew = qtyQueryForList.get(z); -// // 设置新为标签和数量 -// materialpackingNew.setMaterialPackingName(newPalletNo); -// // bigQty2 转double类型 -// materialpackingNew.setMaterialQuantity(bigQty2.doubleValue()); -// boxList.add(qtyQueryForList.get(z)); -// boxList.add(materialpackingNew); -// boolean moveTransformOut = ChargeSplitService.packingChargeSplit(boxList, eventUser); -// if (moveTransformOut != true) { -// throw new RuntimeException("修改数量拆分失败"); -// } -// -// // 原条码扣减 -// SetEventInfo setEventInfo = new SetEventInfo(); -// Map pakHashMap = new HashMap<>(); -// pakHashMap.put("materialQuantity", restQty.doubleValue()); -// -// EventInfo eventInfo = new EventInfoUtil().makeEventInfo("修改数量拆分条码", eventUser, "修改数量拆分条码"); -// setEventInfo.setUserColumns(pakHashMap); -// MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( queryForList.get(z).get("SITENAME").toString(), -// queryForList.get(z).get("MATERIALPACKINGNAME").toString()), eventInfo, setEventInfo); -// -// } -// -// } + for (int z = 0; z < packingQueryForList.size(); z++) { + String MATERIALPACKINGNAME = packingQueryForList.get(z).get("MATERIALPACKINGNAME").toString(); + Object[] bindSet = {MATERIALPACKINGNAME}; + String qtysql = "WHERE MATERIALPACKINGNAME = ?"; + List qtyQueryForList = MaterialPackingServiceProxy.getMaterialPackingService().select(qtysql, bindSet); + + String qty = String.valueOf(qtyQueryForList.get(z).getMaterialQuantity()); + + String qty2 = new Double(qtyQueryForList.get(z).getMaterialQuantity2()) == null ? "0" : String.valueOf(qtyQueryForList.get(z).getMaterialQuantity2()); + String materialPackingName = qtyQueryForList.get(z).getMaterialPackingName(); + String charge = qtyQueryForList.get(z).getCharge(); + BigDecimal bigQty = new BigDecimal(qty); + // 已拆数量 + BigDecimal bigQty2 = new BigDecimal(qty2); + + // 如果已拆数量不等于原数量,并且已拆数量为0(未拆分数量) + if(bigQty.compareTo(bigQty2) != 0 && !"0".equals(qty2)) { + // 剩余数量 + BigDecimal restQty = bigQty.subtract(bigQty2); + // 生成新的拆分条码 + String stringBigQty2 = bigQty2.toString(); + String newPalletNo = CodeGenerator.packingGenerateCode(materialPackingName,stringBigQty2,charge); + + // 写入拆分的新条码,更新原数据库 + List boxList = new ArrayList(); +// MaterialPackingKey materialpackingKey = new MaterialPackingKey(); + MaterialPacking materialpacking = new MaterialPacking(); +// materialpackingKey.setSiteName("SDK"); +// materialpackingKey.setMaterialPackingName(newPalletNo); +// materialpacking.setKey(materialpackingKey); + + // 复制一个当前的原标签数据 + MaterialPacking materialpackingNew = qtyQueryForList.get(z); + // 设置新为标签和数量 + materialpackingNew.setMaterialPackingName(newPalletNo); + // bigQty2 转double类型 + materialpackingNew.setMaterialQuantity(bigQty2.doubleValue()); + boxList.add(qtyQueryForList.get(z)); + boxList.add(materialpackingNew); + boolean moveTransformOut = chargeSplitService.packingChargeSplit(boxList, eventUser); + if (moveTransformOut != true) { + throw new RuntimeException("修改数量拆分失败"); + } + + // 原条码扣减 + SetEventInfo setEventInfo = new SetEventInfo(); + Map pakHashMap = new HashMap<>(); + pakHashMap.put("materialQuantity", restQty.doubleValue()); + + EventInfo eventInfo = new EventInfoUtil().makeEventInfo("修改数量拆分条码", eventUser, "修改数量拆分条码"); + setEventInfo.setUserColumns(pakHashMap); + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( queryForList.get(z).get("SITENAME").toString(), + queryForList.get(z).get("MATERIALPACKINGNAME").toString()), eventInfo, setEventInfo); + + } + + } //new MESServiceImpl().NeedReceiveMaterialInfoSend_NEW(shipRequestName, "SDK", materialPackingKeyList); @@ -590,6 +594,178 @@ public class InvoiceServiceImpl implements InvoiceService { return billCode; } + @Transactional + public boolean packingChargeSplit(List boxList, String user) { + + String condition=""; + String newBoxId1 = boxList.get(1).getMaterialPackingName(); +// String pc = "('" + materialpackingname + "')"; + String sql = "SELECT 1 FROM MATERIALPACKING WHERE MATERIALPACKINGNAME IN (:MATERIALPACKINGNAME1, :MATERIALPACKINGNAME2)"; + Map hashMap2 = new HashMap (); + hashMap2.put("MATERIALPACKINGNAME1", newBoxId1); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap2); + List MaterialPackingList = null; + if (queryForList != null && queryForList.size() > 0) { + String[] bindSet={newBoxId1}; + condition="WHERE MATERIALPACKINGNAME IN (?,?)"; + MaterialPackingList = MaterialPackingServiceProxy.getMaterialPackingService().select(condition, bindSet); + } + //解析条码,根据远条码信息更新目标条码数量和库存状态 + SetEventInfo setEventInfo = new SetEventInfo(); + EventInfoUtil eventInfoUtil = new EventInfoUtil(); + makeEventInfo = eventInfoUtil.makeEventInfo("ChargeSplit", user, "ChargeSplit" ); + //找到原来标签的相关信息 +// String receiveTime = ""; +// String makeDate = ""; +// String expireDate = ""; + String holdState = ""; + String oqaResult = ""; + String oqaResultState = ""; + String packingGrade = ""; + String trueGg = ""; + String erpFactory = ""; + String erpLocation = ""; + String locationName = ""; + String shelfName = ""; + String areaName = ""; + String durableName = "";; + String CAREER_ASSISTANCE = ""; + String SALESPERSON = ""; + String CUSTOMNO = ""; + String DEVIATION = ""; + String DIAMETER = ""; + String WIDTH = ""; + String WEIGHT = ""; + String PRODUCTLINE = ""; + String UNIT = ""; + String MJPC = ""; + String BUSINESS_UNIT = ""; + + String MATERIALSPECNAME = ""; +// String SUBPACKINGQUANTITY = ""; +// String MATERIALCREATEQUANTITY = ""; + String CHARGE = ""; + String SDK_ID = ""; + String PHASE = ""; + String RECEIVEREQUESTNAME = ""; + String RECEIVEREQUESTDETAILNAME = ""; + String REMARK = ""; + + String ypcSql = "SELECT M.RECEIVETIME,M.MAKEDATE,M.EXPIRINGDATE,M.HOLDSTATE,M.OQARESULTSTATE ,\r\n" + + " M.OQARESULT ,M.PACKINGGRADE ,M.TRUEGG ,M.ERPFACTORY ,M.ERPLOCATION ,M.LOCATIONNAME ,\r\n" + + " M.SHELFNAME ,M.AREANAME ,M.DURABLENAME ,M.CAREER_ASSISTANCE ,M.SALESPERSON ,M.CUSTOMNO,M.SDK_ID,M.PHASE,M.RECEIVEREQUESTNAME,M.RECEIVEREQUESTDETAILNAME," + + " M.DEVIATION ,M.DIAMETER ,M.WIDTH ,M.WEIGHT ,M.PRODUCTLINE,UNIT ,MJPC,BUSINESS_UNIT,M.MATERIALSPECNAME, M.SUBPACKINGQUANTITY, M.MATERIALCREATEQUANTITY, M.MATERIALQUANTITY, M.CHARGE, M.REMARK" + + " FROM MATERIALPACKING M WHERE M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME AND M.CHARGE = :CHARGE "; + Map hashMap4 = new HashMap (); + hashMap4.put("MATERIALPACKINGNAME", boxList.get(0).getMaterialPackingName()); + hashMap4.put("CHARGE", boxList.get(0).getCharge()); + List> queryForList3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(ypcSql, hashMap4); + + if (queryForList3 != null && queryForList3.size() > 0) { + Map map = queryForList3.get(0); + holdState = map.get("HOLDSTATE") == null ? "N" : map.get("HOLDSTATE").toString(); + oqaResult = map.get("OQARESULT") == null ? "" : map.get("OQARESULT").toString(); + oqaResultState = map.get("OQARESULTSTATE") == null ? "END" : map.get("OQARESULTSTATE").toString(); + packingGrade = map.get("PACKINGGRADE") == null ? "" : map.get("PACKINGGRADE").toString(); + trueGg = map.get("TRUEGG") == null ? "" : map.get("TRUEGG").toString(); + erpFactory = map.get("ERPFACTORY") == null ? "" : map.get("ERPFACTORY").toString(); + erpLocation = map.get("ERPLOCATION") == null ? "" : map.get("ERPLOCATION").toString(); + locationName = map.get("LOCATIONNAME") == null ? "" : map.get("LOCATIONNAME").toString(); + shelfName = map.get("SHELFNAME") == null ? "" : map.get("SHELFNAME").toString(); + areaName = map.get("AREANAME") == null ? "" : map.get("AREANAME").toString(); + durableName = map.get("DURABLENAME") == null ? "" : map.get("DURABLENAME").toString(); + CAREER_ASSISTANCE = map.get("CAREER_ASSISTANCE") == null ? "" : map.get("CAREER_ASSISTANCE").toString(); + SALESPERSON = map.get("SALESPERSON") == null ? "" : map.get("SALESPERSON").toString(); + CUSTOMNO = map.get("CUSTOMNO") == null ? "" : map.get("CUSTOMNO").toString(); + DEVIATION = map.get("DEVIATION") == null ? "" : map.get("DEVIATION").toString(); + DIAMETER = map.get("DIAMETER") == null ? "" : map.get("DIAMETER").toString(); + WIDTH = map.get("WIDTH") == null ? "" : map.get("WIDTH").toString(); + WEIGHT = map.get("WEIGHT") == null ? "" : map.get("WEIGHT").toString(); + PRODUCTLINE = map.get("PRODUCTLINE") == null ? "" : map.get("PRODUCTLINE").toString(); + UNIT = map.get("UNIT") == null ? "" : map.get("UNIT").toString(); + MJPC = map.get("MJPC") == null ? "" : map.get("MJPC").toString(); + BUSINESS_UNIT = map.get("BUSINESS_UNIT") == null ? "" : map.get("BUSINESS_UNIT").toString(); + MATERIALSPECNAME = map.get("MATERIALSPECNAME") == null ? "" : map.get("MATERIALSPECNAME").toString(); +// SUBPACKINGQUANTITY = map.get("SUBPACKINGQUANTITY") == null ? "" : map.get("SUBPACKINGQUANTITY").toString(); +// MATERIALCREATEQUANTITY = map.get("MATERIALCREATEQUANTITY") == null ? "" : map.get("MATERIALCREATEQUANTITY").toString(); + CHARGE = map.get("CHARGE") == null ? "" : map.get("CHARGE").toString(); + SDK_ID = map.get("SDK_ID") == null ? "" : map.get("SDK_ID").toString(); + PHASE = map.get("PHASE") == null ? "" : map.get("PHASE").toString(); + REMARK = map.get("REMARK") == null ? "" : map.get("REMARK").toString(); + + } + + if (MaterialPackingList != null && MaterialPackingList.size() > 0) { + throw new RuntimeException("拆分批次的标签已存在!"); + }else { +// 创建标签1 + CreateInfo createInfo1 = new CreateInfo(); + createInfo1.setSiteName("SDK"); + createInfo1.setMaterialPackingName(newBoxId1);// 新生成的box id + createInfo1.setMaterialPackingType("Box"); + createInfo1.setContentMaterialType(""); + + Map bindMap = new HashMap(); + bindMap.put("MaterialSpecName", MATERIALSPECNAME); + bindMap.put("PackingGrade", packingGrade); + bindMap.put("oqaResult", oqaResult); + bindMap.put("oqaResultState", oqaResultState); + bindMap.put("SubPackingQuantity",boxList.get(1).getMaterialQuantity()); + bindMap.put("MaterialCreateQuantity",boxList.get(1).getMaterialQuantity()); + bindMap.put("MaterialQuantity", boxList.get(1).getMaterialQuantity());// 数量 + bindMap.put("PackingState", "Released"); + bindMap.put("OldPackingState", "Released"); + bindMap.put("stockState", "Stocked"); + bindMap.put("OldStockState", "Created"); + bindMap.put("HoldState", holdState); + bindMap.put("LocationName", locationName); + bindMap.put("charge",CHARGE); + bindMap.put("MaterialProcessGroupName",""); + bindMap.put("LastEventTimeKey",TimeStampUtil.getCurrentEventTimeKey()); + + bindMap.put("MakeDate", queryForList3.get(0).get("MAKEDATE")); + bindMap.put("expiringDate", queryForList3.get(0).get("EXPIRINGDATE")); + bindMap.put("ReceiveTime", queryForList3.get(0).get("RECEIVETIME")); + bindMap.put("unit", queryForList3.get(0).get("UNIT")); + + bindMap.put("ReceiveUser", makeEventInfo.getEventUser()); + bindMap.put("ErpLocation", erpLocation); + bindMap.put("ErpFactory", erpFactory); + bindMap.put("locationName", locationName); + bindMap.put("StockInType", "Normal"); + bindMap.put("SDK_ID", SDK_ID); + bindMap.put("PHASE", PHASE); + bindMap.put("remark", REMARK); + bindMap.put("ReceiveRequestName", RECEIVEREQUESTNAME); + bindMap.put("ReceiveRequestDetailName",RECEIVEREQUESTDETAILNAME); + + bindMap.put("CAREER_ASSISTANCE", CAREER_ASSISTANCE);//业助信息 + bindMap.put("BUSINESS_UNIT", BUSINESS_UNIT);//业务 + bindMap.put("SALESPERSON", SALESPERSON);//事业部 + bindMap.put("MJPC", MJPC);//母卷批次 + bindMap.put("truegg", trueGg); + bindMap.put("durableName", durableName); + bindMap.put("areaName", areaName); + bindMap.put("PRODUCTLINE", PRODUCTLINE); + bindMap.put("WIDTH", WIDTH); + bindMap.put("DEVIATION", DEVIATION); + bindMap.put("WEIGHT", WEIGHT); + bindMap.put("DIAMETER", DIAMETER); + bindMap.put("shelfName", shelfName); + createInfo1.setUserColumns(bindMap); + + MaterialPackingServiceProxy.getMaterialPackingService().create(makeEventInfo, createInfo1); + + //更新原标签批次的库位状态为出库 +// MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",boxList.get(0).getMaterialPackingName()); +// Map hashMap3 = new HashMap (); +// hashMap3.put("stockState", "StockOut"); +// setEventInfo.setUserColumns(hashMap3); +// MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo); + } + return true; + } + //无来源转库过账-转现场仓 (311) public String UnSourcedChangeLocation(List all, String aimFactory, @@ -1831,7 +2007,10 @@ public class InvoiceServiceImpl implements InvoiceService { " 'Y' BHFLG,\r\n" + " 'N' IS_CHECK\r\n" + "FROM\r\n" + - " MATERIALPACKING A\r\n" + + " MATERIALPACKING A\r\n" + + " LEFT JOIN MATERIALSHIPREQUESTDETAIL mdl ON\r\n" + + " mdl.SHIPREQUESTNAME= A.SHIPREQUESTNAME\r\n" + + " AND mdl.MATERIALSPECNAME = A.MATERIALSPECNAME\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " A.SDK_ID = SS.SDK_ID\r\n" + "LEFT JOIN \r\n" + @@ -1858,7 +2037,8 @@ public class InvoiceServiceImpl implements InvoiceService { " OR A.NPFLAG IS NULL)\r\n" + " AND (A.ETCSTATE IS NULL\r\n" + " OR A.ETCSTATE = 'EtcIn')\r\n" + - " AND A.OQARESULTSTATE <> 'PREOQA'\r\n" + + " AND A.OQARESULTSTATE <> 'PREOQA'\r\n" + + " AND (A.ERPLOCATION <> mdl.ERPRECEIVELOCATION OR mdl.ERPRECEIVELOCATION IS NULL)\r\n" + " AND to_char(A.EXPIRINGDATE, 'yyyymmdd') >= to_char(SYSDATE, 'yyyymmdd'))"; Map hashMap = new HashMap (); hashMap.put("SITENAME", "SDK");