diff --git a/zi-wms-inf/src/main/java/com/cim/idm/service/impl/MESServiceImpl.java b/zi-wms-inf/src/main/java/com/cim/idm/service/impl/MESServiceImpl.java index 5e9bc2c..3f81290 100644 --- a/zi-wms-inf/src/main/java/com/cim/idm/service/impl/MESServiceImpl.java +++ b/zi-wms-inf/src/main/java/com/cim/idm/service/impl/MESServiceImpl.java @@ -117,7 +117,7 @@ public class MESServiceImpl implements MESService{ //根据单据获取要发送MES的信息 String sql="SELECT * from(\r\n" + " SELECT m.CHARGE,m.MATERIALPACKINGNAME,m.MATERIALSPECNAME,to_char(m.EXPIRINGDATE,'YYYY-MM-DD HH24:MI')EXPIRINGDATE,m.PHASE, \r\n" + - " m.TRUEGG ,m.FQTY ,m.FUNIT ,m.GXID,m.LASTEVENTUSER ,m.REMARK , m3.SHIPREQUESTTYPE, \r\n" + + " m.TRUEGG ,m.SDK_ID,m.FQTY ,m.FUNIT ,m.GXID,m.LASTEVENTUSER ,m.REMARK , m3.SHIPREQUESTTYPE, \r\n" + " m3.SHIPREQUESTDETAILTYPE ,m2.MATERIALUNIT ,bm.DENOMINATOR/bm.MODULECULE CONVERSIONSCALE, \r\n" + " m4.DESCRIPTION ,m2.MATERIALTYPE ,(SELECT RECEIVEPRODUCTIONORDERNUMBER FROM MATERIALSHIPREQUESTDETAIL m5 \r\n" + " WHERE m5.SHIPREQUESTNAME=:SHIPREQUESTNAME AND m5.MATERIALSPECNAME=m.MATERIALSPECNAME \r\n" + @@ -590,7 +590,7 @@ public class MESServiceImpl implements MESService{ jsonObject.put("expiringDate", list.get(i).get("EXPIRINGDATE")); jsonObject.put("productName", list.get(i).get("DESCRIPTION")); jsonObject.put("productStage", list.get(i).get("PHASE")); - jsonObject.put("practicalSpec", list.get(i).get("TRUEGG") == null ? "" : list.get(i).get("TRUEGG").toString()); + jsonObject.put("practicalSpec", list.get(i).get("TRUEGG") == null ? list.get(i).get("SDK_ID") : list.get(i).get("TRUEGG").toString()); jsonObject.put("productQuantity", list.get(i).get("MATERIALQUANTITY")); jsonObject.put("productQuantityUnit", list.get(i).get("MATERIALUNIT")); jsonObject.put("auxiliaryUnit", list.get(i).get("FUNIT")); diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/PalletStockInAndOutController.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/PalletStockInAndOutController.java new file mode 100644 index 0000000..87281d5 --- /dev/null +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/PalletStockInAndOutController.java @@ -0,0 +1,683 @@ +package com.cim.idm.controller; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; +import com.cim.idm.framework.IDMFrameServiceProxy; +import com.cim.idm.framework.data.EventInfo; +import com.cim.idm.framework.util.time.TimeStampUtil; +import com.cim.idm.model.BaseEntity; +import com.cim.idm.model.ErpMessageLog; +import com.cim.idm.model.MaterialPacking; +import com.cim.idm.model.PalletDto; +import com.cim.idm.utils.AjaxResult; +import com.cim.idm.utils.CommonUtils; +import com.cim.idm.wmsextend.generic.errorHandler.CustomException; +import com.cim.idm.wmsextend.generic.util.ConvertUtil; +import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy; +import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey; +import com.cim.idm.wmspackage.materialpacking.management.info.CreateInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.util.*; + + +@RestController +@RequestMapping("/api/wms") +@EnableAutoConfiguration +public class PalletStockInAndOutController { + + @Autowired + private com.cim.idm.service.Impl.ProductIntoServiceImpl ProductIntoServiceImpl; + + @Autowired + private com.cim.idm.service.Impl.InvoiceServiceImpl InvoiceServiceImpl; + + CommonUtils untils=new CommonUtils(); + + private static final Logger log = LoggerFactory.getLogger(PalletStockInAndOutController.class); + @RequestMapping(value = "/syncMesData", method = RequestMethod.POST) + public AjaxResult syncMesData(@RequestBody JSONObject in) { + log.debug("***********************************"); + log.debug("***********************************"); + log.debug(in.toString()); + log.debug("***********************************"); + log.debug("***********************************"); + AjaxResult result = new AjaxResult(); + ErpMessageLog loginfo = new ErpMessageLog(); + loginfo.setServerName("MesToWms"); + loginfo.setMessageId(""); + + loginfo.setEventUser(in.getString("user")); + loginfo.setId(UUID.randomUUID().toString()); + loginfo.setInterfaceTime(ConvertUtil.getCurrTime("yyy-MM-dd HH:mm:ss")); + loginfo.setSendMsg(in.toJSONString()); + try { + String messagetype = in.get("messagetype").toString(); + loginfo.setEventName(String.format("%s", messagetype)); + switch (messagetype) { + case "STOCKINPALLET" : // 托盘入库 + BaseEntity PalletInDto = JSONObject.parseObject(in.toJSONString(), + new TypeReference>() { + }); + stockInPallet(PalletInDto); + break; + case "STOCKOUTPALLET" : // 托盘出库 + BaseEntity PalletOutDto = JSONObject.parseObject(in.toJSONString(), + new TypeReference>() { + }); + stockOutPallet(PalletOutDto); + break; + default : + break; + } + result = AjaxResult.me().setSuccess(true).setMessage("执行成功"); + loginfo.setResultCode("success"); + loginfo.setReturnMsg(JSONObject.toJSONString(result)); + // 消息保存日志,Mes推送wms的数据写入表BS_ERPMESSAGELOG中 + saveMessageLog(loginfo); + return result; + } catch (Exception e) { + result = AjaxResult.me().setSuccess(false).setErrorCode(500).setMessage(e.getMessage()); + loginfo.setResultCode("fail"); + loginfo.setReturnMsg(JSONObject.toJSONString(result)); + saveMessageLog(loginfo); + return result; + } + } + /** + * 托盘入库 + * @param PalletDto + * @throws Exception + */ + private void stockInPallet(BaseEntity PalletDto) throws Exception { + try { +// String commitDate = PalletDto.getTime(); + SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + Date datea = null; + datea = inputFormat.parse(PalletDto.getTime()); + String commitDate = outputFormat.format(datea); + + for (PalletDto palletDto : PalletDto.getBody()) { + String palletname = palletDto.getPALLETNAME();//栈板 + String materialspecname = palletDto.getMATERIALSPECNAME();//料号 + String erpfactory = palletDto.getERPFACTORY();//组织 + String erplocation = palletDto.getERPLOCATION();//仓库 + String locationname = palletDto.getLOCATIONNAME();//货位 + String oqaresult = palletDto.getOQARESULT();//质检结果 + String indate = palletDto.getINDATE();//入库日期 + String phase = palletDto.getPHASE();//阶段 + String planorder = palletDto.getPLANORDER();//投放计划 + String productorder = palletDto.getPRODUCTORDER();//生产订单 + String receiverequestname = palletDto.getRECEIVEREQUESTNAME();//完工报告 + String remark = palletDto.getREMARK();//备注 + String sdk_ID = palletDto.getSDK_ID();//SDK规格 + String shiprequestdetailname = palletDto.getSHIPREQUESTDETAILNAME();//发货单行号 + String shiprequestname = palletDto.getSHIPREQUESTNAME();//发货单 +// String user = palletDto.getUSER();//作业人 +// String opCode = palletDto.getOpCode(); + String ReceiveRequestActNo = null; + List detail = palletDto.getDetail(); + + + + String opCode = palletDto.getOpCode() == null ? "" : palletDto.getOpCode().toString(); + String user = palletDto.getUSER() == null ? "" : palletDto.getUSER().toString(); + if ("".equals(opCode) || opCode == null) { + String sql = "SELECT :USER || '-' || NCDATA_IDX.NEXTVAL ID FROM DUAL"; + Map hashMap = new HashMap (); + hashMap.put("USER", user); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + opCode = queryForList.get(0).get("ID").toString(); + } + + List mpkeyList = new ArrayList (); + for (MaterialPacking materialPacking : detail) { + + untils.IsAtMaterialPacking(materialPacking.getMaterialPackingName(),erpfactory,erplocation,locationname,materialspecname); + + com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking materialPacking2 = new com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking(); + materialPacking2.setKey(new MaterialPackingKey("SDK",materialPacking.getMaterialPackingName())); + materialPacking2.setErpFactory(erpfactory); + materialPacking2.setErpLocation(erplocation); + materialPacking2.setLocationName(locationname); +// materialPacking2.setMaterialSpecName(materialspecname); + materialPacking2.setMaterialPackingName(materialPacking.getMaterialPackingName()); + mpkeyList.add(materialPacking2); + } + + //List selectByKey = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(mpkeyList); + +// List detail = palletDto.getDetail(); + ProductIntoServiceImpl.fgStockInNew(mpkeyList, user, ReceiveRequestActNo, commitDate, opCode); + +// java.util.Calendar c = java.util.Calendar.getInstance(); +// java.text.SimpleDateFormat f = new java.text.SimpleDateFormat( +// "yyyyMMdd"); +// +// List args = new ArrayList(); +// String actType1 = "F"; +// String siteName = "SH"; +// args.add(siteName); +// args.add(actType1); +// args.add(f.format(c.getTime())); +// String ReceiveRequestActNo; +// +// ReceiveRequestActNo = NameServiceProxy.getNameRuleDefService() +// .generateName("ReceiveActNo", args, 1).get(0); +// +// String pc = "("; +// for (MaterialPacking materialPacking : detail) { +//// "MATERIALPACKINGNAME": "箱标签", +//// "CHARGE": "箱批次", +//// "MATERIALQUANTITY": "数量", +//// "UNIT": "单位", +//// "OQARESULT" : "品质结果" +// String materialPackingName = materialPacking.getMaterialPackingName(); +// String charge = materialPacking.getCharge(); +// String materialQuantity = materialPacking.getMaterialQuantity(); +// String unit = materialPacking.getUnit(); +// String oqaResult2 = materialPacking.getOqaResult(); +// +// String salesPerson = materialPacking.getSalesPerson(); // 业务 +// String career_assistance = materialPacking.getCareer_assistance(); +// String business_unit = materialPacking.getBusiness_unit(); +// String durableType = materialPacking.getDurableType(); +// +// pc += "'" + materialPackingName + "', "; +// +// //根据入库信息获取完工报告 +// String sql3 = "SELECT\r\n" + +// " M.RECEIVEREQUESTNAME,\r\n" + +// " M.RECEIVEREQUESTDETAILNAME\r\n" + +// "FROM\r\n" + +// " MATERIALRECEIVEREQUESTDETAIL M\r\n" + +// "WHERE\r\n" + +// " (M.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME OR M.PRODUCTORDER = :RECEIVEREQUESTNAME OR M.PLANORDER = :RECEIVEREQUESTNAME)\r\n" + +// " AND M.MATERIALSPECNAME = :MATERIALSPECNAME "; +// Map bindMap = new HashMap(); +// bindMap.put("RECEIVEREQUESTNAME",receiverequestname); +// bindMap.put("MATERIALSPECNAME",materialspecname); +// List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql3, bindMap); +// if (queryForList == null || queryForList.size() < 1) { +// throw new GlobalException("生产报告未完成,请联系IT处理!"); +// } +// EventInfo makeEventInfo = new EventInfoUtil().makeEventInfo("createfgBoxInfo", user, "createfgBoxInfo", "", ""); +//// try { +//// ProductIntoServiceImpl.CreateMaterialReceiveRequestAct +//// (makeEventInfo, "SDK", queryForList.get(0).get("RECEIVEREQUESTNAME").toString(), +//// queryForList.get(0).get("RECEIVEREQUESTDETAILNAME").toString(), indate, +//// ReceiveRequestActNo, "Normal", materialQuantity, materialspecname); +//// } catch (CustomException | ParseException e) { +//// // TODO Auto-generated catch block +//// e.printStackTrace(); +//// throw new GlobalException(e.toString()); +//// } +// +// receivePalletStockIn(makeEventInfo, "SDK", materialPackingName, charge,materialQuantity,sdk_ID,remark,materialspecname,"",user, +// palletname, ReceiveRequestActNo, oqaresult,phase,unit,indate,erplocation, erpfactory, locationname,queryForList.get(0).get("RECEIVEREQUESTNAME").toString(), queryForList.get(0).get("RECEIVEREQUESTDETAILNAME").toString(), +// salesPerson,career_assistance,business_unit,durableType); +// +// } +// pc += "'')"; +// +//// boolean fgStockIn = ProductIntoServiceImpl.fgStockIn(ReceiveRequestActNo, user,commitDate); +// boolean fgStockIn = ProductIntoServiceImpl.fgStockIn(pc, user,commitDate,opCode); +// if (!fgStockIn) { +// throw new GlobalException("报送ERP失败,请联系IT处理!"); +// } + } + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + + + public static boolean receivePalletStockIn(EventInfo eventInfo,String siteName,String materialPackingName,String Charge,String qty, + String sdk_ID,String remark,String materilSpecName, + String durableName,String user,String palletName,String receiveActNo,String oqaresult,String phase,String unit,String indate, + String erpLocation,String erpFactory,String locationName,String receiveRequestName, String receiveRequestDetailName, + String salesPerson,String career_assistance,String business_unit,String durableType) { + StringBuffer sql = new StringBuffer(); + sql.append(" SELECT * FROM MATERIALPACKING WHERE MATERIALPACKINGNAME = :MATERIALPACKINGNAME"); + Map hashMap = new HashMap (); + hashMap.put("MATERIALPACKINGNAME", materialPackingName); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql.toString(), hashMap); + if(queryForList != null && queryForList.size() > 1) { + new CustomException("批次已入库"); + } + + //入库信息存入库存表 + CreateInfo createInfo = new CreateInfo(); + createInfo.setSiteName(siteName); + createInfo.setMaterialPackingName(materialPackingName);// 新生成的box id + createInfo.setMaterialPackingType("Box"); + createInfo.setContentMaterialType(""); + + Map bindMap = new HashMap(); + bindMap.put("superMaterialPackingName", palletName); + bindMap.put("MaterialType", ""); + bindMap.put("MaterialSpecName", materilSpecName); + if ("".equals(oqaresult) || oqaresult == null) { + bindMap.put("oqaResultState", ""); + } else { + bindMap.put("oqaResultState", "END"); + } + bindMap.put("oqaResult", oqaresult); + bindMap.put("PackingGrade", oqaresult); + bindMap.put("SubPackingQuantity",qty); + bindMap.put("MaterialCreateQuantity",qty); + bindMap.put("MaterialQuantity", qty);// 数量 + bindMap.put("PackingState", "Released"); + bindMap.put("OldPackingState", "Released"); + bindMap.put("StockState", "Created"); + bindMap.put("OldStockState", "Created"); + bindMap.put("HoldState", "N"); + bindMap.put("AreaName", ""); + bindMap.put("unit", unit); + bindMap.put("LocationName", locationName); + bindMap.put("charge",Charge); + bindMap.put("DurableName", durableName); + bindMap.put("MaterialProcessGroupName",""); + bindMap.put("LastEventTimeKey",TimeStampUtil.getCurrentEventTimeKey()); + bindMap.put("ReceiveRequestName", receiveRequestName); + bindMap.put("ReceiveRequestDetailName",receiveRequestDetailName); + bindMap.put("MakeDate", indate); +// bindMap.put("expiringDate", getExpridate(queryForList.get(0).get("SHIPTIME").toString(), queryForList.get(0).get("MATERIALSPECNAME").toString())); + bindMap.put("expiringDate", getExpridate(indate, materilSpecName)); + bindMap.put("ReceiveTime", eventInfo.getEventTime()); + bindMap.put("ReceiveUser", eventInfo.getEventUser()); + bindMap.put("ShipTime",indate); + bindMap.put("ShipUser",user); + bindMap.put("ErpLocation", erpLocation); + bindMap.put("ErpFactory", erpFactory); + bindMap.put("receiveActNo", receiveActNo); + bindMap.put("locationName", locationName); + bindMap.put("StockInType", "Normal"); + bindMap.put("SDK_ID", sdk_ID); + bindMap.put("PHASE", phase); + + bindMap.put("salesPerson", salesPerson); + bindMap.put("career_assistance", career_assistance); + bindMap.put("business_unit", business_unit); + bindMap.put("durableType", durableType); + + createInfo.setUserColumns(bindMap); + MaterialPackingServiceProxy.getMaterialPackingService().create( + eventInfo, createInfo); + return true; + } + + public static String getExpridate(String makeDate,String materialSpecName) { + String sql = "SELECT NVL(T.EXPIRATIONDAY,180) + TO_TIMESTAMP(SUBSTR(:MAKEDATE,0,19),'YYYY-MM-DD HH24:MI:SS') EXP FROM MATERIALSPEC T WHERE T.MATERIALSPECNAME = :MATERIALSPECNAME"; + + Map hashMap = new HashMap (); + hashMap.put("MATERIALSPECNAME", materialSpecName); + hashMap.put("MAKEDATE", makeDate); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + + if (queryForList != null && queryForList.size() > 0) { + return queryForList.get(0).get("EXP").toString(); + } + return ""; + } + /** + * 托盘出库 + * @param PalletDto + * @throws Exception + */ + private void stockOutPallet(BaseEntity PalletDto) throws Exception { + try { + + String commitDate = PalletDto.getTime(); + String shipRequestName = ""; + String opCode = ""; + String user = ""; + List list = new ArrayList<> (); + for (PalletDto palletDto : PalletDto.getBody()) { + String palletname = palletDto.getPALLETNAME();//栈板 + String materialspecname = palletDto.getMATERIALSPECNAME();//料号 + String erpfactory = palletDto.getERPFACTORY();//组织 + String erplocation = palletDto.getERPLOCATION();//仓库 + String locationname = palletDto.getLOCATIONNAME();//货位 + String oqaresult = palletDto.getOQARESULT();//质检结果 + String indate = palletDto.getINDATE();//入库日期 + String phase = palletDto.getPHASE() == null ? "" : palletDto.getPHASE();//阶段 +// String planorder = palletDto.getPLANORDER();//投放计划 +// String productorder = palletDto.getPRODUCTORDER();//生产订单 +// String receiverequestname = palletDto.getRECEIVEREQUESTNAME();//完工报告 + String remark = palletDto.getREMARK();//备注 + String sdk_ID = (palletDto.getSDK_ID() == null || "~".equals(palletDto.getSDK_ID().toString())) ? "" : palletDto.getSDK_ID().toString(); //SDK规格 + + String shiprequestdetailname = palletDto.getSHIPREQUESTDETAILNAME();//发货单行号 + shipRequestName = palletDto.getSHIPREQUESTNAME();//发货单 +// String user = palletDto.getUSER();//作业人 +// String opCode = palletDto.getOpCode() == null ? "" : palletDto.getOpCode(); + + opCode = palletDto.getOpCode() == null ? "" : palletDto.getOpCode().toString(); + user = palletDto.getUSER() == null ? "" : palletDto.getUSER().toString(); + if ("".equals(opCode) || opCode == null) { + String sql = "SELECT :USER || '-' || NCDATA_IDX.NEXTVAL ID FROM DUAL"; + Map hashMap = new HashMap (); + hashMap.put("USER", user); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + opCode = queryForList.get(0).get("ID").toString(); + } + + List detail = palletDto.getDetail(); + + for (MaterialPacking materialPacking : detail) { +// "MATERIALPACKINGNAME": "箱标签", +// "CHARGE": "箱批次", +// "MATERIALQUANTITY": "数量", +// "UNIT": "单位", +// "OQARESULT" : "品质结果" + String materialPackingName = materialPacking.getMaterialPackingName(); + com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking selectByKey = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(new MaterialPackingKey("SDK", materialPackingName)); + + if(selectByKey == null) { + throw new CustomException("找不到出库单据里的条码" + materialPackingName); + } + Double fgetMaterialQuantity = Double.parseDouble(materialPacking.getMaterialQuantity()); + selectByKey.setMaterialQuantity2(fgetMaterialQuantity); + list.add(selectByKey); + + String charge = materialPacking.getCharge(); + String unit = materialPacking.getUnit(); + String oqaResult2 = materialPacking.getOqaResult(); + String materialQuantity = materialPacking.getMaterialQuantity(); + String materialQuantity2 = materialQuantity; + String salesPerson = materialPacking.getSalesPerson(); // 业务 + String career_assistance = materialPacking.getCareer_assistance(); + String business_unit = materialPacking.getBusiness_unit(); + String durableType = materialPacking.getDurableType(); + + stockOutPalletDessignOrAssign(materialPackingName,materialspecname,shipRequestName,materialQuantity,materialQuantity2,sdk_ID,phase,user); + } + + String shipRequestType; + String sql = "SELECT m.SHIPREQUESTTYPE FROM MATERIALSHIPREQUEST m WHERE m.SHIPREQUESTNAME = :SHIPREQUESTNAME"; + Map hashMap = new HashMap (); + hashMap.put("SHIPREQUESTNAME", shipRequestName); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + if (queryForList != null && queryForList.size() > 0) { + String type = queryForList.get(0).get("SHIPREQUESTTYPE").toString(); + shipRequestType = type; + } else { + throw new CustomException("找不到出库单据" + shipRequestName); + } + +// if ("4Y".equals(shipRequestType)) { +// String ncSql = "SELECT\r\n" + +// " NCDATA_IDX.NEXTVAL ID,\r\n" + +// " '' PrintBatch,\r\n" + +// " m.MATERIALPACKINGNAME Barcode,\r\n" + +// " 'transOut' PrintType,\r\n" + +// " m.shiprequestname SourceOrder,\r\n" + +// " T.BILLPK SourceOrderId,\r\n" + +// " T.DATAPK SourceAutoid, \r\n" + +// " T.PK_ORG OrgCode,\r\n" + +// " T.PK_MATE MaterialId,\r\n" + +// " T.INVCODE MaterialCode,\r\n" + +// " T.PK_STAGE StageId,\r\n" + +// " T.INVSTAGE StageCode,\r\n" + +// " T.BillCode WorkPlant,\r\n" + +// " '' WorkShop,\r\n" + +// " '' WorkShift,\r\n" + +// " '' Machine,\r\n" + +// " '' VolNumber,\r\n" + +// " '' SupCode,\r\n" + +// " '' CustomerCode,\r\n" + +// " '' SupBarcode,\r\n" + +// " '' CusBarcode,\r\n" + +// " T.INVNAME MaterialName,\r\n" + +// " T.MATERIALSPEC Specifications,\r\n" + +// " T.PK_SIZE SDKSpecificationsId,\r\n" + +// " T.INVSIZE SDKSpecifications,\r\n" + +// " M.CHARGE Batch,\r\n" + +// " '' JumboRollBatch,\r\n" + +// " m.MAKEDATE BatchDate,\r\n" + +// " SYSDATE PrintBatchDate,\r\n" + +// " m.MAKEDATE ProductDate,\r\n" + +// " m.EXPIRINGDATE ExpiryDate,\r\n" + +// " T.UNAME MainUom,\r\n" + +// " DECODE(m.MATERIALQUANTITY2,0, m.MATERIALQUANTITY,m.MATERIALQUANTITY2) MainQty,\r\n" + +// " m.FUNIT AssistUom,\r\n" + +// " NVL(m.FQTY, 0) AssistQty,\r\n" + +// " m.TRUEGG PracticalSpec,\r\n" + +// " 1 PrintQty,\r\n" + +// " sysdate PrintDate,\r\n" + +// " LASTEVENTUSER Operator,\r\n" + +// " '' Salesman,\r\n" + +// " m.REMARK ,\r\n" + +// " '' DefineItem1,\r\n" + +// " '' DefineItem2,\r\n" + +// " '' DefineItem3,\r\n" + +// " '' DefineItem4,\r\n" + +// " '' DefineItem5,\r\n" + +// " '' DefineItem6,\r\n" + +// " '' DefineItem7,\r\n" + +// " '' DefineItem8,\r\n" + +// " '' DefineItem9,\r\n" + +// " '' DefineItem10,\r\n" + +// " '' DefineItem11,\r\n" + +// " '' DefineItem12,\r\n" + +// " '' DefineItem13,\r\n" + +// " '' DefineItem14,\r\n" + +// " '' DefineItem15,\r\n" + +// " '' DefineItem16,\r\n" + +// " '' DefineItem17,\r\n" + +// " '' DefineItem18,\r\n" + +// " '' DefineItem19,\r\n" + +// " '' DefineItem20,\r\n" + +// " CURRENT_TIMESTAMP Timestamp,\r\n" + +// " SYSDATE CreatedTime,\r\n" + +// " SYSDATE UpdatedTime,\r\n" + +// " '0' CreatedUserId,\r\n" + +// " '0' CreatedUserName,\r\n" + +// " '0' UpdatedUserId,\r\n" + +// " '0' UpdatedUserName,\r\n" + +// " '0' IsDeleted,\r\n" + +// " '0' TenantId,\r\n" + +// " '1' MaterialVersion,\r\n" + +// " '0' Piece,\r\n" + +// " '0' IsSame\r\n" + +// "FROM\r\n" + +// " MATERIALPACKING m\r\n" + +// "LEFT JOIN MATERIALSHIPREQUESTDETAIL m2 ON\r\n" + +// " m.SHIPREQUESTNAME = m2.SHIPREQUESTNAME\r\n" + +// " AND m.MATERIALSPECNAME = m2.MATERIALSPECNAME \r\n" + +// " AND m.SDK_ID = m2.SDK_ID \r\n" + +// " AND m.PHASE = m2.PHASE \r\n" + +// "LEFT JOIN VBC_TOBILL@NC_PRD T ON\r\n" + +// " m2.ERPDETAILID = T.DATAPK\r\n" + +// "WHERE\r\n" + +// " m.STOCKSTATE = 'Stocked'\r\n" + +// " AND T.BILLPK IS NOT NULL AND m.SHIPREQUESTNAME = ? AND m.MATERIALPACKINGNAME IN "; +// String str = "("; +// for (MaterialPacking m : detail) { +// str += "'" + m.getMaterialPackingName() + "',"; +// } +// str += "'') "; +// List queryForList2 = IDMFrameServiceProxy.getSqlTemplate().getJdbcTemplate().query(ncSql + str, new Object[]{shipRequestName}, +// new BeanPropertyRowMapper(NcDataDto.class)); +// new Test().savePrintData(queryForList2); +// } +// List list = detail; + } + + String optRemark = ""; +// InvoiceServiceImpl.SendERPStockOut20240802(shipRequestName, "SDK", user, list,commitDate, opCode, optRemark); + InvoiceServiceImpl.StockUpOutSendSAPOrMES(shipRequestName, "SDK", user, list,commitDate,opCode); + } catch (Exception e) { + e.printStackTrace(); + throw e; + } + } + + @Transactional + public void stockOutPalletDessignOrAssign(String materialPackingName,String materialSpecName,String shipRequestName,String materialQuantity,String materialQuantity2,String sdk_id,String phase,String user) throws CustomException { + +// MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); + String type = "Assign"; +// String materialPackingName = materialShipRequest.getMaterialPackingName();//标签 +// String materialSpecName = materialShipRequest.getMaterialSpecName(); +// String shipRequestName = materialShipRequest.getShipRequestName(); +// String materialQuantity = materialShipRequest.getMaterialQuantity(); +// String materialQuantity2 = materialShipRequest.getMaterialQuantity2(); +// String sdk_id = (materialShipRequest.getSdk_id() == null || "~".equals(materialShipRequest.getSdk_id().toString())) ? "" : materialShipRequest.getSdk_id(); +// String phase = materialShipRequest.getPhase() == null ? "" : materialShipRequest.getPhase(); +// String user = materialShipRequest.getUser(); + //查询单据类型 + String sql = "SELECT\r\n" + + " m.SHIPREQUESTTYPE ,\r\n" + + " m.SHIPREQUESTDETAILTYPE,\r\n" + + " t.MATERIALSPECNAME ,\r\n" + + " SUM(t.REQUESTQUANTITY - t.ASSIGNEDQUANTITY) MINUSQTY,t.SDK_ID,t.PHASE\r\n" + + "FROM\r\n" + + " MATERIALSHIPREQUESTDETAIL t\r\n" + + "LEFT JOIN MATERIALSHIPREQUEST m ON\r\n" + + " t.SHIPREQUESTNAME = m.SHIPREQUESTNAME\r\n" + + "WHERE\r\n" + + " m.SHIPREQUESTNAME = :SHIPREQUESTNAME\r\n" + + " AND t.MATERIALSPECNAME = :MATERIALSPECNAME\r\n" + + " AND (:SDK_ID IS NULL\r\n" + + " OR t.SDK_ID = :SDK_ID)\r\n" + + " AND (:PHASE IS NULL\r\n" + + " OR t.PHASE = :PHASE)\r\n" + + " GROUP BY m.SHIPREQUESTTYPE ,\r\n" + + " m.SHIPREQUESTDETAILTYPE,\r\n" + + " t.MATERIALSPECNAME,t.SDK_ID,t.PHASE\r\n" + + "ORDER BY\r\n" + + " t.MATERIALSPECNAME ,\r\n" + + " t.SDK_ID,\r\n" + + " t.PHASE"; + Map hashMap = new HashMap (); + hashMap.put("SHIPREQUESTNAME", shipRequestName); + hashMap.put("MATERIALSPECNAME", materialSpecName); + hashMap.put("SDK_ID", sdk_id); + hashMap.put("PHASE", phase); + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + if(Objects.isNull(queryForList) || queryForList.isEmpty()) { + throw new CustomException("未找到对应的数据!"); + } + String judge = "SELECT\r\n" + + " m.SDK_ID,MATERIALSPECNAME,\r\n" + + " m.PHASE,\r\n" + + " :MATERIALQUANTITY2 MATERIALQUANTITY2 , " + + " m.SHIPREQUESTNAME,\r\n" + + " m.STOCKSTATE,\r\n" + + " m.PACKINGGRADE ,\r\n" + + " CASE WHEN to_char(EXPIRINGDATE, 'yyyymmdd') >= to_char(SYSDATE, 'yyyymmdd') THEN 1\r\n" + + " ELSE 0 END EXP, OQARESULTSTATE \r\n" + + "FROM\r\n" + + " MATERIALPACKING m\r\n" + + "WHERE\r\n" + + " m.MATERIALPACKINGNAME = :MATERIALPACKINGNAME"; + Map hashMap2 = new HashMap (); + hashMap2.put("MATERIALPACKINGNAME", materialPackingName); + hashMap2.put("MATERIALQUANTITY2", materialQuantity); + List> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(judge, hashMap2); + if (queryForList2 != null && queryForList2.size() > 0) { + materialSpecName = queryForList2.get(0).get("MATERIALSPECNAME") == null ? "" : queryForList2.get(0).get("MATERIALSPECNAME").toString(); + sdk_id = (queryForList2.get(0).get("SDK_ID") == null || "~".equals(sdk_id)) ? "" : queryForList2.get(0).get("SDK_ID").toString(); + phase = queryForList2.get(0).get("PHASE") == null ? "" : queryForList2.get(0).get("PHASE").toString(); + materialQuantity2 = queryForList2.get(0).get("MATERIALQUANTITY2") == null ? "" : queryForList2.get(0).get("MATERIALQUANTITY2").toString(); + String invoice = queryForList2.get(0).get("SHIPREQUESTNAME") == null ? "" : queryForList2.get(0).get("SHIPREQUESTNAME").toString(); + String stockState = queryForList2.get(0).get("STOCKSTATE") == null ? "" : queryForList2.get(0).get("STOCKSTATE").toString(); + String packinggrade = queryForList2.get(0).get("PACKINGGRADE") == null ? "" : queryForList2.get(0).get("PACKINGGRADE").toString(); + String exp = queryForList2.get(0).get("EXP") == null ? "" : queryForList2.get(0).get("EXP").toString(); + String oqaresultstate = queryForList2.get(0).get("OQARESULTSTATE") == null ? "" : queryForList2.get(0).get("OQARESULTSTATE").toString(); + if (!"Stocked".equals(stockState)) { + throw new CustomException("条码不在库!"); + } + if (!"OK".equals(packinggrade)) { + throw new CustomException("批次不合格!"); + } + if (!"1".equals(exp)) { + throw new CustomException("批次已过期!"); + } + if (!"END".equals(oqaresultstate)) { + throw new CustomException("未完成质检!"); + } +// if (!"".equals(invoice)) { +// return AjaxResult.me().setSuccess(false).setMessage("条码已被" + invoice + "备货!"); +// } + } else { + throw new CustomException("未找到对应的条码!"); + } + String shipRequestType = queryForList.get(0).get("SHIPREQUESTTYPE").toString(); + String shipRequestDetailType = queryForList.get(0).get("SHIPREQUESTDETAILTYPE").toString(); + String minusQty = queryForList.get(0).get("MINUSQTY").toString(); + BigDecimal FmaterialQuantity = new BigDecimal(materialQuantity); + BigDecimal FminusQty = new BigDecimal(minusQty); + BigDecimal Fzero = new BigDecimal(0); + //"SHIPREQUESTDETAILTYPE": "4Y-Cxx-03",//跨组织领料调拨单 + //"BLSQ4K".equals(shipRequestType) || "4Y".equals(shipRequestType) || "CKSQ4I".equals(shipRequestType) + int dy0 = FminusQty.compareTo(Fzero); + MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",materialPackingName); + com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking selectByKey = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(materialPackingKey); + if ("Assign".equals(type)) { + System.out.println("4Y".equals(shipRequestType) + "*****************"); + if ("4Y".equals(shipRequestType)) {//调拨单 + if ( "4Y-Cxx-03".equals(shipRequestDetailType)) { + if (dy0 < 0) {//只能超发一个 + throw new CustomException("只能超发一个不能出库了!"); + } + } + } else if ("BLSQ4K".equals(shipRequestType)) {//领料 + if (dy0 < 0) {//只能超发一个 + throw new CustomException("只能超发一个不能出库了!"); + } + } else if ("CKSQ4I".equals(shipRequestType)) { //其他出库 + if (dy0 < 0) {//只能超发一个 + throw new CustomException("只能超发一个不能出库了!"); + } + } else if ("4C".equals(shipRequestType)) { + if (dy0 <= 0) {//只能超发一个 + throw new CustomException("销售不允许超发!"); + } + }else { + throw new CustomException("单据类型不正确!"); + } + } else if ("Dessign".equals(type)) { + + } + try { + InvoiceServiceImpl.ReserveByPallet(selectByKey, shipRequestName, materialSpecName,sdk_id, phase, type, "SDK", user,materialQuantity2,"Y"); + } catch (CustomException e) { + e.printStackTrace(); + AjaxResult.me().setSuccess(false).setMessage(e.toString()); + } + } + public static void saveMessageLog(ErpMessageLog log) { + + String sql = "INSERT INTO BS_ERPMESSAGELOG(INTERFACETIME,SERVERNAME, EVENTNAME, EVENTTIMEKEY, EVENTUSER, MESSAGELOG,RESULTCODE,MESSAGEID,RESULTMESSAGE,MESSAGELOG2,RESULTMESSAGE2)\r\n" + + "VALUES(TO_DATE(:INTERFACETIME,'yyyy-mm-dd hh24:mi:ss'),:SERVERNAME, :EVENTNAME, :EVENTTIMEKEY, :EVENTUSER, :MESSAGELOG,:RESULTCODE,:MESSAGEID,:RESULTMESSAGE,:MESSAGELOG2,:RESULTMESSAGE2)"; + Map bindMap = new HashMap(); + bindMap.put("SERVERNAME", log.getServerName()); + bindMap.put("EVENTNAME", log.getEventName()); + bindMap.put("EVENTTIMEKEY", log.getId()); + bindMap.put("EVENTUSER", log.getEventUser()); + bindMap.put("MESSAGEID", log.getMessageId()); + bindMap.put("INTERFACETIME", log.getInterfaceTime()); + bindMap.put("RESULTCODE", log.getResultCode()); + bindMap.put("MESSAGELOG", log.getSendMsg());// 推送ERP的json + bindMap.put("RESULTMESSAGE", log.getReturnMsg());// 返回结果的json + bindMap.put("MESSAGELOG2", log.getSendMsg2());// 推送ERP的json + bindMap.put("RESULTMESSAGE2", log.getReturnMsg2());// 返回结果的json + IDMFrameServiceProxy.getSqlTemplate().update(sql, bindMap); + } +} diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java index 9daa71d..794cc7b 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/InvoiceServiceImpl.java @@ -622,7 +622,6 @@ public class InvoiceServiceImpl implements InvoiceService { return billCode; } - @Transactional public boolean packingChargeSplit(List boxList, String user) { String condition=""; @@ -680,10 +679,14 @@ public class InvoiceServiceImpl implements InvoiceService { String REMARK = ""; String SHIPREQUESTNAME = ""; 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" + " 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" + " FROM MATERIALPACKING M WHERE M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME AND M.CHARGE = :CHARGE "; Map hashMap4 = new HashMap (); @@ -725,6 +728,11 @@ public class InvoiceServiceImpl implements InvoiceService { SHIPREQUESTNAME = map.get("SHIPREQUESTNAME") == null ? "" : map.get("SHIPREQUESTNAME").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) { @@ -774,6 +782,10 @@ public class InvoiceServiceImpl implements InvoiceService { bindMap.put("ReceiveRequestName", RECEIVEREQUESTNAME); 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("BUSINESS_UNIT", BUSINESS_UNIT);//业务 @@ -1869,8 +1881,8 @@ public class InvoiceServiceImpl implements InvoiceService { String updateSql= " UPDATE MATERIALSHIPREQUESTDETAIL m SET m.ASSIGNEDQUANTITY = m.ASSIGNEDQUANTITY - :QTY WHERE m.SITENAME = :SITENAME" + " AND m.SHIPREQUESTNAME = :SHIPREQUESTNAME AND m.MATERIALSPECNAME = :MATERIALSPECNAME " - + "AND (:SDK_ID IS NULL OR SDK_ID = :SDK_ID) " + -// "AND (:PHASE IS NULL OR PHASE = :PHASE)" + +// + "AND (:SDK_ID IS NULL OR SDK_ID = :SDK_ID) " + + + "AND (:PHASE IS NULL OR PHASE = :PHASE)" + " AND ROWNUM = 1 "; Map bindMap = new HashMap(); //bindMap.put("QTY", materialQuantity2); @@ -1879,7 +1891,7 @@ public class InvoiceServiceImpl implements InvoiceService { bindMap.put("SHIPREQUESTNAME", shipReuqestName); bindMap.put("MATERIALPACKINGNAME", materialPackingName); bindMap.put("MATERIALSPECNAME", materialSpecName); - bindMap.put("SDK_ID", sdk_id); +// bindMap.put("SDK_ID", sdk_id); bindMap.put("PHASE", phase); IDMFrameServiceProxy.getSqlTemplate().update(updateSql, bindMap); } @@ -3205,7 +3217,7 @@ public class InvoiceServiceImpl implements InvoiceService { String qtysql = "WHERE MATERIALPACKINGNAME = ?"; List qtyQueryForList = MaterialPackingServiceProxy.getMaterialPackingService().select(qtysql, bindSet); - String qty = String.valueOf(qtyQueryForList.get(z).getMaterialQuantity()); + String qty = new Double(qtyQueryForList.get(z).getMaterialQuantity()) == null ? "0" : 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(); @@ -3245,15 +3257,21 @@ public class InvoiceServiceImpl implements InvoiceService { 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(); Map pakHashMap = new HashMap<>(); pakHashMap.put("materialQuantity", restQty.doubleValue()); + pakHashMap.put("materialQuantity2", 0); + pakHashMap.put("shipRequestName", ""); + pakHashMap.put("shipRequestDetailName", ""); - EventInfo eventInfo = new EventInfoUtil().makeEventInfo("备货出库拆分修改数量拆分条码", eventUser, "修改数量拆分条码"); + 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); + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(new MaterialPackingKey( "SDK", MATERIALPACKINGNAME), eventInfo, setEventInfo); // 删除被拆分的原条码数据,用拆分出的新条码覆盖,进行后面的过账,现场仓过账只过账已拆分出的数量,剩余数量的原条码不过账 boolean deletePacking = materialPackingKeyList.remove(MATERIALPACKINGNAME); @@ -3336,8 +3354,8 @@ public class InvoiceServiceImpl implements InvoiceService { MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",materialPackingName); arrayList.add(materialPackingKey); } - billCode = UnSourcedChangeLocation(arrayList,ERPRECEIVEFACTORY, - ERPRECEIVELOCATION, "", eventUser, commitDate ); +// billCode = UnSourcedChangeLocation(arrayList,ERPRECEIVEFACTORY, +// ERPRECEIVELOCATION, "", eventUser, commitDate ); List mpKeyList = new ArrayList (); SetEventInfo setEventInfo = new SetEventInfo(); diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java index 8cab8c6..e658f9c 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/ProductIntoServiceImpl.java @@ -772,6 +772,8 @@ public class ProductIntoServiceImpl implements FGStockInService { bindMap.put("SALESPERSON", queryForList.get(0).get("SALESPERSON"));//事业部 bindMap.put("MJPC", queryForList.get(0).get("MJPC"));//母卷批次 bindMap.put("remark", queryForList.get(0).get("REMARK"));//备注 + bindMap.put("materialPackingType", "Box"); + if("Y".equals(is_oven)) { bindMap.put("MATURATIONINTIME", eventInfo.getEventTime());//熟化入库时间 }