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 48ce28b..f926d6e 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 @@ -444,6 +444,69 @@ public class ToSAPServiceImpl { return undoId; } + public String FGStockIn3(String RECEIVEACTNO, String user, String stockInType) throws Exception { + StringBuffer sql = new StringBuffer(); + sql.append(SystemPropHelper.CR) + .append("SELECT m.MATERIALSPECNAME ,").append(SystemPropHelper.CR) + .append(" m.PRODUCTORDER ,").append(SystemPropHelper.CR) + .append(" m.PACKINGGRADE ,").append(SystemPropHelper.CR) + .append(" m.ERPFACTORY ,").append(SystemPropHelper.CR) + .append(" m.ERPLOCATION ,").append(SystemPropHelper.CR) + .append(" m.UNIT ,").append(SystemPropHelper.CR) + .append(" m.PACKINGGRADE,").append(SystemPropHelper.CR) + .append(" :MATERIALSPECTYPE MATERIALSPECTYPE,").append(SystemPropHelper.CR) + .append(" sum(m.MATERIALQUANTITY ) MATERIALQUANTITY ").append(SystemPropHelper.CR) + .append(" FROM MATERIALPACKING m ").append(SystemPropHelper.CR) + .append("LEFT JOIN BS_MES_SHIPPED bms ON m.materialpackingname = bms.lotname ").append(SystemPropHelper.CR) + .append(" WHERE bms.RECEIVE_FLAG <> 'Y' ").append(SystemPropHelper.CR) + .append(" AND m.STOCKSTATE = 'Created' ").append(SystemPropHelper.CR) + .append(" AND m.RECEIVEACTNO = :RECEIVEACTNO ").append(SystemPropHelper.CR) + .append("GROUP BY m.MATERIALSPECNAME ,m.PRODUCTORDER ,m.PACKINGGRADE ,m.ERPFACTORY ,m.ERPLOCATION ,m.UNIT ,").append(SystemPropHelper.CR) + .append(" m.PACKINGGRADE,m.MATERIALSPECTYPE "); + Map hashMap = new HashMap(); + hashMap.put("RECEIVEACTNO", RECEIVEACTNO); + hashMap.put("MATERIALSPECTYPE", stockInType); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql.toString(), hashMap); + String makeFGStockIn = makeFGStockIn(queryForList, user, RECEIVEACTNO); + String sapreturn = ""; + String rcode = ""; + String rmsg = ""; + String undoId = ""; + try { + sapreturn = toSAPMessageUtil.sendHttpPost(toSAPMessageUtil.materialChangeLocationUrl, "", + makeFGStockIn); + 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();//将物料凭证号与凭证年度拼在一起 + } + } catch (Exception e) { + log.error("WMS请求SAP异常:" + e.getMessage(), e); + throw new RuntimeException("WMS请求SAP异常:" + rmsg); + } finally { + // 将消息记录log表 + ErpMessageLog erplog = new ErpMessageLog(); + erplog.setEventUser(user); + erplog.setServerName("WmsToErp"); + erplog.setEventName("FGStockIn"); + erplog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT)); + erplog.setMessageId(RECEIVEACTNO); + erplog.setSendMsg(makeFGStockIn); + erplog.setSendMsg2(makeFGStockIn); + erplog.setSendMsg(makeFGStockIn); + erplog.setReturnMsg2(sapreturn); + erplog.setResultCode(rcode); + MessageLogUtil.writeMessageLog(erplog); + } + if (!"S".equals(rcode)) { + throw new RuntimeException("SAP返回" + rmsg); + } + return undoId; + } + /** * 手动入库处理FGStockIn请求 * 该方法负责将特定的物料信息发送到SAP系统,并处理返回的结果 diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/QMSController.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/QMSController.java index fb8f105..2e3e71c 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/controller/QMSController.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/QMSController.java @@ -417,7 +417,6 @@ public class QMSController { 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"; diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java index d82c51f..272b6bb 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java @@ -18,6 +18,7 @@ import com.cim.idm.service.impl.MESServiceImpl; import com.cim.idm.service.impl.ToSAPServiceImpl; import com.cim.idm.util.MessageLogUtil; import com.cim.idm.util.ToSAPMessageUtil; +import com.cim.idm.utils.CodeGenerator; import com.cim.idm.utils.CommonUtils; import com.cim.idm.utils.EventInfoUtil; import com.cim.idm.wmsextend.generic.errorHandler.CustomException; @@ -377,22 +378,28 @@ public class InvoiceServiceImpl implements InvoiceService { // 查询MATERIALQUANTITY 与 MATERIALQUANTITY2是否相等,如果相等则未修改数量,不相等则修改数量 // 如果已修改数量,则进行拆单 - for (int z = 0; z < qtyQueryForList.size(); z++) { - String qty = qtyQueryForList.get(z).get("MATERIALQUANTITY").toString(); - String qty2 = qtyQueryForList.get(z).get("MATERIALQUANTITY2") == null ? "0" : qtyQueryForList.get(z).get("MATERIALQUANTITY2").toString(); - BigDecimal bigQty = new BigDecimal(qty); - // 已拆数量 - BigDecimal bigQty2 = new BigDecimal(qty2); - - if(bigQty.compareTo(bigQty2) != 0) { - // 剩余数量 - BigDecimal restQty = bigQty.subtract(bigQty2); - - - - } - - } +// for (int z = 0; z < qtyQueryForList.size(); z++) { +// String qty = qtyQueryForList.get(z).get("MATERIALQUANTITY").toString(); +// String qty2 = qtyQueryForList.get(z).get("MATERIALQUANTITY2") == null ? "0" : qtyQueryForList.get(z).get("MATERIALQUANTITY2").toString(); +// String materialPackingName = qtyQueryForList.get(z).get("MATERIALPACKINGNAME").toString(); +// BigDecimal bigQty = new BigDecimal(qty); +// // 已拆数量 +// BigDecimal bigQty2 = new BigDecimal(qty2); +// +// if(bigQty.compareTo(bigQty2) != 0) { +// // 剩余数量 +// BigDecimal restQty = bigQty.subtract(bigQty2); +// // 生成新的拆分条码 +// String stringBigQty2 = bigQty2.toString(); +// String newPalletNo = CodeGenerator.packingGenerateCode(materialPackingName,stringBigQty2); +// +// // 原条码扣减 +// +// +// // 写入拆分的新条码,更新原数据库 +// } +// +// } //new MESServiceImpl().NeedReceiveMaterialInfoSend_NEW(shipRequestName, "SDK", materialPackingKeyList); 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 72282e6..a76797c 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 @@ -507,7 +507,7 @@ public class MESToWMSServiceImpl implements MESToWMSService { } if ("1".equals(operationType)) { // 自动入库 if ("FG".equals(stockInType) || "BFG".equals(stockInType)) { // 产成品入库 增加回收粒子入库 - fgStockIn = productIntoServiceImpl.outoFgStockIn(receiveActNo, "MES"); + fgStockIn = productIntoServiceImpl.outoFgStockIn(receiveActNo, "MES",stockInType); if (fgStockIn.isEmpty()) { throw new GlobalException("报送ERP失败,请联系IT处理!"); } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java index 678123b..d726d24 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java @@ -773,9 +773,9 @@ public class ProductIntoServiceImpl implements FGStockInService { return billCode; } //自动成品入库到现场仓 - public String outoFgStockIn (String RECEIVEACTNO, String eventUser) throws Exception { + public String outoFgStockIn (String RECEIVEACTNO, String eventUser, String stockInType) throws Exception { - String billCode = toSAPService.FGStockIn2(RECEIVEACTNO, eventUser); + String billCode = toSAPService.FGStockIn3(RECEIVEACTNO, eventUser,stockInType); if (billCode == null) { throw new GlobalException("报送ERP失败,请联系IT处理!"); } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/utils/CodeGenerator.java b/zi-wms-pda/src/main/java/com/cim/idm/utils/CodeGenerator.java index 3bdd69c..7067d98 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/utils/CodeGenerator.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/utils/CodeGenerator.java @@ -58,7 +58,7 @@ public class CodeGenerator { } // 修改数量,条码里批次拆分获取流水码 - public static String packingGenerateCode(String materialpackingname) throws CustomException { + public static String packingGenerateCode(String materialpackingname,String qty2) throws CustomException { // 3. 遍历结果集,生成新条码并更新数据库 List idsToUpdate = new ArrayList(); @@ -69,55 +69,24 @@ public class CodeGenerator { if (parts.length < 7) { throw new IllegalArgumentException("Invalid barcode format: " + materialpackingname); } + // 构建新的条码部分,假设在第五部分(索引4,因为索引从0开始)后添加流水码 StringBuilder newBasePart = new StringBuilder(); for (int i = 0; i < parts.length - 2; i++) { // 不包括最后两个部分 newBasePart.append(parts[i]).append("|"); } newBasePart.append(parts[4]).append("-").append(sequence++); // 在第五部分后添加流水码 - for (int i = 6; i < parts.length; i++) { // 添加最后两个部分 - newBasePart.append("|").append(parts[i]); - } +// for (int i = 6; i < parts.length; i++) { // 添加最后两个部分 +// newBasePart.append("|").append(parts[i]); +// } + // 添加倒数第二个部分(假设是日期) + newBasePart.append("|").append(parts[5]); + // 添加新的数量部分 + newBasePart.append("|").append(qty2); // 使用传入的新数量值 // idsToUpdate.add(id); -// newNames.add(newBasePart.toString()); + newNames.add(newBasePart.toString()); - - String currentDateStr = new SimpleDateFormat(DATE_FORMAT).format(new Date()); - String newPalletNo = null; - boolean success = false; - - while (!success) { - - String maxSeqNoQuery = "SELECT NVL(MAX(TO_NUMBER(SUBSTR(PALLETNO, " + - "(LENGTH('" + PREFIX + "') + LENGTH(:dateStr) + 1), 3))), 0) + 1 AS new_seq " + - "FROM MATERIALPACKINGPALLET " + - "WHERE SUBSTR(PALLETNO, 1, LENGTH('" + PREFIX + "') + LENGTH(:dateStr)) = '" + PREFIX + "' || :dateStr"; - - try { - log.info("maxSeqNoQuery: " + maxSeqNoQuery); - Map bindMap = new HashMap(); - bindMap.put("dateStr", currentDateStr); - Map maxSeqNoResult = IDMFrameServiceProxy.getSqlTemplate().queryForMap(maxSeqNoQuery,bindMap); - - int newSeqNo = 0; - if (maxSeqNoResult != null && maxSeqNoResult.containsKey("new_seq")) { - newSeqNo = Integer.parseInt(maxSeqNoResult.get("new_seq").toString()); - } - // 确保流水码不超过999 - if (newSeqNo > 999) { - throw new CustomException("流水码超过了数字999"); - } - String newSeqNoStr = String.format("%03d", newSeqNo); - newPalletNo = PREFIX + currentDateStr + newSeqNoStr; - - success = true; - }catch (Exception e) { - log.error("Failed to generate pallet number: " + e.getMessage()); - throw new CustomException("生成流水码错误: " + e.getMessage()); - } - - } - return newPalletNo; + return newBasePart.toString(); } }