From f6821719de7b181f70bb8ceaf3820308954a4055 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E9=A3=9E?= Date: Thu, 13 Mar 2025 10:38:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E5=87=BA=E5=BA=93?= =?UTF-8?q?=E9=80=80=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cim/idm/service/impl/MESServiceImpl.java | 11 +- .../com/cim/idm/controller/QMSController.java | 1112 +++++++++++++++++ .../idm/service/Impl/InvoiceServiceImpl.java | 479 ++++++- 3 files changed, 1597 insertions(+), 5 deletions(-) create mode 100644 zi-wms-pda/src/main/java/com/cim/idm/controller/QMSController.java 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 7c2e488..8799284 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 @@ -156,9 +156,11 @@ public class MESServiceImpl implements MESService{ // if (!"00000".equals(code)) { // throw new CustomException("ACTSTATEERROR","",""); // } - String msg = jsonObject.getString("msg"); +// String msg = jsonObject.getString("msg"); //JSONObject object = (JSONObject) jsonObject.get("data"); + boolean success = jsonObject.getBoolean("success"); + // 写log ErpMessageLog erplog = new ErpMessageLog(); erplog.setEventUser(""); @@ -169,7 +171,12 @@ public class MESServiceImpl implements MESService{ erplog.setSendMsg(makeOutMaterialInfoSendJson); erplog.setReturnMsg2(httpPost.toString()); erplog.setResultCode(code); - MessageLogUtil.writeMessageLog(erplog); + MessageLogUtil.writeMessageLog(erplog); + + if (!success) { + String msg = jsonObject.getString("msg"); + throw new CustomException("发送MES失败!"); + } //插入MATERIALPCKINGMDC表 for(int i=0;i bindMap = new HashMap(); + if("1".equals(iqcResult)) + { + iqcResult="OK"; + bindMap.put("oqaResultState", GenericServiceProxy.getConstantMap().OQA_State_End); + } else if ("0".equals(iqcResult)) { + iqcResult = ""; + bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_Pre); + } else if ("2".equals(iqcResult)) { + iqcResult = "NG"; + bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_End); + } else if ("3".equals(iqcResult)) { + iqcResult = ""; + bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_Pre); + } + bindMap.put("oqaResult",iqcResult); + bindMap.put("packingGrade", iqcResult); + setEventInfo.setUserColumns(bindMap); + eventInfo.setEventTime(Timestamp.valueOf(iqcResultDate)); + 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); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + if (queryForList == null || queryForList.size() < 1) { + result = AjaxResult.me().setSuccess(false).setMessage("未找到" + deliveryNumber + "的待检信息"); + return result; + } + for (int i = 0; i < queryForList.size(); i++) { + MaterialPackingKey materialPackingKey = new MaterialPackingKey(queryForList.get(i).get("SITENAME").toString(), + queryForList.get(i).get("MATERIALPACKINGNAME").toString()); + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, eventInfo, setEventInfo); + } + + + result = AjaxResult.me().setSuccess(true).setMessage("执行成功"); + loginfo.setResultCode("success"); + loginfo.setReturnMsg(JSONObject.toJSONString(result)); + // 消息保存日志,erp推送wms的数据写入表BS_ERPMESSAGELOG中 + saveMessageLog(loginfo); + return result; + } + + + + @RequestMapping(value = "/pqcSyncdata", method = RequestMethod.POST) + public AjaxResult pqcSyncdata(@RequestBody JSONArray in) { + + log.debug("***********************************"); + log.debug("***********************************"); + log.debug(in.toString()); + log.debug("***********************************"); + log.debug("***********************************"); + AjaxResult result = new AjaxResult(); + ErpMessageLog loginfo = new ErpMessageLog(); + loginfo.setServerName("QMSToWms"); + loginfo.setMessageId(""); + + loginfo.setEventUser("IQC"); + loginfo.setId(UUID.randomUUID().toString()); + loginfo.setInterfaceTime(ConvertUtil.getCurrTime("yyyy-MM-dd HH:mm:ss")); + loginfo.setSendMsg(in.toJSONString()); + loginfo.setEventName("pqcSyncdata"); + + + SetEventInfo setEventInfo = new SetEventInfo(); + EventInfo eventInfo = new EventInfo(); + eventInfo.setEventName("iqcSyncdata"); + eventInfo.setEventUser("pQC"); + //获取到货单和物料编码 + // { + // "deliveryNumber": "SDK20240511003", + // "materialCode": "2F08S4J4", + // "iqcResult": "0", // 0 : 不合格 ; 1:合格 ; 2:待检 + // "iqcResultDate": "2024-1-1 12:2:2" // YYYY-MM-DD HH24:MI:SS + // } + + // { + // "deliveryNumber": "SDK20240511003", + // "materialCode": "2F08S4J4", + // "iqcResult": "0", // 0 : 不合格 ; 1:合格 ; 2:待检 + // "iqcResultDate": "2024-1-1 12:2:2" // YYYY-MM-DD HH24:MI:SS + // } + if (1 == 1) { + result = AjaxResult.me().setSuccess(true).setMessage("执行成功"); + loginfo.setResultCode("success"); + loginfo.setReturnMsg(JSONObject.toJSONString(result)); + // 消息保存日志,erp推送wms的数据写入表BS_ERPMESSAGELOG中 + saveMessageLog(loginfo); + return result; + } + Map bindMap = new HashMap(); + List mpList = new ArrayList<> (); + int success = 0; + String errorCode = ""; + for (int i = 0; i < in.size(); i++) { + + JSONObject jb = in.getJSONObject(i); + String batchCode = jb.get("batchCode").toString(); + String materialCode = jb.get("materialCode").toString(); + String pqcResult = jb.get("pqcResult").toString(); + String pqcResultDate = jb.get("pqcResultDate").toString(); + String user = jb.get("user").toString(); + //0待检验、1合格、2不合格、3检验中 + if("1".equals(pqcResult)) + { + pqcResult="OK"; + bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_End); + } else if ("0".equals(pqcResult)) { + pqcResult = ""; + bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_Pre); + } else if ("2".equals(pqcResult)) { + pqcResult = "NG"; + bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_End); + } else if ("3".equals(pqcResult)) { + pqcResult = ""; + bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_Pre); + } + bindMap.put("oqaResult",pqcResult); + bindMap.put("packingGrade", pqcResult); + setEventInfo.setUserColumns(bindMap); + eventInfo.setEventTime(Timestamp.valueOf(pqcResultDate)); + eventInfo.setEventUser(user); + String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME FROM MATERIALPACKING M " + + "WHERE M.CHARGE = :BATCH AND M.MATERIALSPECNAME = :MATERIALSPECNAME"; + Map hashMap = new HashMap (); + hashMap.put("BATCH", batchCode); + hashMap.put("MATERIALSPECNAME", materialCode); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + if (queryForList == null || queryForList.size() < 1) { +// result = AjaxResult.me().setResultObj(batchCode + "," + materialCode).setSuccess(false).setCode(500).setMessage("未找到待检信息"); +// return result; + errorCode += batchCode + "," + materialCode + ";"; + + } else { + mpList.add(new MaterialPackingKey(queryForList.get(i).get("SITENAME").toString(), + queryForList.get(i).get("MATERIALPACKINGNAME").toString())); + success ++; + } + } + for (MaterialPackingKey mp :mpList) { + MaterialPackingKey materialPackingKey = mp; + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, eventInfo, setEventInfo); + } + if (success < in.size()) { + int error = in.size() - success; + result = AjaxResult.me().setResultObj(errorCode).setSuccess(false).setMessage("未找到待检信息" + error + "条"); + return result; + } + result = AjaxResult.me().setSuccess(true).setMessage("执行成功"); + loginfo.setResultCode("success"); + loginfo.setReturnMsg(JSONObject.toJSONString(result)); + // 消息保存日志,erp推送wms的数据写入表BS_ERPMESSAGELOG中 + saveMessageLog(loginfo); + return result; + } + + + + @Transactional + @RequestMapping(value = "/pqcSyncdata2", method = RequestMethod.POST) + public AjaxResult pqcSyncdata2(@RequestBody JSONArray in) throws CustomException { + + AjaxResult result = new AjaxResult(); + ErpMessageLog loginfo = new ErpMessageLog(); + loginfo.setServerName("QMSToWms"); + loginfo.setMessageId(""); + + loginfo.setEventUser("IQC"); + loginfo.setId(UUID.randomUUID().toString()); + loginfo.setInterfaceTime(ConvertUtil.getCurrTime("yyyy-MM-dd HH:mm:ss")); + loginfo.setSendMsg(in.toJSONString()); + loginfo.setEventName("pqcSyncdata2"); + + + SetEventInfo setEventInfo = new SetEventInfo(); + EventInfo makeEventInfo = new EventInfoUtil().makeEventInfo("iqcSyncdata", "", "iqcSyncdata"); + EventInfo eventInfo = new EventInfo(); + eventInfo.setEventName("iqcSyncdata"); + eventInfo.setEventUser("pQC"); + //获取到货单和物料编码 +// { +// "commonNumber": "123456", +// "materialCode": null, +// "judgementResult": "1", +// "resultTime": "2024-06-11 11:24:41", +// "inspector": "管理员", +// "exceptionHandling": null, +// "specialState": null, +// "transferStatus": null, +// "tpType": "0" +// } + Map bindMap = new HashMap(); + List mpList = new ArrayList<> (); + int success = 0; + String errorCode = ""; + boolean ngFlag=false; + for (int i = 0; i < in.size(); i++) { + + JSONObject jb = in.getJSONObject(i); +// String commonNumber = jb.get("commonNumber").toString();//通用单号 + String commonNumber = jb.get("commonNumber")== null ? "" : jb.get("commonNumber").toString();//通用单号 + String materialCode = jb.get("materialCode")== null ? "" : jb.get("materialCode").toString();//料号 + String pqcResult = jb.get("judgementResult").toString();//检验结果 + String pqcResultDate = jb.get("resultTime").toString();//检验时间 + String user = jb.get("inspector").toString();//检验员 + makeEventInfo = new EventInfoUtil().makeEventInfo("iqcSyncdata", user, "iqcSyncdata"); + String exceptionHandling = jb.get("exceptionHandling") == null ? "" : jb.get("exceptionHandling").toString();//异常处理 (0复卷,1降级,2报废) + String specialState = jb.get("specialState") == null ? "" : jb.get("specialState").toString();//特殊状态 (0特采、1紧急放行、2退供应商) + String transferStatus = jb.get("transferStatus") == null ? "" : jb.get("transferStatus").toString();//异常处理 +// 0:来料 +// 1:5,7,9,10#涂布成品 +// 2: 3,4#涂布成品 +// 3: 销售退货 +// 4:品质放行/特采 +// 5:过期检验 +// 6:胶水出货" + +// 到货单 +// 批次号+料号 +// 批次号+料号 +// 批次号+料号 +// 批次号+料号 +// 投放计划单 + + String tpType = jb.get("tpType").toString();//检验类型 + //0不合格、1合格 + if("1".equals(pqcResult)) + { + pqcResult="OK"; + bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_End); + }else if ("0".equals(pqcResult)) { + pqcResult = "NG"; + bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_End); + ngFlag=true; + } + bindMap.put("oqaResult",pqcResult); + bindMap.put("packingGrade", pqcResult); + bindMap.put("packingState", "Released"); + bindMap.put("exceptionHandling",exceptionHandling); + bindMap.put("specialState", specialState); + setEventInfo.setUserColumns(bindMap); + //eventInfo.setEventTime(Timestamp.valueOf(pqcResultDate)); + eventInfo.setEventUser(user); + if ("0".equals(tpType)) {//到货单 + + // 获取JSON数组 + JSONArray jsonArray = jb.getJSONArray("lotList"); // arrayName为JSON数组的键名 + if (!java.util.Objects.isNull(jsonArray)) { + for (int j = 0; j < jsonArray.size(); j++) { + String charge = jsonArray.getString(j); + String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME FROM MATERIALPACKING M " + + "WHERE M.CHARGE = :CHARGE AND M.MATERIALSPECNAME =:MATERIALSPECNAME AND M.STOCKSTATE = 'Stocked'"; + Map hashMap = new HashMap (); + hashMap.put("CHARGE", charge); + hashMap.put("MATERIALSPECNAME", materialCode); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + if (queryForList == null || queryForList.size() < 1) { + errorCode += charge + "," + materialCode + ";"; + } else { + mpList.add(new MaterialPackingKey(queryForList.get(0).get("SITENAME").toString(), + queryForList.get(0).get("MATERIALPACKINGNAME").toString())); + success ++; + } + } + + } else if (!StringUtils.isEmpty(commonNumber)) { + String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME FROM MATERIALPACKING M " + + "WHERE M.MESSAGEID = :RECEIVEREQUESTNAME"; + Map hashMap = new HashMap (); + hashMap.put("RECEIVEREQUESTNAME", commonNumber); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + if (queryForList == null || queryForList.size() < 1) { + errorCode += commonNumber + "," + materialCode +";"; + } else { + for (int j = 0; j < queryForList.size(); j++) { + mpList.add(new MaterialPackingKey(queryForList.get(j).get("SITENAME").toString(), + queryForList.get(j).get("MATERIALPACKINGNAME").toString())); + success ++; + } + } + } else { + throw new CustomException("Common","无单据信息和批次信息"); + } + } + + else if ("6".equals(tpType)) {//投放计划单 + String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME FROM MATERIALPACKING M " + + "WHERE M.MESSAGEID = :RECEIVEREQUESTNAME"; + Map hashMap = new HashMap (); + hashMap.put("RECEIVEREQUESTNAME", commonNumber); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + if (queryForList == null || queryForList.size() < 1) { + //查询中间表是否有数据 + String sqlmes = "SELECT bms.LOTNAME FROM BS_MES_SHIPPED bms WHERE bms.REQUESTNAME = :RECEIVEREQUESTNAME"; + List> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlmes, hashMap); + if (queryForList2 == null || queryForList2.size() < 1) { + errorCode += commonNumber + ";"; + } else { + for (int j = 0; j < queryForList2.size(); j++) { + String lotName = queryForList2.get(j).get("LOTNAME").toString(); + String update = "UPDATE BS_MES_SHIPPED SET PACKINGGRADE = :PACKINGGRADE,IQCFLAG = 'Y' WHERE LOTNAME = :LOTNAME"; + hashMap.put("PACKINGGRADE", pqcResult); + hashMap.put("LOTNAME", lotName); + IDMFrameServiceProxy.getSqlTemplate().update(update, hashMap); + success ++; + } + } + + + } else { + for (int j = 0; j < queryForList.size(); j++) { + mpList.add(new MaterialPackingKey(queryForList.get(j).get("SITENAME").toString(), + queryForList.get(j).get("MATERIALPACKINGNAME").toString())); + success ++; + } + + //查询中间表是否有数据 + String sqlmes = "SELECT bms.LOTNAME FROM BS_MES_SHIPPED bms WHERE bms.REQUESTNAME = :RECEIVEREQUESTNAME"; + List> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlmes, hashMap); + if (queryForList2 == null || queryForList2.size() < 1) { + errorCode += commonNumber + ";"; + } else { + for (int j = 0; j < queryForList2.size(); j++) { + String lotName = queryForList2.get(j).get("LOTNAME").toString(); + String update = "UPDATE BS_MES_SHIPPED SET PACKINGGRADE = :PACKINGGRADE,IQCFLAG = 'Y' WHERE LOTNAME = :LOTNAME"; + hashMap.put("PACKINGGRADE", pqcResult); + hashMap.put("LOTNAME", lotName); + IDMFrameServiceProxy.getSqlTemplate().update(update, hashMap); + success ++; + } + } + } + } else if ("1".equals(tpType) || "2".equals(tpType) || "3".equals(tpType) || "4".equals(tpType) || "5".equals(tpType)) {//料号+批次 + String kcsql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME FROM MATERIALPACKING M " + + "WHERE M.CHARGE = :BATCH AND M.MATERIALSPECNAME = :MATERIALSPECNAME"; + Map hashMap = new HashMap (); + hashMap.put("BATCH", commonNumber); + hashMap.put("MATERIALSPECNAME", materialCode); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(kcsql, hashMap); + + + String drkSql = "SELECT * FROM BS_MES_SHIPPED BMS WHERE BMS.CHARGE = :BATCH AND BMS.PRODCUTSPECNAME = :MATERIALSPECNAME"; + + List> drkSqlList = IDMFrameServiceProxy.getSqlTemplate().queryForList(drkSql, hashMap); + + if (queryForList != null && queryForList.size() > 0) { + for (int j = 0; j < queryForList.size(); j++) { + mpList.add(new MaterialPackingKey(queryForList.get(j).get("SITENAME").toString(), + queryForList.get(j).get("MATERIALPACKINGNAME").toString())); + success ++; + } + } else if (drkSqlList != null && drkSqlList.size() > 0) { + String update = "UPDATE BS_MES_SHIPPED SET PACKINGGRADE = :PACKINGGRADE,IQCFLAG = 'Y' WHERE CHARGE = :BATCH AND PRODCUTSPECNAME = :MATERIALSPECNAME"; + hashMap.put("PACKINGGRADE", pqcResult); + IDMFrameServiceProxy.getSqlTemplate().update(update, hashMap); + success ++; + } else { + errorCode += commonNumber + "," + materialCode + ";"; + } + } else { + result = AjaxResult.me().setResultObj(errorCode).setSuccess(false).setMessage("检验类型不存在" + tpType); + loginfo.setResultCode("E"); + loginfo.setReturnMsg(JSONObject.toJSONString(result)); + // 消息保存日志,erp推送wms的数据写入表BS_ERPMESSAGELOG中 + saveMessageLog(loginfo); + return result; + } + } + //获取转库对应关系 + Map hashMap = new HashMap (); + String chargeString=""; + for (MaterialPackingKey mp :mpList) { + MaterialPackingKey materialPackingKey = mp; + chargeString+=(mp.getMaterialPackingName()+","); + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo); + } + if(ngFlag) + { + //QMS判NG消息推送钉钉 + String message = "【通知预警】 "+"批次:"+chargeString+"在QMS已判NG,请确认" ; + String webhookUrl="https://oapi.dingtalk.com/robot/send?access_token=5bb36ab9bec4a92ba4e4ab11a21918346b65c7368ee7777e4dd407d4b169a2c2"; + try + { +// DingTalkWebhookNotifier.sendTextMessage(webhookUrl, message); + } + catch (Exception e) { + e.printStackTrace(); + } + } + if (success < in.size()) { + int error = in.size() - success; + result = AjaxResult.me().setResultObj(errorCode).setSuccess(false).setMessage("未找到待检信息" + error + "条"); + loginfo.setResultCode("E"); + loginfo.setReturnMsg(JSONObject.toJSONString(result)); + // 消息保存日志,erp推送wms的数据写入表BS_ERPMESSAGELOG中 + saveMessageLog(loginfo); + return result; + } + result = AjaxResult.me().setSuccess(true).setMessage("执行成功"); + loginfo.setResultCode("success"); + loginfo.setReturnMsg(JSONObject.toJSONString(result)); + // 消息保存日志,erp推送wms的数据写入表BS_ERPMESSAGELOG中 + saveMessageLog(loginfo); + + //根据品质状态自动转库 + try { + autoChangeERPlocation(in, makeEventInfo,mpList); + } catch (Exception e) { + e.printStackTrace(); + throw new CustomException(e.toString()); + } + return result; + } + + @RequestMapping(value = "/QMSSyncData", method = RequestMethod.POST) + public AjaxResult QMSSyncData(@RequestBody JSONArray in) throws CustomException { + //重写QMS回传通用处理方法。zd.2024.9.9 + AjaxResult result = new AjaxResult(); + ErpMessageLog loginfo = new ErpMessageLog(); + loginfo.setServerName("QMSToWms"); + loginfo.setMessageId(""); + + loginfo.setEventUser("QMS"); + loginfo.setId(TimeStampUtil.getCurrentEventTimeKey()); + loginfo.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT)); + loginfo.setSendMsg(in.toJSONString()); + loginfo.setEventName("QMSSyncData"); + //String siteName = System.getProperty("company","SDK"); + String siteName = "SDK"; + saveMessageLog(loginfo); + + SetEventInfo setEventInfo = new SetEventInfo(); + EventInfo makeEventInfo = EventInfoUtil.makeEventInfo("QMSSyncData", "", "QMSSyncData"); + EventInfo eventInfo = new EventInfo(); + eventInfo.setEventName("QMSSyncData"); + //eventInfo.setEventUser("pQC"); + //QMS回传json +// [{ +// "materialName": "品名", +// "materialCode": "123", +// "judgementResult": "1", +// "resultTime": "2024-06-11 11:24:41", +// "inspector": "管理员", +// "specialTreatment": "0", +// "lot": "lot1,lot2,lot3", +// "inspectionScenario": "0" +// }, +// { +// "materialName": "品名", +// "materialCode": "123", +// "judgementResult": "1", +// "resultTime": "2024-06-11 11:24:41", +// "inspector": "管理员", +// "specialTreatment": "0", +// "lot": "lot1,lot2,lot3", +// "inspectionScenario": "0" +// }] + Map bindMap = new HashMap(); + List mpList = new ArrayList<> (); + int success = 0; + String errorCode = ""; + List boxList=new ArrayList<>(); + List expBoxList=new ArrayList<>(); // 如果存在延期时处理 + try { + IDMFrameServiceProxy.getTransactionManager().beginTransaction(); + String inspectionScenario=""; + String user = ""; + String expiringDateType=""; + for (int i = 0; i < in.size(); i++) { + + JSONObject jb = in.getJSONObject(i); + //String commonNumber = jb.get("commonNumber").toString();//通用单号 + inspectionScenario=jb.get("inspectionScenario").toString();//0:原材 1:产成品 2:PET成品以及分切 3:销售退货检结果 4:过期复判检验结果 5. 胶水出库检结果 + + String materialCode = jb.get("materialCode")== null ? "" : jb.get("materialCode").toString();//料号 + String pqcResult = jb.get("judgementResult")==null?"":jb.get("judgementResult").toString();//检验结果。0不合格 1合格 + if(StringUtils.equals("0", pqcResult)) + { + pqcResult="NG"; + } + else if(StringUtils.equals("1", pqcResult)) + { + pqcResult="OK"; + } + String pqcResultDate = jb.get("resultTime").toString();//检验时间 + user = jb.get("inspector").toString();//检验员 + String[] lots=jb.get("lot").toString().split(",");//批号List + String expiringDate = jb.get("delayTo") == null ? "" : jb.get("delayTo").toString();//延期时间 + // 如果存在延期时间 +// if(!expiringDate.isEmpty()) { +// expiringDateType = "exp"; +// } + makeEventInfo = EventInfoUtil.makeEventInfo("QMSSyncData", user, "QMSSyncData:"+inspectionScenario); + String specialTreatment = jb.get("specialTreatment") == null ? "" : jb.get("specialTreatment").toString();//异常处理 (0复卷、1降级、2报废、3特采、4紧急放行、5退货) + for(int j=0;j mpkList=updateOqaResult(boxList,siteName,inspectionScenario,expiringDateType, expBoxList); + //记录履历 + if(mpkList.size()>0) + { + setEventOqaResult(mpkList,"",siteName,makeEventInfo); + } + //删除临时表数据 + deleteQMSTemp(boxList); + + IDMFrameServiceProxy.getTransactionManager().commitTransaction(); + result = AjaxResult.me().setSuccess(true).setMessage("执行成功"); + } + catch(Exception e) + { + e.printStackTrace(); + IDMFrameServiceProxy.getTransactionManager().rollbackTransaction(); + result = AjaxResult.me().setSuccess(false).setMessage("处理异常:" + e.getMessage()); + return result; + } + + + return result; + } + + //插入temp表 + public static void insertQMSTemp(String materialPackingName,String packingGrade,String specialState,String materialSpecName,String qmsType,String resultDate, String expiringDate) + { + log.info("======insert MATERIALPACKINGQMSTEMP"); + String sql="INSERT INTO MATERIALPACKINGQMSTEMP(MATERIALPACKINGNAME, PACKINGGRADE, SPECIALSTATE, MATERIALSPECNAME,QMSTYPE,RESULTDATE,EXPIRINGDATE)\r\n" + + " VALUES (:MATERIALPACKINGNAME, :PACKINGGRADE, :SPECIALSTATE, :MATERIALSPECNAME,:QMSTYPE,:RESULTDATE,:EXPIRINGDATE)"; + Map bp=new HashMap<>(); + bp.put("MATERIALPACKINGNAME", materialPackingName); + bp.put("PACKINGGRADE", packingGrade); + bp.put("SPECIALSTATE", specialState); + bp.put("MATERIALSPECNAME", materialSpecName); + bp.put("QMSTYPE", qmsType); + bp.put("RESULTDATE", resultDate); + bp.put("EXPIRINGDATE", expiringDate); + IDMFrameServiceProxy.getSqlTemplate().update(sql, bp); + } + //删除Temp表 + public static void deleteQMSTemp(List mpList) + { + log.info("======delete MATERIALPACKINGQMSTEMP"); + String sql="DELETE FROM MATERIALPACKINGQMSTEMP WHERE MATERIALPACKINGNAME in (:MPLIST)" ; + Map bp=new HashMap<>(); + bp.put("MPLIST", mpList); + IDMFrameServiceProxy.getSqlTemplate().update(sql, bp); + } + + //更新Box结果 + public static List updateOqaResult(List mpList,String siteName,String qmsType, String expiringDateType,List expBoxList) + { + List mpkList=new ArrayList<>(); + + String sqls=" SELECT m.MATERIALPACKINGNAME,m.CHARGE FROM MATERIALPACKING m,MATERIALPACKINGQMSTEMP t\r\n" + + " WHERE m.CHARGE in(:BOXLIST) AND m.STOCKSTATE ='Stocked'\r\n" + + " AND m.CHARGE =t.MATERIALPACKINGNAME AND m.MATERIALSPECNAME = t.MATERIALSPECNAME AND m.MATERIALQUANTITY <> 0 \r\n" ; + //" AND NVL(m.PACKINGGRADE,'N') <>nvl(t.PACKINGGRADE,'N') "; + Map bps=new HashMap<>(); + bps.put("BOXLIST", mpList); + List> sr=IDMFrameServiceProxy.getSqlTemplate().queryForList(sqls, bps); + mpList = new ArrayList (); + mpList.add("empty"); + + List expDateBoxList = new ArrayList (); + expDateBoxList.add("empty"); + + if(sr.size()>0) + { + for(int i=0;i exhp=new HashMap<>(); +// exhp.put("BOXLIST", mpList); +// int exUpdate = IDMFrameServiceProxy.getSqlTemplate().update(sqlEp, exhp); +// } + if(!StringUtils.equals("4", qmsType)) { + String sqlEp=" UPDATE MATERIALPACKING m SET m.EXPIRINGDATE =(SELECT TO_DATE(t.EXPIRINGDATE,'YYYY-MM-DD HH24:MI:SS') EXPIRINGDATE from MATERIALPACKINGQMSTEMP t WHERE t.materialpackingname=m.CHARGE AND m.MATERIALSPECNAME = t.MATERIALSPECNAME AND t.EXPIRINGDATE IS NOT NULL) \r\n" + + " WHERE m.materialpackingname in(:BOXLIST)\r\n" + + " AND m.STOCKSTATE ='Stocked' "; + + Map exhp=new HashMap<>(); + exhp.put("BOXLIST", expDateBoxList); + int exUpdate = IDMFrameServiceProxy.getSqlTemplate().update(sqlEp, exhp); + } + + //临期复检需更新到期日 + if(StringUtils.equals("4", qmsType)) + { + sql=" UPDATE MATERIALPACKING m SET m.PACKINGGRADE =(SELECT t.PACKINGGRADE from MATERIALPACKINGQMSTEMP t WHERE t.materialpackingname=m.CHARGE AND m.MATERIALSPECNAME = t.MATERIALSPECNAME), \r\n" + + " m.SPECIALSTATE =(SELECT t.SPECIALSTATE from MATERIALPACKINGQMSTEMP t WHERE t.materialpackingname=m.CHARGE AND m.MATERIALSPECNAME = t.MATERIALSPECNAME), \r\n" + + " m.OQARESULT =(SELECT t.PACKINGGRADE from MATERIALPACKINGQMSTEMP t WHERE t.materialpackingname=m.CHARGE AND m.MATERIALSPECNAME = t.MATERIALSPECNAME), \r\n" + + " m.OQARESULTSTATE =(SELECT CASE WHEN t.PACKINGGRADE IS NULL THEN 'PREOQA' ELSE 'END' end \r\n" + + " from MATERIALPACKINGQMSTEMP t WHERE t.materialpackingname=m.CHARGE AND m.MATERIALSPECNAME = t.MATERIALSPECNAME), \r\n" + + " m.EXPIRINGDATE = (SELECT CASE WHEN t.PACKINGGRADE='OK' THEN SYSDATE + (SELECT m2.EXPIRATIONDAY/2 FROM MATERIALSPEC m2 \r\n" + + " WHERE m2.MATERIALSPECNAME=t.MATERIALSPECNAME) ELSE m.EXPIRINGDATE end \r\n" + + " from MATERIALPACKINGQMSTEMP t WHERE t.materialpackingname=m.CHARGE AND m.MATERIALSPECNAME = t.MATERIALSPECNAME) ,\r\n" + + " m.REINSPEFLAG = (SELECT CASE WHEN t.PACKINGGRADE='OK' THEN to_number(nvl(m.REINSPEFLAG,'0'))+1 ELSE to_number(nvl(m.REINSPEFLAG,'0')) end \r\n" + + " from MATERIALPACKINGQMSTEMP t WHERE t.materialpackingname=m.CHARGE AND m.MATERIALSPECNAME = t.MATERIALSPECNAME)\r\n" + + " WHERE m.materialpackingname in(:BOXLIST) \r\n" + + " AND m.STOCKSTATE ='Stocked' "; + } + Map bp=new HashMap<>(); + bp.put("BOXLIST", mpList); + int update = IDMFrameServiceProxy.getSqlTemplate().update(sql, bp); + + log.info("======UPDATE BS_MES_SHIPPED OQAResult"); + String sql2="UPDATE BS_MES_SHIPPED m SET m.PACKINGGRADE =(SELECT t.PACKINGGRADE from MATERIALPACKINGQMSTEMP t WHERE t.materialpackingname=m.CHARGE),\r\n" + + "m.PACKINGGRADEDETAIL =(SELECT t.SPECIALSTATE from MATERIALPACKINGQMSTEMP t WHERE t.materialpackingname=m.CHARGE)\r\n" + + "WHERE m.LOTNAME in(:BOXLIST)"; + IDMFrameServiceProxy.getSqlTemplate().update(sql2, bp); + + return mpkList; + } + //更新履历 + public static void setEventOqaResult(List mpList,String undoId,String siteName,EventInfo eventInfo) + { + + if(mpList.size()>0) + { + + + SetEventInfo setEventInfo=new SetEventInfo(); + Map userc=new HashMap<>(); + //userc.put("unDoID", undoId); + setEventInfo.setUserColumns(userc); + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpList, eventInfo, setEventInfo); + //存储物料凭证 + //SDKMaterialPackingServiceImpl.SaveUnDoInfo( undoId); + } + + } + + @Transactional + public void autoChangeERPlocation (JSONArray in,EventInfo eventInfo,List mpkList) throws Exception { + String sqlDic = "SELECT s.OKERPLOCATION,s.BEPENDINGERPLOCATION,\r\n" + + " s2.STORAGENAME OKLOCATION,s3.STORAGENAME BEPENDINGLOCATION\r\n" + + " FROM BS_ERPLOCATIONSHIP S \r\n" + + " LEFT JOIN STORAGESPEC s2 \r\n" + + " ON s.OKERPLOCATION =s2.ERPLOCATION \r\n" + + " AND s2.STORAGEUSETYPE='virtual'\r\n" + + " LEFT JOIN STORAGESPEC s3 \r\n" + + " ON s.BEPENDINGERPLOCATION =s3.ERPLOCATION \r\n" + + " AND s3.STORAGEUSETYPE='virtual'\r\n" + + " WHERE S.DJERPLOCATION = :ERPLOCATION "; + Map hashMap2 = new HashMap (); + for (int i = 0; i < in.size(); i++) { + JSONObject jb = in.getJSONObject(i); + String commonNumber = jb.get("commonNumber").toString();//通用单号 + String materialCode = jb.get("materialCode")== null ? "" : jb.get("materialCode").toString();//料号 + String pqcResult = jb.get("judgementResult").toString();//检验结果 + String pqcResultDate = jb.get("resultTime").toString();//检验时间 + String user = jb.get("inspector").toString();//检验员 + String exceptionHandling = jb.get("exceptionHandling") == null ? "" : jb.get("exceptionHandling").toString();//异常处理 (0复卷,1降级,2报废) + String specialState = jb.get("specialState") == null ? "" : jb.get("specialState").toString();//特殊状态 (0特采、1紧急放行) + String transferStatus = jb.get("transferStatus") == null ? "" : jb.get("transferStatus").toString();//异常处理 + + String tpType = jb.get("tpType").toString();//检验类型 + //0不合格、1合格 + if("1".equals(pqcResult)) + { + pqcResult="OK"; + }else if ("0".equals(pqcResult)) { + pqcResult = "NG"; + continue;//NG直接跳过 + } + List mpList = new ArrayList<> (); + List boxList = new ArrayList<> (); + if ("0".equals(tpType)) {//到货单 + String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME,M.ERPLOCATION,M.LOCATIONNAME FROM MATERIALPACKING M " + + "WHERE M.MESSAGEID = :RECEIVEREQUESTNAME "; + Map hashMap = new HashMap (); + hashMap.put("RECEIVEREQUESTNAME", commonNumber); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + SetEventInfo setEventInfo = new SetEventInfo(); + if (queryForList == null || queryForList.size() < 1) { + } else { + for (Map map : queryForList) { + hashMap2.put("ERPLOCATION", map.get("ERPLOCATION")); + Map hashMap3 = new HashMap (); + hashMap3.put("preErpLocation", map.get("ERPLOCATION")); + hashMap3.put("PRELOCATIONNAME", map.get("LOCATIONNAME")); + List> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlDic, hashMap2); + if (queryForList2 == null || queryForList2.size() < 1) { + log.info("未找到待检仓"); + continue; + } + String OKERPLOCATION=queryForList2.get(0).get("OKERPLOCATION")==null?"":queryForList2.get(0).get("OKERPLOCATION").toString(); + String OKLOCATION=queryForList2.get(0).get("OKLOCATION")==null?"":queryForList2.get(0).get("OKLOCATION").toString(); + String BEPENDINGERPLOCATION=queryForList2.get(0).get("BEPENDINGERPLOCATION")==null?"":queryForList2.get(0).get("BEPENDINGERPLOCATION").toString(); + String BEPENDINGLOCATION=queryForList2.get(0).get("BEPENDINGLOCATION")==null?"":queryForList2.get(0).get("BEPENDINGLOCATION").toString(); + + if ("OK".equals(pqcResult)) { + if(OKERPLOCATION.length()==0 || OKLOCATION.length()==0) + { + log.info("未维护转库对应关系"); + continue; + //throw new CustomException("未维护转库对应关系"); + } + hashMap3.put("erpLocation", queryForList2.get(0).get("OKERPLOCATION")); + hashMap3.put("locationName", queryForList2.get(0).get("OKLOCATION")); + + } else if ("NG".equals(pqcResult)) { + if(BEPENDINGERPLOCATION.length()==0 || BEPENDINGLOCATION.length()==0) + { + log.info("未维护转库对应关系"); + continue; + //throw new CustomException("未维护转库对应关系"); + } + hashMap3.put("erpLocation", queryForList2.get(0).get("BEPENDINGERPLOCATION")); + hashMap3.put("locationName", queryForList2.get(0).get("BEPENDINGLOCATION")); + } + setEventInfo.setUserColumns(hashMap3); + mpList.add(new MaterialPackingKey(map.get("SITENAME").toString(), + map.get("MATERIALPACKINGNAME").toString())); + boxList.add(map.get("MATERIALPACKINGNAME").toString()); + } + if(mpList.size()>0) + { + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpList, eventInfo, setEventInfo); + } + } + if(boxList.size()>0) + { + String sendUser="101867"; +// NCWServiceImpl.OQZkNoInvoice(boxList, sendUser); + } + } + else + { + //非到货单 +// String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME,M.ERPLOCATION,M.LOCATIONNAME FROM MATERIALPACKING M " +// + "WHERE M.MESSAGEID = :RECEIVEREQUESTNAME "; +// Map hashMap = new HashMap (); +// hashMap.put("RECEIVEREQUESTNAME", commonNumber); +// List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + SetEventInfo setEventInfo = new SetEventInfo(); + if (mpkList == null || mpkList.size() < 1) { + } else { + for (int j=0;j hashMap = new HashMap (); + hashMap.put("MATERIALPACKINGNAME", mpkList.get(j).getMaterialPackingName()); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + hashMap2.put("ERPLOCATION", queryForList.get(0).get("ERPLOCATION")); + Map hashMap3 = new HashMap (); + hashMap3.put("preErpLocation", queryForList.get(0).get("ERPLOCATION")); + hashMap3.put("PRELOCATIONNAME", queryForList.get(0).get("LOCATIONNAME")); + List> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlDic, hashMap2); + if (queryForList2 == null || queryForList2.size() < 1) { + log.info("未找到待检仓"); + continue; + } + String OKERPLOCATION=queryForList2.get(0).get("OKERPLOCATION")==null?"":queryForList2.get(0).get("OKERPLOCATION").toString(); + String OKLOCATION=queryForList2.get(0).get("OKLOCATION")==null?"":queryForList2.get(0).get("OKLOCATION").toString(); + String BEPENDINGERPLOCATION=queryForList2.get(0).get("BEPENDINGERPLOCATION")==null?"":queryForList2.get(0).get("BEPENDINGERPLOCATION").toString(); + String BEPENDINGLOCATION=queryForList2.get(0).get("BEPENDINGLOCATION")==null?"":queryForList2.get(0).get("BEPENDINGLOCATION").toString(); + + if ("OK".equals(pqcResult)) { + if(OKERPLOCATION.length()==0 || OKLOCATION.length()==0) + { + log.info("未维护转库对应关系"); + continue; + //throw new CustomException("未维护转库对应关系"); + } + hashMap3.put("erpLocation", queryForList2.get(0).get("OKERPLOCATION")); + hashMap3.put("locationName", queryForList2.get(0).get("OKLOCATION")); + + } else if ("NG".equals(pqcResult)) { + if(BEPENDINGERPLOCATION.length()==0 || BEPENDINGLOCATION.length()==0) + { + log.info("未维护转库对应关系"); + continue; + //throw new CustomException("未维护转库对应关系"); + } + hashMap3.put("erpLocation", queryForList2.get(0).get("BEPENDINGERPLOCATION")); + hashMap3.put("locationName", queryForList2.get(0).get("BEPENDINGLOCATION")); + } + setEventInfo.setUserColumns(hashMap3); + mpList.add(new MaterialPackingKey( queryForList.get(0).get("SITENAME").toString(), + queryForList.get(0).get("MATERIALPACKINGNAME").toString())); + boxList.add( queryForList.get(0).get("MATERIALPACKINGNAME").toString()); + } + if(mpList.size()>0) + { + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpList, eventInfo, setEventInfo); + } + } + if(boxList.size()>0) + { + String sendUser="101867"; +// NCWServiceImpl.OQZkNoInvoice(boxList, sendUser); + } + + } + } + } + + + public static Document createXmlDocumentByString(String sourcesubjectname, String targetsubjectname, String messageName, JSONObject d) throws Exception + { + Element message = new Element( Message_Tag ); + Document document = new Document( message ); + + + Element header = new Element( Header_Tag ); + + Element subElement = new Element( MessageName_Tag ); + subElement.setText(messageName); + header.addContent(subElement); + + subElement = new Element( "EVENTCOMMENT" ); + subElement.setText(messageName); + header.addContent(subElement); + + subElement = new Element( "SOURCESUBJECTNAME" ); + subElement.setText(sourcesubjectname); + header.addContent(subElement); + + subElement = new Element( "TARGETSUBJECTNAME" ); + subElement.setText(targetsubjectname); + header.addContent(subElement); + + + subElement = new Element( "SITENAME" ); + subElement.setText(""); + header.addContent(subElement); + + subElement = new Element( "EVENTUSER" ); + subElement.setText(""); + header.addContent(subElement); + + subElement = new Element( "LANGUAGE" ); + subElement.setText(""); + header.addContent(subElement); + + message.addContent(header); + + // Element body = new Element( Body_Tag ); + // body.setText(d); + + // com.alibaba.fastjson.JSONObject jsonObject = xmlToJson(d); + // Object object = jsonObject.get("detail"); + Element body = new Element( Body_Tag ); + Element ele = null; + //调用从Json转化成XML格式的方法 + + jsonToElement2(body, d); + //Iterator keys = jsonObject.keys(); + message.addContent(body); + return document; + } + + + + public static JSONObject xmlToJson(String xml) { + //去除xml开头和结尾的双引号 + StringBuilder sb = new StringBuilder(); + sb.append(xml); + char charAt = sb.charAt(0); + if (sb.charAt(0) == '\"') { + sb.deleteCharAt(0); + } + if (sb.charAt(sb.length() - 1) == '\"') { + sb.deleteCharAt(sb.length() - 1); + } + Map stringObjectMap = XmlUtil.xmlToMap(sb.toString()); + String json = JSONObject.toJSONString(stringObjectMap); + return JSONObject.parseObject(json, JSONObject.class); + } + + public static void jsonToElement(Element body, JSONObject jsonObject) { + Iterator iterator = jsonObject.keySet().iterator(); + while(iterator.hasNext()) { + String key = iterator.next(); + Object jsonChild = jsonObject.get(key); + if(jsonChild.getClass().equals(JSONObject.class)) { + Element child = new Element(key.toUpperCase()); + body.addContent(child); + jsonToElement(child,(JSONObject)jsonChild); + }else if(JSONArray.class.equals(jsonChild.getClass())) { + Element child = new Element(key.toUpperCase()); + body.addContent(child); + for(Object o : (JSONArray)jsonChild) { + if(o instanceof JSONObject) { + Element data = new Element("DATA"); + child.addContent(data); + jsonToElement(data,(JSONObject)o); + }else { + Element child2 = new Element((key+"child").toUpperCase()); + child2.setText(o.toString()); + child.addContent(child2); + } + } + + }else { + Element child = new Element(key.toUpperCase()); + body.addContent(child); + child.setText(jsonChild.toString()); + } + } + } + + public static void jsonToElement2(Element body, JSONObject jsonObject) { + Iterator iterator = jsonObject.keySet().iterator(); + while(iterator.hasNext()) { + String key = iterator.next(); + Object jsonChild = jsonObject.get(key); + if(jsonChild.getClass().equals(JSONObject.class)) { + if ("detail".equals(key)) { + Element child = new Element(key.toUpperCase()); + Element data = new Element("DATA"); + child.addContent(data); + body.addContent(child); + jsonToElement2(data,(JSONObject)jsonChild); + } else { + Element child = new Element(key.toUpperCase()); + body.addContent(child); + jsonToElement2(child,(JSONObject)jsonChild); + } + // Element child = new Element(key.toUpperCase()); + // body.addContent(child); + // jsonToElement2(child,(com.alibaba.fastjson.JSONObject)jsonChild); + }else if(JSONArray.class.equals(jsonChild.getClass())) { + Element child = new Element(key.toUpperCase()); + body.addContent(child); + for(Object o : (JSONArray)jsonChild) { + if(o instanceof JSONObject && !"detail".equals(key)) { + Element data = new Element("DATAS"); + child.addContent(data); + jsonToElement2(data,(JSONObject)o); + } else if (o instanceof JSONObject && "detail".equals(key)) { + Element data = new Element("DATA"); + child.addContent(data); + jsonToElement2(data,(JSONObject)o); + }else { + Element child2 = new Element((key+"child").toUpperCase()); + child2.setText(o.toString()); + child.addContent(child2); + } + } + + }else { + Element child = new Element(key.toUpperCase()); + body.addContent(child); + child.setText(jsonChild.toString()); + } + } + } + + + public static void saveMessageLog(ErpMessageLog log) { + + String sql = "INSERT INTO BS_ERPMESSAGELOG(INTERFACETIME,SERVERNAME, EVENTNAME, EVENTTIMEKEY, EVENTUSER, MESSAGELOG,RESULTCODE,MESSAGEID,RESULTMESSAGE,MESSAGELOG2,RESULTMESSAGE2)\r\n" + + "VALUES(TO_DATE(:INTERFACETIME,'yyyy-mm-dd hh24:mi:ss'),:SERVERNAME, :EVENTNAME, :EVENTTIMEKEY, :EVENTUSER, :MESSAGELOG,:RESULTCODE,:MESSAGEID,:RESULTMESSAGE,:MESSAGELOG2,:RESULTMESSAGE2)"; + Map bindMap = new HashMap(); + bindMap.put("SERVERNAME", log.getServerName()); + bindMap.put("EVENTNAME", log.getEventName()); + bindMap.put("EVENTTIMEKEY", log.getId()); + bindMap.put("EVENTUSER", log.getEventUser()); + bindMap.put("MESSAGEID", log.getMessageId()); + bindMap.put("INTERFACETIME", log.getInterfaceTime()); + bindMap.put("RESULTCODE", log.getResultCode()); + bindMap.put("MESSAGELOG", log.getSendMsg());// 推送ERP的json + bindMap.put("RESULTMESSAGE", log.getReturnMsg());// 返回结果的json + bindMap.put("MESSAGELOG2", log.getSendMsg2());// 推送ERP的json + bindMap.put("RESULTMESSAGE2", log.getReturnMsg2());// 返回结果的json + IDMFrameServiceProxy.getSqlTemplate().update(sql, bindMap); + } +} + + 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 01f2ffd..ae5e4e9 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 @@ -373,7 +373,8 @@ public class InvoiceServiceImpl implements InvoiceService { case "06"://成本中心领料 case "09"://研发领料 - billCode=toSAPService.orderStockOut(shipRequestName, "SDK", eventUser,materialPackingKeyList); +// billCode=toSAPService.orderStockOut(shipRequestName, "SDK", eventUser,materialPackingKeyList); + billCode=orderStockOut(shipRequestName, "SDK", eventUser,materialPackingKeyList); //更新MES管芯数据 new MESServiceImpl().updateDurable_ByCostcenter(shipRequestName, "SDK", eventUser, materialPackingKeyList); //billCode = NCWServiceImpl.SaleOut2(shipRequestName, "SDK", eventUser,materialPackingKeyList,""); @@ -388,12 +389,14 @@ public class InvoiceServiceImpl implements InvoiceService { case "ZLF6": case "ZLF7": case "ZLF8": - billCode=toSAPService.saleStockOut_NEW(shipRequestName, "SDK", eventUser,materialPackingKeyList); +// billCode=toSAPService.saleStockOut_NEW(shipRequestName, "SDK", eventUser,materialPackingKeyList); + billCode=saleStockOut_NEW(shipRequestName, "SDK", eventUser,materialPackingKeyList); untils.SaveUnDoInfo_ForSap(materialPackingKeyList, billCode, makeEventInfo); break; case "OEM": - billCode=toSAPService.oemStockOut_NEW(shipRequestName, "SDK", eventUser,materialPackingKeyList); +// billCode=toSAPService.oemStockOut_NEW(shipRequestName, "SDK", eventUser,materialPackingKeyList); + billCode=oemStockOut_NEW(shipRequestName, "SDK", eventUser,materialPackingKeyList); untils.SaveUnDoInfo_ForSap(materialPackingKeyList, billCode, makeEventInfo); break; default : @@ -1573,4 +1576,474 @@ public class InvoiceServiceImpl implements InvoiceService { return undoId; } + public String orderStockOut(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; + } + + //重写销售交货单过账。zd.2024.8.14 + public String saleStockOut_NEW(String shipRequestName, String siteName, String user,List boxList) throws Exception { + String rcode; + String undoId = ""; + 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 = 'Stocked' 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); + //实际过账日期 + body.put("WADAT_IST", TimeStampUtil.getCurrentTime("yyyyMMdd"));//yyyyMMddhhmmss + //发送日期 + body.put("Z_SENDDATE", TimeStampUtil.getCurrentTime("yyyyMMdd")); + //操作类型(过账) + body.put("Z_OPTION", "1"); + + 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);//销售过账需放ITEMS + }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(); + + if ("S".equals(rcode)) { + undoId = "S"; + } + //将log写到表里 + ErpMessageLog erplog = new ErpMessageLog(); + erplog.setEventUser(""); + erplog.setServerName("WmsToErp"); + erplog.setEventName("调拨出库(NLCC)"); + 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; + } + + //重写委外发料。zd.2024.8.17 + public String oemStockOut_NEW(String shipRequestName, String siteName, String user,List boxList) throws Exception + { + + String rcode; + String undoId = ""; + String rmsg = null; + String sql="SELECT \r\n" + + " MS.DELIVERYADDRESS, \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" + + " MP.SHIPREQUESTDETAILNAME, \r\n" + + " MD.ERPRECEIVELOCATION, \r\n" + + " MD.ERPRECEIVEFACTORY, \r\n" + + " SUM(M.QTY) AS MATERIALQUANTITY \r\n" + + " FROM \r\n" + + " MATERIALPACKING MP \r\n" + + " LEFT JOIN MATERIALPACKINGSUB m \r\n" + + " ON mp.MATERIALPACKINGNAME =m.MATERIALPACKINGNAME \r\n" + + " AND mp.SHIPREQUESTNAME =m.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 m.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" + + " MS.DELIVERYADDRESS, \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" + + " MP.SHIPREQUESTDETAILNAME, \r\n" + + " MD.ERPRECEIVELOCATION, \r\n" + + " MD.ERPRECEIVEFACTORY "; + + + 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); + + // MATNR 发货物料号 + item.put("MATNR", mm.get("MATERIALSPECNAME")); + // WERKS 收货工厂 + item.put("WERKS", mm.get("ERPFACTORY")); + // LGORT 发货库存地点 + item.put("LGORT", mm.get("ERPLOCATION")); + //BWART 移动类型 + item.put("BWART", "541O"); + //SOBKZ 特殊库存标识 +// item.put("SOBKZ", "O"); + //LIFNR 供应商编码 + item.put("LIFNR", mm.get("DELIVERYADDRESS")); + //MENGE 数量 + item.put("MENGE", mm.get("MATERIALQUANTITY")); + //MENGE 单位 + item.put("MEINS", mm.get("UNIT")); + + itemArray.add(item); + + updateOEMINVENTORY(mm.get("ERPFACTORY").toString(),mm.get("DELIVERYADDRESS").toString(), + mm.get("MATERIALSPECNAME").toString(),mm.get("MATERIALQUANTITY").toString()); + + } +// 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写到表里 + UUID uuid = UUID.randomUUID(); + ErpMessageLog erplog = new ErpMessageLog(); + erplog.setEventUser(""); + erplog.setServerName("WmsToErp"); + erplog.setEventName("委外发料541O"); + erplog.setId(uuid.toString()); + 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; + } + + //更新OEMINVENTORY。zd.2024.8.7 + public void updateOEMINVENTORY(String erpFactory,String supplierNo,String materialSpecName,String qty) throws Exception + { + String sqls="SELECT o.MATERIALSPECNAME FROM OEMINVENTORY o \r\n" + + " WHERE o.ERPFACTORY =:ERPFACTORY\r\n" + + " AND o.MATERIALSPECNAME =:MATERIALSPECNAME\r\n" + + " AND o.SUPPLIERNO =:SUPPLIERNO"; + Map bp=new HashMap<>(); + bp.put("ERPFACTORY", erpFactory); + bp.put("MATERIALSPECNAME", materialSpecName); + bp.put("SUPPLIERNO", supplierNo); + bp.put("QTY", qty); + List> sr=IDMFrameServiceProxy.getSqlTemplate().queryForList(sqls, bp); + if(sr.size()>0) + { + String sqlu="UPDATE OEMINVENTORY o SET o.QTY =o.QTY + :QTY\r\n" + + " WHERE o.ERPFACTORY =:ERPFACTORY\r\n" + + " AND o.MATERIALSPECNAME =:MATERIALSPECNAME\r\n" + + " AND o.SUPPLIERNO =:SUPPLIERNO"; + IDMFrameServiceProxy.getSqlTemplate().update(sqlu, bp); + } + else + { + String sqli="INSERT INTO OEMINVENTORY(ERPFACTORY,MATERIALSPECNAME,SUPPLIERNO,QTY)\r\n" + + " VALUES (:ERPFACTORY,:MATERIALSPECNAME,:SUPPLIERNO,:QTY)"; + IDMFrameServiceProxy.getSqlTemplate().update(sqli, bp); + } + + } + }