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 8e8f126..b8283a8 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 @@ -450,7 +450,7 @@ public class ToSAPServiceImpl { return undoId; } - public String FGStockIn3(String RECEIVEACTNO, String user, String stockInType) throws Exception { + public String FGStockIn3(String RECEIVEACTNO, String user, String stockInType,String payMentDate) throws Exception { StringBuffer sql = new StringBuffer(); sql.append(SystemPropHelper.CR) .append("SELECT m.MATERIALSPECNAME ,").append(SystemPropHelper.CR) @@ -473,7 +473,9 @@ public class ToSAPServiceImpl { hashMap.put("RECEIVEACTNO", RECEIVEACTNO); hashMap.put("MATERIALSPECTYPE", stockInType); List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql.toString(), hashMap); - String makeFGStockIn = makeFGStockIn(queryForList, user, RECEIVEACTNO); + //String makeFGStockIn = makeFGStockIn(queryForList, user, RECEIVEACTNO); + String makeFGStockIn = makeFGStockInPayMentDate(queryForList, user, RECEIVEACTNO,payMentDate); + String sapreturn = ""; String rcode = ""; String rmsg = ""; @@ -2550,7 +2552,7 @@ public class ToSAPServiceImpl { } //MES上报工单消耗数据-261工单投料 - public String mesMaterialConsume( String user ) throws Exception { + public String mesMaterialConsume( String user, String payMentDate) throws Exception { String rcode; String undoId = ""; @@ -2581,8 +2583,14 @@ public class ToSAPServiceImpl { */ body.put("ITEM", itemArray); body.put("ITEMID", uniqueID); + String budatData = ""; + if(StringUtils.isNotEmpty(payMentDate)){ + budatData = payMentDate; + }else { + budatData = TimeStampUtil.getCurrentTime("yyyyMMdd"); + } //过账日期 - body.put("BUDAT", TimeStampUtil.getCurrentTime("yyyyMMdd")); + body.put("BUDAT", budatData); //凭证日期 body.put("BLDAT", TimeStampUtil.getCurrentTime("yyyyMMdd")); //凭证抬头文本 @@ -5815,4 +5823,208 @@ public class ToSAPServiceImpl { return undoId; } } + /** + * 成品入库 + * + * @param list + * @param eventUser + * @return + * @throws JsonMappingException + * @throws JsonProcessingException + */ + public String makeFGStockInPayMentDate(List> list, String eventUser, String receiveRequestName, String payMentDate) throws JsonMappingException, JsonProcessingException { + + if (list == null || list.size() < 1) { + return ""; + } + + Map bodyData = new HashMap<>(); + List> itemsData = new ArrayList<>(); + + for (Map mm : list) { + Map item = new HashMap<>(); + //UMWRK 收货工厂 + //LGORT 发货库存地点 + //UMLOG 收货库存地点 + //MATNR 发货物料号 + //UMMAT 收货物料 + + item.put("MATNR", mm.get("MATERIALSPECNAME")); + item.put("LGORT", mm.get("ERPLOCATION")); + item.put("WERKS", mm.get("ERPFACTORY")); + +// item.put("BWART", "531"); + if("FG".equals((String)mm.get("MATERIALSPECTYPE")) ) { + item.put("BWART", "101"); //产成品,移动类型 101 + }else if("BFG".equals((String)mm.get("MATERIALSPECTYPE")) ) { + item.put("BWART", "531"); //副产品, 移动类型 531 + }else if("FGDEV".equals((String)mm.get("MATERIALSPECTYPE")) ) { + item.put("BWART", "511"); //研发品, 移动类型 511 + }else { + item.put("BWART", "101"); //为了兼容之前的未提到的成品,统一暂用 101 + } + + item.put("MENGE", mm.get("MATERIALQUANTITY")); + item.put("MEINS", mm.get("UNIT")); + item.put("AUFNR", mm.get("PRODUCTORDER")); + item.put("BPMNG", ""); + item.put("BPRME", ""); + item.put("SGTXT", mm.get("REMARK")); + String insmk = ""; + if (StringUtils.isEmpty((String)mm.get("PACKINGGRADE"))) { + insmk = "2"; + }else if ("NG".equals((String)mm.get("PACKINGGRADE"))) { + insmk = "3"; + } +// String insmk = StringUtils.equals(mm.get("OQARESULTSTATE").toString(),"END")?"":"X"; + item.put("INSMK", insmk); + itemsData.add(item); + + } + //String sendData = ToSAPMessageUtil.mm067(eventUser, bodyData, itemsData); + /** + * 将MES调用接口传递的payMentDate(过账日期)传递给SAP + * 2024-05-06 + */ + String sendData = ToSAPMessageUtil.mm067Budat(eventUser, bodyData, itemsData,payMentDate); + return sendData; + } + + /** + * 退料入库 + * + * @param siteName + * @param eventUser + * @return + * @throws Exception + */ + public String ReturnStockInNewPayMentDate(String siteName, String eventUser, String shipRequestName, String commitDate, String opCode, String payMentDate) throws Exception { + String sql="SELECT T.RECEIVEREQUESTNAME ," + SystemPropHelper.CR+ + " D.REQUESTNAME PRODUCTORDER," +SystemPropHelper.CR+ + " T.ERPFACTORY, " + SystemPropHelper.CR+ + " T.ERPLOCATION, " + SystemPropHelper.CR+ + " T.MATERIALSPECNAME, " + SystemPropHelper.CR+ + " T.UNIT, " + SystemPropHelper.CR+ + " T.PACKINGGRADE," + SystemPropHelper.CR+ + " SUM(T.MATERIALQUANTITY) AS MATERIALQUANTITY" + SystemPropHelper.CR+ + " FROM MATERIALPACKING T LEFT JOIN BS_MES_SHIPPED D ON D.LOTNAME = T.MATERIALPACKINGNAME" + SystemPropHelper.CR+ + " WHERE 1 = 1 " + SystemPropHelper.CR+ + " AND T.receiveActNo = :SHIPREQUESTNAME" + SystemPropHelper.CR+ + " AND T.SITENAME = :SITENAME " + SystemPropHelper.CR+ + " AND T.STOCKSTATE = 'Created' " + SystemPropHelper.CR+ + "GROUP BY T.RECEIVEREQUESTNAME, D.REQUESTNAME, T.ERPFACTORY,T.ERPLOCATION, " + SystemPropHelper.CR+ + " T.MATERIALSPECNAME,T.UNIT,T.PACKINGGRADE "; + Map hashMap = new HashMap(); + hashMap.put("SITENAME", siteName); +// hashMap.put("SHIPREQUESTNAME", shipRequestName); + hashMap.put("SHIPREQUESTNAME", opCode); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql.toString(), hashMap); + //根据不同的类型进行处理 + //String makeReturnStockIn = makeReturnStockIn(queryForList, eventUser); + String makeReturnStockIn = makeReturnStockInPayMentDate(queryForList, eventUser,payMentDate); + String sapreturn = ""; + String rcode = ""; + String rmsg = ""; + String undoId = ""; + try { + sapreturn = toSAPMessageUtil.sendHttpPost(toSAPMessageUtil.materialChangeLocationUrl, "", + makeReturnStockIn); + 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();//将物料凭证号与凭证年度拼在一起 + } + } catch (Exception e) { + log.error("WMS请求SAP:" + e.getMessage(), e); + throw new RuntimeException("WMS请求SAP" + rmsg); + }finally { + // 写入message log + ErpMessageLog erplog = new ErpMessageLog(); + erplog.setEventUser(eventUser); + erplog.setServerName("WmsToErp"); + erplog.setEventName("ReturnStockIn生产退料"); + erplog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT)); + erplog.setMessageId(opCode); + erplog.setSendMsg(makeReturnStockIn); + erplog.setSendMsg2(makeReturnStockIn); + erplog.setSendMsg(makeReturnStockIn); + erplog.setReturnMsg2(sapreturn); + erplog.setResultCode(rcode); + MessageLogUtil.writeMessageLog(erplog); + } + + + if (!"S".equals(rcode)) { + throw new Exception("SAP返回异常" + rmsg); + } + return undoId; + + } + + public String makeReturnStockInPayMentDate(List> list, String eventUser, String payMentDate) throws JsonMappingException, JsonProcessingException { + if (list == null || list.size() < 1) { + return ""; + } + String moveType = "262"; +// String shipRequestType = (String)list.get(0).get("SHIPREQUESTTYPE"); +// switch(shipRequestType) { +// //生产退料单,同组织&跨组织,投工单的退料使用 移动类型用262 +// case "03": moveType = "262";break; +// //转库单,同组织&跨组织,有线边仓退料使用,移动类型用311 +// case "04": moveType = "311";break; +// //成本中心退料,移动类型202 +// case "07": moveType = "202";break; +// //研发(内部订单)退料, 移动类型Z62 +// case "10": moveType = "Z62";break; +// default:break; +// } + Map bodyData = new HashMap<>(); + List> itemsData = new ArrayList<>(); + + + for (Map mm : list) { + Map item = new HashMap<>(); + //BWART 移动类型(库存管理)CHAR 3 + //KOSTL 成本中心 CHAR 10\ + //GRUND 移动原因 NUMC 4 + + + item.put("MATNR", mm.get("MATERIALSPECNAME")); + item.put("LGORT", mm.get("ERPLOCATION")); + item.put("WERKS", mm.get("ERPFACTORY")); + item.put("BWART", moveType); //移动类型 + item.put("LIFNR", ""); + if(moveType.equals("202")) { + item.put("KOSTL", mm.get("COSTCENTER")); //成本中心 + } + if(moveType.equals("262")) { + item.put("AUFNR", mm.get("PRODUCTORDER"));; //生产工单 + } + if(moveType.equals("Z62")) { + item.put("AUFNR", mm.get("RECEIVEREQUESTNAME"));; //内部订单号,对于研发品来说 + } + item.put("MENGE", mm.get("MATERIALQUANTITY")); + item.put("MEINS", mm.get("UNIT")); + item.put("ZLLORDER", mm.get("SHIPREQUESTNAME")); + item.put("ZLLITEM", mm.get("SHIPREQUESTDETAILNAME")); + + item.put("SGTXT", mm.get("REMARK")); + String insmk = ""; + //对于退料来说, 是已检查之后的结果直接入库, 不需要设置待检 + String packingGrade = mm.get("PACKINGGRADE") == null ? "" : mm.get("PACKINGGRADE").toString(); + if ("NG".equals(packingGrade)) { + insmk = "3"; + } +// String insmk = StringUtils.equals(mm.get("OQARESULTSTATE").toString(),"END")?"":"X"; + item.put("INSMK", insmk); + itemsData.add(item); + + } + String sendData = ToSAPMessageUtil.mm067Budat(eventUser, bodyData, itemsData,payMentDate); + return sendData; + + } } diff --git a/zi-wms-inf/src/main/java/com/cim/idm/util/ToSAPMessageUtil.java b/zi-wms-inf/src/main/java/com/cim/idm/util/ToSAPMessageUtil.java index 3026be1..00c586d 100644 --- a/zi-wms-inf/src/main/java/com/cim/idm/util/ToSAPMessageUtil.java +++ b/zi-wms-inf/src/main/java/com/cim/idm/util/ToSAPMessageUtil.java @@ -632,4 +632,364 @@ public class ToSAPMessageUtil { public static void setBaseUrl(String baseUrl) { ToSAPMessageUtil.baseUrl = baseUrl; } + + /** + * 将MES调用接口传递的payMentDate(过账日期)传递给SAP + * @param user + * @param bodyData + * @param itemsData + * @param budat 过账日期 + * @return + */ + public static String mm067Budat(String user, Map bodyData, List> itemsData, String budat){ + 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(); + body.put("ITEM",itemArray); + /* + HEAD + INTFID 指定什么接口 MM067 + REQ_KEYID 接口唯一ID + SRC_MSGID XI:消息标识 + SRC_SYSTEM 发送方系统 WMS + DEST_SYSTEM 目标系统,接收方系统 SAP + REQUSER 用户名 + BACKUP1 备注1 + BACKUP2 备注2 + */ + header.put("INTF_ID","MM067"); + //uniqueID + 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); + header.put("BACKUP1",""); + header.put("BACKUP2",""); + + + /* + BODY + + ITEMID + BUDAT 过账日期 + BLDAT 凭证日期 + BKTXT 凭证抬头文本 + USNAM 用户名 + ZFLAG 标识 + ZRSV01 预留字段01 + ZRSV02 预留字段02 + ZRSV03 预留字段03 + ZRSV04 预留字段04 + ZRSV05 预留字段05 + ZRSV06 预留字段06 + ZRSV07 预留字段07 + ZRSV08 预留字段08 + ZRSV09 预留字段09 + ZRSV10 预留字段10 + + */ + /** + * 将MES调用接口传递的payMentDate(过账日期)传递给SAP + * 2024-05-06 + */ + body.put("ITEMID",uniqueID); + String postingDate = ""; + if (StringUtils.isNotEmpty(budat)){ + postingDate = budat; + }else { + postingDate = TimeStampUtil.getCurrentTime("yyyyMMdd"); + } + //过账日期 + body.put("BUDAT",postingDate); + //凭证日期 + body.put("BLDAT",TimeStampUtil.getCurrentTime("yyyyMMdd")); + //凭证抬头文本 + body.put("BKTXT",StringUtils.isEmpty((String)bodyData.get("BKTXT"))?uniqueID:bodyData.get("BKTXT")); + //用户名 + body.put("USNAM",user); + //标识 + body.put("ZFLAG",""); + body.put("ZRSV01",bodyData.get("ZRSV01")==null?"":bodyData.get("ZRSV01")); + body.put("ZRSV02",bodyData.get("ZRSV02")==null?"":bodyData.get("ZRSV02")); + body.put("ZRSV03",bodyData.get("ZRSV03")==null?"":bodyData.get("ZRSV03")); + body.put("ZRSV04",bodyData.get("ZRSV04")==null?"":bodyData.get("ZRSV04")); + body.put("ZRSV05",bodyData.get("ZRSV05")==null?"":bodyData.get("ZRSV05")); + body.put("ZRSV06",bodyData.get("ZRSV06")==null?"":bodyData.get("ZRSV06")); + body.put("ZRSV07",bodyData.get("ZRSV07")==null?"":bodyData.get("ZRSV07")); + body.put("ZRSV08",bodyData.get("ZRSV08")==null?"":bodyData.get("ZRSV08")); + body.put("ZRSV09",bodyData.get("ZRSV09")==null?"":bodyData.get("ZRSV09")); + body.put("ZRSV10",bodyData.get("ZRSV10")==null?"":bodyData.get("ZRSV10")); + + + + for (Map mm : itemsData) { + JSONObject item = new JSONObject(true); + /* + MATNR 发货物料号 + UMMAT 收货物料 移动类型是 309、311、312、输入值,其他传空 + WERKS 发货工厂 + UMWRK 收货工厂 + LGORT 发货库存地点 + UMLGO 收货库存地点 + BWART 移动类型 + SOBKZ 特殊库存标识 + LIFNR 供应商编码 + MENGE 数量 + MEINS 单位 + BPMNG 采购价格单位数量 + BPRME 采购价格单位 + EBELN 采购订单编码 + EBELP 采购订单项目编码 + SGTXT 项目文本 + KOSTL 成本中心 + MAT_KDAUF 发货销售订单编码 + MAT_KDPOS 发货销售订单项目编码 + UMMAT_KDAUF 收货销售订单编码 + UMMAT_KDPOS 收货销售订单项目编码 + ELIKZ 交货已完成标识 + AUFNR 订单号 + AUFPS 订单项目编号 + RSNUM 预留/相关需求的编号 + RSPOS 预留/相关需求的项目编号 + RSART 记录类型 + KZEAR 该预留的最后发货 + UMMAT 收货物料 + UMCHA 收货/发货批量 + PRCTR 利润中心 + KZBEW 移动标识 + GRUND 移动原因 + SAKTO 总帐科目编号 + ZLLORDER 自定义领料单号 + ZLLITEM 自定义领料单行号 + INSMK 库存类型 + VBELN_IM 交货单 + VBELP_IM 交货单项目 + ZRSV01 预留字段01 + ZRSV02 预留字段02 + ZRSV03 预留字段03 + ZRSV04 预留字段04 + ZRSV05 预留字段05 + ZRSV06 预留字段06 + ZRSV07 预留字段07 + ZRSV08 预留字段08 + ZRSV09 预留字段09 + ZRSV10 预留字段10 + */ + + item.put("MATNR", mm.get("MATNR")==null?"":mm.get("MATNR")); + item.put("UMMAT", mm.get("UMMAT")==null?"":mm.get("UMMAT")); + item.put("UMLGO", mm.get("UMLGO")==null?"":mm.get("UMLGO")); + item.put("LGORT", mm.get("LGORT")==null?"":mm.get("LGORT")); + item.put("UMWRK", mm.get("UMWRK")==null?"":mm.get("UMWRK")); + item.put("WERKS", mm.get("WERKS")==null?"":mm.get("WERKS")); + /* + 101:采购订单/生产工订单收货 + 102:采购订单原单退货/生产工单入库冲销 + 161:退货采购订单收货 + 162:退货采购订单原单退货(162BAPI传参移动类型需传102) + 201:成本中心领料 + 202:成本中心退料 + 261:生产订单发料 + 262:生产订单发料-冲销 + 309:物料转物料 + 310:物料转物料-冲销 + 311:库存地点调拨 (工厂内) + 312:库存地点调拨-冲销 + 321:TF质量到非限制 + 322:TR 质量到非限制 + 343:TF冻结到非限制 + 344:TR 冻结到非限制 + 349:TF 冻结到质检 + 350:TR 冻结到质检 + 411K:供应商寄售转自有 + 412K:自有库存转K库存 + 411E:从E库存转非限制 + 413:从非限制转E库存 + 413E:从E库存转E库存 + 531:副产品入库 + 532:副产品入库-冲销 + 541O:委外发料 + 542O:委外退料 + Z05盘亏 + Z06盘盈 + Z61研发领料(内部订单) + Z62研发退料(内部订单) + Z63调机领料(内部订单) + Z64调机领料(内部订单) + Z07 降级品出库 + Z08 RE降级品出库 + */ + String mmtype = mm.get("BWART")==null?"":(String)mm.get("BWART"); + item.put("BWART", mm.get("BWART")==null?"":mm.get("BWART")); + /* + 移动类型为三位代码,备注了字母的需要在特殊库存标识字段输入对应字母 + O:分包库存 + E:销售订单库存 + K:供应商寄售库存 + */ + if(StringUtils.isNotEmpty(mmtype) && mmtype.length()==4) { + item.put("SOBKZ",mmtype.substring(3, 4)); + } else { + item.put("SOBKZ",""); + } + /* + * LIFNR 供应商编码 + * 411、411k、412k 、541O、542O输入,其他传空 + */ + item.put("LIFNR", mm.get("LIFNR")==null?"":mm.get("LIFNR")); + /* + * MENGE 数量 + * 当单位是采购订单单位时,输入对应实际数量 + */ + item.put("MENGE", mm.get("MENGE")==null?"":mm.get("MENGE")); + /* + * MEINS 单位 + * 基于采购订单的业务输入采购订单单位,其他输入基本单位 + */ + item.put("MEINS", mm.get("MEINS")==null?"":mm.get("MEINS")); + /* + * BPMNG 采购价格单位数量 + * 采购订单价格单位与采购订单单位不一致时,输入实际采购价格单位数量 + */ + item.put("BPMNG", mm.get("BPMNG")==null?"":mm.get("BPMNG")); + item.put("BPRME", mm.get("BPRME")==null?"":mm.get("BPRME")); + /* + * BPRME 采购价格单位 + * + */ + item.put("SGTXT", mm.get("SGTXT")==null?"":mm.get("SGTXT")); + /* + * EBELN 采购订单编码 + * 移动类型是101、102、161、162必输入 + */ + item.put("EBELN", mm.get("EBELN")==null?"":mm.get("EBELN")); + /* + * EBELP 采购订单项目编码 + * 移动类型是101、102、161、162必输入 + */ + item.put("EBELP", mm.get("EBELP")==null?"":mm.get("EBELP")); + /* + * SGTXT 项目文本 + */ + item.put("SGTXT", mm.get("SGTXT")==null?"":mm.get("SGTXT")); + /* + * KOSTL 成本中心 + * 移动类型201、202、Z05、Z06输入,其他传空 + */ + + item.put("KOSTL", mm.get("KOSTL")==null?"":mm.get("KOSTL")); + + /* + * MAT_KDAUF 发货销售订单编码 + * MAT_KDPOS 发货销售订单项目编码 + * E库存更换销售订单号 + * 移动类型411E、413E输入,其他传空 + */ + item.put("MAT_KDAUF", mm.get("MAT_KDAUF")==null?"":mm.get("MAT_KDAUF")); + item.put("MAT_KDPOS", mm.get("MAT_KDPOS")==null?"":mm.get("MAT_KDPOS")); + /* + * UMMAT_KDAUF 收货销售订单编码 + * UMMAT_KDPOS 收货销售订单项目编码 + * 413、413E输入,其他传空 + */ + item.put("UMMAT_KDAUF", mm.get("UMMAT_KDAUF")==null?"":mm.get("UMMAT_KDAUF")); + item.put("UMMAT_KDPOS", mm.get("UMMAT_KDPOS")==null?"":mm.get("UMMAT_KDPOS")); + + /* + * ELIKZ 交货已完成标识 + */ + item.put("ELIKZ", mm.get("ELIKZ")==null?"":mm.get("ELIKZ")); + /* + * AUFNR 订单号 + * 261、262输入生产订单号;Z61、Z62、Z63、Z64输入内部订单号,其他传空 + */ + item.put("AUFNR", mm.get("AUFNR")==null?"":mm.get("AUFNR")); + /* + * AUFPS 订单项目编号 + */ + item.put("AUFPS", mm.get("AUFPS")==null?"":mm.get("AUFPS")); + /* + RSNUM 预留/相关需求的编号 + RSPOS 预留/相关需求的项目编号 + RSART 记录类型 + KZEAR 该预留的最后发货 + UMMAT 收货物料 + UMCHA 收货/发货批量 + PRCTR 利润中心 + KZBEW 移动标识 + GRUND 移动原因 + SAKTO 总帐科目编号 + */ + item.put("RSNUM", mm.get("RSNUM")==null?"":mm.get("RSNUM")); + item.put("RSPOS", mm.get("RSPOS")==null?"":mm.get("RSPOS")); + item.put("RSART", mm.get("RSART")==null?"":mm.get("RSART")); + item.put("KZEAR", mm.get("KZEAR")==null?"":mm.get("KZEAR")); + item.put("UMMAT", mm.get("UMMAT")==null?"":mm.get("UMMAT")); + item.put("UMCHA", mm.get("UMCHA")==null?"":mm.get("UMCHA")); + item.put("PRCTR", mm.get("PRCTR")==null?"":mm.get("PRCTR")); + item.put("KZBEW", mm.get("KZBEW")==null?"":mm.get("KZBEW")); + item.put("GRUND", mm.get("GRUND")==null?"":mm.get("GRUND")); + item.put("SAKTO", mm.get("SAKTO")==null?"":mm.get("SAKTO")); + /* + * ZLLORDER 自定义领料单号 + * ZLLITEM 自定义领料单行号 + * 309、310、261、262、411E、413、413E、Z61、Z62、Z63、Z64、541、201、202输入,其他传空 + */ + item.put("ZLLORDER", mm.get("ZLLORDER")==null?"":mm.get("ZLLORDER")); + item.put("ZLLITEM", mm.get("ZLLITEM")==null?"":mm.get("ZLLITEM")); + /* + * INSMK 库存类型 + * 采购入库或工单入库时使用 + 空:非限制使用 + 2:质量检验 + 3:已冻结 + */ + item.put("INSMK", mm.get("INSMK")==null?"":mm.get("INSMK")); + + /* + * VBELN_IM 交货单 + * VBELP_IM 交货单项目 + * 101, 跨工厂调拨时使用 + */ + item.put("VBELN_IM", mm.get("VBELN_IM")==null?"":mm.get("VBELN_IM")); + item.put("VBELP_IM", mm.get("VBELP_IM")==null?"":mm.get("VBELP_IM")); + /* + ZRSV01 预留字段01 + ZRSV02 预留字段02 + ZRSV03 预留字段03 + ZRSV04 预留字段04 + ZRSV05 预留字段05 + ZRSV06 预留字段06 + ZRSV07 预留字段07 + ZRSV08 预留字段08 + ZRSV09 预留字段09 + ZRSV10 预留字段10 + */ + item.put("ZRSV01",mm.get("ZRSV01")==null?"":mm.get("ZRSV01")); + item.put("ZRSV02",mm.get("ZRSV02")==null?"":mm.get("ZRSV02")); + item.put("ZRSV03",mm.get("ZRSV03")==null?"":mm.get("ZRSV03")); + item.put("ZRSV04",mm.get("ZRSV04")==null?"":mm.get("ZRSV04")); + item.put("ZRSV05",mm.get("ZRSV05")==null?"":mm.get("ZRSV05")); + item.put("ZRSV06",mm.get("ZRSV06")==null?"":mm.get("ZRSV06")); + item.put("ZRSV07",mm.get("ZRSV07")==null?"":mm.get("ZRSV07")); + item.put("ZRSV08",mm.get("ZRSV08")==null?"":mm.get("ZRSV08")); + item.put("ZRSV09",mm.get("ZRSV09")==null?"":mm.get("ZRSV09")); + item.put("ZRSV10",mm.get("ZRSV10")==null?"":mm.get("ZRSV10")); + itemArray.add(item); + + } + log.info("SendTOSAP >>>>"+sendData); + return sendData.toJSONString(); + }catch (Exception e) { + log.error("发给SAP的消息拼装异常:"+e.getMessage(),e); + throw e; + } + } } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/QMSController.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/QMSController.java index 4662dfc..760b0f4 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/controller/QMSController.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/QMSController.java @@ -115,10 +115,15 @@ public class QMSController { bindMap.put("packingGrade", iqcResult); setEventInfo.setUserColumns(bindMap); eventInfo.setEventTime(Timestamp.valueOf(iqcResultDate)); - String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME FROM MATERIALPACKING M " + /*String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME FROM MATERIALPACKING M " + "WHERE M.RECEIVEACTNO = :RECEIVEACTNO AND M.MATERIALSPECNAME = :MATERIALSPECNAME"; Map hashMap = new HashMap (); hashMap.put("RECEIVEACTNO", deliveryNumber); + hashMap.put("MATERIALSPECNAME", materialCode);*/ + String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME FROM MATERIALPACKING M " + + "WHERE M.MESSAGEID = :MESSAGEID AND M.MATERIALSPECNAME = :MATERIALSPECNAME"; + Map hashMap = new HashMap (); + hashMap.put("MESSAGEID", deliveryNumber); hashMap.put("MATERIALSPECNAME", materialCode); List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); if (queryForList == null || queryForList.size() < 1) { diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java index 58dd0dd..b590cff 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java @@ -81,7 +81,7 @@ public class MESToWMSServiceImpl implements MESToWMSService { * 3. 过账 * 4. 更新MATERIALPACKINGMDC表库存 */ - + String payMentDate = ""; for (int i = 0; i < in.size(); i++) { JSONObject jb = in.getJSONObject(i); String materialSpecName = jb.get("materialSpecName").toString(); @@ -89,6 +89,7 @@ public class MESToWMSServiceImpl implements MESToWMSService { String wo = jb.get("requestName") == null ? "" : jb.get("requestName").toString(); // 工单 String flag = jb.get("flag") == null ? "" : jb.get("flag").toString(); String charge = jb.get("CHARGE") == null ? "" : jb.get("CHARGE").toString(); + payMentDate = jb.get("payMentDate").toString(); //判空 if (StringUtils.isBlank(materialSpecName) || StringUtils.isBlank(qty)) { result = AjaxResult.me().setSuccess(false).setErrorCode(500).setMessage("料号或数量不能为空"); @@ -135,7 +136,7 @@ public class MESToWMSServiceImpl implements MESToWMSService { } // 将工单的物料消耗数据传给SAP - String undoId = toSAPService.mesMaterialConsume("MES"); + String undoId = toSAPService.mesMaterialConsume("MES",payMentDate); result = AjaxResult.me().setSuccess(true).setErrorCode(200).setMessage("执行成功"); loginfo.setResultCode("0"); loginfo.setReturnMsg(JSONObject.toJSONString(result)); @@ -369,6 +370,7 @@ public class MESToWMSServiceImpl implements MESToWMSService { String operationType = ""; // 用于记录是否是自动入库 手动入库0,自动入库1 String fgStockIn = ""; if (in != null && in.size() > 0) { + String payMentDate = in.getJSONObject(0).get("payMentDate").toString(); //日期 for (int i = 0; i < in.size(); i++) { JSONObject jb = in.getJSONObject(i); String charge = jb.get("charge").toString(); // 批号 @@ -512,7 +514,7 @@ public class MESToWMSServiceImpl implements MESToWMSService { } if ("1".equals(operationType)) { // 自动入库 if ("FG".equals(stockInType) || "BFG".equals(stockInType)) { // 产成品入库 增加回收粒子入库 - fgStockIn = productIntoServiceImpl.outoFgStockIn(receiveActNo, "MES",stockInType); + fgStockIn = productIntoServiceImpl.outoFgStockIn(receiveActNo, "MES",stockInType,payMentDate); if (fgStockIn.isEmpty()) { throw new GlobalException("报送ERP失败,请联系IT处理!"); } @@ -537,7 +539,8 @@ public class MESToWMSServiceImpl implements MESToWMSService { } } else if ("MAT".equals(stockInType)) { // 生产退料入库 - fgStockIn = returnStockIntoServiceImpl.ReturnStockIn(receiveActNo, "MES", "", ""); + //fgStockIn = returnStockIntoServiceImpl.ReturnStockIn(receiveActNo, "MES", "", ""); + fgStockIn = returnStockIntoServiceImpl.ReturnStockInPayMentDate(receiveActNo, "MES", "", "",payMentDate); if (fgStockIn.isEmpty()) { throw new GlobalException("报送ERP失败,请联系IT处理!"); } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java index 689e6fb..ac4fea2 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java @@ -1002,9 +1002,9 @@ public class ProductIntoServiceImpl implements FGStockInService { return billCode; } //自动成品入库到现场仓 - public String outoFgStockIn (String RECEIVEACTNO, String eventUser, String stockInType) throws Exception { + public String outoFgStockIn (String RECEIVEACTNO, String eventUser, String stockInType, String payMentDate) throws Exception { - String billCode = toSAPService.FGStockIn3(RECEIVEACTNO, eventUser,stockInType); + String billCode = toSAPService.FGStockIn3(RECEIVEACTNO, eventUser,stockInType,payMentDate); if (billCode == null) { throw new GlobalException("报送ERP失败,请联系IT处理!"); } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ReturnStockIntoServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ReturnStockIntoServiceImpl.java index b2df097..485d882 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ReturnStockIntoServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ReturnStockIntoServiceImpl.java @@ -970,4 +970,50 @@ public class ReturnStockIntoServiceImpl implements ReturnStockInService { return ""; } + /** + * + * @param RECEIVEACTNO + * @param eventUser + * @return + * @throws IOException + * @throws SAXException + * @throws ParserConfigurationException + */ + @Transactional(rollbackFor = Exception.class) + public String ReturnStockInPayMentDate (String RECEIVEACTNO, String eventUser,String commitDate,String opCode,String payMentDate) throws Exception { + //String billCode = ToSAPServiceImpl.ReturnStockInNew("SDK", eventUser, RECEIVEACTNO,commitDate,opCode); + String billCode = ToSAPServiceImpl.ReturnStockInNewPayMentDate("SDK", eventUser, RECEIVEACTNO,commitDate,opCode, payMentDate); + if (billCode == null) { + throw new RuntimeException("SAP接口过账失败"); + } + EventInfo makeEventInfo = new EventInfoUtil().makeEventInfo("ReturnStockIn", eventUser, "ReturnStockIn"); + //更新抬头文本状态和Box状态 + String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME FROM MATERIALPACKING M WHERE M.RECEIVEACTNO = :RECEIVEACTNO"; + Map hashMap = new HashMap (); + hashMap.put("RECEIVEACTNO", RECEIVEACTNO); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + for (Map map : queryForList) { + MaterialPackingKey materialPackingKey = new MaterialPackingKey(map.get("SITENAME").toString(),map.get("MATERIALPACKINGNAME").toString()); + SetEventInfo setEventInfo = new SetEventInfo(); + Map bindMap = new HashMap(); + bindMap.put("unDoID", billCode); + bindMap.put("stockState", "Stocked"); + setEventInfo.setUserColumns(bindMap); + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo); + + String sql2 = "UPDATE BS_MES_SHIPPED T SET T.RECEIVE_FLAG = 'Y', T.RECEIVE_TIME = SYSDATE WHERE T.LOTNAME = :LOTNAME"; + Map hashMap2 = new HashMap (); + hashMap2.put("LOTNAME", map.get("MATERIALPACKINGNAME").toString()); + IDMFrameServiceProxy.getSqlTemplate().update(sql2, hashMap2); + + String sql3 = "UPDATE MATERIALRECEIVEACT T SET T.RECEIVEACTSTATE = 'Received' WHERE T.RECEIVEACTNO = :RECEIVEACTNO"; + Map hashMap3 = new HashMap (); + hashMap2.put("RECEIVEACTNO", RECEIVEACTNO); + IDMFrameServiceProxy.getSqlTemplate().update(sql3, hashMap2); + } + SaveUnDoInfo( billCode,commitDate); + //更新MES标识 + return billCode; + + } }