package com.cim.idm.controller; import java.sql.Timestamp; import java.util.*; import java.util.stream.Collectors; import com.cim.idm.framework.template.workflow.BpelExecuter; import com.cim.idm.framework.util.sys.SystemPropHelper; import com.cim.idm.model.ErpMessageLog; import com.cim.idm.service.impl.ToSAPServiceImpl; import com.cim.idm.utils.AjaxResult; import com.cim.idm.utils.CommonUtils; import com.cim.idm.utils.EventInfoUtil; import com.cim.idm.wmsextend.generic.GenericServiceProxy; import com.cim.idm.wmsextend.generic.errorHandler.CustomException; import com.cim.idm.wmsextend.generic.util.ConvertUtil; import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking; import org.apache.commons.lang3.StringUtils; import org.jdom.Document; import org.jdom.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy; import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey; import com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import cn.hutool.core.util.XmlUtil; import com.cim.idm.framework.IDMFrameServiceProxy; import com.cim.idm.framework.data.EventInfo; import com.cim.idm.framework.util.time.TimeStampUtil; @RestController @RequestMapping("/api/wms") @EnableAutoConfiguration public class QMSController { public static final String BPELName_Tag = "bpelname"; public static final String Message_Tag = "Message"; public static final String MessageName_Tag = "MESSAGENAME"; public static final String Header_Tag = "Header"; public static final String Body_Tag = "Body"; public static final String Result_Name_Tag = "Return"; public static final String Result_ReturnCode = "RETURNCODE"; public static final String Result_ErrorMessage = "RETURNMESSAGE"; public static final String dataField_TAG = "Message"; private static final String ReplySubjectName_Tag = "ORIGINALSOURCESUBJECTNAME"; @Autowired(required = false) private BpelExecuter bpelExecuter; @Autowired private ToSAPServiceImpl toSAPService; private CommonUtils untils=new CommonUtils(); private static final Logger log = LoggerFactory.getLogger(QMSController.class); // private NCWServiceImpl NCWServiceImpl = new NCWServiceImpl (); @RequestMapping(value = "/iqcSyncdata", method = RequestMethod.POST) public AjaxResult SyncIQCData(@RequestBody JSONObject 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("iqcSyncdata"); SetEventInfo setEventInfo = new SetEventInfo(); EventInfo eventInfo = new EventInfo(); eventInfo.setEventName("iqcSyncdata"); eventInfo.setEventUser("IQC"); //0待检验、1合格、2不合格、3检验中 String deliveryNumber = in.get("deliveryNumber").toString(); String materialCode = in.get("materialCode").toString(); String iqcResult = in.get("iqcResult").toString(); String iqcResultDate = in.get("iqcResultDate").toString(); Map 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);*/ 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) { 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(isolation= Isolation.READ_COMMITTED) @Transactional @RequestMapping(value = "/pqcSyncdata2", method = RequestMethod.POST) public AjaxResult pqcSyncdata2(@RequestBody JSONArray in) throws Exception { 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"); String siteName = "SDK"; SetEventInfo setEventInfo = new SetEventInfo(); SetEventInfo setEventInfo2 = 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); List sapBoxList = new ArrayList<> (); 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,M.OQARESULT 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())); // MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey(queryForList.get(j).get("SITENAME").toString(), // queryForList.get(j).get("MATERIALPACKINGNAME").toString()), makeEventInfo, setEventInfo); //只有待检转合格才sap过账,其余不sap质检过账 String qqAresults = queryForList.get(0).get("OQARESULT") == null ? "PREOQA" : queryForList.get(0).get("OQARESULT").toString(); if ("PREOQA".equals(qqAresults) && "OK".equals(pqcResult) || "PREOQA".equals(qqAresults) && "NG".equals(pqcResult)) { sapBoxList.add( queryForList.get(0).get("MATERIALPACKINGNAME").toString()); } bindMap.put("preOqaResult", qqAresults); success ++; } } } else if (!StringUtils.isEmpty(commonNumber)) { String sql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME,M.OQARESULT 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())); // MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey(queryForList.get(j).get("SITENAME").toString(), // queryForList.get(j).get("MATERIALPACKINGNAME").toString()), makeEventInfo, setEventInfo); //只有待检转合格才sap过账,其余不sap质检过账 String qqAresults = queryForList.get(j).get("OQARESULT") == null ? "PREOQA" : queryForList.get(j).get("OQARESULT").toString(); if ("PREOQA".equals(qqAresults) && "OK".equals(pqcResult) || "PREOQA".equals(qqAresults) && "NG".equals(pqcResult)) { sapBoxList.add(queryForList.get(j).get("MATERIALPACKINGNAME").toString()); } bindMap.put("preOqaResult", qqAresults); success ++; } } } else { throw new CustomException("Common","无单据信息和批次信息"); } // 将订单的质检结果传给SAP if(sapBoxList.size() > 0) { String undoId = toSAPService.iqcResultFeekback(sapBoxList,siteName,commonNumber,materialCode,pqcResult,pqcResultDate,user, exceptionHandling,specialState); } if(mpList.size()>0) { setEventInfo2.setUserColumns(bindMap); makeEventInfo.setEventTimeKey(TimeStampUtil.getCurrentEventTimeKey()); makeEventInfo.setEventTime(TimeStampUtil.getCurrentTimestamp()); MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpList, eventInfo, setEventInfo2); } } 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) || "7".equals(tpType)) {//料号+批次 String kcsql = "SELECT M.SITENAME ,M.MATERIALPACKINGNAME,M.OQARESULT 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 ++; String qqAresults = queryForList.get(0).get("OQARESULT") == null ? "PREOQA" : queryForList.get(0).get("OQARESULT").toString(); if ("PREOQA".equals(qqAresults) && "OK".equals(pqcResult) || "PREOQA".equals(qqAresults) && "NG".equals(pqcResult)) { sapBoxList.add( queryForList.get(0).get("MATERIALPACKINGNAME").toString()); } bindMap.put("preOqaResult", qqAresults); } } 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); String qqAresults = queryForList.get(0).get("OQARESULT") == null ? "PREOQA" : queryForList.get(0).get("OQARESULT").toString(); if ("PREOQA".equals(qqAresults) && "OK".equals(pqcResult) || "PREOQA".equals(qqAresults) && "NG".equals(pqcResult)) { sapBoxList.add( queryForList.get(0).get("MATERIALPACKINGNAME").toString()); } bindMap.put("preOqaResult", qqAresults); success ++; } else { errorCode += commonNumber + "," + materialCode + ";"; } // 将订单的质检结果传给SAP if(sapBoxList.size() > 0) { String undoId = toSAPService.iqcResultFeekback(sapBoxList,siteName,commonNumber,materialCode,pqcResult,pqcResultDate,user, exceptionHandling,specialState); } if(mpList.size()>0) { setEventInfo2.setUserColumns(bindMap); makeEventInfo.setEventTimeKey(TimeStampUtil.getCurrentEventTimeKey()); makeEventInfo.setEventTime(TimeStampUtil.getCurrentTimestamp()); MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpList, eventInfo, setEventInfo2); } } 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()+","); makeEventInfo.setEventTimeKey(TimeStampUtil.getCurrentEventTimeKey()); makeEventInfo.setEventTime(TimeStampUtil.getCurrentTimestamp()); 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()); // } //根据品质状态自动转库2 try { autoChangeLOCATIONNAME(in, makeEventInfo,mpList); } catch (Exception e) { throw e; } return result; } @RequestMapping(value = "/QMSSyncData", method = RequestMethod.POST) public AjaxResult QMSSyncData(@RequestBody JSONArray in) throws CustomException { //重写QMS回传通用处理方法。 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); } } public void autoChangeLOCATIONNAME (JSONArray in,EventInfo eventInfo,List mpkList) throws Exception { try { String sqlDic = "SELECT\n" + "\tS.DJERPLOCATION,\n" + "\tS.TYPE,\n" + "\tS.OKERPLOCATION\n" + "FROM\n" + "\tBS_ERPLOCATIONSHIP S\n" + "LEFT JOIN STORAGESPEC s2 \n" + "ON\n" + "\tS.OKSTORAGENAME = s2.STORAGENAME\n" + "WHERE\n" + "\tS.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 boxList1 = new ArrayList<> (); // 转仓库 List boxList2 = new ArrayList<> (); 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); if(queryForList.isEmpty()) { throw new CustomException(mpkList.get(j).getMaterialPackingName() + " 该标签已出库"); } hashMap2.put("ERPLOCATION", queryForList.get(0).get("ERPLOCATION") == null ? "" : queryForList.get(0).get("ERPLOCATION")); // hashMap2.put("LOCATIONNAME", queryForList.get(0).get("LOCATIONNAME") == null ? "" : queryForList.get(0).get("LOCATIONNAME")); List> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlDic, hashMap2); if (queryForList2 == null || queryForList2.size() < 1) { log.info("未找到待检货位"); continue; } String DJERPLOCATION=queryForList2.get(0).get("DJERPLOCATION")==null?"":queryForList2.get(0).get("DJERPLOCATION").toString(); String OKERPLOCATION=queryForList2.get(0).get("OKERPLOCATION")==null?"":queryForList2.get(0).get("OKERPLOCATION").toString(); String PREOQARESULT = queryForList.get(0).get("PREOQARESULT")==null?"":queryForList.get(0).get("PREOQARESULT").toString(); String TYPE = queryForList2.get(0).get("TYPE")==null?"":queryForList2.get(0).get("TYPE").toString(); Map hashMap3 = new HashMap (); hashMap3.put("preErpLocation", queryForList.get(0).get("ERPLOCATION")); hashMap3.put("PRELOCATIONNAME", queryForList.get(0).get("LOCATIONNAME") == null ? "" : queryForList.get(0).get("LOCATIONNAME")); // if ("OK".equals(pqcResult)) { if(OKERPLOCATION.isEmpty() || ("PREOQA".equals(PREOQARESULT) && "OK".equals(pqcResult)) || PREOQARESULT.equals(pqcResult)) { log.info("未维护转库对应关系"); continue; //throw new CustomException("未维护转库对应关系"); }else { hashMap3.put("erpLocation", queryForList2.get(0).get("OKERPLOCATION")); // hashMap3.put("locationName", queryForList2.get(0).get("OKSTORAGENAME")); mpList.add(new MaterialPackingKey( queryForList.get(0).get("SITENAME").toString(), queryForList.get(0).get("MATERIALPACKINGNAME").toString())); boxList2.add( queryForList.get(0).get("MATERIALPACKINGNAME").toString()); setEventInfo.setUserColumns(hashMap3); eventInfo.setEventTimeKey(TimeStampUtil.getCurrentEventTimeKey()); eventInfo.setEventTime(TimeStampUtil.getCurrentTimestamp()); MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( queryForList.get(0).get("SITENAME").toString(), queryForList.get(0).get("MATERIALPACKINGNAME").toString()), eventInfo, setEventInfo); } // } } if(boxList2.size()>0) { // gzQMSTemp(boxList2,"1",mpList,user,"SDK",commonNumber,materialCode,pqcResult,pqcResultDate, exceptionHandling,specialState); Map hashMap = new HashMap<>(); hashMap.put("BOXLIST", boxList2); //按不同仓库划分为多个条码,一对多关系,LISTAGG ,MATERIALPACKINGNAMES是一个逗号隔开的字符串如"a,b,c" String sqlLocation = "SELECT \n" + " m.ERPLOCATION,\n" + " LISTAGG(m.MATERIALPACKINGNAME, ',') WITHIN GROUP (ORDER BY m.MATERIALPACKINGNAME) AS MATERIALPACKINGNAMES\n" + "FROM MATERIALPACKING m\n" + "WHERE m.MATERIALPACKINGNAME IN (:BOXLIST) AND m.STOCKSTATE = 'Stocked'\n" + "GROUP BY m.ERPLOCATION"; List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlLocation, hashMap); for (int j=0;j LocationBoxList = Arrays.stream(makps.split(",")) .map(String::trim) // 去除每个元素的空格 .collect(Collectors.toList()); String billCode = ""; // if( "3".equals(TYPE)) { List MpList = new ArrayList(); List MpKeyList = new ArrayList(); for (int z=0;z hashMapLo = new HashMap<>(); hashMapLo.put("MATERIALPACKINGNAME", LocationBoxList.get(z)); String sqlLo = "SELECT MATERIALPACKINGNAME,SITENAME FROM MATERIALPACKING WHERE MATERIALPACKINGNAME = :MATERIALPACKINGNAME"; List> materialPackingList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlLo, hashMapLo); Map mPKingHashMap = new HashMap<>(); // mPKingHashMap.put("MATERIALPACKINGNAME", materialPackingList.get(z).get("MATERIALPACKINGNAME")); MaterialPackingKey mpkey = new MaterialPackingKey(); String SITENAME = materialPackingList.get(0).get("SITENAME") == null ? "" : materialPackingList.get(0).get("SITENAME").toString(); mpkey.setSiteName(SITENAME); mpkey.setMaterialPackingName(materialPackingList.get(0).get("MATERIALPACKINGNAME").toString()); MaterialPacking mp = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(mpkey); MpList.add(mp); MpKeyList.add(mpkey); } // String commitDate=TimeStampUtil.getCurrentTime("yyyy-MM-dd"); UUID uuid = UUID.randomUUID(); billCode = toSAPService.autoTurnWareAndQms(MpKeyList,ERPLOCATION,user,pqcResult,"2025-04-30"); // }else { // billCode = NCWServiceImpl.OQZkNoInvoice(LocationBoxList, sendUser); if (billCode == null || "".equals(billCode)) { throw new CustomException("ERP过账失败!"); } EventInfoUtil eventInfoUtil = new EventInfoUtil(); EventInfo makeEventInfo = eventInfoUtil.makeEventInfo("自动转库311", user, "qms质检自动转库311"); untils.SaveUnDoInfo_ForSap(boxList2, billCode, makeEventInfo); } } } } } catch (Exception e) { throw e; } } @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"; // String undoId = toSAPService.iqcResultFeekback(boxList,"SDK",commonNumber,materialCode,pqcResult,pqcResultDate,user, // exceptionHandling,specialState); } } 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"; // String undoId = toSAPService.iqcResultFeekback(sapBoxList,siteName,commonNumber,materialCode,pqcResult,pqcResultDate,user, // exceptionHandling,specialState); } } } } 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); } /** * 2025-05-19 * 接收物料组质检周期 * @param in 物料组 * @return 结果 * @throws Exception */ // @Transactional(isolation= Isolation.READ_COMMITTED) @Transactional @RequestMapping(value = "/materialSpecIQCFlag", method = RequestMethod.POST) public AjaxResult MaterialSpecIQCFlag(@RequestBody JSONArray in) throws Exception { AjaxResult result = new AjaxResult(); EventInfo makeEventInfo = new EventInfoUtil().makeEventInfo("materialSpecIQCFlag", "IQC", "materialSpecIQCFlag"); String siteName = "SDK"; ErpMessageLog loginfo = new ErpMessageLog(); loginfo.setServerName("QMSToWms"); loginfo.setMessageId(""); loginfo.setEventUser(makeEventInfo.getEventUser()); loginfo.setId(UUID.randomUUID().toString()); loginfo.setInterfaceTime(ConvertUtil.getCurrTime("yyyy-MM-dd HH:mm:ss")); loginfo.setSendMsg(in.toJSONString()); loginfo.setEventName(makeEventInfo.getEventName()); Map updateMaterialSpecMap = new HashMap(); Map insertBsMaterialSpecIqcFlagMap = new HashMap(); Map updateBsMaterialSpecIqcFlagMap = new HashMap(); if(!in.isEmpty()){ String updateMaterialSpecSql = "UPDATE MATERIALSPEC SET IQCFLAG =:IQCFLAG WHERE MATERIALGROUP =:MATERIALGROUP AND SITENAME =:SITENAME"; String insertBsMaterialSpecIqcFlagSql = "INSERT INTO BS_MATERIALSPECIQCFLAG (SITENAME, MATERIALGROUP, IQCFLAG, LASTEVENTNAME, LASTEVENTTIMEKEY, LASTEVENTTIME, LASTEVENTUSER, LASTEVENTCOMMENT, INSPECTIONCYCLE, ORGNO) " + SystemPropHelper.CR + "VALUES(:SITENAME, :MATERIALGROUP, :IQCFLAG, :LASTEVENTNAME, :LASTEVENTTIMEKEY, :LASTEVENTTIME,:LASTEVENTUSER, :LASTEVENTCOMMENT, :INSPECTIONCYCLE, :ORGNO)"; String updateBsMaterialSpecIqcFlagSql = "UPDATE BS_MATERIALSPECIQCFLAG SET IQCFLAG = :IQCFLAG, INSPECTIONCYCLE =:INSPECTIONCYCLE, LASTEVENTNAME =:LASTEVENTNAME, LASTEVENTTIMEKEY =:LASTEVENTTIMEKEY, LASTEVENTTIME =:LASTEVENTTIME, LASTEVENTUSER =:LASTEVENTUSER, LASTEVENTCOMMENT =:LASTEVENTCOMMENT, ORGNO =:ORGNO WHERE SITENAME = :SITENAME AND MATERIALGROUP = :MATERIALGROUP"; for (int i = 0; i < in.size(); i++) { JSONObject jb = in.getJSONObject(i); String materialGroup = jb.get("materialGroup") == null ? "" : jb.get("materialGroup").toString();//物料组 String iqcFlag = jb.get("iqcFlag") == null ? "" : jb.get("iqcFlag").toString();//是否质检 String inspectionCycle = jb.get("inspectionCycle") == null ? "" : jb.get("inspectionCycle").toString();//检验周期 String orgno = jb.get("orgno") == null ? "" : jb.get("orgno").toString();//组织 if (StringUtils.isNotEmpty(materialGroup)) { String selectBsMaterialSpecIqcFlagSql = " SELECT count(1) num FROM BS_MATERIALSPECIQCFLAG WHERE SITENAME = :SITENAME AND MATERIALGROUP = :MATERIALGROUP "; Map bsMaterialSpecIqcFlagMap = new HashMap (); bsMaterialSpecIqcFlagMap.put("SITENAME", siteName); bsMaterialSpecIqcFlagMap.put("MATERIALGROUP", materialGroup); List> bsMaterialSpecIqcFlagList = IDMFrameServiceProxy.getSqlTemplate().queryForList(selectBsMaterialSpecIqcFlagSql, bsMaterialSpecIqcFlagMap); String bsMaterialSpecIqcFlagNum = bsMaterialSpecIqcFlagList.get(0).get("NUM").toString(); if("0".equals(bsMaterialSpecIqcFlagNum)) { //insert BS_MATERIALSPECIQCFLAG insertBsMaterialSpecIqcFlagMap.put("SITENAME", siteName); insertBsMaterialSpecIqcFlagMap.put("MATERIALGROUP", materialGroup); insertBsMaterialSpecIqcFlagMap.put("IQCFLAG", iqcFlag); insertBsMaterialSpecIqcFlagMap.put("INSPECTIONCYCLE", inspectionCycle); insertBsMaterialSpecIqcFlagMap.put("ORGNO", orgno); insertBsMaterialSpecIqcFlagMap.put("LASTEVENTTIMEKEY", makeEventInfo.getEventTimeKey()); insertBsMaterialSpecIqcFlagMap.put("LASTEVENTTIME", makeEventInfo.getEventTime()); insertBsMaterialSpecIqcFlagMap.put("LASTEVENTUSER", makeEventInfo.getEventUser()); insertBsMaterialSpecIqcFlagMap.put("LASTEVENTCOMMENT", makeEventInfo.getEventComment()); insertBsMaterialSpecIqcFlagMap.put("LASTEVENTNAME", makeEventInfo.getEventName()); IDMFrameServiceProxy.getSqlTemplate().update(insertBsMaterialSpecIqcFlagSql, insertBsMaterialSpecIqcFlagMap); } else { //update BS_MATERIALSPECIQCFLAG updateBsMaterialSpecIqcFlagMap.put("SITENAME", siteName); updateBsMaterialSpecIqcFlagMap.put("MATERIALGROUP", materialGroup); updateBsMaterialSpecIqcFlagMap.put("IQCFLAG", iqcFlag); updateBsMaterialSpecIqcFlagMap.put("INSPECTIONCYCLE", inspectionCycle); updateBsMaterialSpecIqcFlagMap.put("ORGNO", orgno); updateBsMaterialSpecIqcFlagMap.put("LASTEVENTTIMEKEY", makeEventInfo.getEventTimeKey()); updateBsMaterialSpecIqcFlagMap.put("LASTEVENTTIME", makeEventInfo.getEventTime()); updateBsMaterialSpecIqcFlagMap.put("LASTEVENTUSER", makeEventInfo.getEventUser()); updateBsMaterialSpecIqcFlagMap.put("LASTEVENTCOMMENT", makeEventInfo.getEventComment()); updateBsMaterialSpecIqcFlagMap.put("LASTEVENTNAME", makeEventInfo.getEventName()); IDMFrameServiceProxy.getSqlTemplate().update(updateBsMaterialSpecIqcFlagSql, updateBsMaterialSpecIqcFlagMap); //update MATERIALSPEC updateMaterialSpecMap.put("SITENAME",siteName); updateMaterialSpecMap.put("MATERIALGROUP",materialGroup); updateMaterialSpecMap.put("IQCFLAG",iqcFlag); IDMFrameServiceProxy.getSqlTemplate().update(updateMaterialSpecSql, updateMaterialSpecMap); } }else { result = AjaxResult.me().setErrorCode(400).setMessage("materialGroup,iqcFlag,inspectionCycle属于必传字段"); loginfo.setResultCode("E"); loginfo.setReturnMsg(JSONObject.toJSONString(result)); saveMessageLog(loginfo); return result; } } result = AjaxResult.me().setSuccess(true).setMessage("接收物料组质检周期成功"); loginfo.setResultCode("success"); loginfo.setReturnMsg(JSONObject.toJSONString(result)); }else { result = AjaxResult.me().setErrorCode(400).setMessage("未传入物料组质检周期信息"); loginfo.setResultCode("E"); loginfo.setReturnMsg(JSONObject.toJSONString(result)); } // 消息保存日志,erp推送wms的数据写入表BS_ERPMESSAGELOG中 saveMessageLog(loginfo); return result; } }