diff --git a/zi-wms-pda/src/main/java/com/cim/idm/controller/MESToWMSController.java b/zi-wms-pda/src/main/java/com/cim/idm/controller/MESToWMSController.java index b3ec727..1e64e3a 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/controller/MESToWMSController.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/controller/MESToWMSController.java @@ -70,11 +70,11 @@ public class MESToWMSController { String userId = in.getJSONObject(0).getString("userId"); String payMentDate = in.getJSONObject(0).get("payMentDate") == null ? "" : in.getJSONObject(0).get("payMentDate").toString(); //过账日期 if (StringUtils.isBlank(payMentDate)) { - return AjaxResult.me().setSuccess(false).setErrorCode(500).setMessage("payMentDate过账日期不能为空"); + return AjaxResult.me().setSuccess(false).setErrorCode(500).setMessage("冲销失败:payMentDate过账日期不能为空"); } // return mesToWMSService.cancelShipByMES(in); try { - return mesToWMSService.sapcprkUndo(undoId, userId, payMentDate); + return mesToWMSService.materialConsumeRequestSapcprkUndo(undoId, userId, payMentDate); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java index 8625c0a..5934186 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/Impl/MESToWMSServiceImpl.java @@ -147,9 +147,7 @@ public class MESToWMSServiceImpl implements MESToWMSService { } // 将工单的物料消耗数据传给SAP String undoId = toSAPService.mesMaterialConsume("MES",payMentDate, eventInfo); - Map undoidMap = new HashMap<>(); - undoidMap.put("undoid", undoId); - result = AjaxResult.me().setSuccess(true).setErrorCode(200).setMessage("执行成功").setResultObj(undoidMap); + result = AjaxResult.me().setSuccess(true).setErrorCode(200).setMessage("执行成功").setResultObj(undoId); loginfo.setResultCode("0"); loginfo.setReturnMsg(JSONObject.toJSONString(result)); // 消息保存日志,erp推送wms的数据写入表BS_ERPMESSAGELOG中 @@ -757,4 +755,126 @@ public class MESToWMSServiceImpl implements MESToWMSService { } return false; } + + /** + * 物料消耗接口-冲销 + * @param undoId + * @param user + @param payMentDate + */ + @Override + @Transactional + public AjaxResult materialConsumeRequestSapcprkUndo(String undoId, String user, String payMentDate) throws Exception { + + AjaxResult result = new AjaxResult(); + List materialPackingKeyList = new ArrayList<>(); + EventInfo makeEventInfo = new EventInfoUtil ().makeEventInfo("MakeUndo", user, "MakeUndo"); + String condition="SELECT MATERIALPACKINGNAME FROM MATERIALPACKING WHERE UNDOID = :UNDOID "; +// String[] bindSet={undoId}; + Map hashMap = new HashMap (); + hashMap.put("UNDOID", undoId); + //根据物料凭证找到所有的待冲销数据,更新库存状态为创建 + List> MPlIST = IDMFrameServiceProxy.getSqlTemplate().queryForList(condition, hashMap); + SetEventInfo setEventInfo = new SetEventInfo(); + setEventInfo.setUserColumns(hashMap); + RemoveInfo removeInfo = new RemoveInfo(); + for (Map MP : MPlIST) { + String MATERIALPACKINGNAME = MP.get("MATERIALPACKINGNAME").toString(); + hashMap.put("MATERIALPACKINGNAME", MATERIALPACKINGNAME); + String queryBS_MATERIALPACKINGUNDOINFO = "SELECT MATERIALPACKINGNAME, MATERIALQUANTITY FROM BS_MATERIALPACKINGUNDOINFO WHERE UNDOID =:UNDOID AND MATERIALPACKINGNAME =:MATERIALPACKINGNAME AND LASTEVENTNAME =:LASTEVENTNAME "; + hashMap.put("LASTEVENTNAME", "MES消耗"); + List> bsMaterialPackingUndoInfo = IDMFrameServiceProxy.getSqlTemplate().queryForList(queryBS_MATERIALPACKINGUNDOINFO, hashMap); + if (bsMaterialPackingUndoInfo.size() > 0){ + if (null != bsMaterialPackingUndoInfo.get(0).get("MATERIALQUANTITY")){ + String materialQuantity = bsMaterialPackingUndoInfo.get(0).get("MATERIALQUANTITY").toString(); + String updateMaterialPackingQtySql = " UPDATE MATERIALPACKING SET MATERIALQUANTITY = MATERIALQUANTITY + :QTY WHERE MATERIALPACKINGNAME =:MATERIALPACKINGNAME "; + Map updateMaterialPackingQtyMap = new HashMap (); + updateMaterialPackingQtyMap.put("MATERIALPACKINGNAME",MATERIALPACKINGNAME); + updateMaterialPackingQtyMap.put("QTY",materialQuantity); + IDMFrameServiceProxy.getSqlTemplate().update(updateMaterialPackingQtySql,updateMaterialPackingQtyMap); + + //记录后续要更新凭证的条件和更新的信息 + MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK", MATERIALPACKINGNAME); + materialPackingKeyList.add(materialPackingKey); + }else { + throw new Exception("冲销失败,匹配到物料凭证:" + undoId + "的消耗记录中数量异常无法冲销"); + } + }else { + throw new Exception("冲销失败,没有匹配该物料凭证:" + undoId + "的消耗记录无法冲销"); + } + + /* + //根据当前的数据跟新完工报告且删除入库表的数据 + String sql = "SELECT M.RECEIVEREQUESTNAME,M.RECEIVEREQUESTDETAILNAME,M.QTY FROM MATERIALPACKINGSUB M WHERE M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME\r\n" + + "UNION \r\n" + + "SELECT M.RECEIVEREQUESTNAME,M.RECEIVEREQUESTDETAILNAME,M.QTY FROM MATERIALPACKINGSUBHISTORY M WHERE M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME"; + + List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); + for (int i = 0; i < queryForList.size(); i++) { + String dh = queryForList.get(i).get("RECEIVEREQUESTNAME").toString(); + hashMap.put("RECEIVEREQUESTNAME", dh); + String hh = queryForList.get(i).get("RECEIVEREQUESTDETAILNAME").toString(); + hashMap.put("RECEIVEREQUESTDETAILNAME", hh); +// String sl = queryForList.get(i).get("QTY").toString(); + String updateSql = "UPDATE MATERIALRECEIVEREQUESTDETAIL T \r\n" + + "SET T.RECEIVEDQUANTITY = T.RECEIVEDQUANTITY - ( \r\n" + + " SELECT NVL(SUM(M.QTY),0) \r\n" + + " FROM MATERIALPACKINGSUB M \r\n" + + " WHERE M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME \r\n" + + " AND M.RECEIVEREQUESTNAME = T.RECEIVEREQUESTNAME \r\n" + + " AND M.RECEIVEREQUESTDETAILNAME = T.RECEIVEREQUESTDETAILNAME \r\n" + + ") \r\n" + + "WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME \r\n" + + " AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME"; + IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap); + + + String updateSql2 = "UPDATE MATERIALRECEIVEREQUESTDETAIL T \r\n" + + "SET T.RECEIVEDQUANTITY = T.RECEIVEDQUANTITY - ( \r\n" + + " SELECT NVL(SUM(M.QTY),0) \r\n" + + " FROM MATERIALPACKINGSUBHISTORY M \r\n" + + " WHERE M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME \r\n" + + " AND M.RECEIVEREQUESTNAME = T.RECEIVEREQUESTNAME \r\n" + + " AND M.RECEIVEREQUESTDETAILNAME = T.RECEIVEREQUESTDETAILNAME \r\n" + + ") \r\n" + + "WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME \r\n" + + " AND T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME"; + IDMFrameServiceProxy.getSqlTemplate().update(updateSql2, hashMap); + + String deleteSql = " DELETE FROM MATERIALPACKINGSUB T WHERE T.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME AND " + + "T.RECEIVEREQUESTDETAILNAME = :RECEIVEREQUESTDETAILNAME AND T.MATERIALPACKINGNAME = :MATERIALPACKINGNAME"; + IDMFrameServiceProxy.getSqlTemplate().update(deleteSql, hashMap); + + String MESsQL = " UPDATE BS_MES_SHIPPED T SET T.RECEIVE_FLAG = 'N' WHERE T.LOTNAME = :MATERIALPACKINGNAME "; + IDMFrameServiceProxy.getSqlTemplate().update(MESsQL, hashMap); + } + */ + + String MESsQL = " DELETE FROM BS_MES_SHIPPED T WHERE T.LOTNAME = :MATERIALPACKINGNAME "; + IDMFrameServiceProxy.getSqlTemplate().update(MESsQL, hashMap); + + //MaterialPackingServiceProxy.getMaterialPackingService().remove(new MaterialPackingKey("SDK", MATERIALPACKINGNAME), makeEventInfo, removeInfo); + } + + String sql = "UPDATE IF_ERPUNDO T SET T.FLAG = 'Y' WHERE T.UNDOID = :UNDOID "; + Map hashMap2 = new HashMap (); + hashMap2.put("UNDOID", undoId); + IDMFrameServiceProxy.getSqlTemplate().update(sql, hashMap2); + String billCode = toSAPService.cancelShipInter(undoId, user, payMentDate); + if (billCode == null) { + throw new GlobalException("报送SAP失败,请联系IT处理!"); + } + + //将SAP返回的凭证更新到BOX信息中 + if (!materialPackingKeyList.isEmpty()){ + EventInfo eventInfo = new EventInfoUtil ().makeEventInfo("MES冲销", user, "MES冲销"); + Map updateUndoIdMap = new HashMap (); + SetEventInfo updateUndoIdSetEventInfo = new SetEventInfo(); + updateUndoIdMap.put("unDoID", billCode); + updateUndoIdSetEventInfo.setUserColumns(updateUndoIdMap); + MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKeyList, eventInfo, updateUndoIdSetEventInfo); + } + result = AjaxResult.me().setSuccess(true).setErrorCode(200).setMessage("冲销成功").setResultObj(billCode); + return result; + } } \ No newline at end of file diff --git a/zi-wms-pda/src/main/java/com/cim/idm/service/MESToWMSService.java b/zi-wms-pda/src/main/java/com/cim/idm/service/MESToWMSService.java index d277873..bbd030a 100644 --- a/zi-wms-pda/src/main/java/com/cim/idm/service/MESToWMSService.java +++ b/zi-wms-pda/src/main/java/com/cim/idm/service/MESToWMSService.java @@ -41,4 +41,7 @@ public interface MESToWMSService { * @return */ AjaxResult workOrder_Request(JSONArray in); + + @Transactional + AjaxResult materialConsumeRequestSapcprkUndo(String undoId, String user, String payMentDate) throws Exception; } \ No newline at end of file