diff --git a/zi-wms-inf/src/main/java/com/cim/idm/service/QMSService.java b/zi-wms-inf/src/main/java/com/cim/idm/service/QMSService.java index 17738c2..4761a77 100644 --- a/zi-wms-inf/src/main/java/com/cim/idm/service/QMSService.java +++ b/zi-wms-inf/src/main/java/com/cim/idm/service/QMSService.java @@ -4,6 +4,8 @@ package com.cim.idm.service; import com.cim.idm.framework.data.EventInfo; import com.cim.idm.wmsextend.generic.errorHandler.CustomException; +import java.util.List; + /** * QMS接口类 * @author ZXYGY17 @@ -28,4 +30,11 @@ public interface QMSService { */ String sendQMSByUrlJson (String sendQMSUrl,String sendQMSJson, EventInfo eventInfo) throws CustomException; + /** + * 发送计量器具台账到QMS + * @param materialPackingKeyList BOXID + * @return + * @throws Exception + */ + String sendToQMSByMeteringStockOutBoxIdList(List materialPackingKeyList); } diff --git a/zi-wms-inf/src/main/java/com/cim/idm/service/impl/QMSServiceImpl.java b/zi-wms-inf/src/main/java/com/cim/idm/service/impl/QMSServiceImpl.java index a42263a..2fa6934 100644 --- a/zi-wms-inf/src/main/java/com/cim/idm/service/impl/QMSServiceImpl.java +++ b/zi-wms-inf/src/main/java/com/cim/idm/service/impl/QMSServiceImpl.java @@ -12,13 +12,14 @@ import com.cim.idm.util.NCHttpUtil; import com.cim.idm.util.QMSHttpUtil; import com.cim.idm.wmsextend.generic.errorHandler.CustomException; import com.cim.idm.wmsextend.generic.util.ConvertUtil; +import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy; +import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking; +import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; +import java.util.stream.Collectors; /** * QMS接口实现类 @@ -664,4 +665,103 @@ public class QMSServiceImpl implements QMSService{ return msg; } + + public String sendToQMSByMeteringStockOutBoxIdList(List materialPackingKeyList) { + JSONArray jsonArray = new JSONArray(); + String code = ""; + String queryEnumdefValueSql = " SELECT ENUMVALUE FROM ENUMDEFVALUE WHERE ENUMNAME =:ENUMNAME AND DEFAULTFLAG = 'Y' "; + Map enumdefValueMap = new HashMap (); + enumdefValueMap.put("ENUMNAME", "QMSMeteringStockOutSpec"); + List> enumdefValueList = IDMFrameServiceProxy.getSqlTemplate().queryForList(queryEnumdefValueSql, enumdefValueMap); + if (null != enumdefValueList && !enumdefValueList.isEmpty()) { + Set enumValueSet = enumdefValueList.stream() + .map(map -> (String) map.get("ENUMVALUE")) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + for (String materialPackingName : materialPackingKeyList) { + String queryMaterialSpecSql = " SELECT\n" + + "\tMP.MATERIALPACKINGNAME," + + "\tMP.MATERIALSPECNAME,\n" + + "\tMS.DESCRIPTION\n" + + "FROM\n" + + "\tMATERIALPACKING MP\n" + + "LEFT JOIN MATERIALSPEC MS ON MP.MATERIALSPECNAME = MS.MATERIALSPECNAME\n" + + "WHERE\n" + + "\tMP.SITENAME =:SITENAME\n" + + "\tAND MP.MATERIALPACKINGNAME =:MATERIALPACKINGNAME "; + Map materialSpecMap = new HashMap (); + materialSpecMap.put("SITENAME", "SDK"); + materialSpecMap.put("MATERIALPACKINGNAME", materialPackingName); + List> materialSpecList = IDMFrameServiceProxy.getSqlTemplate().queryForList(queryMaterialSpecSql, materialSpecMap); + if (null != materialSpecList && !materialSpecList.isEmpty()){ + for (int i = 0; i < materialSpecList.size(); i++) { + String materialSpecName = materialSpecList.get(i).get("MATERIALSPECNAME").toString(); + String description = materialSpecList.get(i).get("DESCRIPTION") == null ? "" : materialSpecList.get(i).get("DESCRIPTION").toString(); + if (enumValueSet.stream().anyMatch(materialSpecNamePrefix -> materialSpecName.startsWith(materialSpecNamePrefix))){ + JSONObject jsonObject = new JSONObject(true); + /**--------------------------必填字段----------------------------------*/ + //仪器编号 + jsonObject.put("instrumentNumber", materialSpecName); + //仪器名称 + jsonObject.put("instrumentName", description); + /**--------------------------非必填字段----------------------------------*/ + //仪器厂商 + jsonObject.put("instrumentManufacturer", ""); + //仪器型号 + jsonObject.put("classification", ""); + //出厂编号 + jsonObject.put("factoryNumber", ""); + //量程 + jsonObject.put("measurementProcess", ""); + //分辨率 + jsonObject.put("resolvingPower", ""); + //环境条件 + jsonObject.put("environmentCondition", ""); + //仪器尺寸(mm)长*宽*高 + jsonObject.put("instrumentSize", ""); + //电源电压功率 + jsonObject.put("powerSupplyVoltageAndPower", ""); + //插座类型 + jsonObject.put("typeOfSocket", ""); + //其他辅助措施 + jsonObject.put("otherAuxiliaryMeasures", ""); + //入厂日期 + jsonObject.put("entryDate", ""); + //存放地点 + jsonObject.put("storageLocation", ""); + //责任单位 + jsonObject.put("responsibleUnit", ""); + jsonArray.add(jsonObject); + } + } + } + } + String makePreIQCInfoSendJson = jsonArray.toString(); + String httpPost = NCHttpUtil.httpPost(baseUrl + "/wmsPush/ledgerData", makePreIQCInfoSendJson); + org.json.JSONObject jsonObject = new org.json.JSONObject(httpPost); + code = jsonObject.getString("code"); + if (!"00000".equals(code)) { + + } + String finalCode = code; + Thread t = new Thread(new Runnable(){ + public void run(){ + // run方法具体重写 + UUID uuid = UUID.randomUUID(); + ErpMessageLog erplog = new ErpMessageLog(); + erplog.setEventUser(""); + erplog.setServerName("WmsToQMS"); + erplog.setEventName("/wmsPush/ledgerData"); + erplog.setId(uuid.toString()); + erplog.setInterfaceTime(ConvertUtil.getCurrTime("yyyy-MM-dd HH:mm:ss")); + erplog.setMessageId(UUID.randomUUID().toString()); + erplog.setSendMsg(makePreIQCInfoSendJson); + erplog.setReturnMsg2(httpPost.toString()); + erplog.setResultCode(finalCode); + MessageLogUtil.writeMessageLog(erplog); + }}); + t.start(); + } + return code; + } } diff --git a/zi-wms-inf/src/main/java/com/cim/idm/service/impl/ToSAPServiceImpl.java b/zi-wms-inf/src/main/java/com/cim/idm/service/impl/ToSAPServiceImpl.java index 41bc35d..30436f9 100644 --- a/zi-wms-inf/src/main/java/com/cim/idm/service/impl/ToSAPServiceImpl.java +++ b/zi-wms-inf/src/main/java/com/cim/idm/service/impl/ToSAPServiceImpl.java @@ -2716,7 +2716,7 @@ public class ToSAPServiceImpl { } //MES上报工单消耗数据-261工单投料 - public String mesMaterialConsume( String user, String payMentDate, EventInfo eventInfo, String aufnr) throws Exception { + public String mesMaterialConsume( String user, String payMentDate, EventInfo eventInfo, String aufnr, Map materialPackingNameMap) throws Exception { String rcode; String undoId = ""; @@ -2825,6 +2825,8 @@ public class ToSAPServiceImpl { SetEventInfo setEventInfo = new SetEventInfo(); Map updateMap = new HashMap<>(); updateMap.put("unDoID", undoId); + String subPackingQuantity = materialPackingNameMap.get("SUBPACKINGQUANTITY"); + updateMap.put("subPackingQuantity", subPackingQuantity); setEventInfo.setUserColumns(updateMap); MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, eventInfo, setEventInfo); //插入凭证信息 diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/DeliveryController.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/DeliveryController.java index 9470d9b..6718bb5 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/controller/DeliveryController.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/DeliveryController.java @@ -180,7 +180,9 @@ public class DeliveryController { } else { // 辅材 return AjaxResult.me().setSuccess(true).setResultObj( - deliveryService.getMaterialDetail(storeDetailDto.getDocumentName(), storeDetailDto.getSiteName(), nameList, deliveryName)); + //deliveryService.getMaterialDetail(storeDetailDto.getDocumentName(), storeDetailDto.getSiteName(), nameList, deliveryName)); + deliveryService.getDeliveryStoreDetail(storeDetailDto.getDocumentName(), storeDetailDto.getSiteName(), nameList, deliveryName)); + } } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/NoChargeStockIn.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/NoChargeStockIn.java index b48cb2e..bc5f943 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/controller/NoChargeStockIn.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/NoChargeStockIn.java @@ -41,6 +41,7 @@ import com.cim.idm.wmspackage.receiverequestdetail.ReceiveRequestDetailServicePr import com.cim.idm.wmspackage.receiverequestdetail.management.data.MaterialReceiveRequestDetailKey; import com.cim.idm.wmspackage.receiverequestdetail.management.info.MakeDetailIncreaseReceivedInfo; import io.swagger.annotations.Api; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -73,6 +74,8 @@ public class NoChargeStockIn { @Autowired private ToSAPServiceImpl toSAPServiceImpl; + + @Transactional @RequestMapping(value = "/NoChargeStockIn", method = RequestMethod.POST) public AjaxResult NoChargeStockIn(@RequestBody JSONObject in ) throws Exception { @@ -1044,4 +1047,25 @@ public class NoChargeStockIn { } return lastEventTimeKey; } + + /** + * 辅材到货入库过账 + * @param in + * @return + * @throws Exception + */ + @Transactional + @RequestMapping(value = "/deliveryNoChargeStockIn", method = RequestMethod.POST) + public AjaxResult DeliveryNoChargeStockIn(@RequestBody JSONObject in ) throws Exception { + String userName = (String) in.get("USER"); + String commitDateStr = in.get("commitDate").toString(); + String deliveryName = in.get("RECEIVEREQUESTNAME") == null ? "" : in.get("RECEIVEREQUESTNAME").toString(); + LinkedHashMap boxMap = ( LinkedHashMap) in.get("BOXLIST"); + EventInfo eventInfo = new EventInfoUtil().makeEventInfo("NoChargeStockIn", userName, "NoChargeStockIn", "", ""); + if (StringUtils.isNotEmpty(deliveryName)){ + return AjaxResult.me().setSuccess(false).setErrorCode(400).setMessage("入库失败,未输入到货单号"); + } + deliveryService.auxiliaryDeliveryStockIn("SDK", eventInfo, commitDateStr, deliveryName, boxMap); + return AjaxResult.me().setSuccess(true).setErrorCode(200).setMessage("入库成功"); + } } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/IDeliveryService.java b/zi-wms-pda/src/main/java/com/cim/idm/service/IDeliveryService.java index 2ad0651..cd98b16 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/IDeliveryService.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/IDeliveryService.java @@ -1,5 +1,6 @@ package com.cim.idm.service; +import com.cim.idm.framework.data.EventInfo; import com.cim.idm.model.dto.delivery.DeliveryDelDto; import com.cim.idm.model.dto.delivery.DeliveryDto; import com.cim.idm.model.dto.delivery.DeliveryEditDto; @@ -13,6 +14,7 @@ import com.cim.idm.model.vo.MaterialReceiveRequestVo; import com.cim.idm.model.vo.ReceiveDetailVo; import com.github.pagehelper.PageInfo; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -132,4 +134,15 @@ public interface IDeliveryService { */ ReceiveDetailVo getDeliveryStoreDetail(String documentName, String siteName, List nameList, String deliveryName); + /** + * 辅材到货入库 + * @param siteName 现地 + * @param eventInfo 事件信息 + * @param commitDate 过账时间 + * @param delivery 到货单号 + * @param materialPackingInfoMap 入库的box信息集合 + * @throws Exception 异常信息 + */ + void auxiliaryDeliveryStockIn(String siteName, EventInfo eventInfo, String commitDate, String delivery, LinkedHashMap materialPackingInfoMap) throws Exception; + } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/DeliveryServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/DeliveryServiceImpl.java index a24daf6..8811c70 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/DeliveryServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/DeliveryServiceImpl.java @@ -7,6 +7,9 @@ import com.cim.idm.constants.receive.IsBatchEnums; import com.cim.idm.constants.receive.ReceiveTypeEnums; import com.cim.idm.dao.DeliveryDao; import com.cim.idm.exception.GlobalException; +import com.cim.idm.framework.IDMFrameServiceProxy; +import com.cim.idm.framework.data.EventInfo; +import com.cim.idm.framework.util.time.TimeStampUtil; import com.cim.idm.model.dto.PageDto; import com.cim.idm.model.dto.PurchaseDto; import com.cim.idm.model.dto.delivery.*; @@ -16,13 +19,25 @@ import com.cim.idm.model.po.MaterialReceiveRequest; import com.cim.idm.model.vo.DeliveryReceiveDetailVo; import com.cim.idm.model.vo.MaterialReceiveRequestVo; import com.cim.idm.model.vo.ReceiveDetailVo; +import com.cim.idm.mwmsextend.materialpacking.service.MaterialPackingServiceImpl; import com.cim.idm.service.IDeliveryService; +import com.cim.idm.utils.AjaxResult; +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.wmspackage.material.MaterialServiceProxy; +import com.cim.idm.wmspackage.material.management.data.MaterialSpec; +import com.cim.idm.wmspackage.material.management.data.MaterialSpecKey; +import com.cim.idm.wmspackage.materialpacking.management.info.CreateInfo; +import com.cim.idm.wmspackage.name.NameServiceProxy; import com.github.pagehelper.PageInfo; import com.github.pagehelper.page.PageMethod; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; @Service @@ -168,4 +183,198 @@ public class DeliveryServiceImpl implements IDeliveryService { receiveDetailVo.setStoreCharge(storeCharge); return receiveDetailVo; } + + @Override + public void auxiliaryDeliveryStockIn(String siteName, EventInfo eventInfo, String commitDate, String deliveryName, LinkedHashMap materialPackingInfoMap) throws Exception { + Iterator its = materialPackingInfoMap.entrySet().iterator(); + //创建抬头文本 + String receiveAct = GenerateReceiveAct(siteName, "NoPO"); + String specName = ""; + SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + List listMaterialPacking = new ArrayList(); + //创建批次 + while (its.hasNext()) { + Map.Entry entry = (Map.Entry) its.next(); + Map boxInfo = (Map) entry.getValue(); + String erpFactory = (String) boxInfo.get("ERPFACTORY"); + String erpLocation = (String) boxInfo.get("ERPLOCATION"); + String LOCATIONNAME = (boxInfo.get("LOCATIONNAME") == null || "null".equals(boxInfo.get("LOCATIONNAME").toString())) ? "" : boxInfo.get("LOCATIONNAME").toString(); + String materialSpecName = (String) boxInfo.get("MATERIALSPECNAME"); + String MATERIALUNITDESC = (String) boxInfo.get("MATERIALUNITDESC"); + String materialUnit = (String) boxInfo.get("MATERIALUNIT"); + String REQUESTQUANTITY = (String) boxInfo.get("REQUESTQUANTITY").toString(); + String RECEIVEDQUANTITY = (String) boxInfo.get("RECEIVEDQUANTITY").toString(); + String ThisAcceptNumber = boxInfo.get("THISACCEPTNUMBER").toString(); + String supplierName = boxInfo.get("SUPPLIERNO").toString(); + String locationName = boxInfo.get("LOCATIONNAME").toString(); + String expirationDay = ""; + if ("0".equals(ThisAcceptNumber)) { + continue; + } + String makeDate = boxInfo.get("MakeDate") == null ? TimeStampUtil.getCurrentTime("yyyy-MM-dd HH:mm:ss") : boxInfo.get("MakeDate").toString(); + String sdkid = (String) boxInfo.get("SDK_ID"); + //5、查询物料是否启用批次 + String queryIsBatchSql = "SELECT CASE WHEN m.IS_BATCH = 'Y' THEN '是' WHEN m.IS_BATCH = '是' THEN '是' ELSE '否' END AS REPLACED_VALUE ,DECODE(m.IQCFLAG,'Y','是','否') IQCFLAG, PHASE, FROM MATERIALSPEC m WHERE m.MATERIALSPECNAME =:MATERIALSPECNAME"; + Map isBatchParmsMap = new HashMap(); + isBatchParmsMap.put("MATERIALSPECNAME", materialSpecName); + List> isBatchList = IDMFrameServiceProxy.getSqlTemplate().queryForList(queryIsBatchSql, isBatchParmsMap); + MaterialSpecKey materialSpecKey = new MaterialSpecKey(); + materialSpecKey.setMaterialSpecName(materialSpecName); + materialSpecKey.setSiteName(siteName); + MaterialSpec materialSpec = MaterialServiceProxy.getMaterialSpecService().selectByKey(materialSpecKey); + if (null == isBatchList || isBatchList.isEmpty() || null == materialSpec || null == materialSpec.getKey()){ + AjaxResult.me().setMessage("物料编码:" + materialSpecName + "主数据信息不存在").setErrorCode(400); + } else { + String isBatch = isBatchList.get(0).get("REPLACED_VALUE").toString(); + String iqcFlag = isBatchList.get(0).get("IQCFLAG").toString(); + String phase = isBatchList.get(0).get("PHASE").toString(); + String materialType = materialSpec.getMaterialType(); + // 获取单据详情 + List receiveByMaterialSpec = getReceiveByMaterialSpec(deliveryName, materialSpecName, true); + if (!receiveByMaterialSpec.isEmpty()) { + for (DeliveryReceiveDetailVo vo : receiveByMaterialSpec) { + //创建抬头文本DETAIL + //更新MATERIALRECEIVEREQUESTDETAIL数量 + //CreateMaterialReceiveRequestAct(eventInfo, "SDK", vo.getReceiveRequestName(), vo.getReceiveRequestDetailName(), MAKEDATE, receiveAct, "NoPO", ThisAcceptNumber, MATERIALSPECNAME); + //6、创建标签 + try { + List boxId = MaterialPackingServiceImpl.generateBoxID("LabelId", siteName,"1", makeDate,"WL",erpFactory); + for (int i = 0; i < boxId.size(); i++) { + //插入MATERIALPACKING + CreateInfo materialPacking = new CreateInfo(); + String newBoxId = materialSpecName + "|1|" + phase + "|" + specName + "|" + boxId.get(i) + "|" + makeDate.replace("-", "").substring(0, 8) + "|" + materialUnit + "|" + ThisAcceptNumber; + materialPacking.setMaterialPackingName(newBoxId); + materialPacking.setSiteName(siteName); + materialPacking.setContentMaterialType(""); + materialPacking.setMaterialPackingType("Box"); + Map bindMap = new HashMap(); + bindMap.put("materialQuantity", ThisAcceptNumber); + bindMap.put("materialCreateQuantity", ThisAcceptNumber); + bindMap.put("packingState", "Created");// 标记Box是刚创建的 + bindMap.put("materialType", materialType); + bindMap.put("materialSpecName", materialSpecName); + bindMap.put("stockState", "Created"); + bindMap.put("holdState", "N"); + bindMap.put("areaName", ""); + bindMap.put("createUser", eventInfo.getEventUser()); + bindMap.put("createTime", eventInfo.getEventTime()); + bindMap.put("ReceiveTime", eventInfo.getEventTime()); + bindMap.put("ReceiveUser", eventInfo.getEventUser()); + bindMap.put("receiveRequestName", deliveryName); + bindMap.put("receiveRequestDetailName",""); + bindMap.put("SDK_ID", sdkid); + if(expirationDay==null||expirationDay.equals("")) + { + if(materialSpec.getExpirationDay()>0) + { + Date endTime = sDateFormat.parse(makeDate); + Calendar rightNow = Calendar.getInstance(); + rightNow.setTime(endTime); + if(siteName.equals("TM1")) + { + rightNow.add(Calendar.MONTH, materialSpec.getExpirationDay()); + rightNow.set(Calendar.DAY_OF_MONTH,rightNow.get(Calendar.DAY_OF_MONTH)-1); + } + else{ + rightNow.add(Calendar.MONTH, materialSpec.getExpirationDay()); + } + Date dt1 = rightNow.getTime(); + expirationDay = sDateFormat.format(dt1); + } + else + { + Date endTime=sDateFormat.parse(makeDate); + Calendar rightNow = Calendar.getInstance(); + rightNow.setTime(endTime); + rightNow.add(Calendar.MONTH, 48); + Date dt1 = rightNow.getTime(); + expirationDay = "2099-12-31 00:00:00"; + + //endTime.add(Calendar.MONTH, materialSpec.getExpirationDay()); + //endTime = (endTime).(materialSpec.getExpirationDay()); + } + //endTime.add(Calendar.MONTH, materialSpec.getExpirationDay()); + //endTime = (endTime).(materialSpec.getExpirationDay()); + } + + + //this.txtEndTime.Text = dt.ToString("yyyy年MM月dd日", System.Globalization.DateTimeFormatInfo.InvariantInfo); + bindMap.put("makeDate", makeDate); + bindMap.put("expiringDate", expirationDay.substring(0,expirationDay.indexOf(" "))+" 00:00:00"); + bindMap.put("receiveActNo", receiveAct); + bindMap.put("reasonCodeType", ""); + bindMap.put("reasonCode", ""); + bindMap.put("erpLocation", erpLocation); + bindMap.put("erpFactory", erpFactory); + bindMap.put("stockInType", ""); + bindMap.put("unit", materialUnit); + if ("是".equals(isBatch)) { + bindMap.put("charge", boxId.get(i)); + } + if ("否".equals(iqcFlag)) { + bindMap.put("oqaResultState", GenericServiceProxy.getConstantMap().OQA_State_End); + bindMap.put("oqaResult","OK"); + bindMap.put("packingGrade", "OK"); + } else { + bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_Pre); + } + bindMap.put("phase", phase); + //bindMap.put("supplierCharge", supplierCharge); + bindMap.put("supplierName", supplierName); + bindMap.put("npFlag", ""); + bindMap.put("locationName", locationName); + materialPacking.setUserColumns(bindMap); + listMaterialPacking.add(materialPacking); + //插入MATERIALPACKINGSUB + String insertSql = "INSERT INTO MATERIALPACKINGSUB T (T.MATERIALPACKINGNAME,T.RECEIVEREQUESTNAME,T.RECEIVEREQUESTDETAILNAME,T.QTY) " + + "VALUES (:MATERIALPACKINGNAME, :RECEIVEREQUESTNAME,:RECEIVEREQUESTDETAILNAME,:QTY)"; + Map hashMap2 = new HashMap (); + hashMap2.put("MATERIALPACKINGNAME", newBoxId); + hashMap2.put("RECEIVEREQUESTNAME", deliveryName); + hashMap2.put("RECEIVEREQUESTDETAILNAME", ""); + hashMap2.put("QTY", ThisAcceptNumber); + IDMFrameServiceProxy.getSqlTemplate().update(insertSql, hashMap2); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + //SAP过账 + //更新物料凭证 + //插入BS_MATERIALPACKINGUNDOINFO + //UPDATE数量 MATERIALPACKING + //UPDATE 状态 RECEIVEREQUESTNAME + } + } + } + + public static String GenerateReceiveAct( String siteName, String actType) throws CustomException { + // 获取系统当前时间 + Calendar c = Calendar.getInstance(); + SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd"); + List args = new ArrayList(); + String actType1 = ""; + if (actType.equals("Normal") || actType.equals("Manual") || actType.equals("NoPO")) { + actType1 = "R"; + } else if (actType.equals("Refund") || actType.equals("WO") || actType.equals("POOEM") + || actType.equals("ManualT")||actType.equals("MES")||actType.equals("MESRefund")) { + actType1 = "T"; + } + args.add(siteName); + args.add(actType1); + args.add(f.format(c.getTime())); + String ReceiveRequestActNo; + try { + ReceiveRequestActNo = NameServiceProxy.getNameRuleDefService().generateName("ReceiveActNo", args, 1).get(0); + } catch (Throwable e) { + args = new ArrayList(); + args.add(siteName); + args.add(actType); + args.add(f.format(c.getTime())); + ReceiveRequestActNo = NameServiceProxy.getNameRuleDefService().generateName("ReceiveActNo", args, 1).get(0); + return ReceiveRequestActNo; + } + return ReceiveRequestActNo; + } } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java index 074e2c5..c1fa707 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java @@ -31,6 +31,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; import java.sql.Timestamp; import java.util.*; @@ -75,6 +77,8 @@ public class MESToWMSServiceImpl implements MESToWMSService { List boxIdList = new ArrayList<>(); List qtyList = new ArrayList<>(); List mpList = new ArrayList<>(); + //key=BOXID value=消耗数量 + Map materialPackingNameMap = new HashMap(); int success = 0; String errorCode = ""; //根据wo,qty,materialSpecName生成物料消耗 @@ -92,7 +96,8 @@ public class MESToWMSServiceImpl implements MESToWMSService { String wo = jb.get("requestName") == null ? "" : jb.get("requestName").toString(); // 工单 String flag = jb.get("flag") == null ? "" : jb.get("flag").toString(); String charge = jb.get("charge") == null ? "" : jb.get("charge").toString(); - String erpLocation = jb.get("erpLocation") == null ? "" : jb.get("erpLocation").toString();//工厂 + String erpFactory = jb.get("erpFactory") == null ? "" : jb.get("erpFactory").toString();//仓库 + String erpLocation = jb.get("erpLocation") == null ? "" : jb.get("erpLocation").toString();//库位 payMentDate = jb.get("payMentDate") == null ? "" : jb.get("payMentDate").toString(); //判空 if (StringUtils.isBlank(materialSpecName) || StringUtils.isBlank(qty)) { @@ -133,10 +138,193 @@ public class MESToWMSServiceImpl implements MESToWMSService { put("V_RETURN_CODE", ""); put("V_RETURN_MESSAGE", ""); put("V_CHARGE", charge); + put("V_ERPFACTORY", erpFactory); put("V_ERPLOCATION", erpLocation); } }; - Map stringObjectMap = IDMFrameServiceProxy.getSqlTemplate().executeProcedure(procedureName, bindMap); + //Map stringObjectMap = IDMFrameServiceProxy.getSqlTemplate().executeProcedure(procedureName, bindMap); + //判断V_CHARGE是否为空 + if (StringUtils.isNotEmpty(charge)){ + //不等于空,根据CHARGE+V_MATERIALSPECNAME消耗库存数量 + String queryMaterialPackingByChargeSql = " SELECT \n" + + "\t\t\tT.MATERIALPACKINGNAME, \n" + + " T.MATERIALSPECNAME, \n" + + " T.MATERIALQUANTITY, \n" + + "\t\t\tT.UNIT MATERIALUNIT, \n" + + " T.ERPFACTORY, \n" + + " T.ERPLOCATION ,\n" + + " T.SHIPREQUESTNAME\n" + + " FROM \n" + + "\t\t\tMATERIALPACKING T\n" + + " WHERE \n" + + "\t\t\tT.MATERIALSPECNAME =:V_MATERIALSPECNAME \n" + + "\t\t\tAND T.CHARGE =:V_CHARGE\n" + + "\t\t\tAND T.ERPLOCATION =:V_ERPLOCATION\n" + + " AND T.MATERIALQUANTITY > 0 \n" + + "\t\t\tAND T.STOCKSTATE = 'Stocked' "; + List> queryMaterialPackingByChargeForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(queryMaterialPackingByChargeSql, bindMap); + if (null != queryMaterialPackingByChargeForList && !queryMaterialPackingByChargeForList.isEmpty()) { + String materialQuantity = queryMaterialPackingByChargeForList.get(0).get("MATERIALQUANTITY") == null ? "0" : queryMaterialPackingByChargeForList.get(0).get("MATERIALQUANTITY").toString(); + String materialPackingName = queryMaterialPackingByChargeForList.get(0).get("MATERIALPACKINGNAME") == null ? "" : queryMaterialPackingByChargeForList.get(0).get("MATERIALPACKINGNAME").toString(); + String materialUnit = queryMaterialPackingByChargeForList.get(0).get("MATERIALUNIT") == null ? "" : queryMaterialPackingByChargeForList.get(0).get("MATERIALUNIT").toString(); + String shipRequestName = queryMaterialPackingByChargeForList.get(0).get("SHIPREQUESTNAME") == null ? "" : queryMaterialPackingByChargeForList.get(0).get("SHIPREQUESTNAME").toString(); + + BigDecimal materialQuantityBigDecimal = new BigDecimal(materialQuantity); + BigDecimal qtyBigDecimal = new BigDecimal(qty); + //计算库存数量 + if (materialQuantityBigDecimal.compareTo(qtyBigDecimal) >= 0){ + //消耗后的库存数量 + BigDecimal updateMaterialQuantity = materialQuantityBigDecimal.subtract(qtyBigDecimal); + //保留小数点后3位 + updateMaterialQuantity = updateMaterialQuantity.setScale(3, RoundingMode.DOWN); + //更新MATERIALPACKING + String updateMaterialPackingMaterialQuantitySql = " UPDATE MATERIALPACKING T SET T.MATERIALQUANTITY =:MATERIALQUANTITY WHERE T.MATERIALPACKINGNAME =:MATERIALPACKINGNAME AND T.ERPFACTORY =:ERPFACTORY AND T.ERPLOCATION =:ERPLOCATION "; + Map updateMaterialPackingMaterialQuantityMap = new HashMap(); + updateMaterialPackingMaterialQuantityMap.put("MATERIALQUANTITY", updateMaterialQuantity); + updateMaterialPackingMaterialQuantityMap.put("MATERIALPACKINGNAME", materialPackingName); + updateMaterialPackingMaterialQuantityMap.put("ERPFACTORY", erpFactory); + updateMaterialPackingMaterialQuantityMap.put("ERPLOCATION", erpLocation); + IDMFrameServiceProxy.getSqlTemplate().update(updateMaterialPackingMaterialQuantitySql, updateMaterialPackingMaterialQuantityMap); + //更新MATERIALPACKINGMDC + String updateMaterialPackingMdcMaterialQuantitySql = " UPDATE MATERIALPACKINGMDC T SET T.MATERIALQUANTITY = MATERIALQUANTITY - :MATERIALQUANTITY WHERE T.MATERIALPACKINGNAME =:MATERIALPACKINGNAME AND T.ERPFACTORY =:ERPFACTORY AND T.ERPLOCATION =:ERPLOCATION "; + Map updateMaterialPackingMdcMaterialQuantityMap = new HashMap(); + updateMaterialPackingMdcMaterialQuantityMap.put("MATERIALQUANTITY", qtyBigDecimal); + updateMaterialPackingMdcMaterialQuantityMap.put("MATERIALPACKINGNAME", materialPackingName); + updateMaterialPackingMdcMaterialQuantityMap.put("ERPFACTORY", erpFactory); + updateMaterialPackingMdcMaterialQuantityMap.put("ERPLOCATION", erpLocation); + IDMFrameServiceProxy.getSqlTemplate().update(updateMaterialPackingMdcMaterialQuantitySql, updateMaterialPackingMdcMaterialQuantityMap); + //插入临时表TEMP_MESCONSUME + String insertTempMesConsumeSql = " INSERT INTO TEMP_MESCONSUME (MATERIALPACKINGNAME, MATERIALSPECNAME, ERPFACTORY, ERPLOCATION,UNIT, QTY,WO,SHIPREQUESTNAME)\n" + + " VALUES (:MATERIALPACKINGNAME, :MATERIALSPECNAME, :ERPFACTORY, :ERPLOCATION, :UNIT, :QTY,:WO,:SHIPREQUESTNAME) "; + Map insertTempMesConsumeMap = new HashMap(); + insertTempMesConsumeMap.put("MATERIALPACKINGNAME",materialPackingName); + insertTempMesConsumeMap.put("MATERIALSPECNAME",materialSpecName); + insertTempMesConsumeMap.put("ERPFACTORY",erpFactory); + insertTempMesConsumeMap.put("ERPLOCATION",erpLocation); + insertTempMesConsumeMap.put("UNIT",materialUnit); + insertTempMesConsumeMap.put("QTY",qtyBigDecimal); + insertTempMesConsumeMap.put("WO",wo); + insertTempMesConsumeMap.put("SHIPREQUESTNAME",shipRequestName); + IDMFrameServiceProxy.getSqlTemplate().update(insertTempMesConsumeSql,insertTempMesConsumeMap); + materialPackingNameMap.put(materialPackingName,qtyBigDecimal.toString()); + continue; + }else { + result = AjaxResult.me().setSuccess(false).setErrorCode(400).setMessage("批次:" + charge + " 料号: " + materialSpecName + " 库位: " + erpLocation + " 当前库存短缺" + qtyBigDecimal.subtract(materialQuantityBigDecimal)); + return result; + } + }else { + result = AjaxResult.me().setSuccess(false).setErrorCode(400).setMessage("批次:" + charge + " 料号: " + materialSpecName + " 库位: " + erpLocation + " 当前库存短缺" + qty); + return result; + } + }else { + String queryMaterialPackingByMaterialSpecSql = " SELECT T.MATERIALPACKINGNAME, \n" + + " T.MATERIALSPECNAME, \n" + + " T.MATERIALQUANTITY, \n" + + " T.UNIT MATERIALUNIT, \n" + + " T.ERPFACTORY, \n" + + " T.ERPLOCATION ,\n" + + " T.SHIPREQUESTNAME,\n" + + " T.PRODUCTORDER\n" + + " FROM MATERIALPACKING T\n" + + " WHERE T.MATERIALSPECNAME = :V_MATERIALSPECNAME \n" + + " AND T.MATERIALQUANTITY > 0 AND T.STOCKSTATE = 'Stocked'\n" + + " AND T.ERPFACTORY = :V_ERPFACTORY\n" + + " AND T.ERPLOCATION = :V_ERPLOCATION\n" + + " ORDER BY \n" + + " T.MAKEDATE ASC "; + List> queryMaterialPackingByMaterialSpecForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(queryMaterialPackingByMaterialSpecSql, bindMap); + if (null != queryMaterialPackingByMaterialSpecForList && !queryMaterialPackingByMaterialSpecForList.isEmpty()){ + //所要消耗的数量 + BigDecimal qtyBigDecimal = new BigDecimal(qty); + for (int j = 0; j < queryMaterialPackingByMaterialSpecForList.size(); j++) { + String materialQuantity = queryMaterialPackingByMaterialSpecForList.get(j).get("MATERIALQUANTITY") == null ? "0" : queryMaterialPackingByMaterialSpecForList.get(j).get("MATERIALQUANTITY").toString(); + String materialPackingName = queryMaterialPackingByMaterialSpecForList.get(j).get("MATERIALPACKINGNAME") == null ? "" : queryMaterialPackingByMaterialSpecForList.get(j).get("MATERIALPACKINGNAME").toString(); + String materialUnit = queryMaterialPackingByMaterialSpecForList.get(j).get("MATERIALUNIT") == null ? "" : queryMaterialPackingByMaterialSpecForList.get(j).get("MATERIALUNIT").toString(); + String shipRequestName = queryMaterialPackingByMaterialSpecForList.get(j).get("SHIPREQUESTNAME") == null ? "" : queryMaterialPackingByMaterialSpecForList.get(j).get("SHIPREQUESTNAME").toString(); + //当前批次的库存数量 + BigDecimal materialQuantityBigDecimal = new BigDecimal(materialQuantity); + if (materialQuantityBigDecimal.compareTo(qtyBigDecimal) >= 0){ + //消耗后的库存数量 + BigDecimal updateMaterialQuantity = materialQuantityBigDecimal.subtract(qtyBigDecimal); + //保留小数点后3位 + updateMaterialQuantity = updateMaterialQuantity.setScale(3, RoundingMode.DOWN); + //更新MATERIALPACKING + String updateMaterialPackingMaterialQuantitySql = " UPDATE MATERIALPACKING T SET T.MATERIALQUANTITY =:MATERIALQUANTITY WHERE T.MATERIALPACKINGNAME =:MATERIALPACKINGNAME AND T.ERPFACTORY =:ERPFACTORY AND T.ERPLOCATION =:ERPLOCATION "; + Map updateMaterialPackingMaterialQuantityMap = new HashMap(); + updateMaterialPackingMaterialQuantityMap.put("MATERIALQUANTITY", updateMaterialQuantity); + updateMaterialPackingMaterialQuantityMap.put("MATERIALPACKINGNAME", materialPackingName); + updateMaterialPackingMaterialQuantityMap.put("ERPFACTORY", erpFactory); + updateMaterialPackingMaterialQuantityMap.put("ERPLOCATION", erpLocation); + IDMFrameServiceProxy.getSqlTemplate().update(updateMaterialPackingMaterialQuantitySql, updateMaterialPackingMaterialQuantityMap); + //更新MATERIALPACKINGMDC + String updateMaterialPackingMdcMaterialQuantitySql = " UPDATE MATERIALPACKINGMDC T SET T.MATERIALQUANTITY = MATERIALQUANTITY - :MATERIALQUANTITY WHERE T.MATERIALPACKINGNAME =:MATERIALPACKINGNAME AND T.ERPFACTORY =:ERPFACTORY AND T.ERPLOCATION =:ERPLOCATION "; + Map updateMaterialPackingMdcMaterialQuantityMap = new HashMap(); + updateMaterialPackingMdcMaterialQuantityMap.put("MATERIALQUANTITY", qtyBigDecimal); + updateMaterialPackingMdcMaterialQuantityMap.put("MATERIALPACKINGNAME", materialPackingName); + updateMaterialPackingMdcMaterialQuantityMap.put("ERPFACTORY", erpFactory); + updateMaterialPackingMdcMaterialQuantityMap.put("ERPLOCATION", erpLocation); + IDMFrameServiceProxy.getSqlTemplate().update(updateMaterialPackingMdcMaterialQuantitySql, updateMaterialPackingMdcMaterialQuantityMap); + //插入临时表TEMP_MESCONSUME + String insertTempMesConsumeSql = " INSERT INTO TEMP_MESCONSUME (MATERIALPACKINGNAME, MATERIALSPECNAME, ERPFACTORY, ERPLOCATION,UNIT, QTY,WO,SHIPREQUESTNAME)\n" + + " VALUES (:MATERIALPACKINGNAME, :MATERIALSPECNAME, :ERPFACTORY, :ERPLOCATION, :UNIT, :QTY,:WO,:SHIPREQUESTNAME) "; + Map insertTempMesConsumeMap = new HashMap(); + insertTempMesConsumeMap.put("MATERIALPACKINGNAME",materialPackingName); + insertTempMesConsumeMap.put("MATERIALSPECNAME",materialSpecName); + insertTempMesConsumeMap.put("ERPFACTORY",erpFactory); + insertTempMesConsumeMap.put("ERPLOCATION",erpLocation); + insertTempMesConsumeMap.put("UNIT",materialUnit); + insertTempMesConsumeMap.put("QTY",qtyBigDecimal); + insertTempMesConsumeMap.put("WO",wo); + insertTempMesConsumeMap.put("SHIPREQUESTNAME",shipRequestName); + IDMFrameServiceProxy.getSqlTemplate().update(insertTempMesConsumeSql,insertTempMesConsumeMap); + materialPackingNameMap.put(materialPackingName,qtyBigDecimal.toString()); + break; + }else { + //消耗数量大于循环中当前条码的库存数量 + //更新MATERIALPACKING + String updateMaterialPackingMaterialQuantitySql = " UPDATE MATERIALPACKING T SET T.MATERIALQUANTITY =:MATERIALQUANTITY WHERE T.MATERIALPACKINGNAME =:MATERIALPACKINGNAME AND T.ERPFACTORY =:ERPFACTORY AND T.ERPLOCATION =:ERPLOCATION "; + Map updateMaterialPackingMaterialQuantityMap = new HashMap(); + updateMaterialPackingMaterialQuantityMap.put("MATERIALQUANTITY", "0"); + updateMaterialPackingMaterialQuantityMap.put("MATERIALPACKINGNAME", materialPackingName); + updateMaterialPackingMaterialQuantityMap.put("ERPFACTORY", erpFactory); + updateMaterialPackingMaterialQuantityMap.put("ERPLOCATION", erpLocation); + IDMFrameServiceProxy.getSqlTemplate().update(updateMaterialPackingMaterialQuantitySql, updateMaterialPackingMaterialQuantityMap); + //更新MATERIALPACKINGMDC + String updateMaterialPackingMdcMaterialQuantitySql = " UPDATE MATERIALPACKINGMDC T SET T.MATERIALQUANTITY = MATERIALQUANTITY - :MATERIALQUANTITY WHERE T.MATERIALPACKINGNAME =:MATERIALPACKINGNAME AND T.ERPFACTORY =:ERPFACTORY AND T.ERPLOCATION =:ERPLOCATION "; + Map updateMaterialPackingMdcMaterialQuantityMap = new HashMap(); + updateMaterialPackingMdcMaterialQuantityMap.put("MATERIALQUANTITY", "0"); + updateMaterialPackingMdcMaterialQuantityMap.put("MATERIALPACKINGNAME", materialPackingName); + updateMaterialPackingMdcMaterialQuantityMap.put("ERPFACTORY", erpFactory); + updateMaterialPackingMdcMaterialQuantityMap.put("ERPLOCATION", erpLocation); + IDMFrameServiceProxy.getSqlTemplate().update(updateMaterialPackingMdcMaterialQuantitySql, updateMaterialPackingMdcMaterialQuantityMap); + //插入临时表TEMP_MESCONSUME + String insertTempMesConsumeSql = " INSERT INTO TEMP_MESCONSUME (MATERIALPACKINGNAME, MATERIALSPECNAME, ERPFACTORY, ERPLOCATION,UNIT, QTY,WO,SHIPREQUESTNAME)\n" + + " VALUES (:MATERIALPACKINGNAME, :MATERIALSPECNAME, :ERPFACTORY, :ERPLOCATION, :UNIT, :QTY,:WO,:SHIPREQUESTNAME) "; + Map insertTempMesConsumeMap = new HashMap(); + insertTempMesConsumeMap.put("MATERIALPACKINGNAME",materialPackingName); + insertTempMesConsumeMap.put("MATERIALSPECNAME",materialSpecName); + insertTempMesConsumeMap.put("ERPFACTORY",erpFactory); + insertTempMesConsumeMap.put("ERPLOCATION",erpLocation); + insertTempMesConsumeMap.put("UNIT",materialUnit); + insertTempMesConsumeMap.put("QTY",materialQuantityBigDecimal); + insertTempMesConsumeMap.put("WO",wo); + insertTempMesConsumeMap.put("SHIPREQUESTNAME",shipRequestName); + IDMFrameServiceProxy.getSqlTemplate().update(insertTempMesConsumeSql,insertTempMesConsumeMap); + materialPackingNameMap.put(materialPackingName,materialQuantityBigDecimal.toString()); + //计算剩余消耗数量 + qtyBigDecimal = qtyBigDecimal.subtract(materialQuantityBigDecimal); + } + } + if (qtyBigDecimal.compareTo(new BigDecimal(BigInteger.ZERO)) >= 0){ + result = AjaxResult.me().setSuccess(false).setErrorCode(400).setMessage( " 料号: " + materialSpecName + " 库位: " + erpLocation + " 当前库存短缺" + qtyBigDecimal); + return result; + } + }else { + result = AjaxResult.me().setSuccess(false).setErrorCode(400).setMessage( " 料号: " + materialSpecName + " 库位: " + erpLocation + " 当前库存短缺" + qty); + return result; + } + } + /* if (stringObjectMap != null) { if (stringObjectMap.get("V_RETURN_CODE") != null && !stringObjectMap.get("V_RETURN_CODE").toString().equals("0")) { errorCode = stringObjectMap.get("V_RETURN_CODE").toString(); @@ -146,10 +334,10 @@ public class MESToWMSServiceImpl implements MESToWMSService { return result; } } - + */ } // 将工单的物料消耗数据传给SAP - String undoId = toSAPService.mesMaterialConsume("MES",payMentDate, eventInfo,aufnr); + String undoId = toSAPService.mesMaterialConsume("MES",payMentDate, eventInfo,aufnr,materialPackingNameMap); result = AjaxResult.me().setSuccess(true).setErrorCode(200).setMessage("执行成功").setResultObj(undoId); loginfo.setResultCode("0"); loginfo.setReturnMsg(JSONObject.toJSONString(result)); diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialShipServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialShipServiceImpl.java index 4d457f1..20d9c33 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialShipServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MaterialShipServiceImpl.java @@ -14,7 +14,9 @@ import com.cim.idm.model.po.delivery.MaterialDelivery; import com.cim.idm.model.po.delivery.MaterialDeliveryReceive; import com.cim.idm.mwmsextend.materialpacking.service.MaterialPackingServiceImpl; import com.cim.idm.service.IMaterialShipService; +import com.cim.idm.service.QMSService; import com.cim.idm.service.impl.MESServiceImpl; +import com.cim.idm.service.impl.QMSServiceImpl; import com.cim.idm.util.MessageLogUtil; import com.cim.idm.util.ToSAPMessageUtil; import com.cim.idm.utils.AjaxResult; @@ -53,6 +55,9 @@ public class MaterialShipServiceImpl implements IMaterialShipService { @Autowired private DeliveryDao deliveryDao; + @Autowired + private QMSService qmsService; + SDKMaterialPackingServiceImpl SDKMP = new SDKMaterialPackingServiceImpl(); /** * 出库方法实现 @@ -1025,6 +1030,10 @@ public class MaterialShipServiceImpl implements IMaterialShipService { } String deleteSql = "DELETE FROM MATERIALPACKINGSUB WHERE RECEIVEREQUESTNAME = :SHIPREQUESTNAME"; IDMFrameServiceProxy.getSqlTemplate().update(deleteSql, hashMap); + //调用QMS计量器具接口 + if (!materialPackingKeyList.isEmpty()){ + qmsService.sendToQMSByMeteringStockOutBoxIdList(materialPackingKeyList); + } return AjaxResult.me().setSuccess(true).setErrorCode(200); }