fix:修改备货出库

This commit is contained in:
郭飞 2025-04-02 16:25:15 +08:00
parent 78bb0fcdbc
commit df74f03a55
4 changed files with 192 additions and 11 deletions

View File

@ -2231,6 +2231,157 @@ public class ToSAPServiceImpl {
} }
return undoId; return undoId;
} }
// 采购退货
public String PurchaseStockOut(String shipRequestName, String siteName, String user,List<String> boxList) throws Exception {
String rcode;
String undoId = "";
String rmsg = null;
String sql=" SELECT MP.MATERIALSPECNAME, \r\n" +
" MP.ERPFACTORY, \r\n" +
" MP.ERPLOCATION, \r\n" +
" MS.SHIPREQUESTDETAILTYPE, \r\n" +
" MP.UNIT, \r\n" +
" MD.COSTCENTER, \r\n" +
" MD.RECEIVEPRODUCTIONORDERNUMBER, \r\n" +
" MP.SHIPREQUESTNAME, \r\n" +
" MD.SHIPREQUESTDETAILNAME, \r\n" +
" MD.ERPRECEIVELOCATION, \r\n" +
" MD.ERPRECEIVEFACTORY, \r\n" +
" MD.CAUSEOFMOVEMENT, \r\n" +
" SUM(t.QTY) AS MATERIALQUANTITY \r\n" +
" FROM \r\n" +
" MATERIALPACKING MP \r\n" +
" LEFT JOIN MATERIALPACKINGSUB T\r\n" +
" ON mp.MATERIALPACKINGNAME =t.MATERIALPACKINGNAME \r\n" +
" AND mp.SHIPREQUESTNAME =t.RECEIVEREQUESTNAME \r\n" +
" LEFT JOIN MATERIALSHIPREQUESTDETAIL MD \r\n" +
" ON \r\n" +
" MP.SHIPREQUESTNAME = MD.SHIPREQUESTNAME \r\n" +
" AND MP.SITENAME = MD.SITENAME \r\n" +
" AND t.RECEIVEREQUESTDETAILNAME = MD.SHIPREQUESTDETAILNAME \r\n" +
" LEFT JOIN MATERIALSHIPREQUEST MS \r\n" +
" ON \r\n" +
" MD.SHIPREQUESTNAME = MS.SHIPREQUESTNAME \r\n" +
" WHERE \r\n" +
" MP.SHIPREQUESTNAME = :SHIPREQUESTNAME \r\n" +
" AND MP.SITENAME = :SITENAME \r\n" +
" AND MP.STOCKSTATE = 'Stocked'\r\n" +
" AND MP.MATERIALPACKINGNAME IN (:BOXLIST)\r\n" +
" GROUP BY \r\n" +
" MP.MATERIALSPECNAME, \r\n" +
" MP.ERPFACTORY, \r\n" +
" MP.ERPLOCATION, \r\n" +
" MS.SHIPREQUESTDETAILTYPE, \r\n" +
" MP.UNIT, \r\n" +
" MD.COSTCENTER, \r\n" +
" MD.RECEIVEPRODUCTIONORDERNUMBER, \r\n" +
" MP.SHIPREQUESTNAME, \r\n" +
" MD.SHIPREQUESTDETAILNAME,\r\n" +
" MD.ERPRECEIVELOCATION, \r\n" +
" MD.ERPRECEIVEFACTORY, \r\n" +
" MD.CAUSEOFMOVEMENT ";
Map<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("SHIPREQUESTNAME", shipRequestName);
hashMap.put("SITENAME", siteName);
hashMap.put("BOXLIST", boxList);
List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql.toString(), hashMap);
try {
JSONObject sendData = new JSONObject(true);
JSONObject header = new JSONObject(true);
sendData.put("HEAD", header);
JSONObject body = new JSONObject(true);
sendData.put("BODY", body);
JSONArray itemArray = new JSONArray();
/*
HEAD
*/
header.put("INTF_ID", "MM067");
String uniqueID = UUID.randomUUID().toString();
header.put("REQ_KEYID", uniqueID);
header.put("SRC_MSGID", uniqueID);
header.put("SRC_SYSTEM", "WMS");
header.put("DEST_SYSTEM", "SAP");
header.put("REQUSER", user);
/*
BODY
*/
body.put("ITEM", itemArray);
body.put("ITEMID", uniqueID);
//过账日期
body.put("BUDAT", TimeStampUtil.getCurrentTime("yyyyMMdd"));
//凭证日期
body.put("BLDAT", TimeStampUtil.getCurrentTime("yyyyMMdd"));
//凭证抬头文本
body.put("BKTXT", uniqueID);
//用户名
body.put("USNAM", user);
for (Map<String, Object> mm : queryForList) {
JSONObject item = new JSONObject(true);
//BWART 移动类型
item.put("BWART", mm.get("SHIPREQUESTDETAILTYPE"));
// MATNR 发货物料号
item.put("MATNR", mm.get("MATERIALSPECNAME"));
// WERKS 收货工厂
item.put("WERKS", mm.get("ERPFACTORY"));
// LGORT 发货库存地点
item.put("LGORT", mm.get("ERPLOCATION"));
//MENGE 数量
item.put("MENGE", mm.get("MATERIALQUANTITY"));
//MENGE 单位
item.put("MEINS", mm.get("UNIT"));
//KOSTL 成本中心
item.put("KOSTL", mm.get("COSTCENTER"));
//AUFNR 订单号
item.put("AUFNR", mm.get("RECEIVEPRODUCTIONORDERNUMBER"));
//GRUND 移动原因 (201,202回传)
item.put("GRUND", mm.get("CAUSEOFMOVEMENT"));
//ZLLORDER 自定义领料单号
item.put("ZLLORDER", mm.get("SHIPREQUESTNAME"));
//ZLLITEM 自定义领料单行号
item.put("ZLLITEM", mm.get("SHIPREQUESTDETAILNAME"));
itemArray.add(item);
}
log.info("SendTOSAP >>>>" + sendData);
String sapreturn = toSAPMessageUtil.sendHttpPost(toSAPMessageUtil.materialChangeLocationUrl, "", sendData.toJSONString());
org.json.JSONObject receiveJsonObject = new org.json.JSONObject(sapreturn);
org.json.JSONObject returnJsonObject = (org.json.JSONObject) receiveJsonObject.get("RETURN");
rcode = returnJsonObject.get("STATUS").toString();
rmsg = returnJsonObject.get("MSGTXT").toString();
if ("S".equals(rcode)) {
undoId = returnJsonObject.get("MBLNR").toString()+"_"+returnJsonObject.get("MJAHR").toString();//将物料凭证号与凭证年度拼在一起
}
//将log写到表里
ErpMessageLog erplog = new ErpMessageLog();
erplog.setEventUser("");
erplog.setServerName("WmsToErp");
erplog.setEventName("成本中心/研发领料");
erplog.setInterfaceTime(TimeStampUtil.getCurrentTime(TimeStampUtil.FORMAT_DEFAULT));
erplog.setMessageId(UUID.randomUUID().toString());
erplog.setSendMsg2(sendData.toJSONString());
erplog.setReturnMsg2(sapreturn);
erplog.setResultCode(rcode);
MessageLogUtil.writeMessageLog(erplog);
} catch (Exception e) {
log.info(e.getMessage(), e);
throw new RuntimeException("SAP返回" + rmsg);
}
if (!"S".equals(rcode)) {
throw new RuntimeException("SAP返回" + rmsg);
}
return undoId;
}
//MES上报工单消耗数据-261工单投料 //MES上报工单消耗数据-261工单投料
public String mesMaterialConsume(List<String> boxIdList, List<String> qtyList, String user,String wo) throws Exception { public String mesMaterialConsume(List<String> boxIdList, List<String> qtyList, String user,String wo) throws Exception {

View File

@ -1293,7 +1293,8 @@ public class SAPToWMSController {
+"AND (:MATERIALSPECNAME IS NULL OR M.MATERIALSPECNAME=:MATERIALSPECNAME) " +"AND (:MATERIALSPECNAME IS NULL OR M.MATERIALSPECNAME=:MATERIALSPECNAME) "
+"AND (:CHARGE IS NULL OR M.CHARGE=:CHARGE) " +"AND (:CHARGE IS NULL OR M.CHARGE=:CHARGE) "
+"AND (:ERPLOCATION IS NULL OR M.ERPLOCATION=:ERPLOCATION) " +"AND (:ERPLOCATION IS NULL OR M.ERPLOCATION=:ERPLOCATION) "
+"AND M.STOCKSTATE='Stocked' " +"AND M.STOCKSTATE='Stocked' "
+"AND M.SPECIALSTATE='2' "
+"AND M.MATERIALPACKINGTYPE='Box' " +"AND M.MATERIALPACKINGTYPE='Box' "
+"GROUP BY M.ERPFACTORY,M.MATERIALSPECNAME,M.ERPLOCATION,M.CHARGE "; +"GROUP BY M.ERPFACTORY,M.MATERIALSPECNAME,M.ERPLOCATION,M.CHARGE ";
Map<String,Object> map=new HashMap<String, Object>(); Map<String,Object> map=new HashMap<String, Object>();

View File

@ -212,6 +212,7 @@ public class InvoiceServiceImpl implements InvoiceService {
Map<String, Object> hashMap = new HashMap<String,Object> (); Map<String, Object> hashMap = new HashMap<String,Object> ();
hashMap.put("SHIPREQUESTNAME", shipRequestName); hashMap.put("SHIPREQUESTNAME", shipRequestName);
List<String> materialPackingKeyList = new ArrayList<> (); List<String> materialPackingKeyList = new ArrayList<> ();
List<MaterialPackingKey> arrayList = new ArrayList<MaterialPackingKey> ();
List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap);
String shipRequestType = queryForList.get(0).get("SHIPREQUESTTYPE").toString(); String shipRequestType = queryForList.get(0).get("SHIPREQUESTTYPE").toString();
String detailype = queryForList.get(0).get("SHIPREQUESTDETAILTYPE").toString(); String detailype = queryForList.get(0).get("SHIPREQUESTDETAILTYPE").toString();
@ -321,6 +322,8 @@ public class InvoiceServiceImpl implements InvoiceService {
} }
} }
materialPackingKeyList.add(materialPackingName); materialPackingKeyList.add(materialPackingName);
MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",materialPackingName);
arrayList.add(materialPackingKey);
} }
//判断会有多少个仓库发货不同仓库需要分开走账 //判断会有多少个仓库发货不同仓库需要分开走账
StringBuffer cklx = new StringBuffer(); StringBuffer cklx = new StringBuffer();
@ -344,12 +347,14 @@ public class InvoiceServiceImpl implements InvoiceService {
case "01"://生产领料 case "01"://生产领料
case "02"://生产补料 case "02"://生产补料
// 判断是否是现场仓 // 判断是否是现场仓
String IsSql = "SELECT m.ERPRECEIVELOCATION,m. FROM MATERIALSHIPREQUESTDETAIL m WHERE SHIPREQUESTNAME = :SHIPREQUESTNAME"; String IsSql = "SELECT m.ERPRECEIVELOCATION,m.ERPLOCATION,m.ERPRECEIVEFACTORY FROM MATERIALSHIPREQUESTDETAIL m WHERE SHIPREQUESTNAME = :SHIPREQUESTNAME";
Map<String,Object> bpc=new HashMap<>(); Map<String,Object> bpc=new HashMap<>();
bpc.put("SHIPREQUESTNAME", shipRequestName); bpc.put("SHIPREQUESTNAME", shipRequestName);
List<Map<String,Object>> receiveList = IDMFrameServiceProxy.getSqlTemplate().queryForList(IsSql, bpc); List<Map<String,Object>> receiveList = IDMFrameServiceProxy.getSqlTemplate().queryForList(IsSql, bpc);
String ERPRECEIVELOCATION = receiveList.get(0).get("ERPRECEIVELOCATION") == null ? "" : receiveList.get(0).get("ERPRECEIVELOCATION").toString(); String ERPRECEIVELOCATION = receiveList.get(0).get("ERPRECEIVELOCATION") == null ? "" : receiveList.get(0).get("ERPRECEIVELOCATION").toString();
String ERPLOCATION = receiveList.get(0).get("ERPLOCATION") == null ? "" : receiveList.get(0).get("ERPLOCATION").toString(); String ERPLOCATION = receiveList.get(0).get("ERPLOCATION") == null ? "" : receiveList.get(0).get("ERPLOCATION").toString();
String ERPRECEIVEFACTORY = receiveList.get(0).get("ERPRECEIVEFACTORY") == null ? "" : receiveList.get(0).get("ERPRECEIVEFACTORY").toString();
//判断是否为MES需要接收的物料 //判断是否为MES需要接收的物料
String sqlc=" SELECT e.ENUMVALUE FROM MES_ENUMDEFVALUE e \r\n" + String sqlc=" SELECT e.ENUMVALUE FROM MES_ENUMDEFVALUE e \r\n" +
" WHERE e.ENUMNAME ='ConfirmReceiveArea'\r\n" + " WHERE e.ENUMNAME ='ConfirmReceiveArea'\r\n" +
@ -359,16 +364,37 @@ public class InvoiceServiceImpl implements InvoiceService {
" WHERE m.SHIPREQUESTNAME=:SHIPREQUESTNAME AND RECEIVEPRODUCTIONORDERNUMBER IS NOT NULL AND ROWNUM=1))"; " WHERE m.SHIPREQUESTNAME=:SHIPREQUESTNAME AND RECEIVEPRODUCTIONORDERNUMBER IS NOT NULL AND ROWNUM=1))";
List<Map<String,Object>> src=IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlc, bpc); List<Map<String,Object>> src=IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlc, bpc);
//MES需要接收则只抛送数据
if(!ERPRECEIVELOCATION.isEmpty())
{ //MES需要接收则只抛送数据 或如果是现场仓,先移到现场仓
if(src.size()>0 || !ERPRECEIVELOCATION.isEmpty()) {
//new MESServiceImpl().NeedReceiveMaterialInfoSend_NEW(shipRequestName, "SDK", materialPackingKeyList);
billCode="Y";
// 转库到线边仓 // 转库到线边仓
// ToSAPServiceImpl.moveLibrary2(materialPackingKeyList, shipRequestName, ERPLOCATION, ERPRECEIVELOCATION,eventUser); billCode = toSAPService.NoSourceChangeLocation(arrayList,ERPRECEIVEFACTORY,
if(src.size()>0) { ERPRECEIVELOCATION, "", eventUser );
//new MESServiceImpl().NeedReceiveMaterialInfoSend_NEW(shipRequestName, "SDK", materialPackingKeyList);
billCode="Y"; List<MaterialPackingKey> mpKeyList = new ArrayList<MaterialPackingKey> ();
SetEventInfo setEventInfo = new SetEventInfo();
for (MaterialPackingKey materialPacking : arrayList) {
MaterialPackingKey key = materialPacking;
mpKeyList.add(key);
} }
Map<String, Object> hashMapPack = new HashMap<String,Object> ();
hashMapPack.put("erpLocation", ERPRECEIVELOCATION == null ? "" : ERPRECEIVELOCATION);
hashMapPack.put("erpFactory", ERPRECEIVEFACTORY == null ? "" : ERPRECEIVEFACTORY);
hashMapPack.put("locationName", "");
hashMapPack.put("lastEventUser", eventUser);
hashMapPack.put("unDoID", billCode);
setEventInfo.setUserColumns(hashMapPack);
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpKeyList, makeEventInfo, setEventInfo);
//抛送MES数据
untils.sendMaterialInfoToMES_NEW(shipRequestName, "", materialPackingKeyList);
//billCode = NCWServiceImpl.SaleOut2(shipRequestName, "SDK", eventUser,materialPackingKeyList,"");
untils.SaveUnDoInfo_ForSap(materialPackingKeyList, billCode, makeEventInfo);
} }
else else
{ {
@ -378,6 +404,7 @@ public class InvoiceServiceImpl implements InvoiceService {
untils.sendMaterialInfoToMES_NEW(shipRequestName, "", materialPackingKeyList); untils.sendMaterialInfoToMES_NEW(shipRequestName, "", materialPackingKeyList);
//billCode = NCWServiceImpl.SaleOut2(shipRequestName, "SDK", eventUser,materialPackingKeyList,""); //billCode = NCWServiceImpl.SaleOut2(shipRequestName, "SDK", eventUser,materialPackingKeyList,"");
untils.SaveUnDoInfo_ForSap(materialPackingKeyList, billCode, makeEventInfo); untils.SaveUnDoInfo_ForSap(materialPackingKeyList, billCode, makeEventInfo);
} }
break; break;

View File

@ -96,8 +96,10 @@ public class PurchaseReturnServiceImpl implements PurchaseReturnService {
purchaseReturnBoxListName.add(materialPacking.getMaterialPackingName()); purchaseReturnBoxListName.add(materialPacking.getMaterialPackingName());
} }
//过账SAP //过账SAP
String undoId = toSAPServiceImpl.orderStockOut(receiverequestname, siteName, user, purchaseReturnBoxListName); // String undoId = toSAPServiceImpl.orderStockOut(receiverequestname, siteName, user, purchaseReturnBoxListName);
//更新库存状态 String undoId = toSAPServiceImpl.OrderStockBackOut(receiverequestname, siteName, user);
// String undoId = "111";
//更新库存状态
toSapDao.updateStockState(purchaseReturnBoxList, "StockOut", undoId); toSapDao.updateStockState(purchaseReturnBoxList, "StockOut", undoId);
//更新出入库流水 //更新出入库流水
toSapDao.saveUnDoInfo(purchaseReturnBoxList, undoId, ""); toSapDao.saveUnDoInfo(purchaseReturnBoxList, undoId, "");