diff --git a/zi-wms-inf/src/main/java/com/cim/idm/service/impl/MESServiceImpl.java b/zi-wms-inf/src/main/java/com/cim/idm/service/impl/MESServiceImpl.java index 90c569a..f4fc4b9 100644 --- a/zi-wms-inf/src/main/java/com/cim/idm/service/impl/MESServiceImpl.java +++ b/zi-wms-inf/src/main/java/com/cim/idm/service/impl/MESServiceImpl.java @@ -719,4 +719,132 @@ public class MESServiceImpl implements MESService{ bp.put("LASTEVENTTIMEKEY", timekey); IDMFrameServiceProxy.getSqlTemplate().update(sql, bp); } + + public String sendMESAndInsertMaterialPackingMDC(String shipRequestName, String siteName, String receiveActNo, String wo, + String erpReceiveLocation,String erpReceiveFactory,List boxList) throws CustomException{ + + //根据单据获取要发送MES的信息 + String sql="SELECT * from(\r\n" + + " SELECT m.CHARGE,m.MATERIALPACKINGNAME,m.MATERIALSPECNAME,to_char(m.EXPIRINGDATE,'YYYY-MM-DD HH24:MI')EXPIRINGDATE,m.PHASE, \r\n" + + " m.TRUEGG ,m.FQTY ,m.FUNIT ,m.GXID,m.LASTEVENTUSER ,m.REMARK , m3.SHIPREQUESTTYPE, \r\n" + + " m3.SHIPREQUESTDETAILTYPE ,m2.MATERIALUNIT ,bm.DENOMINATOR/bm.MODULECULE CONVERSIONSCALE, \r\n" + + " m4.DESCRIPTION ,m2.MATERIALTYPE ,(SELECT RECEIVEPRODUCTIONORDERNUMBER FROM MATERIALSHIPREQUESTDETAIL m5 \r\n" + + " WHERE m5.SHIPREQUESTNAME=:SHIPREQUESTNAME AND m5.MATERIALSPECNAME=m.MATERIALSPECNAME \r\n" + + " ORDER BY m5.USEDATE,m5.SHIPREQUESTDETAILNAME FETCH FIRST ROW ONLY)WO \r\n" + + " FROM MATERIALPACKING m , MATERIALSPEC m2 ,MATERIALSHIPREQUEST m3 ,BS_MATERIALDESCRIPTION m4 ,BS_MATERIALUNIT bm \r\n" + + " WHERE m.SITENAME =:SITENAME \r\n" + + " AND m.SHIPREQUESTNAME =:SHIPREQUESTNAME\r\n" + + " AND m.MATERIALPACKINGNAME in(:BOXLIST) \r\n" + + " AND m4.LANGUAGE = 'ZH' \r\n" + + " AND m.MATERIALSPECNAME =m2.MATERIALSPECNAME \r\n" + + " AND m.SHIPREQUESTNAME =m3.SHIPREQUESTNAME \r\n" + + " AND m.MATERIALSPECNAME =m4.MATERIALSPECNAME \r\n" + + " AND m.MATERIALSPECNAME =bm.MATERIALSPECNAME(+) \r\n" + + " AND m.FUNIT =bm.ADDITIONALUNIT(+))A\r\n" + + " LEFT JOIN (\r\n" + + " SELECT m.MATERIALPACKINGNAME MPS,sum(m.QTY)MATERIALQUANTITY FROM MATERIALPACKINGSUB m \r\n" + + " WHERE m.MATERIALPACKINGNAME in(:BOXLIST)\r\n" + + " AND m.RECEIVEREQUESTNAME =:SHIPREQUESTNAME\r\n" + + " GROUP BY m.MATERIALPACKINGNAME)B\r\n" + + " ON A.MATERIALPACKINGNAME=b.MPS"; + + Map hashMap = new HashMap (); + hashMap.put("RECEIVEACTNO", receiveActNo); + hashMap.put("SITENAME", siteName); + hashMap.put("SHIPREQUESTNAME", shipRequestName); + hashMap.put("ERPFACTORY", erpReceiveFactory); + hashMap.put("ERPLOCATION", erpReceiveLocation); + hashMap.put("BOXLIST", boxList); + hashMap.put("EVENTNAME", "StockOut"); + //hashMap.put("WO", wo); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql.toString(), hashMap); + String makeOutMaterialInfoSendJson = MakeOutMaterialInfoSendJson(queryForList,shipRequestName); + System.out.println("JSON=================:"+makeOutMaterialInfoSendJson); + String httpPost = mesHttpUtil.httpPost(baseUrl + "/wms/consumableReceive", makeOutMaterialInfoSendJson); + + org.json.JSONObject jsonObject = new org.json.JSONObject(httpPost); + String code = jsonObject.getString("code"); + + + + boolean success = jsonObject.getBoolean("success"); + + // 写log + ErpMessageLog erplog = new ErpMessageLog(); + erplog.setEventUser(""); + erplog.setServerName("WmsToMES"); + erplog.setEventName("OutMaterialInfoSend"); + erplog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT)); + erplog.setMessageId(UUID.randomUUID().toString()); + erplog.setSendMsg(makeOutMaterialInfoSendJson); + erplog.setReturnMsg2(httpPost.toString()); + erplog.setResultCode(code); + MessageLogUtil.writeMessageLog(erplog); + + if (!success) { + String msg = jsonObject.getString("msg"); + throw new CustomException("发送MES失败!"); + } + + //插入MATERIALPCKINGMDC表 + for(int i=0;i bps = new HashMap (); + bps.put("MATERIALPACKINGNAME", boxid); + bps.put("SHIPREQUESTNAME", shipRequestName); + List> srs=IDMFrameServiceProxy.getSqlTemplate().queryForList(sqls, bps); + + String sql2="SELECT nvl(sum(qty),0)QTY FROM MATERIALPACKINGSUB m \r\n" + + "WHERE m.RECEIVEREQUESTNAME =:SHIPREQUESTNAME\r\n" + + "AND m.MATERIALPACKINGNAME =:MATERIALPACKINGNAME"; + List> sr2=IDMFrameServiceProxy.getSqlTemplate().queryForList(sql2, bps); + String qty=sr2.get(0).get("QTY").toString(); + bps.put("QTY", qty); + if(srs.size()>0) + { +// String sqlu="UPDATE MATERIALPACKINGMDC m SET m.MATERIALQUANTITY =m.MATERIALQUANTITY + :QTY \r\n" + +// " WHERE m.CHARGE =(SELECT m.CHARGE FROM MATERIALPACKING m \r\n" + +// " WHERE m.MATERIALPACKINGNAME =:MATERIALPACKINGNAME)"; + String sqlu="DELETE FROM MATERIALPACKINGMDC m "+ + " WHERE m.CHARGE =(SELECT m.CHARGE FROM MATERIALPACKING m \r\n" + + " WHERE m.MATERIALPACKINGNAME =:MATERIALPACKINGNAME)"; + IDMFrameServiceProxy.getSqlTemplate().update(sqlu, bps); + } + + + String sqli = "INSERT INTO MATERIALPACKINGMDC(MATERIALPACKINGNAME,CHARGE,MATERIALSPECNAME,EXPIRINGDATE,PHASE, \r\n" + + " TRUEGG ,MATERIALQUANTITY ,FQTY ,FUNIT ,LASTEVENTUSER ,REMARK , \r\n" + + " SHIPREQUESTDETAILTYPE ,MATERIALUNIT ,CONVERSIONSCALE, \r\n" + + " DESCRIPTION ,MATERIALTYPE, ERPFACTORY,ERPLOCATION,OUTTIME,EVENTNAME,EVENTTIME,WO,SHIPREQUESTNAME) \r\n" + + " SELECT m.MATERIALPACKINGNAME,m.CHARGE,m.MATERIALSPECNAME,m.EXPIRINGDATE,m.PHASE, \r\n" + + " m.TRUEGG ,:QTY ,m.FQTY ,m.FUNIT ,m.LASTEVENTUSER ,m.REMARK , \r\n" + + " m3.SHIPREQUESTDETAILTYPE ,m2.MATERIALUNIT ,bm.DENOMINATOR/bm.MODULECULE CONVERSIONSCALE, \r\n" + + " m4.DESCRIPTION ,m2.MATERIALTYPE ,:ERPFACTORY,:ERPLOCATION,SYSDATE,:EVENTNAME,SYSDATE ,\r\n" + + " (SELECT RECEIVEPRODUCTIONORDERNUMBER FROM MATERIALSHIPREQUESTDETAIL m5\r\n" + + " WHERE m5.SHIPREQUESTNAME=:SHIPREQUESTNAME AND m5.MATERIALSPECNAME=m.MATERIALSPECNAME \r\n" + + " ORDER BY m5.USEDATE,m5.SHIPREQUESTDETAILNAME FETCH FIRST ROW ONLY)WO,:SHIPREQUESTNAME \r\n" + + " FROM MATERIALPACKING m ,MATERIALSPEC m2 ,MATERIALSHIPREQUEST m3 ,BS_MATERIALDESCRIPTION m4 ,BS_MATERIALUNIT bm \r\n" + + " WHERE m.SITENAME =:SITENAME \r\n" + + " AND m.SHIPREQUESTNAME =:SHIPREQUESTNAME AND m.MATERIALPACKINGNAME =:MATERIALPACKINGNAME\r\n" + + " AND (m.RECEIVEACTNO =:RECEIVEACTNO OR :RECEIVEACTNO IS NULL ) \r\n" + + " AND m.MATERIALSPECNAME =m2.MATERIALSPECNAME \r\n" + + " AND m.SHIPREQUESTNAME =m3.SHIPREQUESTNAME \r\n" + + " AND m.MATERIALSPECNAME =m4.MATERIALSPECNAME \r\n" + + " AND m.MATERIALSPECNAME =bm.MATERIALSPECNAME(+) \r\n" + + " AND m.FUNIT =bm.ADDITIONALUNIT(+) AND m.STOCKSTATE = 'StockPending'"; + + hashMap.put("QTY", qty); + hashMap.put("MATERIALPACKINGNAME", boxid); + + IDMFrameServiceProxy.getSqlTemplate().update(sqli, hashMap); + + } + + return code; + + } } 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 060b7c7..ccd4f38 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 @@ -2073,7 +2073,7 @@ public class ToSAPServiceImpl { } //生产领料-261/311 (单据类型01、02) zd.2024.8.14 - public String ProductionStockOut_NEW(String shipRequestName, String siteName, String user,List boxList) throws Exception { + public String ProductionStockOut_NEW(String shipRequestName, String siteName, String user,List boxList, String payMentDate) throws Exception { String rcode; String undoId = ""; @@ -2175,7 +2175,7 @@ public class ToSAPServiceImpl { body.put("ITEM", itemArray); body.put("ITEMID", uniqueID); //过账日期 - body.put("BUDAT", TimeStampUtil.getCurrentTime("yyyyMMdd")); + body.put("BUDAT", payMentDate); //凭证日期 body.put("BLDAT", TimeStampUtil.getCurrentTime("yyyyMMdd")); //凭证抬头文本 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 c202f82..1f3a7bd 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 @@ -3159,7 +3159,8 @@ public class InvoiceServiceImpl implements InvoiceService { MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpKeyList, makeEventInfo, setEventInfo); */ //抛送MES数据 - untils.sendMaterialInfoToMES_NEW2(shipRequestName, "", materialPackingKeyList); + //untils.sendMaterialInfoToMES_NEW2(shipRequestName, "", materialPackingKeyList); + untils.StockOutSendMaterialInfoToMES(shipRequestName, "", materialPackingKeyList); //更新BOX状态 EventInfo mesEventInfo = eventInfoUtil.makeEventInfo("CompletedShipRequestMES", eventUser, "CompletedShipRequestMES"); SetEventInfo setEventInfo = new SetEventInfo(); 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 29fb21c..6fa795b 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 @@ -169,16 +169,26 @@ public class MESToWMSServiceImpl implements MESToWMSService { List boxIdList = new ArrayList<>(); String shipRequestName = ""; + String payMentDate = ""; for (int i = 0; i < in.size(); i++) { JSONObject jb = in.getJSONObject(i); // String charge = jb.get("charge").toString(); // 批号 - String materialPackingName = jb.get("lotName").toString(); - shipRequestName = jb.get("shipRequestName").toString(); // 领料单号 + String materialPackingName = jb.get("lotName") == null ? "" : jb.get("lotName").toString(); + shipRequestName = jb.get("shipRequestName") == null ? "" : jb.get("shipRequestName").toString(); // 领料单号 + payMentDate = jb.get("payMentDate") == null ? "" : jb.get("payMentDate").toString(); // 过账时间 + //判空 + if (StringUtils.isNotEmpty(payMentDate) || StringUtils.isNotEmpty(shipRequestName) || StringUtils.isNotEmpty(materialPackingName)) { + result = AjaxResult.me().setSuccess(false).setErrorCode(500).setMessage("过账日期、单号、条码不能为空"); + loginfo.setResultCode("1"); + loginfo.setReturnMsg(JSONObject.toJSONString(result)); + // 消息保存日志,erp推送wms的数据写入表BS_ERPMESSAGELOG中 + MessageLogUtil.writeMessageLog(loginfo); + return result; + } boxIdList.add(materialPackingName); - } - String billCode = new ToSAPServiceImpl().ProductionStockOut_NEW(shipRequestName, "SDK", "MES", boxIdList); + String billCode = new ToSAPServiceImpl().ProductionStockOut_NEW(shipRequestName, "SDK", "MES", boxIdList, payMentDate); EventInfo makeEventInfo = new EventInfoUtil().makeEventInfo("CompleteShipRequest", "MES", "CompleteShipRequest:MES Receive"); new CommonUtils().SaveUnDoInfoByStockPending(boxIdList, billCode, makeEventInfo); 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 50ff765..064fd14 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 @@ -810,4 +810,37 @@ public void SaveUnDoInfo_ForSap(List list, String undoid, EventInfo mak } } + + public void StockOutSendMaterialInfoToMES(String invoiceNo,String receiveActNo,List boxList){ + // 定义SQL查询语句,用于获取物料接收位置和接收工厂信息 + String sql="SELECT m.ERPRECEIVELOCATION,m.ERPRECEIVEFACTORY FROM MATERIALSHIPREQUEST a,MATERIALSHIPREQUESTDETAIL m \r\n" + + " WHERE m.SHIPREQUESTNAME =:SHIPREQUESTNAME and m.SHIPREQUESTNAME=a.SHIPREQUESTNAME " + + " AND a.SHIPREQUESTDETAILTYPE in('311','261','201')"; + // 创建参数映射,用于执行SQL查询 + Map bp=new HashMap<>(); + bp.put("SHIPREQUESTNAME", invoiceNo); + try { + // 执行SQL查询,获取查询结果列表 + List> sr=IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bp); + if(sr.size()>0) + { + + // 创建MESServiceImpl实例,用于调用发送物料信息到MES系统的方法 + MESServiceImpl mesService=new MESServiceImpl() ; + // 调用MESServiceImpl的OutMaterialInfoSend_NEW方法,发送物料信息到MES系统 + /* + mesService.OutMaterialInfoSend_NEW2(invoiceNo, "SDK", receiveActNo, "", + sr.get(0).get("ERPRECEIVELOCATION")==null?"":sr.get(0).get("ERPRECEIVELOCATION").toString() + ,sr.get(0).get("ERPRECEIVEFACTORY")==null?"":sr.get(0).get("ERPRECEIVEFACTORY").toString(),boxList ); + */ + + mesService.sendMESAndInsertMaterialPackingMDC(invoiceNo, "SDK", receiveActNo, "", + sr.get(0).get("ERPRECEIVELOCATION")==null?"":sr.get(0).get("ERPRECEIVELOCATION").toString() + ,sr.get(0).get("ERPRECEIVEFACTORY")==null?"":sr.get(0).get("ERPRECEIVEFACTORY").toString(),boxList ); + } + } catch (CustomException e) { + // 异常处理:打印异常堆栈跟踪信息 + e.printStackTrace(); + } + } }