fix:修改退料过账

This commit is contained in:
郭飞 2025-06-10 15:32:48 +08:00
parent 3b672a220a
commit 8af573aa3c
2 changed files with 102 additions and 26 deletions

View File

@ -5565,30 +5565,92 @@ public class ToSAPServiceImpl {
// "GROUP BY T.RECEIVEREQUESTNAME, D.REQUESTNAME, T.ERPFACTORY,T.ERPLOCATION, " + SystemPropHelper.CR+
// " T.MATERIALSPECNAME,T.UNIT,T.PACKINGGRADE,D.MATERIALSPECTYPE,D.SHIPREQUESTNAME,D.SHIPREQUESTDETAILNAME ";
String sql="SELECT T.RECEIVEREQUESTNAME , \n" +
" D.REQUESTNAME PRODUCTORDER, \n" +
" T.ERPFACTORY, \n" +
" T.ERPLOCATION, \n" +
" T.MATERIALSPECNAME, \n" +
" T.UNIT, \n" +
" T.PACKINGGRADE, \n" +
" D.MATERIALSPECTYPE, \n" +
" D.SHIPREQUESTNAME, \n" +
" D.SHIPREQUESTDETAILNAME, \n" +
" B.RECEIVEREQUESTNAME PRERECEIVEREQUESTNAME,\n" +
" B.RECEIVEREQUESTDETAILNAME PRERECEIVEREQUESTDETAILNAME,\n" +
" SUM(T.MATERIALQUANTITY) AS MATERIALQUANTITY \n" +
" FROM BS_MES_SHIPPED D LEFT JOIN MATERIALPACKING T ON D.LOTNAME = T.MATERIALPACKINGNAME\n" +
" LEFT JOIN MATERIALPACKINGSUB B ON D.MATERIALPACKINGNAME = B.MATERIALPACKINGNAME\n" +
" LEFT JOIN MATERIALSHIPREQUESTDETAIL m ON m.SHIPREQUESTNAME = B.RECEIVEREQUESTNAME AND m.SHIPREQUESTDETAILNAME = B.RECEIVEREQUESTDETAILNAME\n" +
" AND (m.RECEIVEPRODUCTIONORDERNUMBER = D.REQUESTNAME OR m.RECEIVEPRODUCTIONORDERNUMBER = '0000' || D.REQUESTNAME)\n" +
"WHERE 1 = 1 \n" +
" AND T.receiveActNo = :SHIPREQUESTNAME \n" +
" AND T.SITENAME = :SITENAME \n" +
" AND T.STOCKSTATE = 'Created' \n" +
" GROUP BY T.RECEIVEREQUESTNAME, D.REQUESTNAME, T.ERPFACTORY,T.ERPLOCATION, \n" +
" T.MATERIALSPECNAME,T.UNIT,T.PACKINGGRADE,D.MATERIALSPECTYPE,D.SHIPREQUESTNAME,D.SHIPREQUESTDETAILNAME,\n" +
" B.RECEIVEREQUESTNAME,B.RECEIVEREQUESTDETAILNAME";
//修改二
// String sql="SELECT T.RECEIVEREQUESTNAME , \n" +
// " D.REQUESTNAME PRODUCTORDER, \n" +
// " T.ERPFACTORY, \n" +
// " T.ERPLOCATION, \n" +
// " T.MATERIALSPECNAME, \n" +
// " T.UNIT, \n" +
// " T.PACKINGGRADE, \n" +
// " D.MATERIALSPECTYPE, \n" +
// " D.SHIPREQUESTNAME, \n" +
// " D.SHIPREQUESTDETAILNAME, \n" +
// " B.RECEIVEREQUESTNAME PRERECEIVEREQUESTNAME,\n" +
// " B.RECEIVEREQUESTDETAILNAME PRERECEIVEREQUESTDETAILNAME,\n" +
// " SUM(T.MATERIALQUANTITY) AS MATERIALQUANTITY \n" +
// " FROM BS_MES_SHIPPED D LEFT JOIN MATERIALPACKING T ON D.LOTNAME = T.MATERIALPACKINGNAME\n" +
// " LEFT JOIN MATERIALPACKINGSUB B ON D.MATERIALPACKINGNAME = B.MATERIALPACKINGNAME\n" +
// " LEFT JOIN MATERIALSHIPREQUESTDETAIL m ON m.SHIPREQUESTNAME = B.RECEIVEREQUESTNAME AND m.SHIPREQUESTDETAILNAME = B.RECEIVEREQUESTDETAILNAME\n" +
// " AND (m.RECEIVEPRODUCTIONORDERNUMBER = D.REQUESTNAME OR m.RECEIVEPRODUCTIONORDERNUMBER = '0000' || D.REQUESTNAME)\n" +
// "WHERE 1 = 1 \n" +
// " AND T.receiveActNo = :SHIPREQUESTNAME \n" +
// " AND T.SITENAME = :SITENAME \n" +
// " AND T.STOCKSTATE = 'Created' \n" +
// " GROUP BY T.RECEIVEREQUESTNAME, D.REQUESTNAME, T.ERPFACTORY,T.ERPLOCATION, \n" +
// " T.MATERIALSPECNAME,T.UNIT,T.PACKINGGRADE,D.MATERIALSPECTYPE,D.SHIPREQUESTNAME,D.SHIPREQUESTDETAILNAME,\n" +
// " B.RECEIVEREQUESTNAME,B.RECEIVEREQUESTDETAILNAME";
String sql= "SELECT \n" +
" T.RECEIVEREQUESTNAME, \n" +
" D.REQUESTNAME PRODUCTORDER, \n" +
" T.ERPFACTORY, \n" +
" T.ERPLOCATION, \n" +
" T.MATERIALSPECNAME, \n" +
" T.UNIT, \n" +
" T.PACKINGGRADE, \n" +
" D.MATERIALSPECTYPE, \n" +
" D.SHIPREQUESTNAME, \n" +
" D.SHIPREQUESTDETAILNAME, \n" +
" B.RECEIVEREQUESTNAME PRERECEIVEREQUESTNAME,\n" +
" B.RECEIVEREQUESTDETAILNAME PRERECEIVEREQUESTDETAILNAME,\n" +
" SUM(T.MATERIALQUANTITY) AS MATERIALQUANTITY \n" +
"FROM \n" +
" BS_MES_SHIPPED D \n" +
" LEFT JOIN MATERIALPACKING T \n" +
" ON D.LOTNAME = T.MATERIALPACKINGNAME\n" +
" LEFT JOIN (\n" +
" -- 子查询为每个MATERIALPACKINGNAME取EDITDATE最近的记录\n" +
" SELECT \n" +
" MATERIALPACKINGNAME,\n" +
" RECEIVEREQUESTNAME,\n" +
" RECEIVEREQUESTDETAILNAME,\n" +
" EDITDATE\n" +
" FROM (\n" +
" SELECT \n" +
" B.*,\n" +
" ROW_NUMBER() OVER (\n" +
" PARTITION BY MATERIALPACKINGNAME \n" +
" ORDER BY EDITDATE DESC\n" +
" ) AS rn\n" +
" FROM MATERIALPACKINGSUB B\n" +
" ) \n" +
" WHERE rn = 1 -- 仅保留每个分组的最新记录\n" +
" ) B \n" +
" ON D.MATERIALPACKINGNAME = B.MATERIALPACKINGNAME\n" +
" LEFT JOIN MATERIALSHIPREQUESTDETAIL m \n" +
" ON m.SHIPREQUESTNAME = B.RECEIVEREQUESTNAME \n" +
" AND m.SHIPREQUESTDETAILNAME = B.RECEIVEREQUESTDETAILNAME\n" +
" AND (m.RECEIVEPRODUCTIONORDERNUMBER = D.REQUESTNAME \n" +
" OR m.RECEIVEPRODUCTIONORDERNUMBER = '0000' || D.REQUESTNAME)\n" +
"WHERE \n" +
" 1 = 1 \n" +
" AND T.receiveActNo = :SHIPREQUESTNAME \n" +
" AND T.SITENAME = :SITENAME \n" +
" -- AND T.STOCKSTATE = 'Created' \n" +
"GROUP BY \n" +
" T.RECEIVEREQUESTNAME, \n" +
" D.REQUESTNAME, \n" +
" T.ERPFACTORY,\n" +
" T.ERPLOCATION, \n" +
" T.MATERIALSPECNAME,\n" +
" T.UNIT,\n" +
" T.PACKINGGRADE,\n" +
" D.MATERIALSPECTYPE,\n" +
" D.SHIPREQUESTNAME,\n" +
" D.SHIPREQUESTDETAILNAME,\n" +
" B.RECEIVEREQUESTNAME,\n" +
" B.RECEIVEREQUESTDETAILNAME";
Map<String, Object> hashMap = new HashMap<String, Object>();
hashMap.put("SITENAME", siteName);
// hashMap.put("SHIPREQUESTNAME", shipRequestName);
@ -5687,8 +5749,8 @@ public class ToSAPServiceImpl {
hashMap.put("SHIPREQUESTNAME", mm.get("SHIPREQUESTNAME"));
List<Map<String, Object>> cqueryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(qdsql, hashMap);
item.put("KOSTL", cqueryForList.get(0).get("COSTCENTER") == null ? "" : cqueryForList.get(0).get("COSTCENTER")); //成本中心
item.put("AUFNR", mm.get("SHIPREQUESTNAME")); // //从mes_ship表获取的单据号
item.put("AUFPS", mm.get("SHIPREQUESTDETAILNAME")); // //从mes_ship表获取的单据号
item.put("ZLLORDER", mm.get("SHIPREQUESTNAME")); // //从mes_ship表获取的单据号
item.put("ZLLITEM", mm.get("SHIPREQUESTDETAILNAME")); // //从mes_ship表获取的单据号
}
if(moveType.equals("262")) {
item.put("AUFNR", mm.get("PRODUCTORDER"));; //生产工单

View File

@ -604,6 +604,20 @@ public class MESToWMSServiceImpl implements MESToWMSService {
String charge = jb.get("charge").toString(); // 批号
boxIdList.add(charge);
barCodeList.add(jb.get("lotName").toString());
String stype = jb.get("stockInType") == null ? "" : jb.get("stockInType").toString();
if("MAT".equals(stype)) {
String sqld = "SELECT b.LOTNAME FROM BS_MES_SHIPPED b WHERE b.CHARGE = :CHARGE ";
Map<String, Object> hashMapdel = new HashMap<>();
hashMapdel.put("CHARGE", charge);
List<Map<String, Object>> delqueryForList = sqlTemplate.queryForList(sqld, hashMapdel);
if(delqueryForList != null && delqueryForList.size() > 0) {
String deleteSql="DELETE FROM BS_MES_SHIPPED WHERE CHARGE=?";
Object[] obj=new Object[] {charge};
IDMFrameServiceProxy.getSqlTemplate().update(deleteSql, obj);
}
}
}
String sqld = "SELECT b.charge,b.RECEIVE_FLAG,b.LOTNAME FROM BS_MES_SHIPPED b WHERE b.CHARGE in(:BOXIDLIST) ";
Map<String, Object> hashMap = new HashMap<>();