fix:修改拆分

This commit is contained in:
郭飞 2025-04-23 18:34:12 +08:00
parent 9d31c78799
commit 018fdef365
7 changed files with 518 additions and 39 deletions

View File

@ -38,7 +38,7 @@ public class ChargeSplitController {
boolean moveTransformOut = ChargeSplitService.ChargeSplit(boxList, user);
if (moveTransformOut != true) {
throw new RuntimeException("NC返回" + "过账数据为空");
throw new RuntimeException("拆分失败");
} else {
return AjaxResult.me().setSuccess(true).setResultObj(null);
}

View File

@ -10,4 +10,7 @@ import java.util.List;
public interface ChargeSplitService extends CommonService<BSLabelKey, BSLabel> {
boolean ChargeSplit(List<MaterialPacking> boxList, String user);
// 备货出库修改数量拆分条码
boolean packingChargeSplit(List<MaterialPacking> boxList, String user);
}

View File

@ -219,7 +219,179 @@ public class ChargeSplitServiceImpl implements ChargeSplitService {
}
return true;
}
// 备货出库修改数量拆分条码
@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;
}
//无来源转库拆分
@Transactional
public boolean NoLYChargeSplit(StorageSpec StorageSpec, String user, String locationNameCr) throws Exception {

View File

@ -13,11 +13,13 @@ import com.cim.idm.mwmsextend.generic.util.CommonValidation;
import com.cim.idm.mwmsextend.materialpacking.service.MaterialPackingServiceImpl;
import com.cim.idm.mwmsextend.materialpacking.service.MaterialPackingServiceUtil;
import com.cim.idm.mwmsextend.materialshiprequest.service.MaterialShipRequestServiceImpl;
import com.cim.idm.service.ChargeSplitService;
import com.cim.idm.service.InvoiceService;
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.AjaxResult;
import com.cim.idm.utils.CodeGenerator;
import com.cim.idm.utils.CommonUtils;
import com.cim.idm.utils.EventInfoUtil;
@ -52,6 +54,9 @@ public class InvoiceServiceImpl implements InvoiceService {
@Autowired
private ToSAPServiceImpl toSAPService;
@Autowired
private ChargeSplitService ChargeSplitService;
private MaterialShipRequestServiceImpl ms = new MaterialShipRequestServiceImpl();
private MaterialPackingServiceImpl mp = new MaterialPackingServiceImpl();
@ -331,17 +336,21 @@ 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 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 ");
String str = "";
str += "(";
for (String materialPacking : materialPackingKeyList) {
str += "'" + materialPacking + "',";
}
str += "'')";
Object[] bindSet = {};
// List<Map<String, Object>> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(cklx.toString() + str, hashMap);
// 查询MATERIALQUANTITY MATERIALQUANTITY2是否相等如果相等则未修改数量不相等则修改数量
List<Map<String, Object>> qtyQueryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(cklx.toString() + str, hashMap);
// List<MaterialPacking> qtyQueryForList = MaterialPackingServiceProxy.getMaterialPackingService().select(cklx.toString() + str, bindSet,MaterialPacking.class);
String billCode = "";
switch (shipRequestType) {
case "NLCC" : //STO调拨出库
@ -379,28 +388,57 @@ 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();
// String materialPackingName = qtyQueryForList.get(z).get("MATERIALPACKINGNAME").toString();
//
// 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);
//
// if(bigQty.compareTo(bigQty2) != 0) {
// // 如果已拆数量不等于原数量并且已拆数量为0(未拆分数量)
// if(bigQty.compareTo(bigQty2) != 0 && !"0".equals(qty2)) {
// // 剩余数量
// BigDecimal restQty = bigQty.subtract(bigQty2);
// // 生成新的拆分条码
// String stringBigQty2 = bigQty2.toString();
// String newPalletNo = CodeGenerator.packingGenerateCode(materialPackingName,stringBigQty2);
// 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();
// eventInfo = new EventInfoUtil().makeEventInfo("修改数量拆分条码", eventUser, "修改数量拆分条码");
// setEventInfo.setUserColumns(hashMap3);
// MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( queryForList.get(0).get("SITENAME").toString(),
// queryForList.get(0).get("MATERIALPACKINGNAME").toString()), eventInfo, 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);
//
// // 写入拆分的新条码更新原数据库
// }
//
// }

View File

@ -477,7 +477,7 @@ public class MESToWMSServiceImpl implements MESToWMSService {
MaterialPackingServiceImpl.checkMaterialPackingExist(lotname);
EventInfo makeEventInfo = EventInfoUtil.makeEventInfo("createfgBoxInfo", "MES", "createfgBoxInfo", "", "");
productIntoServiceImpl.receiveMesShippInfo(makeEventInfo, "SDK", lotname, "", "MES",
productIntoServiceImpl.receiveMesShippInfo2(makeEventInfo, "SDK", lotname, "", "MES",
lotname, receiveActNo, erpLocation, erpFactory, locationName, requestName, "", "");
} else if ("MAT".equals(stockInType)) { // 生产退料入库
Map<String, Object> iqcBind = new HashMap<>();

View File

@ -580,6 +580,222 @@ public class ProductIntoServiceImpl implements FGStockInService {
return true;
}
// mes创建批次sap去除校验
@Transactional
public boolean receiveMesShippInfo2(EventInfo eventInfo,String siteName,String materialPackingName,
String durableName,String user,String palletName,String receiveActNo,
String erpLocation,String erpFactory,String locationName,String receiveRequestName,
String receiveRequestDetailName,String areaName) throws Exception {
StringBuffer sql = new StringBuffer();
sql.append(" ");
sql.append(" SELECT ");
sql.append(" T.LOTNAME MATERIALPACKINGNAME, ");
sql.append(" T.QTY MATERIALQUANTITY, ");
sql.append(" T.UNIT, ");
sql.append(" M2. RECEIVEREQUESTDETAILNAME,");
sql.append(" T.REQUESTNAME RECEIVEREQUESTNAME,");
sql.append(" T.PRODUCTSPECNAME MATERIALSPECNAME, ");
sql.append(" SS.SPECNAME , ");
sql.append(" REPLACE(T.SDK_ID, '~', '') SDK_ID, ");
sql.append(" M.ERPLOCATION , ");
sql.append(" T.AREA ,");
sql.append(" T.SHIPUSER , ");
sql.append(" T.PACKINGGRADE , ");
sql.append(" T.SHIPTIME , ");
sql.append(" M3.MATERIALTYPE , ");
sql.append(" T.REMARK,T.PHASE,T.CAREER_ASSISTANCE,T.DURABLETYPE ,T.BUSINESS_UNIT,T.SALESPERSON,T.MJPC ,T.TRUEGG,T.CHARGE,T.MAKEDATE, T.CUSTOMERNO ,"
+ "T.LK_DURABLENAME,T.LK_AREANAME,T.LK_PRODUCTLINE,T.LK_WIDTH ,T.LK_DEVIATION,T.LK_WEIGHT,T.LK_DIAMETER,T.LK_SHELFNAME ");
sql.append(" FROM ");
sql.append(" BS_MES_SHIPPED T ");
sql.append(" LEFT JOIN MATERIALRECEIVEREQUEST M ON ");
sql.append(" T.REQUESTNAME = M.RECEIVEREQUESTNAME ");
sql.append(" LEFT JOIN MATERIALRECEIVEREQUESTDETAIL M2 ON ");
sql.append(" T.REQUESTNAME = M2.RECEIVEREQUESTNAME ");
sql.append(" AND T.PRODUCTSPECNAME = M2.MATERIALSPECNAME ");
sql.append(" AND T.SDK_ID = M2.SDK_ID ");
sql.append(" LEFT JOIN SDK_SPEC SS ON T.SDK_ID = SS.SDK_ID ");
sql.append(" LEFT JOIN MATERIALSPEC M3 ON T.PRODUCTSPECNAME = M3.MATERIALSPECNAME ");
sql.append(" WHERE (T.RECEIVE_FLAG IS NULL OR T.RECEIVE_FLAG <> 'Y') ");
sql.append(" AND T.LOTNAME = :MATERIALPACKINGNAME ");
// sql.append(" AND M.SITENAME = :SITENAME ");
Map<String, Object> hashMap = new HashMap<String,Object> ();
hashMap.put("MATERIALPACKINGNAME", materialPackingName);
List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql.toString(), hashMap);
if(queryForList == null || queryForList.size() < 1) {
throw new RuntimeException("不存在要入库的信息");
}
String materialSpecName = queryForList.get(0).get("MATERIALSPECNAME") == null ? "" : queryForList.get(0).get("MATERIALSPECNAME").toString();
MaterialSpec materialSpec = new MaterialSpec();
MaterialSpecKey materialSpecKey = new MaterialSpecKey();
materialSpecKey.setMaterialSpecName(materialSpecName);
materialSpecKey.setSiteName(siteName);
String is_oven = "N";
materialSpec = MaterialServiceProxy.getMaterialSpecService()
.selectByKey(materialSpecKey);
String maturationflag = materialSpec.getMATURATIONFLAG();//熟化标识
String is_CON_TEMP = materialSpec.getIS_CON_TEMP();//恒温恒湿
//判断仓库是否启用了货位但货位为空
String sql2 = "SELECT be.USE_LOCATION,be.CONST_TEMP,be.IS_OVEN FROM BS_ERPLOCATION be WHERE be.ERPLOCATIONNAME = :ERPLOCATION";
Map<String, Object> hashMap2 = new HashMap<String,Object> ();
hashMap2.put("ERPLOCATION", erpLocation);
hashMap2.put("LOCATIONNAME", locationName);
List<Map<String, Object>> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql2, hashMap2);
if (queryForList2 == null || queryForList2.size() < 1) {
throw new RuntimeException("仓库不存在");
} else {
String string = queryForList2.get(0).get("USE_LOCATION") == null ? "" : queryForList2.get(0).get("USE_LOCATION").toString();//启用货位
// String const_temp = queryForList2.get(0).get("CONST_TEMP") == null ? "" : queryForList2.get(0).get("CONST_TEMP").toString(); //恒温标识
// is_oven = queryForList2.get(0).get("IS_OVEN") == null ? "" : queryForList2.get(0).get("IS_OVEN").toString(); //熟化标识
// if ("Y".equals(string) && ("".equals(locationName) || locationName == null )) {
// throw new RuntimeException("仓库启用了货位,但货位为空");
// }
// if ("N".equals(string) && (!"".equals(locationName) && locationName != null) ) {
// throw new RuntimeException("仓库未启用货位,但货位不为空");
// }
// if (!"".equals(locationName) && locationName != null) {
// String sql3 = "SELECT * FROM STORAGESPEC S WHERE S.STORAGENAME = :LOCATIONNAME AND S.ERPLOCATION = :ERPLOCATION ";
// List<Map<String, Object>> queryForList3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql3, hashMap2);
// if (queryForList3 == null || queryForList3.size() < 1) {
// throw new RuntimeException("仓库与货位对应关系不正确");
// }
// }
// String ckhw = "Y".equals(const_temp) ? "恒温恒湿" : "非恒温恒湿";
// String wlhw = "Y".equals(is_CON_TEMP) ? "恒温恒湿" : "非恒温恒湿";
//
//
// String cksh = "Y".equals(is_oven) ? "熟化" : "非熟化";
// String wlsh = "Y".equals(maturationflag) ? "熟化" : "非熟化";
// //物料非熟化 不能进熟化仓
// if ("Y".equals(maturationflag)) {
//
// } else { //非熟化逻辑
// if ("Y".equals(is_oven)) {
// throw new RuntimeException("仓库" + cksh + "; 物料" + wlsh);
// }
// }
//物料恒温 只能进恒温仓或熟化仓 2024.11
// String packingGrade = queryForList.get(0).get("PACKINGGRADE") == null ? "" : queryForList.get(0).get("PACKINGGRADE").toString();
// if (!"NG".equals(packingGrade)) {
// if ("Y".equals(is_CON_TEMP)) {
// if ("Y".equals(const_temp) || "Y".equals(is_oven)) {
//
// } else {
// throw new RuntimeException("仓库" + ckhw + "; 物料" + wlhw);
// }
// } else { //物料非恒温 不能进恒温仓
// if ("Y".equals(const_temp)) {
// throw new RuntimeException("仓库" + ckhw + "; 物料" + wlhw);
// }
// }
// }
// if (!is_oven.equals(maturationflag)) {
// throw new RuntimeException("仓库" + cksh + "; 物料" + wlsh);
// }
// if (!"Y".equals(maturationflag)) {
// if (!const_temp.equals(is_CON_TEMP)) {
// throw new RuntimeException("仓库" + ckhw + "; 物料" + wlhw);
// }
// }
}
Map<String, Object> bindMap = new HashMap<String, Object>();
bindMap.put("lkMaterialPackingName", palletName);
bindMap.put("MaterialType", queryForList.get(0).get("MATERIALTYPE"));
bindMap.put("MaterialSpecName",materialSpecName);
// if ( materialSpecName.startsWith("4")) {
// packingGrade = "OK";
// }
String packingGrade = queryForList.get(0).get("PACKINGGRADE") == null ? "" : queryForList.get(0).get("PACKINGGRADE").toString();
if (!"".equals(packingGrade)) {
bindMap.put("oqaResultState", GenericServiceProxy.getConstantMap().OQA_State_End);
bindMap.put("oqaResult",packingGrade);
bindMap.put("packingGrade", packingGrade);
} else {
bindMap.put("oqaResultState",GenericServiceProxy.getConstantMap().OQA_State_Pre);
}
bindMap.put("SubPackingQuantity",queryForList.get(0).get("MATERIALQUANTITY"));
bindMap.put("MaterialCreateQuantity",
queryForList.get(0).get("MATERIALQUANTITY"));
bindMap.put("MaterialQuantity", queryForList.get(0).get("MATERIALQUANTITY"));// 数量
bindMap.put("PackingState", "Released");
bindMap.put("OldPackingState", "Released");
bindMap.put("stockState", "Created");
bindMap.put("OldStockState", "Created");
bindMap.put("HoldState", "N");
bindMap.put("areaName", areaName);
bindMap.put("durableType", queryForList.get(0).get("DURABLETYPE"));
bindMap.put("truegg", queryForList.get(0).get("TRUEGG"));
bindMap.put("unit", queryForList.get(0).get("UNIT"));
bindMap.put("LocationName", locationName);
bindMap.put("charge",queryForList.get(0).get("CHARGE"));
bindMap.put("DurableName", durableName);
bindMap.put("MaterialProcessGroupName","");
bindMap.put("LastEventTimeKey",
TimeStampUtil.getCurrentEventTimeKey());
bindMap.put("ReceiveRequestName", receiveRequestName);
bindMap.put("productOrder", receiveRequestName);
bindMap.put("ReceiveRequestDetailName",receiveRequestDetailName);
bindMap.put("MakeDate", queryForList.get(0).get("MAKEDATE"));
bindMap.put("expiringDate", getExpridate(queryForList.get(0).get("MAKEDATE") == null ? "" : queryForList.get(0).get("MAKEDATE").toString(), queryForList.get(0).get("MATERIALSPECNAME").toString()));
bindMap.put("ReceiveTime", eventInfo.getEventTime());
bindMap.put("ReceiveUser", eventInfo.getEventUser());
bindMap.put("ShipTime",queryForList.get(0).get("SHIPTIME"));
bindMap.put("ShipUser",queryForList.get(0).get("SHIPUSER"));
bindMap.put("ErpLocation", erpLocation);
bindMap.put("ErpFactory", erpFactory);
bindMap.put("receiveActNo", receiveActNo);
bindMap.put("locationName", locationName);
bindMap.put("StockInType", "Normal");
bindMap.put("SDK_ID", queryForList.get(0).get("SDK_ID"));
bindMap.put("PHASE", queryForList.get(0).get("PHASE"));
bindMap.put("CUSTOMNO",queryForList.get(0).get("CUSTOMERNO"));//客户
bindMap.put("CAREER_ASSISTANCE", queryForList.get(0).get("CAREER_ASSISTANCE"));//业助信息
bindMap.put("BUSINESS_UNIT", queryForList.get(0).get("BUSINESS_UNIT"));//业务
bindMap.put("SALESPERSON", queryForList.get(0).get("SALESPERSON"));//事业部
bindMap.put("MJPC", queryForList.get(0).get("MJPC"));//母卷批次
bindMap.put("remark", queryForList.get(0).get("REMARK"));//备注
if("Y".equals(is_oven)) {
bindMap.put("MATURATIONINTIME", eventInfo.getEventTime());//熟化入库时间
}
//增加立库相关信息T.LK_DURABLENAME,T.LK_AREANAME,T.LK_PRODUCTLINE,T.LK_WIDTH ,T.LK_DEVIATION,T.LK_WEIGHT,T.LK_DIAMETER,T.LK_SHELFNAME
bindMap.put("durableName", queryForList.get(0).get("LK_DURABLENAME"));
bindMap.put("areaName", queryForList.get(0).get("LK_AREANAME"));
bindMap.put("PRODUCTLINE", queryForList.get(0).get("LK_PRODUCTLINE"));
bindMap.put("WIDTH", queryForList.get(0).get("LK_WIDTH"));
bindMap.put("DEVIATION", queryForList.get(0).get("LK_DEVIATION"));
bindMap.put("WEIGHT", queryForList.get(0).get("LK_WEIGHT"));
bindMap.put("DIAMETER", queryForList.get(0).get("LK_DIAMETER"));
bindMap.put("shelfName", queryForList.get(0).get("LK_SHELFNAME"));
//查询库存是否存在且状态为创建
String sql4 = "SELECT m.STOCKSTATE FROM MATERIALPACKING m WHERE m.MATERIALPACKINGNAME = :MATERIALPACKINGNAME ";
List<Map<String, Object>> queryForList4 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql4, hashMap);
if (queryForList4 != null && queryForList4.size() > 0) {
String stockState = queryForList4.get(0).get("STOCKSTATE").toString();
if ("Created".equals(stockState)) {
SetEventInfo setEventInfo = new SetEventInfo();
setEventInfo.setUserColumns(bindMap);
MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, materialPackingName);
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, eventInfo, setEventInfo);
return false;
}
} else {
//入库信息存入库存表
CreateInfo createInfo = new CreateInfo();
createInfo.setSiteName(siteName);
createInfo.setMaterialPackingName(materialPackingName);// 新生成的box id
createInfo.setMaterialPackingType("Box");
createInfo.setContentMaterialType("");
createInfo.setUserColumns(bindMap);
MaterialPackingServiceProxy.getMaterialPackingService().create(
eventInfo, createInfo);
}
return true;
}
/**
* 成品入库不拆完工报告
@ -794,7 +1010,9 @@ public class ProductIntoServiceImpl implements FGStockInService {
setEventInfo.setUserColumns(bindMap);
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo);
String sql2 = "UPDATE BS_MES_SHIPPED T SET T.RECEIVE_FLAG = 'Z', T.RECEIVE_TIME = SYSDATE WHERE T.LOTNAME = :LOTNAME";
// String sql2 = "DELETE FROM BS_MES_SHIPPED T WHERE T.LOTNAME = :LOTNAME";
Map<String, Object> hashMap2 = new HashMap<String,Object> ();
hashMap2.put("LOTNAME", map.get("MATERIALPACKINGNAME").toString());
IDMFrameServiceProxy.getSqlTemplate().update(sql2, hashMap2);

View File

@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.*;
// gf 生成流水码
@Component
public class CodeGenerator {
@ -58,35 +59,82 @@ public class CodeGenerator {
}
// 修改数量条码里批次拆分获取流水码
public static String packingGenerateCode(String materialpackingname,String qty2) throws CustomException {
public static String packingGenerateCode(String materialpackingname,String qty2,String Charge) throws CustomException {
// 3. 遍历结果集生成新条码并更新数据库
List<Integer> idsToUpdate = new ArrayList<Integer>();
List<String> newNames = new ArrayList<String>();
int sequence = 1; // 假设从1开始计数实际中可能需要从数据库获取当前最大值或使用其他逻辑
String[] parts = materialpackingname.split("\\|");
if (parts.length < 7) {
throw new IllegalArgumentException("Invalid barcode format: " + materialpackingname);
// 查询当前批次下的所有条码获取最大流水码并在最大流水码基础上加1
String query = "SELECT MATERIALPACKINGNAME FROM MATERIALPACKING WHERE CHARGE = :CHARGE";
try {
Map<String, String> bindMap = new HashMap<String, String>();
bindMap.put("CHARGE", Charge);
List<Map<String, Object>> result = IDMFrameServiceProxy.getSqlTemplate().queryForList(query, bindMap);
// 如果存在流水码同批次下除开原条码还有新的条码
if(result.size() > 1){
// 存储流水码
List<String> chargeNoList = new ArrayList<>();
for (Map<String, Object> map : result) {
String materialPackingName = map.get("MATERIALPACKINGNAME").toString();
String[] partsPak = materialPackingName.split("\\|");
if (partsPak.length < 7) {
throw new IllegalArgumentException("条码格式有误: " + materialPackingName);
}
String[] chargeNos = partsPak[4].split("-");
// 存在流水码的最少能拆2个
if(chargeNos.length > 1){
// 获取chargeNos最后一个值流水码
String lastValue = chargeNos[chargeNos.length - 1];
// 正则匹配lastValue字符串的值只能是1-9的单个字符串
if (lastValue.matches("[1-9]")) {
chargeNoList.add(lastValue);
}
}
}
//对储存的流水码chargeNoList进行排序获取最大流水码并加1赋值给sequence
Collections.sort(chargeNoList);
int max = Integer.parseInt(chargeNoList.get(chargeNoList.size() - 1));
sequence = max + 1;
}
// 3. 遍历结果集生成新条码并更新数据库
List<Integer> idsToUpdate = new ArrayList<Integer>();
List<String> newNames = new ArrayList<String>();
String[] parts = materialpackingname.split("\\|");
if (parts.length < 7) {
throw new IllegalArgumentException("条码格式有误: " + materialpackingname);
}
// 构建新的条码部分假设在第五部分索引4因为索引从0开始后添加流水码
StringBuilder newBasePart = new StringBuilder();
for (int i = 0; i < parts.length - 4; 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]);
// }
// 添加倒数第二个部分假设是日期
newBasePart.append("|").append(parts[5]);
newBasePart.append("|").append(parts[6]);
// 添加新的数量部分
newBasePart.append("|").append(qty2); // 使用传入的新数量值
// idsToUpdate.add(id);
newNames.add(newBasePart.toString());
return newBasePart.toString();
}catch (Exception e) {
log.error("Failed to generate pallet number: " + e.getMessage());
throw new RuntimeException("生成流水码错误: " + e.getMessage());
}
// 构建新的条码部分假设在第五部分索引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]);
// }
// 添加倒数第二个部分假设是日期
newBasePart.append("|").append(parts[5]);
// 添加新的数量部分
newBasePart.append("|").append(qty2); // 使用传入的新数量值
// idsToUpdate.add(id);
newNames.add(newBasePart.toString());
return newBasePart.toString();
}
}