fix:修改备货出库

This commit is contained in:
郭飞 2025-04-24 15:01:54 +08:00
parent 27978a0ef5
commit fa051e2770

View File

@ -27,6 +27,7 @@ import com.cim.idm.wmsextend.generic.errorHandler.CustomException;
import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey;
import com.cim.idm.wmspackage.materialpacking.management.info.CreateInfo;
import com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo;
import com.cim.idm.wmspackage.materialreceiverequestact.MaterialReceiveRequestActServiceProxy;
import com.cim.idm.wmspackage.materialreceiverequestact.management.info.CreateReceiveRequestBatchInfo;
@ -34,6 +35,7 @@ import com.cim.idm.wmspackage.materialreceiverequestactdetail.MaterialReceiveReq
import com.cim.idm.wmspackage.materialreceiverequestactdetail.management.info.ActDetailIncreaseInfo;
import com.cim.idm.wmspackage.materialreceiverequestactdetail.management.info.CreateActDetailInfo;
import com.cim.idm.wmspackage.materialreceivetactdetail.management.data.MaterialReceiveActDetailKey;
import groovy.lang.Lazy;
import org.apache.commons.collections4.MapUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -55,7 +57,10 @@ public class InvoiceServiceImpl implements InvoiceService {
private ToSAPServiceImpl toSAPService;
@Autowired
private ChargeSplitService ChargeSplitService;
@Lazy
private ChargeSplitService chargeSplitService;
private EventInfo makeEventInfo;
private MaterialShipRequestServiceImpl ms = new MaterialShipRequestServiceImpl();
@ -337,7 +342,7 @@ public class InvoiceServiceImpl implements InvoiceService {
StringBuffer cklx = new StringBuffer();
// cklx.append("SELECT DISTINCT m.ERPLOCATION FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME IN ");
// cklx.append("SELECT m.MATERIALQUANTITY,m.MATERIALQUANTITY2,m.MATERIALPACKINGNAME,m.CHARGE,m.SITENAME FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME IN ");
cklx.append("SELECT * FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME IN ");
cklx.append("SELECT m.MATERIALPACKINGNAME,m.SITENAME FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME IN ");
String str = "";
str += "(";
for (String materialPacking : materialPackingKeyList) {
@ -348,7 +353,7 @@ public class InvoiceServiceImpl implements InvoiceService {
// List<Map<String, Object>> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(cklx.toString() + str, hashMap);
// 查询MATERIALQUANTITY MATERIALQUANTITY2是否相等如果相等则未修改数量不相等则修改数量
List<Map<String, Object>> qtyQueryForList1 = IDMFrameServiceProxy.getSqlTemplate().queryForList(cklx.toString() + str, hashMap);
List<Map<String, Object>> packingQueryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(cklx.toString() + str, hashMap);
// List<MaterialPacking> qtyQueryForList = MaterialPackingServiceProxy.getMaterialPackingService().select(cklx.toString() + str, bindSet,MaterialPacking.class);
String billCode = "";
@ -387,64 +392,63 @@ public class InvoiceServiceImpl implements InvoiceService {
// 查询MATERIALQUANTITY MATERIALQUANTITY2是否相等如果相等则未修改数量不相等则修改数量
// 如果已修改数量则进行拆单
// for (int z = 0; z < qtyQueryForList1.size(); z++) {
// String MATERIALPACKINGNAME = qtyQueryForList1.get(z).get("MATERIALPACKINGNAME").toString();
// Object[] bindSet = {MATERIALPACKINGNAME};
// String qtysql = "SELECT * FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME = ?";
// List<MaterialPacking> qtyQueryForList = MaterialPackingServiceProxy.getMaterialPackingService().select(qtysql, bindSet);
// String qty = String.valueOf(qtyQueryForList.get(z).getMaterialQuantity());`
//
// String qty2 = new Double(qtyQueryForList.get(z).getMaterialQuantity2()) == null ? "0" : String.valueOf(qtyQueryForList.get(z).getMaterialQuantity2());
// String materialPackingName = qtyQueryForList.get(z).getMaterialPackingName();
// String charge = qtyQueryForList.get(z).getCharge();
// BigDecimal bigQty = new BigDecimal(qty);
// // 已拆数量
// BigDecimal bigQty2 = new BigDecimal(qty2);
//
// // 如果已拆数量不等于原数量并且已拆数量为0(未拆分数量)
// if(bigQty.compareTo(bigQty2) != 0 && !"0".equals(qty2)) {
// // 剩余数量
// BigDecimal restQty = bigQty.subtract(bigQty2);
// // 生成新的拆分条码
// String stringBigQty2 = bigQty2.toString();
// String newPalletNo = CodeGenerator.packingGenerateCode(materialPackingName,stringBigQty2,charge);
//
// // 写入拆分的新条码更新原数据库
// List<MaterialPacking> boxList = new ArrayList<MaterialPacking>();
//// MaterialPackingKey materialpackingKey = new MaterialPackingKey();
// MaterialPacking materialpacking = new MaterialPacking();
//// materialpackingKey.setSiteName("SDK");
//// materialpackingKey.setMaterialPackingName(newPalletNo);
//// materialpacking.setKey(materialpackingKey);
// if (z < 0 || z >= qtyQueryForList.size()) {
// throw new IndexOutOfBoundsException("Invalid index z: " + z);
// }
// // 复制一个当前的原标签数据
// MaterialPacking materialpackingNew = qtyQueryForList.get(z);
// // 设置新为标签和数量
// materialpackingNew.setMaterialPackingName(newPalletNo);
// // bigQty2 转double类型
// materialpackingNew.setMaterialQuantity(bigQty2.doubleValue());
// boxList.add(qtyQueryForList.get(z));
// boxList.add(materialpackingNew);
// boolean moveTransformOut = ChargeSplitService.packingChargeSplit(boxList, eventUser);
// if (moveTransformOut != true) {
// throw new RuntimeException("修改数量拆分失败");
// }
//
// // 原条码扣减
// SetEventInfo setEventInfo = new SetEventInfo();
// Map<String, Object> pakHashMap = new HashMap<>();
// pakHashMap.put("materialQuantity", restQty.doubleValue());
//
// EventInfo eventInfo = new EventInfoUtil().makeEventInfo("修改数量拆分条码", eventUser, "修改数量拆分条码");
// setEventInfo.setUserColumns(pakHashMap);
// MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( queryForList.get(z).get("SITENAME").toString(),
// queryForList.get(z).get("MATERIALPACKINGNAME").toString()), eventInfo, setEventInfo);
//
// }
//
// }
for (int z = 0; z < packingQueryForList.size(); z++) {
String MATERIALPACKINGNAME = packingQueryForList.get(z).get("MATERIALPACKINGNAME").toString();
Object[] bindSet = {MATERIALPACKINGNAME};
String qtysql = "WHERE MATERIALPACKINGNAME = ?";
List<MaterialPacking> qtyQueryForList = MaterialPackingServiceProxy.getMaterialPackingService().select(qtysql, bindSet);
String qty = String.valueOf(qtyQueryForList.get(z).getMaterialQuantity());
String qty2 = new Double(qtyQueryForList.get(z).getMaterialQuantity2()) == null ? "0" : String.valueOf(qtyQueryForList.get(z).getMaterialQuantity2());
String materialPackingName = qtyQueryForList.get(z).getMaterialPackingName();
String charge = qtyQueryForList.get(z).getCharge();
BigDecimal bigQty = new BigDecimal(qty);
// 已拆数量
BigDecimal bigQty2 = new BigDecimal(qty2);
// 如果已拆数量不等于原数量并且已拆数量为0(未拆分数量)
if(bigQty.compareTo(bigQty2) != 0 && !"0".equals(qty2)) {
// 剩余数量
BigDecimal restQty = bigQty.subtract(bigQty2);
// 生成新的拆分条码
String stringBigQty2 = bigQty2.toString();
String newPalletNo = CodeGenerator.packingGenerateCode(materialPackingName,stringBigQty2,charge);
// 写入拆分的新条码更新原数据库
List<MaterialPacking> boxList = new ArrayList<MaterialPacking>();
// MaterialPackingKey materialpackingKey = new MaterialPackingKey();
MaterialPacking materialpacking = new MaterialPacking();
// materialpackingKey.setSiteName("SDK");
// materialpackingKey.setMaterialPackingName(newPalletNo);
// materialpacking.setKey(materialpackingKey);
// 复制一个当前的原标签数据
MaterialPacking materialpackingNew = qtyQueryForList.get(z);
// 设置新为标签和数量
materialpackingNew.setMaterialPackingName(newPalletNo);
// bigQty2 转double类型
materialpackingNew.setMaterialQuantity(bigQty2.doubleValue());
boxList.add(qtyQueryForList.get(z));
boxList.add(materialpackingNew);
boolean moveTransformOut = chargeSplitService.packingChargeSplit(boxList, eventUser);
if (moveTransformOut != true) {
throw new RuntimeException("修改数量拆分失败");
}
// 原条码扣减
SetEventInfo setEventInfo = new SetEventInfo();
Map<String, Object> pakHashMap = new HashMap<>();
pakHashMap.put("materialQuantity", restQty.doubleValue());
EventInfo eventInfo = new EventInfoUtil().makeEventInfo("修改数量拆分条码", eventUser, "修改数量拆分条码");
setEventInfo.setUserColumns(pakHashMap);
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( queryForList.get(z).get("SITENAME").toString(),
queryForList.get(z).get("MATERIALPACKINGNAME").toString()), eventInfo, setEventInfo);
}
}
//new MESServiceImpl().NeedReceiveMaterialInfoSend_NEW(shipRequestName, "SDK", materialPackingKeyList);
@ -590,6 +594,178 @@ public class InvoiceServiceImpl implements InvoiceService {
return billCode;
}
@Transactional
public boolean packingChargeSplit(List<MaterialPacking> boxList, String user) {
String condition="";
String newBoxId1 = boxList.get(1).getMaterialPackingName();
// String pc = "('" + materialpackingname + "')";
String sql = "SELECT 1 FROM MATERIALPACKING WHERE MATERIALPACKINGNAME IN (:MATERIALPACKINGNAME1, :MATERIALPACKINGNAME2)";
Map<String, Object> hashMap2 = new HashMap<String,Object> ();
hashMap2.put("MATERIALPACKINGNAME1", newBoxId1);
List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap2);
List<MaterialPacking> MaterialPackingList = null;
if (queryForList != null && queryForList.size() > 0) {
String[] bindSet={newBoxId1};
condition="WHERE MATERIALPACKINGNAME IN (?,?)";
MaterialPackingList = MaterialPackingServiceProxy.getMaterialPackingService().select(condition, bindSet);
}
//解析条码,根据远条码信息更新目标条码数量和库存状态
SetEventInfo setEventInfo = new SetEventInfo();
EventInfoUtil eventInfoUtil = new EventInfoUtil();
makeEventInfo = eventInfoUtil.makeEventInfo("ChargeSplit", user, "ChargeSplit" );
//找到原来标签的相关信息
// String receiveTime = "";
// String makeDate = "";
// String expireDate = "";
String holdState = "";
String oqaResult = "";
String oqaResultState = "";
String packingGrade = "";
String trueGg = "";
String erpFactory = "";
String erpLocation = "";
String locationName = "";
String shelfName = "";
String areaName = "";
String durableName = "";;
String CAREER_ASSISTANCE = "";
String SALESPERSON = "";
String CUSTOMNO = "";
String DEVIATION = "";
String DIAMETER = "";
String WIDTH = "";
String WEIGHT = "";
String PRODUCTLINE = "";
String UNIT = "";
String MJPC = "";
String BUSINESS_UNIT = "";
String MATERIALSPECNAME = "";
// String SUBPACKINGQUANTITY = "";
// String MATERIALCREATEQUANTITY = "";
String CHARGE = "";
String SDK_ID = "";
String PHASE = "";
String RECEIVEREQUESTNAME = "";
String RECEIVEREQUESTDETAILNAME = "";
String REMARK = "";
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.SHELFNAME ,M.AREANAME ,M.DURABLENAME ,M.CAREER_ASSISTANCE ,M.SALESPERSON ,M.CUSTOMNO,M.SDK_ID,M.PHASE,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" +
" FROM MATERIALPACKING M WHERE M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME AND M.CHARGE = :CHARGE ";
Map<String, Object> hashMap4 = new HashMap<String,Object> ();
hashMap4.put("MATERIALPACKINGNAME", boxList.get(0).getMaterialPackingName());
hashMap4.put("CHARGE", boxList.get(0).getCharge());
List<Map<String, Object>> queryForList3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(ypcSql, hashMap4);
if (queryForList3 != null && queryForList3.size() > 0) {
Map<String, Object> map = queryForList3.get(0);
holdState = map.get("HOLDSTATE") == null ? "N" : map.get("HOLDSTATE").toString();
oqaResult = map.get("OQARESULT") == null ? "" : map.get("OQARESULT").toString();
oqaResultState = map.get("OQARESULTSTATE") == null ? "END" : map.get("OQARESULTSTATE").toString();
packingGrade = map.get("PACKINGGRADE") == null ? "" : map.get("PACKINGGRADE").toString();
trueGg = map.get("TRUEGG") == null ? "" : map.get("TRUEGG").toString();
erpFactory = map.get("ERPFACTORY") == null ? "" : map.get("ERPFACTORY").toString();
erpLocation = map.get("ERPLOCATION") == null ? "" : map.get("ERPLOCATION").toString();
locationName = map.get("LOCATIONNAME") == null ? "" : map.get("LOCATIONNAME").toString();
shelfName = map.get("SHELFNAME") == null ? "" : map.get("SHELFNAME").toString();
areaName = map.get("AREANAME") == null ? "" : map.get("AREANAME").toString();
durableName = map.get("DURABLENAME") == null ? "" : map.get("DURABLENAME").toString();
CAREER_ASSISTANCE = map.get("CAREER_ASSISTANCE") == null ? "" : map.get("CAREER_ASSISTANCE").toString();
SALESPERSON = map.get("SALESPERSON") == null ? "" : map.get("SALESPERSON").toString();
CUSTOMNO = map.get("CUSTOMNO") == null ? "" : map.get("CUSTOMNO").toString();
DEVIATION = map.get("DEVIATION") == null ? "" : map.get("DEVIATION").toString();
DIAMETER = map.get("DIAMETER") == null ? "" : map.get("DIAMETER").toString();
WIDTH = map.get("WIDTH") == null ? "" : map.get("WIDTH").toString();
WEIGHT = map.get("WEIGHT") == null ? "" : map.get("WEIGHT").toString();
PRODUCTLINE = map.get("PRODUCTLINE") == null ? "" : map.get("PRODUCTLINE").toString();
UNIT = map.get("UNIT") == null ? "" : map.get("UNIT").toString();
MJPC = map.get("MJPC") == null ? "" : map.get("MJPC").toString();
BUSINESS_UNIT = map.get("BUSINESS_UNIT") == null ? "" : map.get("BUSINESS_UNIT").toString();
MATERIALSPECNAME = map.get("MATERIALSPECNAME") == null ? "" : map.get("MATERIALSPECNAME").toString();
// SUBPACKINGQUANTITY = map.get("SUBPACKINGQUANTITY") == null ? "" : map.get("SUBPACKINGQUANTITY").toString();
// MATERIALCREATEQUANTITY = map.get("MATERIALCREATEQUANTITY") == null ? "" : map.get("MATERIALCREATEQUANTITY").toString();
CHARGE = map.get("CHARGE") == null ? "" : map.get("CHARGE").toString();
SDK_ID = map.get("SDK_ID") == null ? "" : map.get("SDK_ID").toString();
PHASE = map.get("PHASE") == null ? "" : map.get("PHASE").toString();
REMARK = map.get("REMARK") == null ? "" : map.get("REMARK").toString();
}
if (MaterialPackingList != null && MaterialPackingList.size() > 0) {
throw new RuntimeException("拆分批次的标签已存在!");
}else {
// 创建标签1
CreateInfo createInfo1 = new CreateInfo();
createInfo1.setSiteName("SDK");
createInfo1.setMaterialPackingName(newBoxId1);// 新生成的box id
createInfo1.setMaterialPackingType("Box");
createInfo1.setContentMaterialType("");
Map<String, Object> bindMap = new HashMap<String, Object>();
bindMap.put("MaterialSpecName", MATERIALSPECNAME);
bindMap.put("PackingGrade", packingGrade);
bindMap.put("oqaResult", oqaResult);
bindMap.put("oqaResultState", oqaResultState);
bindMap.put("SubPackingQuantity",boxList.get(1).getMaterialQuantity());
bindMap.put("MaterialCreateQuantity",boxList.get(1).getMaterialQuantity());
bindMap.put("MaterialQuantity", boxList.get(1).getMaterialQuantity());// 数量
bindMap.put("PackingState", "Released");
bindMap.put("OldPackingState", "Released");
bindMap.put("stockState", "Stocked");
bindMap.put("OldStockState", "Created");
bindMap.put("HoldState", holdState);
bindMap.put("LocationName", locationName);
bindMap.put("charge",CHARGE);
bindMap.put("MaterialProcessGroupName","");
bindMap.put("LastEventTimeKey",TimeStampUtil.getCurrentEventTimeKey());
bindMap.put("MakeDate", queryForList3.get(0).get("MAKEDATE"));
bindMap.put("expiringDate", queryForList3.get(0).get("EXPIRINGDATE"));
bindMap.put("ReceiveTime", queryForList3.get(0).get("RECEIVETIME"));
bindMap.put("unit", queryForList3.get(0).get("UNIT"));
bindMap.put("ReceiveUser", makeEventInfo.getEventUser());
bindMap.put("ErpLocation", erpLocation);
bindMap.put("ErpFactory", erpFactory);
bindMap.put("locationName", locationName);
bindMap.put("StockInType", "Normal");
bindMap.put("SDK_ID", SDK_ID);
bindMap.put("PHASE", PHASE);
bindMap.put("remark", REMARK);
bindMap.put("ReceiveRequestName", RECEIVEREQUESTNAME);
bindMap.put("ReceiveRequestDetailName",RECEIVEREQUESTDETAILNAME);
bindMap.put("CAREER_ASSISTANCE", CAREER_ASSISTANCE);//业助信息
bindMap.put("BUSINESS_UNIT", BUSINESS_UNIT);//业务
bindMap.put("SALESPERSON", SALESPERSON);//事业部
bindMap.put("MJPC", MJPC);//母卷批次
bindMap.put("truegg", trueGg);
bindMap.put("durableName", durableName);
bindMap.put("areaName", areaName);
bindMap.put("PRODUCTLINE", PRODUCTLINE);
bindMap.put("WIDTH", WIDTH);
bindMap.put("DEVIATION", DEVIATION);
bindMap.put("WEIGHT", WEIGHT);
bindMap.put("DIAMETER", DIAMETER);
bindMap.put("shelfName", shelfName);
createInfo1.setUserColumns(bindMap);
MaterialPackingServiceProxy.getMaterialPackingService().create(makeEventInfo, createInfo1);
//更新原标签批次的库位状态为出库
// MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",boxList.get(0).getMaterialPackingName());
// Map<String, Object> hashMap3 = new HashMap<String,Object> ();
// hashMap3.put("stockState", "StockOut");
// setEventInfo.setUserColumns(hashMap3);
// MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo);
}
return true;
}
//无来源转库过账-转现场仓 311
public String UnSourcedChangeLocation(List<MaterialPackingKey> all,
String aimFactory,
@ -1832,6 +2008,9 @@ public class InvoiceServiceImpl implements InvoiceService {
" 'N' IS_CHECK\r\n" +
"FROM\r\n" +
" MATERIALPACKING A\r\n" +
" LEFT JOIN MATERIALSHIPREQUESTDETAIL mdl ON\r\n" +
" mdl.SHIPREQUESTNAME= A.SHIPREQUESTNAME\r\n" +
" AND mdl.MATERIALSPECNAME = A.MATERIALSPECNAME\r\n" +
"LEFT JOIN SDK_SPEC SS ON\r\n" +
" A.SDK_ID = SS.SDK_ID\r\n" +
"LEFT JOIN \r\n" +
@ -1859,6 +2038,7 @@ public class InvoiceServiceImpl implements InvoiceService {
" AND (A.ETCSTATE IS NULL\r\n" +
" OR A.ETCSTATE = 'EtcIn')\r\n" +
" AND A.OQARESULTSTATE <> 'PREOQA'\r\n" +
" AND (A.ERPLOCATION <> mdl.ERPRECEIVELOCATION OR mdl.ERPRECEIVELOCATION IS NULL)\r\n" +
" AND to_char(A.EXPIRINGDATE, 'yyyymmdd') >= to_char(SYSDATE, 'yyyymmdd'))";
Map<String, Object> hashMap = new HashMap<String,Object> ();
hashMap.put("SITENAME", "SDK");