From df74f03a55707820ab1d9679d9f6ca3e43db9d00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E9=A3=9E?= Date: Wed, 2 Apr 2025 16:25:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E5=A4=87=E8=B4=A7?= =?UTF-8?q?=E5=87=BA=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../idm/service/impl/ToSAPServiceImpl.java | 151 ++++++++++++++++++ .../idm/controller/SAPToWMSController.java | 3 +- .../idm/service/Impl/InvoiceServiceImpl.java | 43 ++++- .../Impl/PurchaseReturnServiceImpl.java | 6 +- 4 files changed, 192 insertions(+), 11 deletions(-) diff --git a/zi-wms-inf/src/main/java/com/cim/idm/service/impl/ToSAPServiceImpl.java b/zi-wms-inf/src/main/java/com/cim/idm/service/impl/ToSAPServiceImpl.java index 6176a9a..9ff7d4c 100644 --- a/zi-wms-inf/src/main/java/com/cim/idm/service/impl/ToSAPServiceImpl.java +++ b/zi-wms-inf/src/main/java/com/cim/idm/service/impl/ToSAPServiceImpl.java @@ -2231,6 +2231,157 @@ public class ToSAPServiceImpl { } return undoId; } + + // 采购退货 + public String PurchaseStockOut(String shipRequestName, String siteName, String user,List boxList) throws Exception { + + String rcode; + String undoId = ""; + String rmsg = null; + String sql=" SELECT MP.MATERIALSPECNAME, \r\n" + + " MP.ERPFACTORY, \r\n" + + " MP.ERPLOCATION, \r\n" + + " MS.SHIPREQUESTDETAILTYPE, \r\n" + + " MP.UNIT, \r\n" + + " MD.COSTCENTER, \r\n" + + " MD.RECEIVEPRODUCTIONORDERNUMBER, \r\n" + + " MP.SHIPREQUESTNAME, \r\n" + + " MD.SHIPREQUESTDETAILNAME, \r\n" + + " MD.ERPRECEIVELOCATION, \r\n" + + " MD.ERPRECEIVEFACTORY, \r\n" + + " MD.CAUSEOFMOVEMENT, \r\n" + + " SUM(t.QTY) AS MATERIALQUANTITY \r\n" + + " FROM \r\n" + + " MATERIALPACKING MP \r\n" + + " LEFT JOIN MATERIALPACKINGSUB T\r\n" + + " ON mp.MATERIALPACKINGNAME =t.MATERIALPACKINGNAME \r\n" + + " AND mp.SHIPREQUESTNAME =t.RECEIVEREQUESTNAME \r\n" + + " LEFT JOIN MATERIALSHIPREQUESTDETAIL MD \r\n" + + " ON \r\n" + + " MP.SHIPREQUESTNAME = MD.SHIPREQUESTNAME \r\n" + + " AND MP.SITENAME = MD.SITENAME \r\n" + + " AND t.RECEIVEREQUESTDETAILNAME = MD.SHIPREQUESTDETAILNAME \r\n" + + " LEFT JOIN MATERIALSHIPREQUEST MS \r\n" + + " ON \r\n" + + " MD.SHIPREQUESTNAME = MS.SHIPREQUESTNAME \r\n" + + " WHERE \r\n" + + " MP.SHIPREQUESTNAME = :SHIPREQUESTNAME \r\n" + + " AND MP.SITENAME = :SITENAME \r\n" + + " AND MP.STOCKSTATE = 'Stocked'\r\n" + + " AND MP.MATERIALPACKINGNAME IN (:BOXLIST)\r\n" + + " GROUP BY \r\n" + + " MP.MATERIALSPECNAME, \r\n" + + " MP.ERPFACTORY, \r\n" + + " MP.ERPLOCATION, \r\n" + + " MS.SHIPREQUESTDETAILTYPE, \r\n" + + " MP.UNIT, \r\n" + + " MD.COSTCENTER, \r\n" + + " MD.RECEIVEPRODUCTIONORDERNUMBER, \r\n" + + " MP.SHIPREQUESTNAME, \r\n" + + " MD.SHIPREQUESTDETAILNAME,\r\n" + + " MD.ERPRECEIVELOCATION, \r\n" + + " MD.ERPRECEIVEFACTORY, \r\n" + + " MD.CAUSEOFMOVEMENT "; + Map hashMap = new HashMap(); + hashMap.put("SHIPREQUESTNAME", shipRequestName); + hashMap.put("SITENAME", siteName); + hashMap.put("BOXLIST", boxList); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql.toString(), hashMap); + + + try { + + JSONObject sendData = new JSONObject(true); + JSONObject header = new JSONObject(true); + sendData.put("HEAD", header); + JSONObject body = new JSONObject(true); + sendData.put("BODY", body); + JSONArray itemArray = new JSONArray(); + + /* + HEAD + */ + header.put("INTF_ID", "MM067"); + String uniqueID = UUID.randomUUID().toString(); + header.put("REQ_KEYID", uniqueID); + header.put("SRC_MSGID", uniqueID); + header.put("SRC_SYSTEM", "WMS"); + header.put("DEST_SYSTEM", "SAP"); + header.put("REQUSER", user); + + /* + BODY + */ + body.put("ITEM", itemArray); + body.put("ITEMID", uniqueID); + //过账日期 + body.put("BUDAT", TimeStampUtil.getCurrentTime("yyyyMMdd")); + //凭证日期 + body.put("BLDAT", TimeStampUtil.getCurrentTime("yyyyMMdd")); + //凭证抬头文本 + body.put("BKTXT", uniqueID); + //用户名 + body.put("USNAM", user); + + for (Map mm : queryForList) { + + JSONObject item = new JSONObject(true); + //BWART 移动类型 + item.put("BWART", mm.get("SHIPREQUESTDETAILTYPE")); + // MATNR 发货物料号 + item.put("MATNR", mm.get("MATERIALSPECNAME")); + // WERKS 收货工厂 + item.put("WERKS", mm.get("ERPFACTORY")); + // LGORT 发货库存地点 + item.put("LGORT", mm.get("ERPLOCATION")); + //MENGE 数量 + item.put("MENGE", mm.get("MATERIALQUANTITY")); + //MENGE 单位 + item.put("MEINS", mm.get("UNIT")); + //KOSTL 成本中心 + item.put("KOSTL", mm.get("COSTCENTER")); + //AUFNR 订单号 + item.put("AUFNR", mm.get("RECEIVEPRODUCTIONORDERNUMBER")); + //GRUND 移动原因 (201,202回传) + item.put("GRUND", mm.get("CAUSEOFMOVEMENT")); + //ZLLORDER 自定义领料单号 + item.put("ZLLORDER", mm.get("SHIPREQUESTNAME")); + //ZLLITEM 自定义领料单行号 + item.put("ZLLITEM", mm.get("SHIPREQUESTDETAILNAME")); + + itemArray.add(item); + + } + log.info("SendTOSAP >>>>" + sendData); + String sapreturn = toSAPMessageUtil.sendHttpPost(toSAPMessageUtil.materialChangeLocationUrl, "", sendData.toJSONString()); + org.json.JSONObject receiveJsonObject = new org.json.JSONObject(sapreturn); + org.json.JSONObject returnJsonObject = (org.json.JSONObject) receiveJsonObject.get("RETURN"); + rcode = returnJsonObject.get("STATUS").toString(); + rmsg = returnJsonObject.get("MSGTXT").toString(); + + if ("S".equals(rcode)) { + undoId = returnJsonObject.get("MBLNR").toString()+"_"+returnJsonObject.get("MJAHR").toString();//将物料凭证号与凭证年度拼在一起 + } + //将log写到表里 + ErpMessageLog erplog = new ErpMessageLog(); + erplog.setEventUser(""); + erplog.setServerName("WmsToErp"); + erplog.setEventName("成本中心/研发领料"); + erplog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT)); + erplog.setMessageId(UUID.randomUUID().toString()); + erplog.setSendMsg2(sendData.toJSONString()); + erplog.setReturnMsg2(sapreturn); + erplog.setResultCode(rcode); + MessageLogUtil.writeMessageLog(erplog); + } catch (Exception e) { + log.info(e.getMessage(), e); + throw new RuntimeException("SAP返回" + rmsg); + } + if (!"S".equals(rcode)) { + throw new RuntimeException("SAP返回" + rmsg); + } + return undoId; + } //MES上报工单消耗数据-261工单投料 public String mesMaterialConsume(List boxIdList, List qtyList, String user,String wo) throws Exception { diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/SAPToWMSController.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/SAPToWMSController.java index 8320012..93dfa88 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/controller/SAPToWMSController.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/SAPToWMSController.java @@ -1293,7 +1293,8 @@ public class SAPToWMSController { +"AND (:MATERIALSPECNAME IS NULL OR M.MATERIALSPECNAME=:MATERIALSPECNAME) " +"AND (:CHARGE IS NULL OR M.CHARGE=:CHARGE) " +"AND (:ERPLOCATION IS NULL OR M.ERPLOCATION=:ERPLOCATION) " - +"AND M.STOCKSTATE='Stocked' " + +"AND M.STOCKSTATE='Stocked' " + +"AND M.SPECIALSTATE='2' " +"AND M.MATERIALPACKINGTYPE='Box' " +"GROUP BY M.ERPFACTORY,M.MATERIALSPECNAME,M.ERPLOCATION,M.CHARGE "; Map map=new HashMap(); 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 ef60d13..4d7b99f 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 @@ -212,6 +212,7 @@ public class InvoiceServiceImpl implements InvoiceService { Map hashMap = new HashMap (); hashMap.put("SHIPREQUESTNAME", shipRequestName); List materialPackingKeyList = new ArrayList<> (); + List arrayList = new ArrayList (); List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); String shipRequestType = queryForList.get(0).get("SHIPREQUESTTYPE").toString(); String detailype = queryForList.get(0).get("SHIPREQUESTDETAILTYPE").toString(); @@ -321,6 +322,8 @@ public class InvoiceServiceImpl implements InvoiceService { } } materialPackingKeyList.add(materialPackingName); + MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",materialPackingName); + arrayList.add(materialPackingKey); } //判断会有多少个仓库发货,不同仓库需要分开走账 StringBuffer cklx = new StringBuffer(); @@ -344,12 +347,14 @@ public class InvoiceServiceImpl implements InvoiceService { case "01"://生产领料 case "02"://生产补料 // 判断是否是现场仓 - String IsSql = "SELECT m.ERPRECEIVELOCATION,m. FROM MATERIALSHIPREQUESTDETAIL m WHERE SHIPREQUESTNAME = :SHIPREQUESTNAME"; + String IsSql = "SELECT m.ERPRECEIVELOCATION,m.ERPLOCATION,m.ERPRECEIVEFACTORY FROM MATERIALSHIPREQUESTDETAIL m WHERE SHIPREQUESTNAME = :SHIPREQUESTNAME"; Map bpc=new HashMap<>(); bpc.put("SHIPREQUESTNAME", shipRequestName); List> receiveList = IDMFrameServiceProxy.getSqlTemplate().queryForList(IsSql, bpc); String ERPRECEIVELOCATION = receiveList.get(0).get("ERPRECEIVELOCATION") == null ? "" : receiveList.get(0).get("ERPRECEIVELOCATION").toString(); String ERPLOCATION = receiveList.get(0).get("ERPLOCATION") == null ? "" : receiveList.get(0).get("ERPLOCATION").toString(); + String ERPRECEIVEFACTORY = receiveList.get(0).get("ERPRECEIVEFACTORY") == null ? "" : receiveList.get(0).get("ERPRECEIVEFACTORY").toString(); + //判断是否为MES需要接收的物料 String sqlc=" SELECT e.ENUMVALUE FROM MES_ENUMDEFVALUE e \r\n" + " WHERE e.ENUMNAME ='ConfirmReceiveArea'\r\n" + @@ -359,16 +364,37 @@ public class InvoiceServiceImpl implements InvoiceService { " WHERE m.SHIPREQUESTNAME=:SHIPREQUESTNAME AND RECEIVEPRODUCTIONORDERNUMBER IS NOT NULL AND ROWNUM=1))"; List> src=IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlc, bpc); - //MES需要接收,则只抛送数据 - if(!ERPRECEIVELOCATION.isEmpty()) - { + + + //MES需要接收,则只抛送数据。 或如果是现场仓,先移到现场仓 + if(src.size()>0 || !ERPRECEIVELOCATION.isEmpty()) { + //new MESServiceImpl().NeedReceiveMaterialInfoSend_NEW(shipRequestName, "SDK", materialPackingKeyList); + billCode="Y"; + + // 转库到线边仓 -// ToSAPServiceImpl.moveLibrary2(materialPackingKeyList, shipRequestName, ERPLOCATION, ERPRECEIVELOCATION,eventUser); - if(src.size()>0) { - //new MESServiceImpl().NeedReceiveMaterialInfoSend_NEW(shipRequestName, "SDK", materialPackingKeyList); - billCode="Y"; + billCode = toSAPService.NoSourceChangeLocation(arrayList,ERPRECEIVEFACTORY, + ERPRECEIVELOCATION, "", eventUser ); + + List mpKeyList = new ArrayList (); + SetEventInfo setEventInfo = new SetEventInfo(); + for (MaterialPackingKey materialPacking : arrayList) { + MaterialPackingKey key = materialPacking; + mpKeyList.add(key); } + Map hashMapPack = new HashMap (); + hashMapPack.put("erpLocation", ERPRECEIVELOCATION == null ? "" : ERPRECEIVELOCATION); + hashMapPack.put("erpFactory", ERPRECEIVEFACTORY == null ? "" : ERPRECEIVEFACTORY); + hashMapPack.put("locationName", ""); + hashMapPack.put("lastEventUser", eventUser); + hashMapPack.put("unDoID", billCode); + setEventInfo.setUserColumns(hashMapPack); + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpKeyList, makeEventInfo, setEventInfo); + //抛送MES数据 + untils.sendMaterialInfoToMES_NEW(shipRequestName, "", materialPackingKeyList); + //billCode = NCWServiceImpl.SaleOut2(shipRequestName, "SDK", eventUser,materialPackingKeyList,""); + untils.SaveUnDoInfo_ForSap(materialPackingKeyList, billCode, makeEventInfo); } else { @@ -378,6 +404,7 @@ public class InvoiceServiceImpl implements InvoiceService { untils.sendMaterialInfoToMES_NEW(shipRequestName, "", materialPackingKeyList); //billCode = NCWServiceImpl.SaleOut2(shipRequestName, "SDK", eventUser,materialPackingKeyList,""); untils.SaveUnDoInfo_ForSap(materialPackingKeyList, billCode, makeEventInfo); + } break; diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/PurchaseReturnServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/PurchaseReturnServiceImpl.java index c099a0e..ff0adf5 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/PurchaseReturnServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/PurchaseReturnServiceImpl.java @@ -96,8 +96,10 @@ public class PurchaseReturnServiceImpl implements PurchaseReturnService { purchaseReturnBoxListName.add(materialPacking.getMaterialPackingName()); } //过账SAP - String undoId = toSAPServiceImpl.orderStockOut(receiverequestname, siteName, user, purchaseReturnBoxListName); - //更新库存状态 +// String undoId = toSAPServiceImpl.orderStockOut(receiverequestname, siteName, user, purchaseReturnBoxListName); + String undoId = toSAPServiceImpl.OrderStockBackOut(receiverequestname, siteName, user); +// String undoId = "111"; + //更新库存状态 toSapDao.updateStockState(purchaseReturnBoxList, "StockOut", undoId); //更新出入库流水 toSapDao.saveUnDoInfo(purchaseReturnBoxList, undoId, "");