From e873887b32c4ba659bdf61270e17923f89170f57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E9=A3=9E?= Date: Thu, 22 May 2025 15:03:59 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=B7=BB=E5=8A=A0=E8=B0=83=E6=8B=A8?= =?UTF-8?q?=E5=87=BA=E5=BA=93=E3=80=81=E9=94=80=E5=94=AE=E5=8F=91=E8=B4=A7?= =?UTF-8?q?=E5=86=B2=E9=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../management/data/MaterialPacking.java | 10 ++ .../idm/service/impl/ToSAPServiceImpl.java | 147 ++++++++++++++++++ .../idm/controller/MESToWMSController.java | 2 +- .../controller/MaterialUndoController.java | 3 +- .../com/cim/idm/dao/MaterialReversalDao.java | 9 +- .../com/cim/idm/model/MaterialUndoDto.java | 3 +- .../idm/service/Impl/InvoiceServiceImpl.java | 1 + .../service/Impl/MaterialShipServiceImpl.java | 2 +- .../service/Impl/MaterialUndoServiceImpl.java | 17 +- .../java/com/cim/idm/utils/CodeGenerator.java | 2 + 10 files changed, 186 insertions(+), 10 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 f759cfb..e571b87 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 @@ -137,6 +137,8 @@ public class MaterialPacking extends FieldAccessor implements DataInfo boxList,String commitDate) throws Exception { + String rcode; + String undoId = ""; + String key01 = ""; + String rmsg = null; + String sql=" SELECT \r\n" + + " count(*) AS ZROL, \r\n" + + " m1.SHIPREQUESTDETAILNAME , \r\n" + + " t.ERPLOCATION, \r\n" + + " sum(m.QTY)MATERIALQUANTITY \r\n" + + " FROM \r\n" + + " MATERIALPACKINGSUB m \r\n" + + " LEFT JOIN MATERIALPACKING T ON \r\n" + + " m.MATERIALPACKINGNAME = T.MATERIALPACKINGNAME AND m.RECEIVEREQUESTNAME = T.SHIPREQUESTNAME \r\n" + + " LEFT JOIN MATERIALSHIPREQUESTDETAIL M1 \r\n" + + " ON \r\n" + + " m.RECEIVEREQUESTNAME = M1.SHIPREQUESTNAME \r\n" + + " AND m.RECEIVEREQUESTDETAILNAME = M1.SHIPREQUESTDETAILNAME \r\n" + + " LEFT JOIN MATERIALSHIPREQUEST M2 \r\n" + + " ON \r\n" + + " M1.SHIPREQUESTNAME = M2.SHIPREQUESTNAME \r\n" + + " WHERE \r\n" + + " T.SHIPREQUESTNAME = :SHIPREQUESTNAME \r\n" + + " AND T.SITENAME = :SITENAME \r\n" + + " AND T.STOCKSTATE = 'StockOut' AND T.MATERIALPACKINGNAME IN (:BOXLIST)\r\n" + + " GROUP BY m1.SHIPREQUESTDETAILNAME , t.ERPLOCATION"; + + 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("DEST_SYSTEM", "SAP"); + header.put("INTF_ID", "SD023"); + header.put("SRC_SYSTEM", "WMS"); + String uniqueID = UUID.randomUUID().toString(); + header.put("SRC_MSGID", uniqueID); + header.put("BACKUP1", uniqueID); + header.put("BACKUP2", uniqueID); + + + + /* + BODY + */ + //交货单号 + 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", outputDate);//yyyyMMddhhmmss + //发送日期 + body.put("Z_SENDDATE", outputDate); + //操作类型(过账) 1、过账 2、冲销 + body.put("Z_OPTION", "2"); + + if (queryForList.size() >= 1) { + for (Map mm : queryForList) { + JSONObject item = new JSONObject(true); + + //交货单行号 + item.put("POSNR", mm.get("SHIPREQUESTDETAILNAME")); + //交货数量 + item.put("PIKMG", mm.get("MATERIALQUANTITY")); + //库存地点 + item.put("LGORT", mm.get("ERPLOCATION")); + //实际发货卷数 + item.put("Z_ROL", mm.get("ZROL")); + //实际发货平方米 + item.put("Z_SQUE", mm.get("MATERIALQUANTITY")); + + itemArray.add(item); + } + body.put("ITEMS", itemArray); + }else { + for (Map mm : queryForList) { + + //交货单行号 + body.put("POSNR", mm.get("SHIPREQUESTDETAILNAME")); + //交货数量 + body.put("PIKMG", mm.get("MATERIALQUANTITY")); //SUM + //库存地点 + body.put("LGORT", mm.get("ERPLOCATION")); + //实际发货卷数 + body.put("Z_ROL", mm.get("ZROL")); //COUNT + //实际发货平方米 + body.put("Z_SQUE", mm.get("MATERIALQUANTITY")); + + } + } + +// log.info("SendTOSAP >>>>" + sendData); + String sapreturn = toSAPMessageUtil.sendHttpPost(toSAPMessageUtil.DNUrl, "", sendData.toJSONString()); + org.json.JSONObject receiveJsonObject = new org.json.JSONObject(sapreturn); + + //销售交货单过账不返回物料凭证,且RETURN为JsonArray + org.json.JSONObject returnJsonObject = (org.json.JSONObject) receiveJsonObject.get("RETURN"); + rcode = returnJsonObject.get("STATUS").toString(); + rmsg = returnJsonObject.get("MSGTXT").toString(); + key01 = returnJsonObject.get("KEY01") == null ? "" : returnJsonObject.get("KEY01").toString(); // 返回单号,后面用单号冲销 + + if ("S".equals(rcode)) { + if(key01.isEmpty()) { + undoId = "S"; + }else { + undoId = key01; + } + + } + //将log写到表里 + ErpMessageLog erplog = new ErpMessageLog(); + erplog.setEventUser(user); + erplog.setServerName("WmsToErp"); + erplog.setEventName("调拨出库和销售出库冲销"); + erplog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT)); + erplog.setMessageId(UUID.randomUUID().toString()); + erplog.setSendMsg(sendData.toJSONString()); + 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; + } + // 取消物料入库凭证冲销 public String cancelShipInter(String undoId, String user) throws Exception { diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/MESToWMSController.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/MESToWMSController.java index 9d0d40d..b3ec727 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/controller/MESToWMSController.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/MESToWMSController.java @@ -62,7 +62,7 @@ public class MESToWMSController { } } - @ApiOperation(value = "取消物料入库请求") + @ApiOperation(value = "物料冲销接口请求") @RequestMapping(value = "/meswms_cancelship_request", method = RequestMethod.POST) public AjaxResult cancelShipByMES(@RequestBody JSONArray in) { log.info("Received cancel ship request: {}", in.toJSONString()); diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/MaterialUndoController.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/MaterialUndoController.java index 78e31b9..f7fc030 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/controller/MaterialUndoController.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/MaterialUndoController.java @@ -37,6 +37,7 @@ public class MaterialUndoController { String flag = undoDto.getFlag(); String inv_TYPE = undoDto.getINV_TYPE(); String lastEventName = undoDto.getLastEventName(); + String commitDate = undoDto.getCommitDate(); //根据物料凭证校验物料状态是否一致 try { Boolean checkUndoCondition = untils.CheckUndoCondition(undoId); @@ -74,7 +75,7 @@ public class MaterialUndoController { }else if(inv_TYPE.contains("ZK")) { // 转库 materialUndoServiceImpl.zkUndo(undoId, userId); }else if(inv_TYPE.contains("NLCC") && lastEventName.contains("调拨出库")) { // 调拨出库 - materialUndoServiceImpl.orderUndo(undoId, userId); + materialUndoServiceImpl.orderUndo(undoId, userId,commitDate); }else { return AjaxResult.me().setSuccess(false).setMessage("单据类型不支持冲销"); } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/dao/MaterialReversalDao.java b/zi-wms-pda/src/main/java/com/cim/idm/dao/MaterialReversalDao.java index 0858f93..471090d 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/dao/MaterialReversalDao.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/dao/MaterialReversalDao.java @@ -1,12 +1,15 @@ package com.cim.idm.dao; +import com.cim.idm.framework.IDMFrameServiceProxy; import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; +import java.util.HashMap; import java.util.List; +import java.util.Map; @Component @Mapper @@ -14,6 +17,10 @@ public interface MaterialReversalDao { //更新冲销凭证为已冲销 public static void updateReversalUnDoId(@Param("undoId") String undoId) throws Exception { - +// String sql = "UPDATE IF_ERPUNDO T SET T.FLAG = 'Y' WHERE T.UNDOID = :UNDOID "; + String sql = "UPDATE BS_MATERIALPACKINGUNDOINFO T SET T.FLAG = 'Y' WHERE T.UNDOID = :UNDOID "; + Map hashMap2 = new HashMap(); + hashMap2.put("UNDOID", undoId); + IDMFrameServiceProxy.getSqlTemplate().update(sql, hashMap2); } } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/model/MaterialUndoDto.java b/zi-wms-pda/src/main/java/com/cim/idm/model/MaterialUndoDto.java index 3f5f2b8..92e9781 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/model/MaterialUndoDto.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/model/MaterialUndoDto.java @@ -14,5 +14,6 @@ public class MaterialUndoDto { private String userId; private String lastEventName; - + + private String commitDate; } 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 8a60fb2..98406c7 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 @@ -801,6 +801,7 @@ public class InvoiceServiceImpl implements InvoiceService { bindMap.put("WEIGHT", WEIGHT); bindMap.put("DIAMETER", DIAMETER); bindMap.put("shelfName", shelfName); + bindMap.put("split", "Y"); createInfo1.setUserColumns(bindMap); MaterialPackingServiceProxy.getMaterialPackingService().create(makeEventInfo, createInfo1); diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialShipServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialShipServiceImpl.java index cf48b8e..c0435cb 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialShipServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialShipServiceImpl.java @@ -1153,7 +1153,7 @@ public class MaterialShipServiceImpl implements IMaterialShipService { } //将log写到表里 ErpMessageLog erplog = new ErpMessageLog(); - erplog.setEventUser(""); + erplog.setEventUser(user); erplog.setServerName("WmsToErp"); erplog.setEventName("辅材出库-调拨出库(NLCC)"); erplog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT)); diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialUndoServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialUndoServiceImpl.java index b1e8512..eaecb86 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialUndoServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialUndoServiceImpl.java @@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -263,18 +264,24 @@ public class MaterialUndoServiceImpl implements IMaterialUndoService { } @Transactional - public void orderUndo (String undoId, String user) throws Exception { + public void orderUndo (String undoId, String user, String commitDate) throws Exception { - String billCode = toSAPService.cancelShipInter(undoId, user); - if (billCode == null) { - throw new GlobalException("报送ERP失败,请联系IT处理!"); - } + List materialPackingKeyList = new ArrayList<>(); EventInfo makeEventInfo = new EventInfoUtil ().makeEventInfo("MakeUndo", user, "MakeUndo"); String condition="WHERE UNDOID =? "; String[] bindSet={undoId}; //根据物料凭证找到所有的待冲销数据,更新库存状态为创建 List list = MaterialPackingServiceProxy.getMaterialPackingService().select(condition, bindSet); + for (int i = 0; i < list.size(); ++ i) { + String materialPackingName = list.get(i).getMaterialPackingName(); + materialPackingKeyList.add(materialPackingName); + } + String billCode = toSAPService.outOrderChancel(undoId, "SKD",user, materialPackingKeyList,commitDate); + if (billCode == null) { + throw new GlobalException("报送ERP失败,请联系IT处理!"); + } + Map hashMap = new HashMap (); hashMap.put("stockState", "Stocked"); hashMap.put("shipRequestName", ""); diff --git a/zi-wms-pda/src/main/java/com/cim/idm/utils/CodeGenerator.java b/zi-wms-pda/src/main/java/com/cim/idm/utils/CodeGenerator.java index df8969e..c6fe240 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/utils/CodeGenerator.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/utils/CodeGenerator.java @@ -99,6 +99,8 @@ public class CodeGenerator { Collections.sort(chargeNoList); int max = Integer.parseInt(chargeNoList.get(chargeNoList.size() - 1)); sequence = max + 1; + } else if (Charge.isEmpty()) { + } // 3. 遍历结果集,生成新条码并更新数据库