From 823009d83dee3af879248920e4d8c9471940bd5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E9=A3=9E?= Date: Thu, 15 May 2025 13:44:59 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=94=B9=E8=BE=85?= =?UTF-8?q?=E6=9D=90=E6=8B=86=E5=88=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../management/data/MaterialPacking.java | 1 + .../service/Impl/MaterialShipServiceImpl.java | 57 +++++++++---- .../java/com/cim/idm/utils/CommonUtils.java | 85 +++++++++++++++++++ 3 files changed, 126 insertions(+), 17 deletions(-) diff --git a/zi-wms-data/src/main/java/com/cim/idm/wmspackage/materialpacking/management/data/MaterialPacking.java b/zi-wms-data/src/main/java/com/cim/idm/wmspackage/materialpacking/management/data/MaterialPacking.java index 737b1e6..6fd21e8 100644 --- a/zi-wms-data/src/main/java/com/cim/idm/wmspackage/materialpacking/management/data/MaterialPacking.java +++ b/zi-wms-data/src/main/java/com/cim/idm/wmspackage/materialpacking/management/data/MaterialPacking.java @@ -15,6 +15,7 @@ public class MaterialPacking extends FieldAccessor implements DataInfo> boxList, String commitDate) throws Exception { //判断单据类型调用不同的NC接口 @@ -784,7 +785,7 @@ public class MaterialShipServiceImpl implements IMaterialShipService { String materialPackingName = qtyQueryForList.get(z).getMaterialPackingName(); // String charge = qtyQueryForList.get(z).getCharge(); // 辅材出库无批次 List boxId = MaterialPackingServiceImpl.generateBoxID("LabelId", siteName, - "100", qtyQueryForList.get(z).getMakeDate().toString(),packingQueryForList.get(z).get("MATERIALTYPE").toString(),qtyQueryForList.get(z).getErpFactory()); + "1", qtyQueryForList.get(z).getMakeDate().toString(),packingQueryForList.get(z).get("MATERIALTYPE").toString(),qtyQueryForList.get(z).getErpFactory()); BigDecimal bigQty = new BigDecimal(qty); // 已拆数量 BigDecimal bigQty2 = new BigDecimal(qty2); @@ -819,16 +820,22 @@ public class MaterialShipServiceImpl implements IMaterialShipService { if (moveTransformOut != true) { throw new RuntimeException("修改数量拆分失败"); } +// 记录到拆分表 + String shipRequestDetailName = qtyQueryForList.get(z).getShipRequestDetailName() == null ? "" : qtyQueryForList.get(z).getShipRequestDetailName().toString(); + untils.fahuoSplit(newPalletNo, shipRequestName, shipRequestDetailName, bigQty2); - // 原条码扣减拆出的数量,用剩余数量更新原条码,条码不变,数量更新 + // 原条码扣减拆出的数量,用剩余数量更新原条码,条码不变,数量更新,并且解绑单据 SetEventInfo setEventInfo = new SetEventInfo(); Map pakHashMap = new HashMap<>(); pakHashMap.put("materialQuantity", restQty.doubleValue()); + pakHashMap.put("materialQuantity2", 0); + pakHashMap.put("shipRequestName", ""); + pakHashMap.put("shipRequestDetailName", ""); - EventInfo eventInfo2 = new EventInfoUtil().makeEventInfo("备货出库拆分修改数量拆分条码", user, "修改数量拆分条码"); + EventInfo eventInfo2 = new EventInfoUtil().makeEventInfo("辅材出库拆分", user, "拆分条码"); setEventInfo.setUserColumns(pakHashMap); - MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( queryForList.get(z).get("SITENAME").toString(), - queryForList.get(z).get("MATERIALPACKINGNAME").toString()), eventInfo2, setEventInfo); + + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( "SDK",MATERIALPACKINGNAME), eventInfo2, setEventInfo); // 删除被拆分的原条码数据,用拆分出的新条码覆盖,进行后面的过账,现场仓过账只过账已拆分出的数量,剩余数量的原条码不过账 boolean deletePacking = materialPackingKeyList.remove(MATERIALPACKINGNAME); @@ -837,9 +844,10 @@ public class MaterialShipServiceImpl implements IMaterialShipService { } } } - billCode=TransferStockOut_NLCC(shipRequestName, "SDK", user,materialPackingKeyList); + billCode=TransferStockOut_NLCC(shipRequestName, "SDK", user,materialPackingKeyList, commitDate); //makeEventInfo = eventInfoUtil.makeEventInfo("CompleteShipRequest", eventUser, "CompleteShipRequest:"+shipRequestType); untils.SaveUnDoInfo_ForSap(materialPackingKeyList, billCode, eventInfo); +// untils.SaveSplitUnDoInfo_ForSap(materialPackingKeyList, billCode, eventInfo); break; case "01"://生产领料 @@ -1012,7 +1020,7 @@ public class MaterialShipServiceImpl implements IMaterialShipService { } - public String TransferStockOut_NLCC(String shipRequestName, String siteName, String user,List boxList) throws Exception { + public String TransferStockOut_NLCC(String shipRequestName, String siteName, String user,List boxList,String commitDate) throws Exception { String rcode; String undoId = ""; String rmsg = null; @@ -1070,10 +1078,15 @@ public class MaterialShipServiceImpl implements IMaterialShipService { */ //交货单号 body.put("VBELN", shipRequestName); + + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMdd"); + Date date = inputFormat.parse(commitDate); + String outputDate = outputFormat.format(date); //实际过账日期 - body.put("WADAT_IST", TimeStampUtil.getCurrentTime("yyyyMMdd"));//yyyyMMddhhmmss + body.put("WADAT_IST", outputDate);//yyyyMMddhhmmss //发送日期 - body.put("Z_SENDDATE", TimeStampUtil.getCurrentTime("yyyyMMdd")); + body.put("Z_SENDDATE", outputDate); //操作类型(过账) body.put("Z_OPTION", "1"); @@ -1842,7 +1855,6 @@ public class MaterialShipServiceImpl implements IMaterialShipService { } } - @Transactional public boolean packingChargeSplit(List boxList, String user) { String condition=""; @@ -1900,15 +1912,19 @@ public class MaterialShipServiceImpl implements IMaterialShipService { String REMARK = ""; String SHIPREQUESTNAME = ""; String SHIPREQUESTDETAILNAME = ""; + String MATERIALTYPE = ""; + String RECEIVEACTNO = ""; + String UNDOID = ""; + String FIFOFLAG = ""; 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.SHIPREQUESTNAME,M.SHIPREQUESTDETAILNAME,M.RECEIVEREQUESTNAME,M.RECEIVEREQUESTDETAILNAME," + " M.SHELFNAME ,M.MATERIALTYPE,M.AREANAME ,M.DURABLENAME ,M.CAREER_ASSISTANCE ,M.SALESPERSON ,M.CUSTOMNO,M.SDK_ID,M.PHASE,M.SHIPREQUESTNAME,M.SHIPREQUESTDETAILNAME,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 "; + " 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()); +// hashMap4.put("CHARGE", boxList.get(0).getCharge()); List> queryForList3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(ypcSql, hashMap4); if (queryForList3 != null && queryForList3.size() > 0) { @@ -1944,7 +1960,10 @@ public class MaterialShipServiceImpl implements IMaterialShipService { REMARK = map.get("REMARK") == null ? "" : map.get("REMARK").toString(); SHIPREQUESTNAME = map.get("SHIPREQUESTNAME") == null ? "" : map.get("SHIPREQUESTNAME").toString(); SHIPREQUESTDETAILNAME = map.get("SHIPREQUESTDETAILNAME") == null ? "" : map.get("SHIPREQUESTDETAILNAME").toString(); - + MATERIALTYPE = map.get("MATERIALTYPE") == null ? "" : map.get("MATERIALTYPE").toString(); + RECEIVEACTNO = map.get("RECEIVEACTNO") == null ? "" : map.get("RECEIVEACTNO").toString(); + UNDOID = map.get("UNDOID") == null ? "" : map.get("UNDOID").toString(); + FIFOFLAG = map.get("FIFOFLAG") == null ? "" : map.get("FIFOFLAG").toString(); } if (MaterialPackingList != null && MaterialPackingList.size() > 0) { @@ -1971,7 +1990,7 @@ public class MaterialShipServiceImpl implements IMaterialShipService { bindMap.put("OldStockState", "Created"); bindMap.put("HoldState", holdState); bindMap.put("LocationName", locationName); - bindMap.put("charge",CHARGE); +// bindMap.put("charge",CHARGE); // 无批次不需要标签 bindMap.put("MaterialProcessGroupName",""); bindMap.put("LastEventTimeKey",TimeStampUtil.getCurrentEventTimeKey()); @@ -1992,8 +2011,12 @@ public class MaterialShipServiceImpl implements IMaterialShipService { bindMap.put("shipRequestName", SHIPREQUESTNAME); bindMap.put("shipRequestDetailName",SHIPREQUESTDETAILNAME); - bindMap.put("ReceiveRequestName", RECEIVEREQUESTNAME); - bindMap.put("ReceiveRequestDetailName",RECEIVEREQUESTDETAILNAME); + bindMap.put("receiveRequestName", RECEIVEREQUESTNAME); + bindMap.put("receiveRequestDetailName",RECEIVEREQUESTDETAILNAME); + bindMap.put("materialType", MATERIALTYPE); + bindMap.put("receiveActNo", RECEIVEACTNO); + bindMap.put("unDoID", UNDOID); + bindMap.put("fifoFlag", FIFOFLAG); bindMap.put("CAREER_ASSISTANCE", CAREER_ASSISTANCE);//业助信息 bindMap.put("BUSINESS_UNIT", BUSINESS_UNIT);//业务 diff --git a/zi-wms-pda/src/main/java/com/cim/idm/utils/CommonUtils.java b/zi-wms-pda/src/main/java/com/cim/idm/utils/CommonUtils.java index 991edfc..e4b1da5 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/utils/CommonUtils.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/utils/CommonUtils.java @@ -663,6 +663,91 @@ public void SaveUnDoInfo_ForSap(List list, String undoid, EventInfo mak } + public void SaveSplitUnDoInfo_ForSap(List list, String undoid, EventInfo makeEventInfo) { + + // 更新事件名 + // 此SQL语句用于更新物料包装的最后事件名称、评论和时间 + String sqlu="UPDATE MATERIALPACKING m SET m.LASTEVENTNAME=:LASTEVENTNAME,m.LASTEVENTCOMMENT =:LASTEVENTCOMMENT,m.LASTEVENTTIME =SYSDATE \r\n" + + " WHERE m.SITENAME =:SITENAME AND m.MATERIALPACKINGNAME in (:BOXLIST)"; + Map bpu = new HashMap (); + bpu.put("LASTEVENTNAME", makeEventInfo.getEventName()); + bpu.put("LASTEVENTCOMMENT", makeEventInfo.getEventComment()); + bpu.put("SITENAME", "SDK"); + bpu.put("BOXLIST", list); + IDMFrameServiceProxy.getSqlTemplate().update(sqlu, bpu); + + // 销售交货单不返回凭证 + // 如果undoid不等于"S",则执行更新和插入操作,以记录undo信息 + if(!StringUtils.equals("S", undoid)) + { + // 更新undo信息 + // 此SQL语句用于更新物料包装的undoid,仅当库存状态为'Stocked'时 + String updateUndoInfo = "UPDATE MATERIALPACKING T SET T.unDoID = :unDoID WHERE T.MATERIALPACKINGNAME in (:MATERIALPACKINGNAME) " + + " AND STOCKSTATE = 'Stocked'"; + + Map map = new HashMap (); + map.put("MATERIALPACKINGNAME", list); + map.put("unDoID", undoid); + IDMFrameServiceProxy.getSqlTemplate().update(updateUndoInfo, map); + + + // 插入undo物料包装信息 + // 此SQL语句用于插入新的记录到BS_MATERIALPACKINGUNDOINFO表中,记录详细的undo信息 + String insertUnDOMaterialPackingInfo = "insert into BS_MATERIALPACKINGUNDOINFO (unDoID,preundoid,UNDODETAILNAME,undoidstate,UNDOIDDATE," + + "SITENAME, MATERIALPACKINGNAME, MATERIALPACKINGTYPE, CONTENTMATERIALTYPE," + + "MATERIALTYPE, MATERIALSPECNAME, SUPERMATERIALPACKINGNAME, PACKINGGRADE, SUBPACKINGQUANTITY, MATERIALCREATEQUANTITY," + + "MATERIALQUANTITY, PACKINGSTATE, OLDPACKINGSTATE, STOCKSTATE, OLDSTOCKSTATE, HOLDSTATE, AREANAME, LOCATIONNAME," + + "DURABLENAME, MATERIALPROCESSGROUPNAME, LASTEVENTNAME, LASTEVENTTIMEKEY, LASTEVENTTIME, LASTEVENTUSER," + + "LASTEVENTCOMMENT, CREATETIME, CREATEUSER, RECEIVEREQUESTNAME, RECEIVEREQUESTDETAILNAME," + + "MAKEDATE, RECEIVEACTNO, STOCKINTYPE, RECEIVETIME, RECEIVEUSER, SHIPREQUESTNAME, SHIPREQUESTDETAILNAME, SHIPTIME," + + "SHIPUSER, REASONCODETYPE, OQARESULTSTATE, OQARESULT, ERPLOCATION, ERPFACTORY, REASONCODE, CHARGE, SUPPLIERNAME,ETCSTATE,ERPEVENTTIME,NPFLAG)" + + "select unDoID,'' as preundoid,UNDODETAILNAME,'Created' as undoidstate,:UNDOIDDATE AS UNDOIDDATE," // + + "SITENAME, MATERIALPACKINGNAME, MATERIALPACKINGTYPE, CONTENTMATERIALTYPE," + + "MATERIALTYPE, MATERIALSPECNAME, SUPERMATERIALPACKINGNAME, PACKINGGRADE, SUBPACKINGQUANTITY, MATERIALCREATEQUANTITY," + + "DECODE(MATERIALQUANTITY2,0,MATERIALQUANTITY,MATERIALQUANTITY2) MATERIALQUANTITY, PACKINGSTATE, OLDPACKINGSTATE, STOCKSTATE, OLDSTOCKSTATE, HOLDSTATE, AREANAME, LOCATIONNAME," + + "DURABLENAME, MATERIALPROCESSGROUPNAME, LASTEVENTNAME, LASTEVENTTIMEKEY, LASTEVENTTIME, LASTEVENTUSER," + + "LASTEVENTCOMMENT, CREATETIME, CREATEUSER, RECEIVEREQUESTNAME, RECEIVEREQUESTDETAILNAME," + + "MAKEDATE, RECEIVEACTNO, STOCKINTYPE, RECEIVETIME, RECEIVEUSER, SHIPREQUESTNAME, SHIPREQUESTDETAILNAME, SHIPTIME," + + "SHIPUSER, REASONCODETYPE, OQARESULTSTATE, OQARESULT, ERPLOCATION, ERPFACTORY, REASONCODE, CHARGE, SUPPLIERNAME,ETCSTATE,ERPEVENTTIME,NPFLAG" + + " from MATERIALPACKING " + + " where unDoID=:UNDOID"; + + Map bindMap_insert = new HashMap(); + bindMap_insert.put("UNDOIDDATE", ""); + bindMap_insert.put("UNDOID", undoid); + IDMFrameServiceProxy.getSqlTemplate() + .update(insertUnDOMaterialPackingInfo, bindMap_insert); + } + // 更新Box状态 + // 根据物料数量和包装数量,更新物料包装的状态和相关属性 + for (String s : list) { + MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",s); + com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking selectByKey = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(materialPackingKey); + double materialQuantity = selectByKey.getMaterialQuantity(); + double materialQuantity2 = selectByKey.getMaterialQuantity2(); + BigDecimal fmaterialQuantity = new BigDecimal(materialQuantity); + BigDecimal fmaterialQuantity2 = new BigDecimal(materialQuantity2); + if (fmaterialQuantity.compareTo(fmaterialQuantity2) > 0 && fmaterialQuantity2.compareTo(BigDecimal.ZERO) != 0) { + Map hashMap = new HashMap (); +// hashMap.put("materialQuantity", fmaterialQuantity.subtract(fmaterialQuantity2)); + hashMap.put("materialQuantity2", 0); + hashMap.put("shipRequestName", ""); + hashMap.put("shipRequestDetailName", ""); + SetEventInfo setEventInfo = new SetEventInfo(); + setEventInfo.setUserColumns(hashMap); + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo); + } else { + Map hashMap = new HashMap (); + hashMap.put("stockState", "StockOut"); + SetEventInfo setEventInfo = new SetEventInfo(); + setEventInfo.setUserColumns(hashMap); + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo); + } + } + + } + + /** * 将物料信息发送到MES系统(制造执行系统)的新版本方法