fix:修改辅材拆分问题

This commit is contained in:
郭飞 2025-05-15 13:44:59 +08:00
parent 986382f077
commit 823009d83d
3 changed files with 126 additions and 17 deletions

View File

@ -15,6 +15,7 @@ public class MaterialPacking extends FieldAccessor implements DataInfo<MaterialP
private String materialPackingType; private String materialPackingType;
private String contentMaterialType; private String contentMaterialType;
private String materialType; private String materialType;
private String materialSpecName; private String materialSpecName;
private String superMaterialPackingName; private String superMaterialPackingName;

View File

@ -633,6 +633,7 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
* @param boxList 出库的物料信息 * @param boxList 出库的物料信息
* @return * @return
*/ */
@Transactional
public AjaxResult MaterialShipRequestAuxiliaryStockOut(EventInfo eventInfo, String siteName, String shipRequestName, public AjaxResult MaterialShipRequestAuxiliaryStockOut(EventInfo eventInfo, String siteName, String shipRequestName,
String user, List<LinkedHashMap<String,String>> boxList, String commitDate) throws Exception { String user, List<LinkedHashMap<String,String>> boxList, String commitDate) throws Exception {
//判断单据类型调用不同的NC接口 //判断单据类型调用不同的NC接口
@ -784,7 +785,7 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
String materialPackingName = qtyQueryForList.get(z).getMaterialPackingName(); String materialPackingName = qtyQueryForList.get(z).getMaterialPackingName();
// String charge = qtyQueryForList.get(z).getCharge(); // 辅材出库无批次 // String charge = qtyQueryForList.get(z).getCharge(); // 辅材出库无批次
List<String> boxId = MaterialPackingServiceImpl.generateBoxID("LabelId", siteName, List<String> boxId = MaterialPackingServiceImpl.generateBoxID("LabelId", siteName,
"100", qtyQueryForList.get(z).getMakeDate().toString(),packingQueryForList.get(z).get("MATERIALTYPE").toString(),qtyQueryForList.get(z).getErpFactory()); "1", qtyQueryForList.get(z).getMakeDate().toString(),packingQueryForList.get(z).get("MATERIALTYPE").toString(),qtyQueryForList.get(z).getErpFactory());
BigDecimal bigQty = new BigDecimal(qty); BigDecimal bigQty = new BigDecimal(qty);
// 已拆数量 // 已拆数量
BigDecimal bigQty2 = new BigDecimal(qty2); BigDecimal bigQty2 = new BigDecimal(qty2);
@ -819,16 +820,22 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
if (moveTransformOut != true) { if (moveTransformOut != true) {
throw new RuntimeException("修改数量拆分失败"); throw new RuntimeException("修改数量拆分失败");
} }
// 记录到拆分表
String shipRequestDetailName = qtyQueryForList.get(z).getShipRequestDetailName() == null ? "" : qtyQueryForList.get(z).getShipRequestDetailName().toString();
untils.fahuoSplit(newPalletNo, shipRequestName, shipRequestDetailName, bigQty2);
// 原条码扣减拆出的数量用剩余数量更新原条码条码不变数量更新 // 原条码扣减拆出的数量用剩余数量更新原条码条码不变数量更新,并且解绑单据
SetEventInfo setEventInfo = new SetEventInfo(); SetEventInfo setEventInfo = new SetEventInfo();
Map<String, Object> pakHashMap = new HashMap<>(); Map<String, Object> pakHashMap = new HashMap<>();
pakHashMap.put("materialQuantity", restQty.doubleValue()); pakHashMap.put("materialQuantity", restQty.doubleValue());
pakHashMap.put("materialQuantity2", 0);
pakHashMap.put("shipRequestName", "");
pakHashMap.put("shipRequestDetailName", "");
EventInfo eventInfo2 = new EventInfoUtil().makeEventInfo("备货出库拆分修改数量拆分条码", user, "修改数量拆分条码"); EventInfo eventInfo2 = new EventInfoUtil().makeEventInfo("辅材出库拆分", user, "拆分条码");
setEventInfo.setUserColumns(pakHashMap); setEventInfo.setUserColumns(pakHashMap);
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( queryForList.get(z).get("SITENAME").toString(),
queryForList.get(z).get("MATERIALPACKINGNAME").toString()), eventInfo2, setEventInfo); MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( "SDK",MATERIALPACKINGNAME), eventInfo2, setEventInfo);
// 删除被拆分的原条码数据用拆分出的新条码覆盖进行后面的过账现场仓过账只过账已拆分出的数量剩余数量的原条码不过账 // 删除被拆分的原条码数据用拆分出的新条码覆盖进行后面的过账现场仓过账只过账已拆分出的数量剩余数量的原条码不过账
boolean deletePacking = materialPackingKeyList.remove(MATERIALPACKINGNAME); boolean deletePacking = materialPackingKeyList.remove(MATERIALPACKINGNAME);
@ -837,9 +844,10 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
} }
} }
} }
billCode=TransferStockOut_NLCC(shipRequestName, "SDK", user,materialPackingKeyList); billCode=TransferStockOut_NLCC(shipRequestName, "SDK", user,materialPackingKeyList, commitDate);
//makeEventInfo = eventInfoUtil.makeEventInfo("CompleteShipRequest", eventUser, "CompleteShipRequest:"+shipRequestType); //makeEventInfo = eventInfoUtil.makeEventInfo("CompleteShipRequest", eventUser, "CompleteShipRequest:"+shipRequestType);
untils.SaveUnDoInfo_ForSap(materialPackingKeyList, billCode, eventInfo); untils.SaveUnDoInfo_ForSap(materialPackingKeyList, billCode, eventInfo);
// untils.SaveSplitUnDoInfo_ForSap(materialPackingKeyList, billCode, eventInfo);
break; break;
case "01"://生产领料 case "01"://生产领料
@ -1012,7 +1020,7 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
} }
public String TransferStockOut_NLCC(String shipRequestName, String siteName, String user,List<String> boxList) throws Exception { public String TransferStockOut_NLCC(String shipRequestName, String siteName, String user,List<String> boxList,String commitDate) throws Exception {
String rcode; String rcode;
String undoId = ""; String undoId = "";
String rmsg = null; String rmsg = null;
@ -1070,10 +1078,15 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
*/ */
//交货单号 //交货单号
body.put("VBELN", shipRequestName); body.put("VBELN", shipRequestName);
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyyMMdd");
Date date = inputFormat.parse(commitDate);
String outputDate = outputFormat.format(date);
//实际过账日期 //实际过账日期
body.put("WADAT_IST", TimeStampUtil.getCurrentTime("yyyyMMdd"));//yyyyMMddhhmmss body.put("WADAT_IST", outputDate);//yyyyMMddhhmmss
//发送日期 //发送日期
body.put("Z_SENDDATE", TimeStampUtil.getCurrentTime("yyyyMMdd")); body.put("Z_SENDDATE", outputDate);
//操作类型过账 //操作类型过账
body.put("Z_OPTION", "1"); body.put("Z_OPTION", "1");
@ -1842,7 +1855,6 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
} }
} }
@Transactional
public boolean packingChargeSplit(List<MaterialPacking> boxList, String user) { public boolean packingChargeSplit(List<MaterialPacking> boxList, String user) {
String condition=""; String condition="";
@ -1900,15 +1912,19 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
String REMARK = ""; String REMARK = "";
String SHIPREQUESTNAME = ""; String SHIPREQUESTNAME = "";
String SHIPREQUESTDETAILNAME = ""; String SHIPREQUESTDETAILNAME = "";
String MATERIALTYPE = "";
String RECEIVEACTNO = "";
String UNDOID = "";
String FIFOFLAG = "";
String ypcSql = "SELECT M.RECEIVETIME,M.MAKEDATE,M.EXPIRINGDATE,M.HOLDSTATE,M.OQARESULTSTATE ,\r\n" + String ypcSql = "SELECT M.RECEIVETIME,M.MAKEDATE,M.EXPIRINGDATE,M.HOLDSTATE,M.OQARESULTSTATE ,\r\n" +
" M.OQARESULT ,M.PACKINGGRADE ,M.TRUEGG ,M.ERPFACTORY ,M.ERPLOCATION ,M.LOCATIONNAME ,\r\n" + " M.OQARESULT ,M.PACKINGGRADE ,M.TRUEGG ,M.ERPFACTORY ,M.ERPLOCATION ,M.LOCATIONNAME ,\r\n" +
" M.SHELFNAME ,M.AREANAME ,M.DURABLENAME ,M.CAREER_ASSISTANCE ,M.SALESPERSON ,M.CUSTOMNO,M.SDK_ID,M.PHASE,M.SHIPREQUESTNAME,M.SHIPREQUESTDETAILNAME,M.RECEIVEREQUESTNAME,M.RECEIVEREQUESTDETAILNAME," " M.SHELFNAME ,M.MATERIALTYPE,M.AREANAME ,M.DURABLENAME ,M.CAREER_ASSISTANCE ,M.SALESPERSON ,M.CUSTOMNO,M.SDK_ID,M.PHASE,M.SHIPREQUESTNAME,M.SHIPREQUESTDETAILNAME,M.RECEIVEREQUESTNAME,M.RECEIVEREQUESTDETAILNAME,"
+ " M.DEVIATION ,M.DIAMETER ,M.WIDTH ,M.WEIGHT ,M.PRODUCTLINE,UNIT ,MJPC,BUSINESS_UNIT,M.MATERIALSPECNAME, M.SUBPACKINGQUANTITY, M.MATERIALCREATEQUANTITY, M.MATERIALQUANTITY, M.CHARGE, M.REMARK" + + " M.DEVIATION ,M.DIAMETER ,M.WIDTH ,M.WEIGHT ,M.PRODUCTLINE,UNIT ,MJPC,BUSINESS_UNIT,M.MATERIALSPECNAME, M.SUBPACKINGQUANTITY, M.MATERIALCREATEQUANTITY, M.MATERIALQUANTITY, M.CHARGE, M.REMARK" +
" FROM MATERIALPACKING M WHERE M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME AND M.CHARGE = :CHARGE "; " FROM MATERIALPACKING M WHERE M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME "; //AND M.CHARGE = :CHARGE
Map<String, Object> hashMap4 = new HashMap<String,Object> (); Map<String, Object> hashMap4 = new HashMap<String,Object> ();
hashMap4.put("MATERIALPACKINGNAME", boxList.get(0).getMaterialPackingName()); hashMap4.put("MATERIALPACKINGNAME", boxList.get(0).getMaterialPackingName());
hashMap4.put("CHARGE", boxList.get(0).getCharge()); // hashMap4.put("CHARGE", boxList.get(0).getCharge());
List<Map<String, Object>> queryForList3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(ypcSql, hashMap4); List<Map<String, Object>> queryForList3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(ypcSql, hashMap4);
if (queryForList3 != null && queryForList3.size() > 0) { if (queryForList3 != null && queryForList3.size() > 0) {
@ -1944,7 +1960,10 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
REMARK = map.get("REMARK") == null ? "" : map.get("REMARK").toString(); REMARK = map.get("REMARK") == null ? "" : map.get("REMARK").toString();
SHIPREQUESTNAME = map.get("SHIPREQUESTNAME") == null ? "" : map.get("SHIPREQUESTNAME").toString(); SHIPREQUESTNAME = map.get("SHIPREQUESTNAME") == null ? "" : map.get("SHIPREQUESTNAME").toString();
SHIPREQUESTDETAILNAME = map.get("SHIPREQUESTDETAILNAME") == null ? "" : map.get("SHIPREQUESTDETAILNAME").toString(); SHIPREQUESTDETAILNAME = map.get("SHIPREQUESTDETAILNAME") == null ? "" : map.get("SHIPREQUESTDETAILNAME").toString();
MATERIALTYPE = map.get("MATERIALTYPE") == null ? "" : map.get("MATERIALTYPE").toString();
RECEIVEACTNO = map.get("RECEIVEACTNO") == null ? "" : map.get("RECEIVEACTNO").toString();
UNDOID = map.get("UNDOID") == null ? "" : map.get("UNDOID").toString();
FIFOFLAG = map.get("FIFOFLAG") == null ? "" : map.get("FIFOFLAG").toString();
} }
if (MaterialPackingList != null && MaterialPackingList.size() > 0) { if (MaterialPackingList != null && MaterialPackingList.size() > 0) {
@ -1971,7 +1990,7 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
bindMap.put("OldStockState", "Created"); bindMap.put("OldStockState", "Created");
bindMap.put("HoldState", holdState); bindMap.put("HoldState", holdState);
bindMap.put("LocationName", locationName); bindMap.put("LocationName", locationName);
bindMap.put("charge",CHARGE); // bindMap.put("charge",CHARGE); // 无批次不需要标签
bindMap.put("MaterialProcessGroupName",""); bindMap.put("MaterialProcessGroupName","");
bindMap.put("LastEventTimeKey",TimeStampUtil.getCurrentEventTimeKey()); bindMap.put("LastEventTimeKey",TimeStampUtil.getCurrentEventTimeKey());
@ -1992,8 +2011,12 @@ public class MaterialShipServiceImpl implements IMaterialShipService {
bindMap.put("shipRequestName", SHIPREQUESTNAME); bindMap.put("shipRequestName", SHIPREQUESTNAME);
bindMap.put("shipRequestDetailName",SHIPREQUESTDETAILNAME); bindMap.put("shipRequestDetailName",SHIPREQUESTDETAILNAME);
bindMap.put("ReceiveRequestName", RECEIVEREQUESTNAME); bindMap.put("receiveRequestName", RECEIVEREQUESTNAME);
bindMap.put("ReceiveRequestDetailName",RECEIVEREQUESTDETAILNAME); bindMap.put("receiveRequestDetailName",RECEIVEREQUESTDETAILNAME);
bindMap.put("materialType", MATERIALTYPE);
bindMap.put("receiveActNo", RECEIVEACTNO);
bindMap.put("unDoID", UNDOID);
bindMap.put("fifoFlag", FIFOFLAG);
bindMap.put("CAREER_ASSISTANCE", CAREER_ASSISTANCE);//业助信息 bindMap.put("CAREER_ASSISTANCE", CAREER_ASSISTANCE);//业助信息
bindMap.put("BUSINESS_UNIT", BUSINESS_UNIT);//业务 bindMap.put("BUSINESS_UNIT", BUSINESS_UNIT);//业务

View File

@ -663,6 +663,91 @@ public void SaveUnDoInfo_ForSap(List<String> list, String undoid, EventInfo mak
} }
public void SaveSplitUnDoInfo_ForSap(List<String> list, String undoid, EventInfo makeEventInfo) {
// 更新事件名
// 此SQL语句用于更新物料包装的最后事件名称评论和时间
String sqlu="UPDATE MATERIALPACKING m SET m.LASTEVENTNAME=:LASTEVENTNAME,m.LASTEVENTCOMMENT =:LASTEVENTCOMMENT,m.LASTEVENTTIME =SYSDATE \r\n" +
" WHERE m.SITENAME =:SITENAME AND m.MATERIALPACKINGNAME in (:BOXLIST)";
Map<String,Object> bpu = new HashMap<String,Object> ();
bpu.put("LASTEVENTNAME", makeEventInfo.getEventName());
bpu.put("LASTEVENTCOMMENT", makeEventInfo.getEventComment());
bpu.put("SITENAME", "SDK");
bpu.put("BOXLIST", list);
IDMFrameServiceProxy.getSqlTemplate().update(sqlu, bpu);
// 销售交货单不返回凭证
// 如果undoid不等于"S"则执行更新和插入操作以记录undo信息
if(!StringUtils.equals("S", undoid))
{
// 更新undo信息
// 此SQL语句用于更新物料包装的undoid仅当库存状态为'Stocked'
String updateUndoInfo = "UPDATE MATERIALPACKING T SET T.unDoID = :unDoID WHERE T.MATERIALPACKINGNAME in (:MATERIALPACKINGNAME) "
+ " AND STOCKSTATE = 'Stocked'";
Map<String,Object> map = new HashMap<String,Object> ();
map.put("MATERIALPACKINGNAME", list);
map.put("unDoID", undoid);
IDMFrameServiceProxy.getSqlTemplate().update(updateUndoInfo, map);
// 插入undo物料包装信息
// 此SQL语句用于插入新的记录到BS_MATERIALPACKINGUNDOINFO表中记录详细的undo信息
String insertUnDOMaterialPackingInfo = "insert into BS_MATERIALPACKINGUNDOINFO (unDoID,preundoid,UNDODETAILNAME,undoidstate,UNDOIDDATE,"
+ "SITENAME, MATERIALPACKINGNAME, MATERIALPACKINGTYPE, CONTENTMATERIALTYPE,"
+ "MATERIALTYPE, MATERIALSPECNAME, SUPERMATERIALPACKINGNAME, PACKINGGRADE, SUBPACKINGQUANTITY, MATERIALCREATEQUANTITY,"
+ "MATERIALQUANTITY, PACKINGSTATE, OLDPACKINGSTATE, STOCKSTATE, OLDSTOCKSTATE, HOLDSTATE, AREANAME, LOCATIONNAME,"
+ "DURABLENAME, MATERIALPROCESSGROUPNAME, LASTEVENTNAME, LASTEVENTTIMEKEY, LASTEVENTTIME, LASTEVENTUSER,"
+ "LASTEVENTCOMMENT, CREATETIME, CREATEUSER, RECEIVEREQUESTNAME, RECEIVEREQUESTDETAILNAME,"
+ "MAKEDATE, RECEIVEACTNO, STOCKINTYPE, RECEIVETIME, RECEIVEUSER, SHIPREQUESTNAME, SHIPREQUESTDETAILNAME, SHIPTIME,"
+ "SHIPUSER, REASONCODETYPE, OQARESULTSTATE, OQARESULT, ERPLOCATION, ERPFACTORY, REASONCODE, CHARGE, SUPPLIERNAME,ETCSTATE,ERPEVENTTIME,NPFLAG)"
+ "select unDoID,'' as preundoid,UNDODETAILNAME,'Created' as undoidstate,:UNDOIDDATE AS UNDOIDDATE," //
+ "SITENAME, MATERIALPACKINGNAME, MATERIALPACKINGTYPE, CONTENTMATERIALTYPE,"
+ "MATERIALTYPE, MATERIALSPECNAME, SUPERMATERIALPACKINGNAME, PACKINGGRADE, SUBPACKINGQUANTITY, MATERIALCREATEQUANTITY,"
+ "DECODE(MATERIALQUANTITY2,0,MATERIALQUANTITY,MATERIALQUANTITY2) MATERIALQUANTITY, PACKINGSTATE, OLDPACKINGSTATE, STOCKSTATE, OLDSTOCKSTATE, HOLDSTATE, AREANAME, LOCATIONNAME,"
+ "DURABLENAME, MATERIALPROCESSGROUPNAME, LASTEVENTNAME, LASTEVENTTIMEKEY, LASTEVENTTIME, LASTEVENTUSER,"
+ "LASTEVENTCOMMENT, CREATETIME, CREATEUSER, RECEIVEREQUESTNAME, RECEIVEREQUESTDETAILNAME,"
+ "MAKEDATE, RECEIVEACTNO, STOCKINTYPE, RECEIVETIME, RECEIVEUSER, SHIPREQUESTNAME, SHIPREQUESTDETAILNAME, SHIPTIME,"
+ "SHIPUSER, REASONCODETYPE, OQARESULTSTATE, OQARESULT, ERPLOCATION, ERPFACTORY, REASONCODE, CHARGE, SUPPLIERNAME,ETCSTATE,ERPEVENTTIME,NPFLAG"
+ " from MATERIALPACKING "
+ " where unDoID=:UNDOID";
Map<String, Object> bindMap_insert = new HashMap<String, Object>();
bindMap_insert.put("UNDOIDDATE", "");
bindMap_insert.put("UNDOID", undoid);
IDMFrameServiceProxy.getSqlTemplate()
.update(insertUnDOMaterialPackingInfo, bindMap_insert);
}
// 更新Box状态
// 根据物料数量和包装数量更新物料包装的状态和相关属性
for (String s : list) {
MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",s);
com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking selectByKey = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(materialPackingKey);
double materialQuantity = selectByKey.getMaterialQuantity();
double materialQuantity2 = selectByKey.getMaterialQuantity2();
BigDecimal fmaterialQuantity = new BigDecimal(materialQuantity);
BigDecimal fmaterialQuantity2 = new BigDecimal(materialQuantity2);
if (fmaterialQuantity.compareTo(fmaterialQuantity2) > 0 && fmaterialQuantity2.compareTo(BigDecimal.ZERO) != 0) {
Map<String, Object> hashMap = new HashMap<String,Object> ();
// hashMap.put("materialQuantity", fmaterialQuantity.subtract(fmaterialQuantity2));
hashMap.put("materialQuantity2", 0);
hashMap.put("shipRequestName", "");
hashMap.put("shipRequestDetailName", "");
SetEventInfo setEventInfo = new SetEventInfo();
setEventInfo.setUserColumns(hashMap);
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo);
} else {
Map<String, Object> hashMap = new HashMap<String,Object> ();
hashMap.put("stockState", "StockOut");
SetEventInfo setEventInfo = new SetEventInfo();
setEventInfo.setUserColumns(hashMap);
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo);
}
}
}
/** /**
* 将物料信息发送到MES系统制造执行系统的新版本方法 * 将物料信息发送到MES系统制造执行系统的新版本方法