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 28cc200..41bc35d 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 @@ -5425,6 +5425,116 @@ public class ToSAPServiceImpl { return undoId; } + //盘盈出库--pc + public String MaterialScrapStockOutPc(List> queryForList, String siteName, String user,String commitDate, + String opCode,String qtc,String costName) throws Exception { + String rcode; + String undoId = ""; + String rmsg = null; + if (queryForList == null || queryForList.size() < 1) { + return ""; + } + try { + + JSONObject sendData = new JSONObject(true); + JSONObject header = new JSONObject(true); + sendData.put("HEAD", header); + JSONObject body = new JSONObject(true); + sendData.put("BODY", body); + JSONArray itemArray = new JSONArray(); + + /* + HEAD + */ + header.put("INTF_ID", "MM067"); + String uniqueID = UUID.randomUUID().toString(); + header.put("REQ_KEYID", uniqueID); + header.put("SRC_MSGID", uniqueID); + header.put("SRC_SYSTEM", "WMS"); + header.put("DEST_SYSTEM", "SAP"); + header.put("REQUSER", user); + + /* + BODY + */ + body.put("ITEM", itemArray); + body.put("ITEMID", uniqueID); + + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMdd"); + Date date = inputFormat.parse(commitDate); + String outputDate = outputFormat.format(date); + //过账日期 + body.put("BUDAT", outputDate); + //凭证日期 + body.put("BLDAT", outputDate); + //凭证抬头文本 + body.put("BKTXT", uniqueID); + //用户名 + body.put("USNAM", user); + + for (Map mm : queryForList) { + + JSONObject item = new JSONObject(true); + // MATNR 发货物料号 + item.put("MATNR", mm.get("MATERIALSPECNAME")); + // WERKS 发货工厂 + item.put("WERKS", mm.get("ERPFACTORY")); + // LGORT 发货库存地点 + item.put("LGORT", mm.get("ERPLOCATION")); + //BWART 移动类型 + item.put("BWART", qtc); + item.put("KOSTL", costName); + //MENGE 数量 + item.put("MENGE", mm.get("MATERIALQUANTITY")); + //MENGE 单位 + item.put("MEINS", mm.get("UNIT")); + //需要SAP改动,Z07,Z08目前都需要返单号 + //ZLLORDER 自定义领料单号 +// item.put("ZLLORDER", mm.get("SHIPREQUESTNAME")); +// //ZLLITEM 自定义领料单行号 +// item.put("ZLLITEM", mm.get("SHIPREQUESTDETAILNAME")); + + itemArray.add(item); + } + log.info("SendTOSAP >>>>" + sendData); + String sapreturn = toSAPMessageUtil.sendHttpPost(toSAPMessageUtil.materialChangeLocationUrl, "", sendData.toJSONString()); + org.json.JSONObject receiveJsonObject = new org.json.JSONObject(sapreturn); + org.json.JSONObject returnJsonObject = (org.json.JSONObject) receiveJsonObject.get("RETURN"); + rcode = returnJsonObject.get("STATUS").toString(); + rmsg = returnJsonObject.get("MSGTXT").toString(); + + if ("S".equals(rcode)) { + undoId = returnJsonObject.get("MBLNR").toString()+"_"+returnJsonObject.get("MJAHR").toString();//将物料凭证号与凭证年度拼在一起 + } + //将log写到表里 + UUID uuid = UUID.randomUUID(); + ErpMessageLog erplog = new ErpMessageLog(); + erplog.setEventUser(""); + erplog.setServerName("WmsToErp"); + if ("Z05".equals(qtc)) { + erplog.setEventName("盘亏出库"); + } else { + erplog.setEventName("报废出库"); + } + erplog.setId(uuid.toString()); + erplog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT)); + erplog.setMessageId(UUID.randomUUID().toString()); + erplog.setSendMsg(sendData.toJSONString()); + erplog.setSendMsg2(sendData.toJSONString()); + erplog.setReturnMsg2(sapreturn); + erplog.setResultCode(rcode); + MessageLogUtil.writeMessageLog(erplog); + } catch (Exception e) { + log.info(e.getMessage(), e); + throw new RuntimeException("SAP返回" + rmsg); + } + if (!"S".equals(rcode)) { + throw new RuntimeException("SAP返回" + rmsg); + } + return undoId; + } + /** * 退料入库 * @@ -5527,6 +5637,7 @@ public class ToSAPServiceImpl { } + public String makeReturnStockIn(List> list, String eventUser, String commitDate) throws JsonMappingException, JsonProcessingException { if (list == null || list.size() < 1) { return ""; @@ -5980,10 +6091,8 @@ public class ToSAPServiceImpl { item.put("BWART",moveType); item.put("MENGE", mm.get("MATERIALQUANTITY")); item.put("MEINS", mm.get("UNIT")); - if ("413E".equals(moveType)) { - item.put("UMMAT_KDAUF", mm.get("OLDSALESHIPREQUESTNAME")); - item.put("UMMAT_KDPOS", mm.get("OLDSALESHIPREQUESTDETAILNAME")); - } + item.put("UMMAT_KDAUF", mm.get("OLDSALESHIPREQUESTNAME")); + item.put("UMMAT_KDPOS", mm.get("OLDSALESHIPREQUESTDETAILNAME")); String insmk = ""; // if("NG".equals(pqcResult) ){ // insmk = "3"; @@ -5991,21 +6100,12 @@ public class ToSAPServiceImpl { // String insmk = StringUtils.equals(mm.get("OQARESULTSTATE").toString(),"END")?"":"X"; item.put("INSMK", insmk); - /*if("411E".equals(moveType) || "413E".equals(moveType)) { + if("411E".equals(moveType) || "413E".equals(moveType)) { item.put("MAT_KDAUF", mm.get("SALESHIPREQUESTNAME")); // 发货销售订单编码 item.put("MAT_KDPOS", mm.get("SALESHIPREQUESTDETAILNAME")); // 发货销售订单项目编码 } else if("413".equals(moveType) || "413E".equals(moveType)) { item.put("UMMAT_KDAUF", SALESHIPREQUESTNAME); // 发货销售订单编码 item.put("UMMAT_KDPOS", SALESHIPREQUESTDETAILNAME); // 发货销售订单项目编码 - }*/ - - if ("411E".equals(moveType)) { - item.put("MAT_KDAUF", mm.get("OLDSALESHIPREQUESTNAME")); // 发货销售订单编码 - item.put("MAT_KDPOS", mm.get("OLDSALESHIPREQUESTDETAILNAME")); // 发货销售订单项目编码 - } - if ("413".equals(moveType) || "413E".equals(moveType)) { - item.put("MAT_KDAUF", mm.get("SALESHIPREQUESTNAME")); // 发货销售订单编码 - item.put("MAT_KDPOS", mm.get("SALESHIPREQUESTDETAILNAME")); // 发货销售订单项目编码 } itemData.add(item); @@ -6587,7 +6687,7 @@ public class ToSAPServiceImpl { /** * 转工单-新 - * @param materialPackingList + * @param mapList * @param mes * @param bwart * @return @@ -6606,7 +6706,6 @@ public class ToSAPServiceImpl { sendData.put("HEAD", header); JSONObject body = new JSONObject(true); sendData.put("BODY", body); - JSONArray itemArray = new JSONArray(); /* HEAD @@ -6639,36 +6738,9 @@ public class ToSAPServiceImpl { } for (Map mm : mapList) { mm.put("BWART", bwart); - JSONObject item = new JSONObject(true); - /*if(materialPackingList.size()>0) { - // MATNR 发货物料号 - item.put("MATNR", mm.getMATNR()); - - // WERKS 发货工厂 - item.put("WERKS", mm.getWERKS()); - // LGORT 发货库存地点 - item.put("LGORT", mm.getLGORT()); - //MENGE 数量 - item.put("MENGE",mm.getMENGE()); - //MENGE 单位 - item.put("MEINS",mm.getMEINS()); - item.put("BWART", bwart); - //ZLLORDER 自定义领料单号 -// item.put("ZLLORDER", "LL1010250408001"); - item.put("ZLLORDER", mm.getZLLORDER()); - //ZLLITEM 自定义领料单行号 - -// item.put("ZLLITEM", "0001"); - item.put("ZLLITEM", mm.getZLLITEM()); - //AUFNR 订单号 - item.put("AUFNR", mm.getAUFNR()); - - } - itemArray.add(item);*/ } - System.out.println(mapList); - /*log.info("SendTOSAP >>>>" + sendData); + log.info("SendTOSAP >>>>" + sendData); String sendDatas = sendData.toJSONString(); String sapreturn = toSAPMessageUtil.sendHttpPost(toSAPMessageUtil.materialChangeLocationUrl, "", sendDatas); org.json.JSONObject receiveJsonObject = new org.json.JSONObject(sapreturn); @@ -6681,24 +6753,28 @@ public class ToSAPServiceImpl { } //将log写到表里 ErpMessageLog erplog = new ErpMessageLog(); - erplog.setEventUser(""); + erplog.setEventUser(mes); erplog.setServerName("WmsToErp"); - erplog.setEventName("MES物料消耗261和转工单"); + if ("261".equals(bwart)) { + erplog.setEventName("转工单-入库"); + } else { + erplog.setEventName("转工单-出库"); + } erplog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT)); erplog.setMessageId(UUID.randomUUID().toString()); erplog.setSendMsg(sendData.toJSONString()); erplog.setSendMsg2(sendData.toJSONString()); erplog.setReturnMsg2(sapreturn); erplog.setResultCode(rcode); - MessageLogUtil.writeMessageLog(erplog);*/ + MessageLogUtil.writeMessageLog(erplog); } catch (Exception e) { log.info(e.getMessage(), e); -// throw new RuntimeException("SAP返回" + e.toString()); + throw new RuntimeException("SAP返回" + e.toString()); } - /* if (!"S".equals(rcode)) { + if (!"S".equals(rcode)) { throw new RuntimeException("SAP返回" + rmsg); - }*/ - return null; + } + return undoId; } /** diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/CostCenterController.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/CostCenterController.java index 3b59711..520f3d4 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/controller/CostCenterController.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/CostCenterController.java @@ -29,8 +29,8 @@ public class CostCenterController { * @return */ @RequestMapping(value = "/getCostCenter", method = RequestMethod.GET) - public BaseResponse getCostCenter() { - List costCenters = costCenterService.getCostCenter(); + public BaseResponse getCostCenter(String erpFactory) { + List costCenters = costCenterService.getCostCenter(erpFactory); return RespGenerator.returnOK(costCenters); } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/MaterialReceiveActController.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/MaterialReceiveActController.java index 02f4b2c..640b037 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/controller/MaterialReceiveActController.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/MaterialReceiveActController.java @@ -7,6 +7,7 @@ import com.cim.idm.constants.delivery.DeliveryStateEnums; import com.cim.idm.constants.receive.ReceiveTypeEnums; import com.cim.idm.framework.IDMFrameServiceProxy; import com.cim.idm.framework.data.EventInfo; +import com.cim.idm.model.MaterialReceiveParam; import com.cim.idm.model.dto.AuxiliaryOutIn; import com.cim.idm.model.dto.delivery.DeliveryEditDto; import com.cim.idm.model.dto.delivery.StoreDetailDto; @@ -21,6 +22,7 @@ import com.cim.idm.service.CostCenterService; import com.cim.idm.service.IDeliveryService; import com.cim.idm.service.IMaterialPackingService; import com.cim.idm.service.IMaterialShipService; +import com.cim.idm.service.Impl.NoInvoiceManagerServiceImpl; import com.cim.idm.service.impl.QMSServiceImpl; import com.cim.idm.service.impl.ToSAPServiceImpl; import com.cim.idm.utils.AjaxResult; @@ -32,6 +34,7 @@ import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey import com.cim.idm.wmspackage.materialpacking.management.info.CreateInfo; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.json.JSONArray; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.transaction.annotation.Transactional; @@ -43,6 +46,7 @@ import org.apache.commons.lang3.StringUtils; import java.math.BigDecimal; import java.sql.Timestamp; +import java.text.ParseException; import java.util.*; import com.cim.idm.service.Impl.SDKMaterialPackingServiceImpl; @@ -59,6 +63,10 @@ public class MaterialReceiveActController { @Resource private IMaterialPackingService mpService; + @Autowired + NoInvoiceManagerServiceImpl NoInvoiceManagerServiceImpl; + @Autowired + private ToSAPServiceImpl toSAPService; private static Log log = LogFactory.getLog(MaterialReceiveActController.class); private EventInfo makeEventInfo; @@ -327,6 +335,7 @@ public class MaterialReceiveActController { String checkType = auxiliaryOutIn.getCheckType(); String user = auxiliaryOutIn.getUser(); String nums = auxiliaryOutIn.getNums(); + BigDecimal numsBigDecimal = new BigDecimal(nums); String siteName = auxiliaryOutIn.getSiteName(); String erpFactory = auxiliaryOutIn.getErpFactory(); String erpLocation = auxiliaryOutIn.getErpLocation(); @@ -338,14 +347,14 @@ public class MaterialReceiveActController { return AjaxResult.me().setSuccess(false).setMessage("物料编号" + materialSpecName + "不存在"); } if ("盘盈".equals(checkType)) { - String phase = materialInfo.getPhase() != null ? materialInfo.getPhase() : "C"; String width = materialInfo.getWidth(); String materialUnit = materialInfo.getMaterialUnit(); String materialType = materialInfo.getMaterialType(); + String descCn = materialInfo.getDescCn(); List boxIds = MaterialPackingServiceImpl.generateBoxID("LabelId", siteName, "1", DateUtil.now(), "WL", erpFactory); - //470110856|1|C|75mm*1000m|SHBP01JT1202305240009|20230524|11|75 - String newBoxId = materialSpecName + "|1|" + phase + "|" + width + "|" + boxIds.get(0) + "|" + //470110856|1||75mm*1000m|SHBP01JT1202305240009|20230524|11|75 + String newBoxId = materialSpecName + "|1|" + "|" + width + "|" + boxIds.get(0) + "|" + makeDate.replace("-", "").substring(0, 8) + "|" + materialUnit + "|" + nums; EventInfo makeEventInfo = new EventInfoUtil().makeEventInfo("TrackOutBox", user, "TrackOutBox"); Map bindMap = new HashMap(); @@ -360,12 +369,14 @@ public class MaterialReceiveActController { bindMap.put("stockState", "Created"); bindMap.put("materialPackingName", newBoxId); bindMap.put("charge", boxIds.get(0)); - bindMap.put("materialPackingType", "Box"); + bindMap.put("truegg", width); + bindMap.put("unit", materialUnit); bindMap.put("materialType", materialType); bindMap.put("createUser", user); bindMap.put("createTime", DateUtil.now()); CreateInfo createInfo = new CreateInfo(); createInfo.setMaterialPackingName(newBoxId); + createInfo.setMaterialPackingType("Box"); createInfo.setSiteName(auxiliaryOutIn.getSiteName()); createInfo.setUserColumns(bindMap); MaterialPacking materialPacking = MaterialPackingServiceProxy.getMaterialPackingService().create( @@ -373,12 +384,146 @@ public class MaterialReceiveActController { List> maps = costCenterService.getByMaterialPackingName(newBoxId); return AjaxResult.me().setResultObj(maps); } else { - // todo - List> maps = costCenterService.getMaterialPacking(materialSpecName,siteName,erpFactory, + List> maps = costCenterService.getMaterialPacking(materialSpecName,siteName,erpFactory, erpLocation, location, nums); - return AjaxResult.me().setResultObj(maps); + if (maps == null || maps.size() <= 0) { + return AjaxResult.me().setSuccess(false).setMessage("没有符合条件的数据"); + } + BigDecimal materialquantity = maps.stream() + .map(map -> (BigDecimal) map.get("MATERIALQUANTITY")) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + if (materialquantity.compareTo(numsBigDecimal) < 0) { + return AjaxResult.me().setSuccess(false).setMessage("数量不足"); + } + List> linkedHashMaps = pickMaterialQuantities(maps, numsBigDecimal); + return AjaxResult.me().setResultObj(linkedHashMaps); } } + + public List> pickMaterialQuantities(List> maps, BigDecimal requiredQuantity) { + List> resultList = new ArrayList<>(); + BigDecimal remaining = requiredQuantity; + + for (LinkedHashMap item : maps) { + // 获取当前记录的数量 + BigDecimal materialQuantity = (BigDecimal) item.get("MATERIALQUANTITY"); + if (materialQuantity == null || materialQuantity.compareTo(BigDecimal.ZERO) <= 0 + || remaining.compareTo(BigDecimal.ZERO) <= 0) { + continue; // 数量无效 + } + + // 计算可以取多少 + BigDecimal take = materialQuantity.min(remaining); + + // 创建新的记录并设置数量 + LinkedHashMap newItem = new LinkedHashMap<>(item); // 复制原有字段 + newItem.put("MATERIALQUANTITY", take); // 替换数量 + + // 添加到结果集 + resultList.add(newItem); + + // 更新剩余数量 + remaining = remaining.subtract(take); + + // 如果已经满足需求,退出循环 + if (remaining.compareTo(BigDecimal.ZERO) == 0) { + break; + } + } + + return resultList; + } + + /** + * 盘盈入库---pc + * @param in + * @return + * @throws ParseException + */ + @RequestMapping(value = "/QTRCommit", method = RequestMethod.POST) + public AjaxResult QTRCommit(@RequestBody JSONObject in ) throws ParseException { + MaterialReceiveRequest sl = JSON.toJavaObject(in, MaterialReceiveRequest.class); + String commitDateString = sl.getCommitDate(); + List boxList = sl.getBoxList(); + String user2 = sl.getUser(); + String opCode = sl.getOpCode(); + String commitDate = commitDateString + " 00:00:00"; + String costName = sl.getCostName(); + String lifnr = sl.getLifnr(); + String qtc = sl.getQtc(); + NoInvoiceManagerServiceImpl.QTR(boxList,user2,commitDate,opCode,costName,lifnr,qtc); + + return AjaxResult.me().setResultObj(null); + + } + + /** + * 盘亏出库---pc + * @param in + * @return + */ + @RequestMapping(value = "/QTCCommit", method = RequestMethod.POST) + @Transactional + public AjaxResult QTCCommit(@RequestBody JSONObject in ){ + MaterialReceiveRequest sl = JSON.toJavaObject(in, MaterialReceiveRequest.class); + MaterialReceiveParam slParam = JSON.toJavaObject(in, MaterialReceiveParam.class); + List boxList = sl.getBoxList(); + List> boxListParam = slParam.getBoxList(); + String siteName = sl.getSiteName(); + String user = in.get("user").toString(); + String commitDatesString = sl.getCommitDate(); + String commitDate = commitDatesString + " 00:00:00"; + String opCode = sl.getOpCode(); + // 移动类型 + String qtc = sl.getQtc(); + // 成本中心 + String costName = sl.getCostName(); + String undoId = ""; + try { + undoId = toSAPService.MaterialScrapStockOutPc(boxListParam,siteName,user,commitDate,opCode,qtc,costName); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.me().setSuccess(false).setMessage(e.toString()); + } + if (StringUtils.isEmpty(undoId)) { + return AjaxResult.me().setSuccess(false).setMessage("undoId为空"); + } + // 发送过账 + EventInfoUtil util = new EventInfoUtil(); + String enentName = "报废出库"; + if ("Z05".equals(qtc)) { + enentName = "盘亏出库"; + } + makeEventInfo = util.makeEventInfo(enentName, user, enentName); + // 更新库存状态 + SDKMaterialPackingServiceImpl.SaveUnDoInfo(undoId,commitDate); + List updateList = new ArrayList<>(); + for(MaterialPacking materialPacking : boxList) { + List> maps = costCenterService.getByMaterialPackingName(materialPacking.getMaterialPackingName()); + if (maps == null || maps.size() <= 0) { + // 数据不存在,跳过或抛异常 + continue; + } + HashMap hashMap = maps.get(0); + // 数据库中数量 + BigDecimal materialquantity = (BigDecimal)hashMap.get("MATERIALQUANTITY"); + // 前端传递数量 + BigDecimal materialQuantityFont = BigDecimal.valueOf(materialPacking.getMaterialQuantity()); + if (materialquantity.compareTo(materialQuantityFont) <= 0) { + updateList.add(materialPacking); + } else { + // 更新库存数量 + costCenterService.updateQty(materialPacking.getMaterialPackingName(), materialQuantityFont, user); + } + } + // 更新入库凭证和库存状态 + SDKMaterialPackingServiceImpl.updateUndoIdByList(updateList, undoId, makeEventInfo,opCode); + + return AjaxResult.me().setResultObj(null); + + } + @RequestMapping(value = "/DeleteTrackOutBox", method = RequestMethod.POST) public AjaxResult DeleteTrackOutBox(@RequestBody JSONObject in ) throws Exception{ // 获取属性 diff --git a/zi-wms-pda/src/main/java/com/cim/idm/dao/CostCenterDao.java b/zi-wms-pda/src/main/java/com/cim/idm/dao/CostCenterDao.java index 5a5b57e..32351c8 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/dao/CostCenterDao.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/dao/CostCenterDao.java @@ -6,7 +6,9 @@ import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Component; +import java.math.BigDecimal; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -14,7 +16,7 @@ import java.util.Map; @Mapper public interface CostCenterDao { - List getCostCenter(); + List getCostCenter(@Param("erpFactory") String erpFactory); List> getUserInfo(); void updatePacking(@Param("SALESHIPREQUESTNAME") String SALESHIPREQUESTNAME, @@ -54,12 +56,16 @@ public interface CostCenterDao { MaterialInfo getMaterialInfo(@Param("materialSpecName") String materialSpecName); - List> getMaterialPacking(@Param("materialSpecName") String materialSpecName, - @Param("siteName") String siteName, - @Param("erpFactory") String erpFactory, - @Param("erpLocation") String erpLocation, - @Param("location") String location, - @Param("nums") String nums); + List> getMaterialPacking(@Param("materialSpecName") String materialSpecName, + @Param("siteName") String siteName, + @Param("erpFactory") String erpFactory, + @Param("erpLocation") String erpLocation, + @Param("location") String location, + @Param("nums") String nums); List> getByMaterialPackingName(String newBoxId); + + void updateQty(@Param("materialPackingName") String materialPackingName, + @Param("materialQuantityFont") BigDecimal materialQuantityFont, + @Param("user") String user); } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/model/LabelParameterObject.java b/zi-wms-pda/src/main/java/com/cim/idm/model/LabelParameterObject.java index 51cd1f9..a2b9beb 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/model/LabelParameterObject.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/model/LabelParameterObject.java @@ -108,5 +108,5 @@ public class LabelParameterObject { private String item3; private String item4; private String item5; - + private String locationcode; } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/model/LabelPrintPET.java b/zi-wms-pda/src/main/java/com/cim/idm/model/LabelPrintPET.java index cf8ed68..c1a6efc 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/model/LabelPrintPET.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/model/LabelPrintPET.java @@ -54,6 +54,8 @@ public class LabelPrintPET { private String stageCode; //单位 private String mainUom; + //库位 + private String locationcode; public List creatLabelPET(){ List labelPETList = new ArrayList<>(); @@ -80,6 +82,7 @@ public class LabelPrintPET { labelPETList.add("specifications"); labelPETList.add("stageCode"); labelPETList.add("mainUom"); + labelPETList.add("locationcode"); return labelPETList; } } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/model/MaterialReceiveParam.java b/zi-wms-pda/src/main/java/com/cim/idm/model/MaterialReceiveParam.java new file mode 100644 index 0000000..807eeba --- /dev/null +++ b/zi-wms-pda/src/main/java/com/cim/idm/model/MaterialReceiveParam.java @@ -0,0 +1,45 @@ +package com.cim.idm.model; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @Description + * @Author admin + * @Date 2025/5/28 9:32 + */ +@Data +public class MaterialReceiveParam { + private String receiveRequestName; + private String siteName; + private String barCode; + private String user; + private String eventName; + private String receiveRequestType; + private String RECEIVEACTNO; + private String erpFactory; + private String erpLocation; + private String remark; //备注 + private String commitDate; + private String opCode; + private String type; + private String STOCKORGNO; + private String MaterialPackingName; + private String materialSpecName; + private String materialQuantity; + private String materialQuantity2; + private String sdk_id; + private String phase; + private String CUSTOMNO; + private String truegg; + private String costName; + private String lifnr; + private String qtc; + /**销售订单*/ + private String SALESHIPREQUESTNAME; + /**销售订单行号*/ + private String SALESHIPREQUESTDETAILNAME; + private List> boxList; +} diff --git a/zi-wms-pda/src/main/java/com/cim/idm/model/vo/MaterialInfo.java b/zi-wms-pda/src/main/java/com/cim/idm/model/vo/MaterialInfo.java index 8629b90..4a84215 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/model/vo/MaterialInfo.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/model/vo/MaterialInfo.java @@ -15,4 +15,5 @@ public class MaterialInfo { private String phase; private String width; private String materialType; + private String descCn; } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/CostCenterService.java b/zi-wms-pda/src/main/java/com/cim/idm/service/CostCenterService.java index 1383cd2..26e010d 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/CostCenterService.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/CostCenterService.java @@ -5,12 +5,14 @@ import com.cim.idm.model.CostCenter; import com.cim.idm.model.MaterialPacking; import com.cim.idm.model.vo.MaterialInfo; +import java.math.BigDecimal; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public interface CostCenterService { - List getCostCenter(); + List getCostCenter(String erpFactory); List> getUserInfo(); void updateCareerAssistanceNew(JSONObject in); @@ -23,7 +25,9 @@ public interface CostCenterService { void editMaterialPackingName(MaterialPacking materialPacking); MaterialInfo getMaterialInfo(String materialSpecName); - List> getMaterialPacking(String materialSpecName, String siteName, String erpFactory, String erpLocation, String location, String nums); + List> getMaterialPacking(String materialSpecName, String siteName, String erpFactory, String erpLocation, String location, String nums); List> getByMaterialPackingName(String newBoxId); + + void updateQty(String materialPackingName, BigDecimal materialQuantityFont, String user); } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/BSLabelServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/BSLabelServiceImpl.java index c4ea271..edc7c5b 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/BSLabelServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/BSLabelServiceImpl.java @@ -1854,7 +1854,7 @@ public class BSLabelServiceImpl extends CommonServiceDAO im pr.setPrintRequestID(UUID.randomUUID().toString()); LabelParameterObject obj = new LabelParameterObject(); List> queryForListProduct = new ArrayList<>(); - if ("PET标签-电晕.btw".equals(labelAddress)) { + if ("PET标签-电晕.btw".equals(labelAddress) || "PET标签-电晕-兴远泰.btw".equals(labelAddress) || "PET标签-涂布面.btw".equals(labelAddress) || "PET标签-涂布面-兴远泰.btw".equals(labelAddress)) { params = new LabelPrintPET().creatLabelPET(); labelPath = "C:\\inetpub\\wwwroot\\BarTender\\wwwroot\\Templates\\WMS\\WHRePrint\\" + labelAddress; pr.setAbsolutePath(labelPath); @@ -1876,9 +1876,12 @@ public class BSLabelServiceImpl extends CommonServiceDAO im " LN.STAGECODE,\n" + " LN.DEFINEITEM16,\n" + " LN.MAINUOM,\n" + - " LN.DEFINEITEM9\n" + + " LN.DEFINEITEM9,\n" + + " MP.ERPLOCATION,\n" + + " MP.LOCATIONNAME" + " FROM\n" + " LABELPRINTINFO LN \n" + + " LEFT JOIN MATERIALPACKING MP ON LN.BARCODE = MP.MATERIALPACKINGNAME " + " LEFT JOIN MATERIALSPEC MS ON LN.MATERIALCODE = MS.MATERIALSPECNAME\n" + " WHERE\n" + " LN.BARCODE =:MATERIALPACKINGNAME "; @@ -1900,9 +1903,12 @@ public class BSLabelServiceImpl extends CommonServiceDAO im "LN.STAGECODE,\n" + "LN.DEFINEITEM16,\n" + "LN.MAINUOM,\n" + - "LN.DEFINEITEM9 " + + "LN.DEFINEITEM9, " + + " MP.ERPLOCATION,\n" + + " MP.LOCATIONNAME" + "FROM\n" + "\tLABELPRINTINFO LN \n" + + " LEFT JOIN MATERIALPACKING MP ON LN.BARCODE = MP.MATERIALPACKINGNAME " + "WHERE\n" + "\tLN.BARCODE =:MATERIALPACKINGNAME "; } @@ -1954,6 +1960,10 @@ public class BSLabelServiceImpl extends CommonServiceDAO im //单位 String mainUom = queryForListProduct.get(0).get("MAINUOM") == null ? "" : queryForListProduct.get(0).get("MAINUOM").toString(); labelPrintPET.setMainUom(mainUom); + //仓库编码+空格+货位编码 + String erpLocation = queryForListProduct.get(0).get("ERPLOCATION") == null ? "" : queryForListProduct.get(0).get("ERPLOCATION").toString(); + String locationname = queryForListProduct.get(0).get("LOCATIONNAME") == null ? "" : queryForListProduct.get(0).get("LOCATIONNAME").toString(); + labelPrintPET.setLocationcode(erpLocation + " " + locationname); labelPrintPET.setWide(""); labelPrintPET.setLength(""); labelPrintPET.setLineSpeed(""); @@ -1967,8 +1977,8 @@ public class BSLabelServiceImpl extends CommonServiceDAO im throw new CustomException(CustomExceptionCode.DATA_ERROR, "要打印的PET标签信息不存在"); } - }else if ("Sdk2.btw".equals(labelAddress)){ - labelPath = "C:\\inetpub\\wwwroot\\BarTender\\wwwroot\\Templates\\WMS\\" + labelAddress; + }else if ("膜材标签-泗洪.btw".equals(labelAddress) || "膜材标签-太仓.btw".equals(labelAddress) || "膜材标签-东莞.btw".equals(labelAddress) || "膜材标签-重庆.btw".equals(labelAddress) || "膜材标签-越南.btw".equals(labelAddress)){ + labelPath = "C:\\inetpub\\wwwroot\\BarTender\\wwwroot\\Templates\\WMS\\WHRePrint\\" + labelAddress; pr.setAbsolutePath(labelPath); if (newMaterialSpecSwitch.equals("Y")){ qeuryLabelDatasql = " SELECT\n" + @@ -1983,7 +1993,8 @@ public class BSLabelServiceImpl extends CommonServiceDAO im " m.RECEIVEUSER operater,\n" + " m.CHARGE lotNo,NVL(m.suppliername,'') supplierNo,\n" + " m.REMARK remark,TO_CHAR(m.RECEIVETIME,'YYYYMMDD') jumboRollBatch,\n" + - " TO_CHAR(MAKEDATE,'YYYYMMDD') makedate, TO_CHAR(EXPIRINGDATE,'YYYYMMDD') expdate ,m.RECEIVEUSER opreater\n" + + " TO_CHAR(MAKEDATE,'YYYYMMDD') makedate, TO_CHAR(EXPIRINGDATE,'YYYYMMDD') expdate ,m.RECEIVEUSER opreater," + + " m.ERPLOCATION,m.LOCATIONNAME \n" + " FROM\n" + " MATERIALPACKING m\n" + " LEFT JOIN SDK_SPEC ss ON\n" + @@ -2007,7 +2018,8 @@ public class BSLabelServiceImpl extends CommonServiceDAO im " m.RECEIVEUSER operater,\r\n" + " m.CHARGE lotNo,NVL(m.suppliername,'') supplierNo,\r\n" + " m.REMARK remark,TO_CHAR(m.RECEIVETIME,'YYYYMMDD') jumboRollBatch," - + "TO_CHAR(MAKEDATE,'YYYYMMDD') makedate, TO_CHAR(EXPIRINGDATE,'YYYYMMDD') expdate ,m.RECEIVEUSER opreater\r\n" + + + "TO_CHAR(MAKEDATE,'YYYYMMDD') makedate, TO_CHAR(EXPIRINGDATE,'YYYYMMDD') expdate ,m.RECEIVEUSER opreater," + + " m.ERPLOCATION,m.LOCATIONNAME\r\n" + "FROM\r\n" + " MATERIALPACKING m\r\n" + "LEFT JOIN SDK_SPEC ss ON\r\n" + @@ -2064,12 +2076,15 @@ public class BSLabelServiceImpl extends CommonServiceDAO im obj.setMakedate(queryForListProduct.get(0).get("makedate") != null ? queryForListProduct.get(0).get("makedate").toString() : ""); obj.setSupplierno(queryForListProduct.get(0).get("supplierNo") != null ? queryForListProduct.get(0).get("supplierNo").toString() : ""); obj.setDescription(queryForListProduct.get(0).get("description") != null ? queryForListProduct.get(0).get("description").toString() : ""); + String erpLocation = queryForListProduct.get(0).get("ERPLOCATION") == null ? "" : queryForListProduct.get(0).get("ERPLOCATION").toString(); + String locationName = queryForListProduct.get(0).get("LOCATIONNAME") == null ? "" : queryForListProduct.get(0).get("LOCATIONNAME").toString(); + obj.setLocationcode(erpLocation + " " + locationName); log.info("***************************PrintLabel Assign params is : " + params.toString()); //labelUrl = labelPrintRabbitMQ(obj, requestUrl, pr, params); labelUrl = labelPrint(obj, requestUrl, pr, params); log.info("***************************PrintLabel Use URL is : " + requestUrl); - }else if ("胶水原材.btw".equals(labelAddress)){ - labelPath = "C:\\inetpub\\wwwroot\\BarTender\\wwwroot\\Templates\\WMS\\" + labelAddress; + }else if ("胶水标签.btw".equals(labelAddress)){ + labelPath = "C:\\inetpub\\wwwroot\\BarTender\\wwwroot\\Templates\\WMS\\WHRePrint\\" + labelAddress; pr.setAbsolutePath(labelPath); if (newMaterialSpecSwitch.equals("Y")){ qeuryLabelDatasql = "SELECT\r\n" + @@ -2084,7 +2099,8 @@ public class BSLabelServiceImpl extends CommonServiceDAO im " m.RECEIVEUSER operater,\r\n" + " m.CHARGE lotNo,NVL(m.suppliername,'') supplierNo,\r\n" + " m.REMARK remark,TO_CHAR(m.RECEIVETIME,'YYYYMMDD') jumboRollBatch," - + "TO_CHAR(MAKEDATE,'YYYYMMDD') makedate, TO_CHAR(EXPIRINGDATE,'YYYYMMDD') expdate ,m.RECEIVEUSER opreater\r\n" + + + "TO_CHAR(MAKEDATE,'YYYYMMDD') makedate, TO_CHAR(EXPIRINGDATE,'YYYYMMDD') expdate ,m.RECEIVEUSER opreater," + + " m.ERPLOCATION,m.LOCATIONNAME\r\n" + "FROM\r\n" + " MATERIALPACKING m\r\n" + "LEFT JOIN SDK_SPEC ss ON\r\n" + @@ -2108,7 +2124,8 @@ public class BSLabelServiceImpl extends CommonServiceDAO im " m.RECEIVEUSER operater,\r\n" + " m.CHARGE lotNo,NVL(m.suppliername,'') supplierNo,\r\n" + " m.REMARK remark,TO_CHAR(m.RECEIVETIME,'YYYYMMDD') jumboRollBatch," - + "TO_CHAR(MAKEDATE,'YYYYMMDD') makedate, TO_CHAR(EXPIRINGDATE,'YYYYMMDD') expdate ,m.RECEIVEUSER opreater\r\n" + + + "TO_CHAR(MAKEDATE,'YYYYMMDD') makedate, TO_CHAR(EXPIRINGDATE,'YYYYMMDD') expdate ,m.RECEIVEUSER opreater," + + " m.ERPLOCATION,m.LOCATIONNAME\r\n" + "FROM\r\n" + " MATERIALPACKING m\r\n" + "LEFT JOIN SDK_SPEC ss ON\r\n" + @@ -2165,6 +2182,9 @@ public class BSLabelServiceImpl extends CommonServiceDAO im obj.setMakedate(queryForListProduct.get(0).get("makedate") != null ? queryForListProduct.get(0).get("makedate").toString() : ""); obj.setSupplierno(queryForListProduct.get(0).get("supplierNo") != null ? queryForListProduct.get(0).get("supplierNo").toString() : ""); obj.setDescription(queryForListProduct.get(0).get("description") != null ? queryForListProduct.get(0).get("description").toString() : ""); + String erpLocation = queryForListProduct.get(0).get("ERPLOCATION") == null ? "" : queryForListProduct.get(0).get("ERPLOCATION").toString(); + String locationName = queryForListProduct.get(0).get("LOCATIONNAME") == null ? "" : queryForListProduct.get(0).get("LOCATIONNAME").toString(); + obj.setLocationcode(erpLocation + " " + locationName); log.info("***************************PrintLabel Assign params is : " + params.toString()); //labelUrl = labelPrintRabbitMQ(obj, requestUrl, pr, params); labelUrl = labelPrint(obj, requestUrl, pr, params); diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/CostCenterServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/CostCenterServiceImpl.java index 242d733..df571a9 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/CostCenterServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/CostCenterServiceImpl.java @@ -22,10 +22,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.math.BigDecimal; +import java.util.*; @Service("CostCenterService") @Slf4j @@ -37,8 +35,8 @@ public class CostCenterServiceImpl implements CostCenterService { private ToSAPServiceImpl toSAPService; @Override - public List getCostCenter() { - return costCenterDao.getCostCenter(); + public List getCostCenter(String erpFactory) { + return costCenterDao.getCostCenter(erpFactory); } @Override @@ -163,7 +161,7 @@ public class CostCenterServiceImpl implements CostCenterService { } @Override - public List> getMaterialPacking(String materialSpecName, String siteName, String erpFactory, String erpLocation, String location, String nums) { + public List> getMaterialPacking(String materialSpecName, String siteName, String erpFactory, String erpLocation, String location, String nums) { return costCenterDao.getMaterialPacking(materialSpecName,siteName,erpFactory, erpLocation, location, nums); } @@ -172,4 +170,9 @@ public class CostCenterServiceImpl implements CostCenterService { public List> getByMaterialPackingName(String newBoxId) { return costCenterDao.getByMaterialPackingName(newBoxId); } + + @Override + public void updateQty(String materialPackingName, BigDecimal materialQuantityFont, String user) { + costCenterDao.updateQty(materialPackingName, materialQuantityFont, user); + } } 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 6edf335..074e2c5 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 @@ -30,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.sql.Timestamp; import java.util.*; @@ -666,24 +667,49 @@ public class MESToWMSServiceImpl implements MESToWMSService { log.info("Received work order request: {}", in.toJSONString()); List> mapList = new ArrayList<>(); for (int i = 0; i < in.size(); i++) { + String line = "第" + (i + 1) + "行,"; JSONObject jsonObject = in.getJSONObject(i); Map map = new HashMap<>(); // 料号 String materialSpecname = jsonObject.getString("materialSpecname"); + if (StringUtils.isEmpty(materialSpecname)) { + return AjaxResult.me().setSuccess(false).setErrorCode(500). + setMessage(line + "料号-materialSpecname-不能为空"); + } // 组织 String WERKS = jsonObject.getString("WERKS"); + if (StringUtils.isEmpty(WERKS)) { + return AjaxResult.me().setSuccess(false).setErrorCode(500). + setMessage(line + "组织-WERKS-不能为空"); + } // 仓库 - String LGORT = jsonObject.getString("LGORT"); + String LGORT = jsonObject.getString("erpLocation"); + if (StringUtils.isEmpty(LGORT)) { + return AjaxResult.me().setSuccess(false).setErrorCode(500). + setMessage(line + "仓库-erpLocation-不能为空"); + } + if (StringUtils.isEmpty(jsonObject.getString("MENGE"))) { + return AjaxResult.me().setSuccess(false).setErrorCode(500). + setMessage(line + "数量-MENGE-不能为空"); + } // 数量 - String MENGE = jsonObject.getString("MENGE"); + BigDecimal MENGE = new BigDecimal(jsonObject.getString("MENGE")); // 单位 String MEINS = jsonObject.getString("MEINS"); + if (StringUtils.isEmpty(MEINS)) { + return AjaxResult.me().setSuccess(false).setErrorCode(500). + setMessage(line + "单位-MEINS-不能为空"); + } // 自定义领料单号 String ZLLORDER = jsonObject.getString("ZLLORDER"); // 自定义领料单行号 String ZLLITEM = jsonObject.getString("ZLLITEM"); // 工单 - String AUFNR = jsonObject.getString("AUFNR"); + String AUFNR = jsonObject.getString("toOrder"); + if (StringUtils.isEmpty(AUFNR)) { + return AjaxResult.me().setSuccess(false).setErrorCode(500). + setMessage(line + "工单-toOrder-不能为空"); + } map.put("MATNR", materialSpecname); map.put("WERKS", WERKS); @@ -696,8 +722,19 @@ public class MESToWMSServiceImpl implements MESToWMSService { mapList.add(map); } // 出库 - String undoid = toSAPService.StockOutByOrder_new(mapList, "MES", "262"); - return AjaxResult.me().setResultObj(null).setSuccess(true).setErrorCode(200).setMessage("执行成功,物料凭证 " + undoid); + String undoidOut = toSAPService.StockOutByOrder_new(mapList, "MES", "262"); + // 入库 + String undoidIn = toSAPService.StockOutByOrder_new(mapList, "MES", "261"); + if (StringUtils.isEmpty(undoidIn)) { + // 冲销 + String undo = invoiceService.cancelShipInter(undoidOut, "MES"); + if (undo == null || undo.isEmpty()) { + throw new GlobalException("下发mes失败后冲销失败!"); + } else { + throw new GlobalException("发送到mes失败!"); + } + } + return AjaxResult.me().setResultObj(null).setSuccess(true).setErrorCode(200).setMessage("执行成功,物料凭证 " + undoidIn); } /** * 接收MES请求工单请求 diff --git a/zi-wms-pda/src/main/resources/com/cim/idm/dao/CostCenterDao.xml b/zi-wms-pda/src/main/resources/com/cim/idm/dao/CostCenterDao.xml index 2f10696..bc4632a 100644 --- a/zi-wms-pda/src/main/resources/com/cim/idm/dao/CostCenterDao.xml +++ b/zi-wms-pda/src/main/resources/com/cim/idm/dao/CostCenterDao.xml @@ -5,6 +5,8 @@ - select * from MATERIALPACKING where MATERIALSPECNAME = #{materialSpecName} AND SITENAME = #{siteName} AND ERPFACTORY = #{erpFactory} AND ERPLOCATION = #{erpLocation} - AND LOCATIONNAME = #{location} + + AND LOCATIONNAME = #{location} + + AND stockstate = 'Stocked' + order by CREATETIME + + + update MATERIALPACKING set MATERIALQUANTITY = MATERIALQUANTITY - #{materialQuantityFont}, + LASTEVENTTIME = SYSDATE, LASTEVENTUSER = #{user} + where MATERIALPACKINGNAME = #{materialPackingName} + \ No newline at end of file