package com.cim.idm.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.cim.idm.exception.GlobalException; import com.cim.idm.framework.IDMFrameServiceProxy; import com.cim.idm.framework.data.EventInfo; import com.cim.idm.model.*; import com.cim.idm.model.po.MaterialReceiveRequest; import com.cim.idm.service.QueryService; import com.cim.idm.utils.AjaxResult; import com.cim.idm.utils.EventInfoUtil; import com.cim.idm.utils.PageResult; import com.cim.idm.utils.ToUpperUtils; import com.cim.idm.wmsextend.generic.errorHandler.CustomException; import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy; import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey; import com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo; import com.cim.idm.wmspackage.materialshiprequest.MaterialShipRequestServiceProxy; import com.cim.idm.wmspackage.materialshiprequest.management.info.CreateMaterialShipRequestInfo; import com.cim.idm.wmspackage.materialshiprequestdetail.MaterialShipRequestDetailServiceProxy; import com.cim.idm.wmspackage.materialshiprequestdetail.management.info.CreateMaterialShipRequestDetailInfo; import com.cim.idm.wmspackage.name.NameServiceProxy; import io.swagger.annotations.Api; 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.*; import com.cim.idm.service.Impl.InvoiceServiceImpl; @Api("单据接口") @RestController @RequestMapping("/invoice") @EnableAutoConfiguration public class InvoiceController { @Autowired private InvoiceServiceImpl InvoiceServiceImpl; @Autowired private QueryService queryService; /******************************************************************************************************************************/ /*****************************************调拨入库单********************************************************************************/ /******************************************************************************************************************************/ /** * 获取调拨退待操作单号集合 * @param in * @return */ @RequestMapping(value = "/getTransferInList", method = RequestMethod.POST) public AjaxResult getTransferInList(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String shipRequestType = materialShipRequest.getShipRequestType(); String sql = "SELECT T.SHIPREQUESTNAME,T.SHIPREQUESTDETAILNAME,T.MATERIALSPECNAME,T.REQUESTQUANTITY ,T.ASSIGNEDQUANTITY FROM MATERIALSHIPREQUESTDETAIL T LEFT JOIN MATERIALSHIPREQUEST M ON T.SHIPREQUESTNAME=M.SHIPREQUESTNAME WHERE M.SHIPREQUESTTYPE = :SHIPREQUESTTYPE AND T.SHIPREQUESTNAME LIKE :SHIPREQUESTNAME AND M.SHIPREQUESTSTATE = 'Created'"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTTYPE",shipRequestType); bindMap.put("SHIPREQUESTNAME","%" + shipRequestName + "%"); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } return AjaxResult.me().setResultObj(list); } /** * 根据调拨退库单号获取明细 * @param in * @return */ @RequestMapping(value = "/getTransferInLine", method = RequestMethod.POST) public AjaxResult getTransferInLine(@RequestBody JSONObject in) { MaterialshipRequest sl = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = sl.getShipRequestName(); String sql = "SELECT M.REQUESTQUANTITY,M.ASSIGNEDQUANTITY,SHIPREQUESTNAME || ' ' || M.SHIPREQUESTDETAILNAME WL FROM MATERIALSHIPREQUESTDETAIL M WHERE M.SHIPREQUESTNAME = :SHIPREQUESTNAME"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME", shipRequestName); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if (Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } List> upper = new ToUpperUtils().toUpper(list); return AjaxResult.me().setResultObj(upper); } /** * 根据调拨入库单行信息获取行详细 * @param in * @return */ @RequestMapping(value = "/getTransferInLineInfo", method = RequestMethod.POST) public AjaxResult getTransferInLineInfo(@RequestBody JSONObject in) { MaterialshipRequest ms = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = ms.getShipRequestName(); if(Objects.isNull(shipRequestName)) { throw new GlobalException("下拉框选项不能为空!"); } String[] split = shipRequestName.split(" "); String sql ="SELECT\r\n" + " M.MATERIALSPECNAME ,\r\n" + " M2.DESC_CN ,\r\n" + " M.REQUESTQUANTITY ,\r\n" + " M.ASSIGNEDQUANTITY ,\r\n" + " SS.SPECNAME,M.SHIPREQUESTNAME,M.SHIPREQUESTDETAILNAME,M.PHASE \r\n" + "FROM\r\n" + " MATERIALSHIPREQUESTDETAIL M\r\n" + "LEFT JOIN MATERIALSPEC M2 ON\r\n" + " M.MATERIALSPECNAME = M2.MATERIALSPECNAME\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " M.SDK_ID = SS.SDK_ID\r\n" + "WHERE M.SHIPREQUESTNAME = :SHIPREQUESTNAME\r\n" + "AND M.SHIPREQUESTDETAILNAME = :SHIPREQUESTDETAILNAME"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME", split[0]); bindMap.put("SHIPREQUESTDETAILNAME", split[1]); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if (Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } return AjaxResult.me().setResultObj(list); } @RequestMapping(value = "/getTransferInBindBarCode", method = RequestMethod.POST) public AjaxResult getTransferInBindBarCode(@RequestBody JSONObject in) { MaterialshipRequest ms = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = ms.getShipRequestName(); if(Objects.isNull(shipRequestName)) { throw new GlobalException("单号信息不能为空!"); } String sql ="SELECT\r\n" + " M.MATERIALPACKINGNAME ,\r\n" + " M.CHARGE ,\r\n" + " M2.DESC_CN ,\r\n" + " M.ERPFACTORY ,\r\n" + " M.ERPLOCATION ,\r\n" + " M.MATERIALQUANTITY ,\r\n" + " M.LOCATIONNAME ,\r\n" + " M.MATERIALSPECNAME \r\n" + "FROM\r\n" + " MATERIALPACKING M\r\n" + "LEFT JOIN MATERIALSPEC M2 ON\r\n" + " M.MATERIALSPECNAME = M2.MATERIALSPECNAME\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " M.SDK_ID = SS.SDK_ID\r\n" + "WHERE\r\n" + " M.SHIPREQUESTNAME = :SHIPREQUESTNAME"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME", shipRequestName); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if (Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } return AjaxResult.me().setResultObj(list); } /******************************************************************************************************************************/ /*****************************************移库单********************************************************************************/ /******************************************************************************************************************************/ /** * 获取移库待操作单号集合 * @param in * @return */ @RequestMapping(value = "/getMoveInList", method = RequestMethod.POST) public AjaxResult getMoveInList(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String shipRequestType = materialShipRequest.getShipRequestType(); String sql = "SELECT T.SHIPREQUESTNAME FROM MATERIALSHIPREQUEST T WHERE T.SHIPREQUESTTYPE = :SHIPREQUESTTYPE AND T.SHIPREQUESTNAME LIKE :SHIPREQUESTNAME AND T.SHIPREQUESTSTATE = 'Created'"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTTYPE",shipRequestType); bindMap.put("SHIPREQUESTNAME","%" + shipRequestName + "%"); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } return AjaxResult.me().setResultObj(list); } /** * 根据移库单号获取明细 * @param in * @return */ @RequestMapping(value = "/getMoveInLine", method = RequestMethod.POST) public AjaxResult getMoveInLine(@RequestBody JSONObject in) { MaterialshipRequest sl = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = sl.getShipRequestName(); String sql = "SELECT M.SHIPREQUESTNAME || ' ' || M.SHIPREQUESTDETAILNAME WL FROM MATERIALSHIPREQUESTDETAIL M WHERE M.SHIPREQUESTNAME = :SHIPREQUESTNAME"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME", shipRequestName); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if (Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } List> upper = new ToUpperUtils().toUpper(list); return AjaxResult.me().setResultObj(upper); } /** * 根据移库单行信息获取行详细 * @param in * @return */ @RequestMapping(value = "/getMoveInLineInfo", method = RequestMethod.POST) public AjaxResult getMoveInLineInfo(@RequestBody JSONObject in) { MaterialshipRequest ms = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = ms.getShipRequestName(); if(Objects.isNull(shipRequestName)) { throw new GlobalException("下拉框选项不能为空!"); } String[] split = shipRequestName.split(" "); String sql ="SELECT\r\n" + " M.MATERIALSPECNAME ,\r\n" + " M2.DESC_CN ,\r\n" + " M.REQUESTQUANTITY ,\r\n" + " M.ASSIGNEDQUANTITY ,\r\n" + " SS.SPECNAME,M.SHIPREQUESTNAME,M.SHIPREQUESTDETAILNAME,M.PHASE,MM.ERPFACTORY,MM.ERPLOCATION,MM.ERPRECEIVEFACTORY,MM.ERPRECEIVELOCATION \r\n" + "FROM\r\n" + " MATERIALSHIPREQUESTDETAIL M\r\n" + "LEFT JOIN MATERIALSPEC M2 ON\r\n" + " M.MATERIALSPECNAME = M2.MATERIALSPECNAME\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " M.SDK_ID = SS.SDK_ID\r\n" + "LEFT JOIN MATERIALSHIPREQUEST MM ON\r\n" + " MM.SHIPREQUESTNAME = M.SHIPREQUESTNAME\r\n" + "WHERE M.SHIPREQUESTNAME = :SHIPREQUESTNAME\r\n" + "AND M.SHIPREQUESTDETAILNAME = :SHIPREQUESTDETAILNAME"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME", split[0]); bindMap.put("SHIPREQUESTDETAILNAME", split[1]); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if (Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } return AjaxResult.me().setResultObj(list); } @RequestMapping(value = "/getMoveInBindBarCode", method = RequestMethod.POST) public AjaxResult getMoveInBindBarCode(@RequestBody JSONObject in) { MaterialshipRequest ms = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = ms.getShipRequestName(); if(Objects.isNull(shipRequestName)) { throw new GlobalException("单号信息不能为空!"); } String sql ="SELECT\r\n" + " M.MATERIALPACKINGNAME ,\r\n" + " M.CHARGE ,\r\n" + " M2.DESC_CN ,\r\n" + " M.ERPFACTORY ,\r\n" + " M.ERPLOCATION ,\r\n" + " M.MATERIALQUANTITY ,\r\n" + " M.LOCATIONNAME ,\r\n" + " M.MATERIALSPECNAME \r\n" + "FROM\r\n" + " MATERIALPACKING M\r\n" + "LEFT JOIN MATERIALSPEC M2 ON\r\n" + " M.MATERIALSPECNAME = M2.MATERIALSPECNAME\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " M.SDK_ID = SS.SDK_ID\r\n" + "WHERE\r\n" + " M.SHIPREQUESTNAME = :SHIPREQUESTNAME"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME", shipRequestName); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if (Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } return AjaxResult.me().setResultObj(list); } /******************************************************************************************************************************/ /*****************************************出库单********************************************************************************/ /******************************************************************************************************************************/ /** * 获取出库单待审核 * @param in * @return */ @RequestMapping(value = "/getShipList", method = RequestMethod.POST) public AjaxResult getShipList(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String shipRequestType = materialShipRequest.getShipRequestType(); String sql = "SELECT DISTINCT T.SHIPREQUESTNAME FROM MATERIALSHIPREQUEST T " + "WHERE T.SHIPREQUESTTYPE = :SHIPREQUESTTYPE " + "AND T.SHIPREQUESTNAME LIKE :SHIPREQUESTNAME AND ( RETURNFLAG <> 'Y' OR RETURNFLAG IS NULL )" + "AND SHIPREQUESTSTATE <> 'Completed' "; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTTYPE",shipRequestType); bindMap.put("SHIPREQUESTNAME","%" + shipRequestName + "%"); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到出库单据!"); } return AjaxResult.me().setResultObj(list); } @RequestMapping(value = "/getShipReservedBoxInfo", method = RequestMethod.POST) public AjaxResult getShipReservedBoxInfo(@RequestBody JSONObject in ) throws Exception{ MaterialshipRequest ms = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = ms.getShipRequestName(); int pageNum = ms.getPageNum(); int pageSize = ms.getPageSize(); if(Objects.isNull(shipRequestName)) { throw new GlobalException("单号信息不能为空!"); } String sql ="SELECT\r\n" + " M.MATERIALPACKINGNAME ,\r\n" + " M.CHARGE ,\r\n" + " M2.DESC_CN ,\r\n" + " M.ERPFACTORY ,\r\n" + " M.ERPLOCATION ,\r\n" + " M.MATERIALQUANTITY ,\r\n" + " M.LOCATIONNAME ,\r\n" + " M.MATERIALSPECNAME, '' ISCHECK \r\n" + "FROM\r\n" + " MATERIALPACKING M\r\n" + "LEFT JOIN MATERIALSPEC M2 ON\r\n" + " M.MATERIALSPECNAME = M2.MATERIALSPECNAME\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " M.SDK_ID = SS.SDK_ID\r\n" + "WHERE\r\n" + " M.SHIPREQUESTNAME = :SHIPREQUESTNAME AND M.STOCKSTATE = 'Stocked'"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME", shipRequestName); // List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); PageResult> queryResultPage = queryService.getQueryResultPage(sql, bindMap, pageNum, pageSize); if (Objects.isNull(queryResultPage)) { throw new GlobalException("未找到对应的数据!"); } return AjaxResult.me().setResultObj(queryResultPage); } /******************************************************************************************************************************/ /*****************************************出库过账********************************************************************************/ @RequestMapping(value = "/commitShipRequestNameNew", method = RequestMethod.POST) public AjaxResult commitShipRequestNameNew(@RequestBody JSONObject in ) { StockOutDto ms = JSON.toJavaObject(in, StockOutDto.class); String shipRequestName = ms.getShipRequestName(); String siteName = ms.getSiteName(); String user = ms.getUser(); String erpfactory = ms.getErpfactory(); String erplocation = ms.getErplocation(); String locationName = ms.getLocationName(); String shipRequestType = ms.getShipRequestType(); String commitDate = ms.getCommitDate(); String opCode = ms.getOpCode(); List boxList = ms.getBoxList(); String sendERPStockOut = null; 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 { return AjaxResult.me().setErrorCode(500).setMessage("找不到出库单据" + shipRequestName); } try { InvoiceServiceImpl.SendERPStockOut20240802(shipRequestName, siteName, user, boxList,commitDate,opCode); } catch (Exception e) { return AjaxResult.me().setErrorCode(500).setMessage(e.toString()); } return AjaxResult.me().setResultObj(null); } /******************************************************************************************************************************/ /*****************************************其他入库单********************************************************************************/ /******************************************************************************************************************************/ /** * 获取其他入库单单号集合 * @param in * @return */ @RequestMapping(value = "/getOtherInList", method = RequestMethod.POST) public AjaxResult getOtherInList(@RequestBody JSONObject in ){ MaterialReceiveRequest materialReceiveRequest = JSON.toJavaObject(in, MaterialReceiveRequest.class); String receiveRequestName = materialReceiveRequest.getReceiveRequestName(); String receiveRequestType = materialReceiveRequest.getReceiveRequestType(); String sql = "" + "SELECT\r\n" + " *\r\n" + "FROM\r\n" + " MATERIALRECEIVEREQUESTDETAIL M\r\n" + "LEFT JOIN MATERIALRECEIVEREQUEST M2 ON\r\n" + " M.RECEIVEREQUESTNAME = M2.RECEIVEREQUESTNAME\r\n" + "WHERE\r\n" + " M2.RECEIVEREQUESTNAME LIKE :RECEIVEREQUESTNAME\r\n" + " AND M2.RECEIVEREQUESTTYPE = :RECEIVEREQUESTTYPE\r\n" + " AND M.RECEIVEDQUANTITY < M.REQUESTQUANTITY "; Map bindMap = new HashMap(); bindMap.put("RECEIVEREQUESTTYPE",receiveRequestType); bindMap.put("RECEIVEREQUESTNAME","%" + receiveRequestName + "%"); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的其他入库单数据!"); } return AjaxResult.me().setResultObj(list); } /** * 根据其他入库单单号获取明细 * @param in * @return */ @RequestMapping(value = "/getOtherInLine", method = RequestMethod.POST) public AjaxResult getOtherInLine(@RequestBody JSONObject in) { MaterialReceiveRequest materialReceiveRequest = JSON.toJavaObject(in, MaterialReceiveRequest.class); String receiveRequestName = materialReceiveRequest.getReceiveRequestName(); String receiveRequestType = materialReceiveRequest.getReceiveRequestType(); String sql = "SELECT\r\n" + " M.RECEIVEDQUANTITY,M.REQUESTQUANTITY,M.RECEIVEREQUESTNAME || ' ' || M.RECEIVEREQUESTDETAILNAME WL\r\n" + "FROM\r\n" + " MATERIALRECEIVEREQUESTDETAIL M\r\n" + "LEFT JOIN MATERIALRECEIVEREQUEST M2 ON\r\n" + " M.RECEIVEREQUESTNAME = M2.RECEIVEREQUESTNAME\r\n" + "WHERE\r\n" + " M.RECEIVEREQUESTNAME = :RECEIVEREQUESTNAME\r\n" + " AND M2.RECEIVEREQUESTTYPE = :RECEIVEREQUESTTYPE"; Map bindMap = new HashMap(); bindMap.put("RECEIVEREQUESTNAME", receiveRequestName); bindMap.put("RECEIVEREQUESTTYPE", receiveRequestType); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if (Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } List> upper = new ToUpperUtils().toUpper(list); return AjaxResult.me().setResultObj(upper); } /******************************************************************************************************************************/ /*****************************************其他入库单********************************************************************************/ /******************************************************************************************************************************/ /** * 获取其他入库单单号集合 * @param in * @return */ @RequestMapping(value = "/getCheckPlanList", method = RequestMethod.POST) public AjaxResult getCheckPlanList(@RequestBody JSONObject in ){ CheckPlan CheckPlan = JSON.toJavaObject(in, CheckPlan.class); String checkPlanNo = CheckPlan.getCheckPlanNo(); String sql = "SELECT DISTINCT C.CHECKPLANNAME FROM CHECKPLAN C WHERE C.CHECKPLANNAME LIKE :CHECKPLANNAME AND C.CHECKPLANSTATE = 'Created'"; Map bindMap = new HashMap(); bindMap.put("CHECKPLANNAME","%" + checkPlanNo + "%"); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的待盘点单数据!"); } return AjaxResult.me().setResultObj(list); } /** * 根据其他入库单单号获取明细 * @param in * @return * @throws Exception */ @RequestMapping(value = "/getCheckPlanInfo", method = RequestMethod.POST) public AjaxResult getCheckPlanInfo(@RequestBody JSONObject in) throws Exception { CheckPlan CheckPlan = JSON.toJavaObject(in, CheckPlan.class); String checkPlanNo = CheckPlan.getCheckPlanNo(); String siteName = CheckPlan.getSiteName(); int pageNum = CheckPlan.getPageNum(); int pageSize = CheckPlan.getPageSize(); String sql = "SELECT\r\n" + " DISTINCT \r\n" + " A.MATERIALPACKINGNAME,\r\n" + " m.CHARGE,\r\n" + " A.SYSLOCATION,\r\n" + " '' AS ACTLOCATION ,\r\n" + " '未盘点物理库位' AS LOCATIONSTATE1,\r\n" + " A.ERPLOCATION,\r\n" + " '' AS ERPLOCATION1,\r\n" + " '未盘点ERP库位' AS LOCATIONSTATE2,\r\n" + " A.MATERIALQUANTITY AS MATERIALQUANTITY1 ,\r\n" + " NULL AS MATERIALQUANTITY,\r\n" + " '未盘点数量' AS QTYSTATE,\r\n" + " A.MATERIALSPECNAME,\r\n" + " C.DESC_CN ,\r\n" + " A.LASTEVENTUSER,\r\n" + " A.LASTACTION,\r\n" + " '未盘点' AS CHECKRESULT\r\n" + "FROM\r\n" + " CHECKPLAN A,\r\n" + " MATERIALSPEC C,\r\n" + " MATERIALPACKING m\r\n" + "WHERE\r\n" + " (A.SITENAME = :SITENAME\r\n" + " AND A.CHECKPLANNAME = :CHECKPLANNAME\r\n" + " --AND A.PLANDATE = :PLANDATE \r\n" + " AND A.MATERIALPACKINGNAME = m.MATERIALPACKINGNAME\r\n" + " AND C.MATERIALSPECNAME = m.MATERIALSPECNAME\r\n" + " AND A.MATERIALSPECNAME = C.MATERIALSPECNAME\r\n" + " AND A.SITENAME = C.SITENAME) \r\n" + "MINUS \r\n" + "SELECT\r\n" + " DISTINCT \r\n" + " A.MATERIALPACKINGNAME,\r\n" + " m.CHARGE,\r\n" + " A.SYSLOCATION,\r\n" + " '' AS ACTLOCATION ,\r\n" + " '未盘点物理库位' AS LOCATIONSTATE1,\r\n" + " A.ERPLOCATION,\r\n" + " '' AS ERPLOCATION1,\r\n" + " '未盘点ERP库位' AS LOCATIONSTATE2,\r\n" + " A.MATERIALQUANTITY AS MATERIALQUANTITY1 ,\r\n" + " NULL AS MATERIALQUANTITY,\r\n" + " '未盘点数量' AS QTYSTATE,\r\n" + " A.MATERIALSPECNAME,\r\n" + " C.DESC_CN ,\r\n" + " A.LASTEVENTUSER,\r\n" + " A.LASTACTION,\r\n" + " '未盘点' AS CHECKRESULT\r\n" + "FROM\r\n" + " CHECKPLAN A,\r\n" + " CHECKRECORD B,\r\n" + " MATERIALSPEC C,\r\n" + " MATERIALPACKING m\r\n" + "WHERE\r\n" + " (A.SITENAME = B.SITENAME\r\n" + " AND A.SITENAME = :SITENAME\r\n" + " AND A.CHECKPLANNAME = :CHECKPLANNAME\r\n" + " AND A.CHECKPLANNAME = B.CHECKPLANNAME\r\n" + " --AND A.PLANDATE = :PLANDATE \r\n" + " AND A.MATERIALPACKINGNAME = m.MATERIALPACKINGNAME\r\n" + " AND C.MATERIALSPECNAME = m.MATERIALSPECNAME\r\n" + " AND A.PLANDATE = B.PLANDATE\r\n" + " AND A.MATERIALPACKINGNAME = B.MATERIALPACKINGNAME\r\n" + " AND A.MATERIALSPECNAME = C.MATERIALSPECNAME\r\n" + " AND A.SITENAME = C.SITENAME)\r\n" + "UNION ALL \r\n" + "(\r\n" + "SELECT\r\n" + " DISTINCT \r\n" + " A.MATERIALPACKINGNAME,\r\n" + " m.CHARGE,\r\n" + " A.SYSLOCATION,\r\n" + " B.ACTLOCATION,\r\n" + " CASE\r\n" + " WHEN B.SYSLOCATION = B.ACTLOCATION THEN '物理库位一致'\r\n" + " ELSE '物理库位异动'\r\n" + " END AS LOCATIONSTATE1,\r\n" + " A.ERPLOCATION,\r\n" + " B.ERPLOCATION AS ERPLOCATION1 ,\r\n" + " CASE\r\n" + " WHEN A.ERPLOCATION = B.ERPLOCATION THEN 'ERP库位一致'\r\n" + " ELSE 'ERP库位异动'\r\n" + " END AS LOCATIONSTATE2,\r\n" + " A.MATERIALQUANTITY AS MATERIALQUANTITY1,\r\n" + " B.MATERIALQUANTITY ,\r\n" + " CASE\r\n" + " WHEN B.MATERIALQUANTITY = A.MATERIALQUANTITY THEN '数量一致'\r\n" + " ELSE '数量有异'\r\n" + " END AS QTYSTATE,\r\n" + " A.MATERIALSPECNAME,\r\n" + " C.DESC_CN,\r\n" + " B.LASTEVENTUSER,\r\n" + " B.LASTACTION,\r\n" + " '已盘点' AS CHECKRESULT\r\n" + "FROM\r\n" + " CHECKPLAN A,\r\n" + " CHECKRECORD B,\r\n" + " MATERIALSPEC C,\r\n" + " MATERIALPACKING m\r\n" + "WHERE\r\n" + " (A.SITENAME = B.SITENAME\r\n" + " AND A.SITENAME = :SITENAME\r\n" + " AND A.CHECKPLANNAME = :CHECKPLANNAME\r\n" + " AND A.CHECKPLANNAME = B.CHECKPLANNAME\r\n" + " AND A.MATERIALPACKINGNAME = m.MATERIALPACKINGNAME\r\n" + " AND C.MATERIALSPECNAME = m.MATERIALSPECNAME\r\n" + " --AND A.PLANDATE = :PLANDATE\r\n" + " AND A.PLANDATE = B.PLANDATE\r\n" + " AND A.MATERIALPACKINGNAME = B.MATERIALPACKINGNAME\r\n" + " AND A.MATERIALSPECNAME = C.MATERIALSPECNAME\r\n" + " AND A.SITENAME = C.SITENAME))\r\n" + "UNION ALL \r\n" + "(\r\n" + "SELECT\r\n" + "DISTINCT \r\n" + "B.MATERIALPACKINGNAME,\r\n" + "m.CHARGE,\r\n" + "B.SYSLOCATION,\r\n" + "B.ACTLOCATION ,\r\n" + "'多盘物理库位' AS LOCATIONSTATE1,\r\n" + "'' AS ERPLOCATION,\r\n" + "B.ERPLOCATION AS ERPLOCATION1,\r\n" + "'多盘ERP库位' AS LOCATIONSTATE2,\r\n" + "NULL AS MATERIALQUANTITY1 ,\r\n" + "B.MATERIALQUANTITY,\r\n" + "'多盘数量' AS QTYSTATE,\r\n" + "B.MATERIALSPECNAME,\r\n" + "C.DESC_CN ,\r\n" + "B.LASTEVENTUSER,\r\n" + "B.LASTACTION,\r\n" + "'多盘' AS CHECKRESULT\r\n" + "FROM\r\n" + "CHECKRECORD B,\r\n" + "MATERIALSPEC C,\r\n" + "MATERIALPACKING m\r\n" + "WHERE \r\n" + "(B.SITENAME = :SITENAME\r\n" + " AND B.CHECKPLANNAME = :CHECKPLANNAME\r\n" + " --AND B.PLANDATE = :PLANDATE \r\n" + " AND B.MATERIALPACKINGNAME = m.MATERIALPACKINGNAME\r\n" + " AND C.MATERIALSPECNAME = m.MATERIALSPECNAME\r\n" + " AND B.MATERIALSPECNAME = C.MATERIALSPECNAME\r\n" + " AND B.SITENAME = C.SITENAME) \r\n" + "MINUS\r\n" + "SELECT\r\n" + " DISTINCT \r\n" + " B.MATERIALPACKINGNAME,\r\n" + " m.CHARGE,\r\n" + " B.SYSLOCATION,\r\n" + " B.ACTLOCATION ,\r\n" + " '多盘物理库位' AS LOCATIONSTATE1,\r\n" + " '' AS ERPLOCATION,\r\n" + " B.ERPLOCATION AS ERPLOCATION1,\r\n" + " '多盘ERP库位' AS LOCATIONSTATE2,\r\n" + " NULL AS MATERIALQUANTITY1 ,\r\n" + " B.MATERIALQUANTITY,\r\n" + " '多盘数量' AS QTYSTATE,\r\n" + " B.MATERIALSPECNAME,\r\n" + " C.DESC_CN ,\r\n" + " B.LASTEVENTUSER,\r\n" + " B.LASTACTION,\r\n" + " '多盘' AS CHECKRESULT\r\n" + "FROM\r\n" + " CHECKPLAN A,\r\n" + " CHECKRECORD B,\r\n" + " MATERIALSPEC C,\r\n" + " MATERIALPACKING m\r\n" + "WHERE\r\n" + " (A.SITENAME = B.SITENAME\r\n" + " AND A.SITENAME = :SITENAME\r\n" + " AND A.CHECKPLANNAME = :CHECKPLANNAME\r\n" + " --AND A.PLANDATE = :PLANDATE \r\n" + " AND A.PLANDATE = B.PLANDATE\r\n" + " AND B.MATERIALPACKINGNAME = m.MATERIALPACKINGNAME\r\n" + " AND C.MATERIALSPECNAME = m.MATERIALSPECNAME\r\n" + " AND A.CHECKPLANNAME = B.CHECKPLANNAME\r\n" + " AND B.MATERIALPACKINGNAME = A.MATERIALPACKINGNAME\r\n" + " AND A.MATERIALSPECNAME = C.MATERIALSPECNAME\r\n" + " AND A.SITENAME = C.SITENAME))\r\n" + "ORDER BY\r\n" + "CHECKRESULT DESC"; Map bindMap = new HashMap(); bindMap.put("CHECKPLANNAME", checkPlanNo); bindMap.put("SITENAME", siteName); PageResult> queryResultPage = queryService.getQueryResultPage(sql, bindMap, pageNum, pageSize); // List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if (Objects.isNull(queryResultPage) ) { throw new GlobalException("未找到需要盘点的数据!"); } return AjaxResult.me().setResultObj(queryResultPage); } /** * 盘点修改 * @param in * @return * @throws Exception */ @RequestMapping(value = "/getCheckPlanInfo1", method = RequestMethod.POST) public AjaxResult getCheckPlanInfo1(@RequestBody JSONObject in) throws Exception { CheckPlan1 CheckPlan = JSON.toJavaObject(in, CheckPlan1.class); String checkPlanNo = CheckPlan.getCheckPlanNo(); String siteName = CheckPlan.getSiteName(); String erplocation = CheckPlan.getERPLOCATION(); String locationname = CheckPlan.getLOCATIONNAME(); int pageNum = CheckPlan.getPageNum(); int pageSize = CheckPlan.getPageSize(); String sql = "SELECT c.ERPLOCATION,be.DESCRIPTION ERPLOCATION1,c.SYSLOCATION,s.DESCRIPTION ACTLOCATION1,c.MATERIALSPECNAME,m.DESC_CN,\r\n" + " SUM(C.MATERIALQUANTITY - NVL(c2.MATERIALQUANTITY,0)) Square_quantity ,COUNT(C.MATERIALQUANTITY)-COUNT(c2.MATERIALQUANTITY) Remaining_Quantity\r\n" + "FROM CHECKPLAN C \r\n" + "LEFT JOIN CHECKRECORD c2 ON C.CHECKPLANNAME = c2.CHECKPLANNAME AND C.PLANDATE = c2.PLANDATE AND C.MATERIALPACKINGNAME = c2.MATERIALPACKINGNAME\r\n" + "LEFT JOIN BS_ERPLOCATION be ON c.ERPLOCATION = be.ERPLOCATIONNAME\r\n" + "LEFT JOIN STORAGESPEC s ON c.SYSLOCATION = s.STORAGENAME AND c.ERPLOCATION = s.ERPLOCATION\r\n" + "LEFT JOIN MATERIALSPEC m ON C.MATERIALSPECNAME = m.MATERIALSPECNAME\r\n" + "WHERE c.CHECKPLANNAME = :CHECKPLANNAME \r\n" + "GROUP BY c.ERPLOCATION,be.DESCRIPTION ,c.SYSLOCATION,s.DESCRIPTION ,c.MATERIALSPECNAME,m.DESC_CN\r\n" + "ORDER BY C.ERPLOCATION,c.SYSLOCATION,c.MATERIALSPECNAME"; Map bindMap = new HashMap(); bindMap.put("CHECKPLANNAME", checkPlanNo); bindMap.put("SITENAME", siteName); bindMap.put("LOCATIONNAME", locationname); bindMap.put("ERPLOCATION", erplocation); // PageResult> queryResultPage = PDAQuery.getQueryResultPage(sql, bindMap, pageNum, pageSize); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if (list.size() <= 0 ) { throw new GlobalException("未找到需要盘点的数据!"); } return AjaxResult.me().setResultObj(list); } /** * 获取库存查询信息 * @param in * @return */ @RequestMapping(value = "/getMaterialQuery", method = RequestMethod.POST) public AjaxResult getBarCode(@RequestBody JSONObject in ){ MaterialPacking materialPacking = JSON.toJavaObject(in, MaterialPacking.class); String materialPackingName = materialPacking.getMaterialPackingName(); String erplocaatin=materialPacking.getErpLocation(); String location =materialPacking.getLocationName(); String materialspec=materialPacking.getMaterialSpecName(); String desc_cn=materialPacking.getDesc_cn(); String sdk_id=materialPacking.getSdk_id(); String sql=""; //判断条码是否存在且状态是在库 if(!("".equals(materialPackingName))) { sql= "SELECT M.STOCKSTATE,M.RECEIVEACTNO FROM MATERIALPACKING M WHERE STOCKSTATE ='Stocked' AND M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME "; Map bindMap = new HashMap(); bindMap.put("MATERIALPACKINGNAME",materialPackingName); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(list.size()==0) { throw new GlobalException("条码不存在或不为在库状态"); } } String sql2 = "SELECT\r\n" + " mp.CHARGE,MP.MATERIALPACKINGNAME,mp.MATERIALSPECNAME, MU.FNAME UNIT, mp.SHIPREQUESTNAME, \r\n" + " mp.PHASE,\r\n" + " mp.TRUEGG ,mp.MATERIALQUANTITY,DECODE(mp.OQARESULT,'OK','合格','NG','不良','','待检') OQARESULT ,mp.HOLDSTATE, TO_CHAR(mp.MAKEDATE, 'YYYY-MM-DD') MAKEDATE,TO_CHAR(mp.EXPIRINGDATE, 'YYYY-MM-DD') EXPIRINGDATE, \r\n" + " SS.SPECNAME ,mp.MJPC,\r\n" + " m.DESC_CN,BS.ERPLOCATIONNAME || ' ' || BS.DESCRIPTION as ERPLOCATION, O.DESCRIPTION as ERPFACTORY, SP.STORAGENAME || ' ' || SP.DESCRIPTION as LOCATIONNAME,m.DESCRIPTION\r\n" + "FROM\r\n" + " MATERIALPACKING mp LEFT JOIN MATERIALSPEC m ON m.MATERIALSPECNAME = mp.MATERIALSPECNAME \r\n" + " LEFT JOIN SDK_SPEC SS ON SS.SDK_ID = mp.SDK_ID \r\n" + " LEFT JOIN BS_ERPLOCATION BS ON BS.ERPLOCATIONNAME = mp.ERPLOCATION \r\n" + " LEFT JOIN ORG O ON O.ORGNO = mp.ERPFACTORY \r\n" + " LEFT JOIN STORAGESPEC SP ON SP.STORAGENAME = mp.LOCATIONNAME AND mp.ERPFACTORY = SP.ERPFACTORY \r\n" + " LEFT JOIN MATERIALUNIT MU ON MU.FNUMBER = mp.UNIT \r\n" + "WHERE\r\n" + " (:ERPLOCATION IS NULL OR MP.ERPLOCATION=:ERPLOCATION) AND (:MATERIALSPECNAME IS NULL OR mp.MATERIALSPECNAME=:MATERIALSPECNAME) AND m.DESC_CN LIKE '%'||:DESC_CN ||'%' \r\n" + " AND (:SDK_ID IS NULL\r\n" + " OR nvl(mp.SDK_ID, '~') = nvl(:SDK_ID, '~'))"+ " AND (:LOCATIONNAME IS NULL\r\n" + " OR mp.LOCATIONNAME =:LOCATIONNAME)"+ " AND (:MATERIALPACKINGNAME IS NULL\r\n" + " OR mp.MATERIALPACKINGNAME =:MATERIALPACKINGNAME) AND mp.STOCKSTATE = 'Stocked' AND (BS.DEPARTNAME IN ( '泗洪物流部','胶水车间','五金仓库') OR BS.ERPFACTORYNAME = '103' OR BS.ERPFACTORYNAME = '105' OR BS.ERPFACTORYNAME = '106') order by mp.erpfactory,mp.erplocation,mp.MATERIALSPECNAME,mp.MATERIALQUANTITY"; Map bindMap2 = new HashMap(); bindMap2.put("MATERIALPACKINGNAME",materialPackingName); bindMap2.put("ERPLOCATION",erplocaatin); bindMap2.put("LOCATIONNAME",location); bindMap2.put("MATERIALSPECNAME",materialspec); bindMap2.put("DESC_CN",desc_cn); bindMap2.put("SDK_ID",sdk_id); List> list2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql2, bindMap2); if(list2.size() < 1) { throw new GlobalException("查询结果为空"); } return AjaxResult.me().setResultObj(list2); } /******************************************************************************************************************************/ /*****************************************20240712修改出库单********************************************************************************/ /******************************************************************************************************************************/ /** * 获取待完成的出库单集合 * @param in * @return */ @RequestMapping(value = "/getStockOutInvoiceList", method = RequestMethod.POST) public AjaxResult getStockOutInvoiceList(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String erpfactory = materialShipRequest.getErpfactory(); String sql = "SELECT DISTINCT SHIPREQUESTNAME FROM (SELECT\r\n" + " T.SHIPREQUESTNAME " + "FROM\r\n" + " MATERIALSHIPREQUESTDETAIL T\r\n" + "LEFT JOIN MATERIALSHIPREQUEST M ON\r\n" + " T.SHIPREQUESTNAME = M.SHIPREQUESTNAME\r\n" + "WHERE\r\n" + " T.SHIPREQUESTNAME LIKE :SHIPREQUESTNAME \r\n" + // " AND SHIPREQUESTTYPE NOT IN ( 'SaleOutPre', '4E') " + "AND SHIPREQUESTSTATE <> 'Completed' AND M.ERPFACTORY = :ERPFACTORY ORDER BY M.ORDERDATE ASC,SHIPREQUESTNAME)"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME","%" + shipRequestName + "%"); bindMap.put("ERPFACTORY",erpfactory); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } return AjaxResult.me().setResultObj(list); } /** * 获取已绑定的批次信息 * @param in * @return */ @RequestMapping(value = "/getBindStockOutInfo", method = RequestMethod.POST) public AjaxResult getBindStockOutInfo(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String shipRequestDetailName = materialShipRequest.getShipRequestDetailName(); String sdk_id = materialShipRequest.getSdk_id(); String materialSpecName = materialShipRequest.getMaterialSpecName(); String phase = materialShipRequest.getPhase(); String siteName = materialShipRequest.getSiteName(); String sql = " SELECT \r\n" + " to_char(A.MAKEDATE,'yyyymmdd') as MAKEDATE,to_char(A.EXPIRINGDATE,'yyyymmdd') as EXPIRINGDATE,to_char(A.RECEIVETIME,'yyyymmdd') as RECEIVETIME,\r\n" + " 0 as groupno,\r\n" + " 0 as groupdetailno,\r\n" + " A.MATERIALPACKINGNAME,\r\n" + " A.STOCKSTATE,\r\n" + " A.CHARGE,\r\n" + " SSS.DESCRIPTION LOCATIONNAME,\r\n" + " A.SHIPREQUESTNAME,\r\n" + " A.SHIPREQUESTDETAILNAME,\r\n" + " BE.DESCRIPTION ERPLOCATION,\r\n" + " A.ERPFACTORY,\r\n" + " A.MATERIALSPECNAME,\r\n" + " A.PACKINGGRADE,\r\n" + " A.MATERIALQUANTITY,\r\n" + " A.MATERIALQUANTITY2 MATERIALQUANTITY2,\r\n" + " A.PACKINGSTATE,\r\n" + " B.EXPIRATIONDAY,\r\n" + " A.SDK_ID ,SS.SPECNAME,A.PHASE,\r\n" + " B.DESC_CN,\r\n" + " B.MATERIALUNIT,'Y' ISCHECK\r\n" + " FROM MATERIALPACKING A LEFT JOIN SDK_SPEC SS ON A.SDK_ID = SS.SDK_ID LEFT JOIN MATERIALSPEC B ON A.MATERIALSPECNAME = B.MATERIALSPECNAME " + " LEFT JOIN BS_ERPLOCATION BE ON A.ERPLOCATION = BE.ERPLOCATIONNAME " + "LEFT JOIN STORAGESPEC SSS ON SSS.STORAGENAME = A.LOCATIONNAME AND SSS.ERPLOCATION = A.ERPLOCATION \r\n" + " WHERE 1 = 1 \r\n" + " AND A.MATERIALSPECNAME=B.MATERIALSPECNAME\r\n" + " AND A.SITENAME=B.SITENAME\r\n" + " AND A.SITENAME=:SITENAME\r\n" + " AND A.MATERIALPACKINGTYPE='Box'\r\n" + // " AND (:SDK_ID IS NULL OR A.SDK_ID = :SDK_ID)\r\n" + // " AND (:PHASE IS NULL OR A.PHASE = :PHASE)\r\n" + " AND A.SHIPREQUESTNAME = :SHIPREQUESTNAME\r\n" + // " AND A.SHIPREQUESTDETAILNAME = :SHIPREQUESTDETAILNAME\r\n" + " AND A.STOCKSTATE = 'Stocked'\r\n" + " and a.PACKINGSTATE='Released'\r\n" + " AND A.HOLDSTATE='N'\r\n" + " AND A.PACKINGGRADE IN ('OK','OKEY')\r\n" + // " AND A.MATERIALQUANTITY<>'0'\r\n" + " AND (A.NPFLAG<>'Y' or A.NPFLAG is null)\r\n" + " AND (A.ETCSTATE is null or A.ETCSTATE='EtcIn')\r\n" + " AND A.OQARESULTSTATE <> 'PREOQA' ORDER BY A.MATERIALSPECNAME ASC"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME",shipRequestName); bindMap.put("MATERIALSPECNAME",materialSpecName); bindMap.put("SHIPREQUESTDETAILNAME",shipRequestDetailName); bindMap.put("SDK_ID",sdk_id); bindMap.put("PHASE",phase); bindMap.put("SITENAME",siteName); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); return AjaxResult.me().setResultObj(list); } /** * 获取待出库的批次信息,先进先出排序 * @param in * @return */ @RequestMapping(value = "/getPreStockOutInfo", method = RequestMethod.POST) public AjaxResult getPreStockOutInfo(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String shipRequestDetailName = materialShipRequest.getShipRequestDetailName(); String sdk_id = materialShipRequest.getSdk_id(); String materialSpecName = materialShipRequest.getMaterialSpecName(); String phase = materialShipRequest.getPhase(); String erpfactory = materialShipRequest.getErpfactory(); String siteName = materialShipRequest.getSiteName(); String CAREER_ASSISTANCE = materialShipRequest.getCAREER_ASSISTANCE(); String sql = " SELECT \r\n" + " to_char(A.MAKEDATE,'yyyymmdd') as MAKEDATE,to_char(A.EXPIRINGDATE,'yyyymmdd') as EXPIRINGDATE,to_char(A.RECEIVETIME,'yyyymmdd') as RECEIVETIME,\r\n" + " dense_rank()over( ORDER BY to_char(A.RECEIVETIME,'yyyymmdd')) as groupno,\r\n" + " row_number()over(partition by to_char(A.RECEIVETIME,'yyyymmdd') ORDER BY A.LOCATIONNAME) as groupdetailno,\r\n" + " A.MATERIALPACKINGNAME,\r\n" + " A.STOCKSTATE,\r\n" + " A.CHARGE,\r\n" + " SSS.DESCRIPTION LOCATIONNAME,\r\n" + " :SHIPREQUESTNAME SHIPREQUESTNAME,\r\n" + " :SHIPREQUESTDETAILNAME SHIPREQUESTDETAILNAME,\r\n" + " BE.DESCRIPTION ERPLOCATION,\r\n" + " A.ERPFACTORY,A.AREANAME,A.SHELFNAME,\r\n" + " A.MATERIALSPECNAME,\r\n" + " A.PACKINGGRADE,\r\n" + " A.MATERIALQUANTITY,\r\n" + " CASE WHEN MATERIALQUANTITY2 > 0 THEN A.MATERIALQUANTITY2" + " ELSE A.MATERIALQUANTITY END MATERIALQUANTITY2,\r\n" + " A.PACKINGSTATE,\r\n" + " B.EXPIRATIONDAY,\r\n" + " A.SDK_ID ,SS.SPECNAME, A.PHASE, \r\n" + " B.DESC_CN,\r\n" + " B.MATERIALUNIT,'N' ISCHECK\r\n" + " FROM MATERIALPACKING A LEFT JOIN SDK_SPEC SS ON A.SDK_ID = SS.SDK_ID LEFT JOIN MATERIALSPEC B ON A.MATERIALSPECNAME = B.MATERIALSPECNAME " + " LEFT JOIN BS_ERPLOCATION BE ON A.ERPLOCATION = BE.ERPLOCATIONNAME " + "LEFT JOIN STORAGESPEC SSS ON SSS.STORAGENAME = A.LOCATIONNAME AND SSS.ERPLOCATION = A.ERPLOCATION \r\n" + " WHERE A.MATERIALSPECNAME = :MATERIALSPECNAME\r\n" + " AND A.MATERIALSPECNAME=B.MATERIALSPECNAME\r\n" + " AND A.SITENAME=B.SITENAME\r\n" + " AND A.SITENAME=:SITENAME\r\n" + " AND A.MATERIALPACKINGTYPE='Box'\r\n" + " AND (:SDK_ID IS NULL OR A.SDK_ID = :SDK_ID)\r\n" + " AND (:CAREER_ASSISTANCE IS NULL OR A.CAREER_ASSISTANCE = :CAREER_ASSISTANCE)\r\n" + " AND (:PHASE IS NULL OR A.PHASE = :PHASE)\r\n" + " AND (:ERPFACTORY IS NULL OR A.ERPFACTORY = :ERPFACTORY)\r\n" + " AND A.SHIPREQUESTNAME IS NULL\r\n" + " AND A.SHIPREQUESTDETAILNAME IS NULL\r\n" + " AND A.STOCKSTATE = 'Stocked'\r\n" + " and a.PACKINGSTATE='Released'\r\n" + " AND A.HOLDSTATE='N'\r\n" + " AND A.PACKINGGRADE IN ('OK','OKEY')\r\n" + " AND A.MATERIALQUANTITY<>'0'\r\n" + " AND (A.NPFLAG<>'Y' or A.NPFLAG is null)\r\n" + " AND (A.ETCSTATE is null or A.ETCSTATE='EtcIn')\r\n" + " AND A.OQARESULTSTATE <> 'PREOQA'\r\n" + " AND to_char(A.EXPIRINGDATE,'yyyymmdd') >= to_char(SYSDATE,'yyyymmdd')"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME",shipRequestName); bindMap.put("MATERIALSPECNAME",materialSpecName); bindMap.put("SHIPREQUESTDETAILNAME",shipRequestDetailName); bindMap.put("SDK_ID",sdk_id); bindMap.put("PHASE",phase); bindMap.put("ERPFACTORY",erpfactory); bindMap.put("SITENAME",siteName); bindMap.put("CAREER_ASSISTANCE",CAREER_ASSISTANCE); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); return AjaxResult.me().setResultObj(list); } /** * 获取出库汇总明细数据 * @param in * @return */ @RequestMapping(value = "/getStockOutInvoiceSumInfo", method = RequestMethod.POST) public AjaxResult getStockOutInvoiceSumInfo(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String erpfactory = materialShipRequest.getErpfactory(); //只查询未拣配完成的行项.zd.2024.9.26 String sql=" SELECT *\n" + " FROM (WITH AA AS (SELECT SHIPREQUESTNAME,\n" + " MATERIALSPECNAME,\n" + " SDK_ID,\n" + " PHASE,\n" + " COUNT(MATERIALPACKINGNAME) JS\n" + " FROM MATERIALPACKING A\n" + " WHERE A.SHIPREQUESTNAME = :SHIPREQUESTNAME\n" + " AND A.ERPFACTORY = :ERPFACTORY\n" + " GROUP BY SHIPREQUESTNAME,\n" + " MATERIALSPECNAME,\n" + " SDK_ID,\n" + " PHASE)\n" + " SELECT m.MATERIALSPECNAME,\n" + " SUM(m.REQUESTQUANTITY) REQUESTQUANTITY,\n" + " SUM(m.ASSIGNEDQUANTITY) ASSIGNEDQUANTITY,\n" + " SUM(m.SALEOUTQUANTITY) SALEOUTQUANTITY,\n" + " SUM(m.REQUESTQUANTITY - m.SALEOUTQUANTITY) SMQTY,\n" + " m.PHASE,\n" + " m.SDK_ID,\n" + " m2.DESCRIPTION,\n" + " m2.DESC_CN,\n" + " m.ERPFACTORY,\n" + " ss.SPECNAME,\n" + " m.SHIPREQUESTNAME,\n" + " mm.JS,\n" + " mmm.CUSTOMERNO,\n" + " mmm.SJMS,\n" + " mmm.PRODUCTORDERTYPE,\n" + " m2.COMMONMATERIALFLAG,\n" + " max(m.INDEPTNO) DEPARTMENT\n" + " FROM MATERIALSHIPREQUESTDETAIL m\n" + " LEFT JOIN MATERIALSPEC m2\n" + " ON m.MATERIALSPECNAME = m2.MATERIALSPECNAME\n" + " LEFT JOIN SDK_SPEC ss\n" + " ON ss.SDK_ID = m.SDK_ID\n" + " LEFT JOIN MATERIALSHIPREQUEST mmm\n" + " ON mmm.SHIPREQUESTNAME = m.SHIPREQUESTNAME\n" + " LEFT JOIN AA mm\n" + " ON mm.SHIPREQUESTNAME = m.SHIPREQUESTNAME\n" + " AND mm.MATERIALSPECNAME = m.MATERIALSPECNAME\n" + " AND ((mm.SDK_ID IS NULL AND m.SDK_ID IS NULL) OR\n" + " mm.SDK_ID = m.SDK_ID)\n" + " AND ((mm.phase IS NULL AND m.phase IS NULL) OR\n" + " mm.phase = m.phase)\n" + " WHERE m.SHIPREQUESTNAME = :SHIPREQUESTNAME\n" + " AND mmm.ERPFACTORY = :ERPFACTORY\n" + " GROUP BY m.MATERIALSPECNAME,\n" + " m.PHASE,\n" + " m.SDK_ID,\n" + " m2.DESCRIPTION,\n" + " m2.DESC_CN,\n" + " ss.SPECNAME,\n" + " m.SHIPREQUESTNAME,\n" + " mm.JS,\n" + " m.ERPFACTORY,\n" + " mmm.CUSTOMERNO,\n" + " mmm.SJMS,\n" + " mmm.PRODUCTORDERTYPE,\n" + " m2.COMMONMATERIALFLAG)\n" + " WHERE REQUESTQUANTITY - SALEOUTQUANTITY > 0"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME",shipRequestName); bindMap.put("ERPFACTORY",erpfactory); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { return AjaxResult.me().setErrorCode(500).setMessage("未找到对应的数据!"); } return AjaxResult.me().setResultObj(list); } /** * 绑定解绑发货单 * @param in * @return */ @Transactional @RequestMapping(value = "/AssiginOrDessiginBarCode", method = RequestMethod.POST) public AjaxResult AssiginOrDessiginBarCode(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String shipRequestDetailName = materialShipRequest.getShipRequestDetailName(); String type = materialShipRequest.getType();//Deassign 条码解绑 Assign 条码绑定 String user = materialShipRequest.getUser(); String siteName = materialShipRequest.getSiteName(); String shipRequestType = materialShipRequest.getShipRequestType();//订单类型 List boxList = materialShipRequest.getBoxList(); EventInfo makeEventInfo; for (MaterialPacking materialPacking : boxList) { String materialPackingName = materialPacking.getMaterialPackingName();//条码 String materialQuantity = materialPacking.getMaterialQuantity();//原数量 String materialQuantity2 = materialPacking.getMaterialQuantity2();//发货数量 String charge = materialPacking.getCharge();//批次 //1.绑定 //校验Box有没有被其他订单绑过 if ("Assign".equals(type)) { makeEventInfo = new EventInfoUtil().makeEventInfo("AssiginShipRequest", user, "AssiginShipRequest"); String sql = "SELECT SHIPREQUESTNAME FROM MATERIALPACKING T WHERE T.MATERIALPACKINGNAME = :MATERIALPACKINGNAME"; Map hashMap = new HashMap (); hashMap.put("MATERIALPACKINGNAME", materialPackingName); List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); if (queryForList == null || queryForList.size() < 1) { return AjaxResult.me().setSuccess(false).setMessage("条码在系统中不存在"); } else { String invoice = queryForList.get(0).get("SHIPREQUESTNAME") == null ? "" : queryForList.get(0).get("SHIPREQUESTNAME").toString().toString(); if (!"".equals(invoice) && !invoice.equals(shipRequestName)) { return AjaxResult.me().setSuccess(false).setMessage("条码已被" + invoice + "备货"); } //更新Box绑定关系、Box发货数量、拆分到条码明细表 SetEventInfo setEventInfo = new SetEventInfo(); Map hashMap2 = new HashMap (); float fmaterialQuantity = Float.parseFloat(materialQuantity);//标签数量 float fmaterialQuantity2 = Float.parseFloat(materialQuantity2);//实际发货数量 //更新实际实际出库数量到库存表 MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, materialPackingName); if (fmaterialQuantity2 < fmaterialQuantity) {//拆托发货 // hashMap2.put("materialQuantity", fmaterialQuantity - fmaterialQuantity2);//更新标签剩余数量 hashMap2.put("materialQuantity2", fmaterialQuantity2);//更新发货数量 hashMap2.put("shipRequestName", shipRequestName); hashMap2.put("shipRequestDetailName", shipRequestDetailName); setEventInfo.setUserColumns(hashMap2); MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo); } else if (fmaterialQuantity2 == fmaterialQuantity) {//完全发货 hashMap2.put("materialQuantity2", fmaterialQuantity2); hashMap2.put("shipRequestName", shipRequestName); hashMap2.put("shipRequestDetailName", shipRequestDetailName); setEventInfo.setUserColumns(hashMap2); MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo); } else {//不满足发货条件 return AjaxResult.me().setSuccess(false).setMessage("发货数量超出"); } //更新备货数量 BigDecimal QTY = new BigDecimal(materialQuantity2); if("Assign".equals(type)){ String updateSql= " UPDATE MATERIALSHIPREQUESTDETAIL m SET m.ASSIGNEDQUANTITY = m.ASSIGNEDQUANTITY + :QTY WHERE m.SITENAME = :SITENAME" + " AND m.SHIPREQUESTNAME = :SHIPREQUESTNAME AND m.SHIPREQUESTDETAILNAME = :SHIPREQUESTDETAILNAME"; Map bindMap = new HashMap(); bindMap.put("QTY", QTY); bindMap.put("SITENAME", siteName); bindMap.put("SHIPREQUESTNAME", shipRequestName); bindMap.put("SHIPREQUESTDETAILNAME", shipRequestDetailName); IDMFrameServiceProxy.getSqlTemplate().update(updateSql, bindMap); } else if("Deassign".equals(type)){ String updateSql= " UPDATE MATERIALSHIPREQUESTDETAIL m SET m.ASSIGNEDQUANTITY = m.ASSIGNEDQUANTITY - :QTY WHERE m.SITENAME = :SITENAME" + " AND m.SHIPREQUESTNAME = :SHIPREQUESTNAME AND m.SHIPREQUESTDETAILNAME = :SHIPREQUESTDETAILNAME"; Map bindMap = new HashMap(); bindMap.put("QTY", QTY); bindMap.put("SITENAME", siteName); bindMap.put("SHIPREQUESTNAME", shipRequestName); bindMap.put("SHIPREQUESTDETAILNAME", shipRequestDetailName); IDMFrameServiceProxy.getSqlTemplate().update(updateSql, bindMap); } } } else if ("Dessign".equals(type)) { makeEventInfo = new EventInfoUtil().makeEventInfo("DessiginShipRequest", user, "DessiginShipRequest"); String sql = "SELECT SHIPREQUESTNAME FROM MATERIALPACKING T WHERE T.MATERIALPACKINGNAME = :MATERIALPACKINGNAME"; Map hashMap = new HashMap (); hashMap.put("MATERIALPACKINGNAME", materialPackingName); List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); if (queryForList == null || queryForList.size() < 1) { return AjaxResult.me().setSuccess(false).setMessage("条码在系统中不存在"); } else { String invoice = queryForList.get(0).get("SHIPREQUESTNAME") == null ? "" : queryForList.get(0).get("SHIPREQUESTNAME").toString().toString(); if (!"".equals(shipRequestName) && !invoice.equals(shipRequestName)) { return AjaxResult.me().setSuccess(false).setMessage("条码已被" + invoice + "备货"); } //更新Box绑定关系、Box发货数量、拆分到条码明细表 SetEventInfo setEventInfo = new SetEventInfo(); Map hashMap2 = new HashMap (); float fmaterialQuantity = Float.parseFloat(materialQuantity);//标签数量 float fmaterialQuantity2 = Float.parseFloat(materialQuantity2);//实际发货数量 //更新实际实际出库数量到库存表 MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, materialPackingName); hashMap2.put("materialQuantity2", 0); hashMap2.put("shipRequestName", ""); hashMap2.put("shipRequestDetailName", ""); setEventInfo.setUserColumns(hashMap2); MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo); //更新备货数量 BigDecimal QTY = new BigDecimal(materialQuantity2); if("Assign".equals(type)){ String updateSql= " UPDATE MATERIALSHIPREQUESTDETAIL m SET m.ASSIGNEDQUANTITY = m.ASSIGNEDQUANTITY + :QTY WHERE m.SITENAME = :SITENAME" + " AND m.SHIPREQUESTNAME = :SHIPREQUESTNAME AND m.SHIPREQUESTDETAILNAME = :SHIPREQUESTDETAILNAME"; Map bindMap = new HashMap(); bindMap.put("QTY", QTY); bindMap.put("SITENAME", siteName); bindMap.put("SHIPREQUESTNAME", shipRequestName); bindMap.put("SHIPREQUESTDETAILNAME", shipRequestDetailName); IDMFrameServiceProxy.getSqlTemplate().update(updateSql, bindMap); } else if("Deassign".equals(type)){ String updateSql= " UPDATE MATERIALSHIPREQUESTDETAIL m SET m.ASSIGNEDQUANTITY = m.ASSIGNEDQUANTITY - :QTY WHERE m.SITENAME = :SITENAME" + " AND m.SHIPREQUESTNAME = :SHIPREQUESTNAME AND m.SHIPREQUESTDETAILNAME = :SHIPREQUESTDETAILNAME"; Map bindMap = new HashMap(); bindMap.put("QTY", QTY); bindMap.put("SITENAME", siteName); bindMap.put("SHIPREQUESTNAME", shipRequestName); bindMap.put("SHIPREQUESTDETAILNAME", shipRequestDetailName); IDMFrameServiceProxy.getSqlTemplate().update(updateSql, bindMap); } // String update = "UPDATE MATERIALPACKING T SET T.MATERIALQUANTITY = T.MATERIALQUANTITY + :QTY ," // + "T.MATERIALQUANTITY2 = T.MATERIALQUANTITY2 - :QTY WHERE T.MATERIALPACKINGNAME = :MATERIALPACKINGNAME"; // Map hashMap3 = new HashMap (); // hashMap3.put("MATERIALPACKINGNAME", materialPackingName); // hashMap3.put("QTY", QTY); // IDMFrameServiceProxy.getSqlTemplate().update(update, hashMap3); } } //2.解绑 //检验Box是否已经完成解绑 //更新Box绑定关系、Box发货数量、删除条码明细表 } return AjaxResult.me().setResultObj(null); } /*****************************************************************************************************************************/ /***********************************************销售备货20240716***************************************************************/ /***************************************************************************************************************************/ /** * 生成销售备货单号 * @param in * @return */ @RequestMapping(value = "/generateSalePreOrder", method = RequestMethod.POST) public AjaxResult generateSalePreOrder(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String user = materialShipRequest.getUser(); String materialSpecName = materialShipRequest.getMaterialSpecName();//料号 String sdk_id = materialShipRequest.getSdk_id();//规格 String phase = materialShipRequest.getPhase();//阶段 String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String erpfactory = materialShipRequest.getErpfactory(); if (shipRequestName != null && !"".equals(shipRequestName)) { throw new GlobalException("已存在预备货单"); } if (user == null || "".equals(user)) { throw new GlobalException("业助信息不能为空"); } List args = new ArrayList(); // 获取系统当前时间 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYYMMDD"); String date = simpleDateFormat.format(new Date()); args.add(date); List invoice = NameServiceProxy.getNameRuleDefService().generateName( "ShipRequestName", args, 1); if(Objects.isNull(invoice) || invoice.isEmpty()) { throw new GlobalException("生成失败!"); } shipRequestName = user + "-" + invoice.get(0); /** * 预留单主表 */ CreateMaterialShipRequestInfo createMaterialShipRequestInfo = new CreateMaterialShipRequestInfo(); createMaterialShipRequestInfo.setSiteName("SDK"); createMaterialShipRequestInfo.setShipRequestType("SaleOutPre"); createMaterialShipRequestInfo.setShipRequestName( shipRequestName); createMaterialShipRequestInfo.setShipRequestState("Created"); EventInfo makeEventInfo = new EventInfoUtil().makeEventInfo("SaleOutPre", user, "SaleOutPre"); MaterialShipRequestServiceProxy.getMaterialShipRequestService().create(makeEventInfo, createMaterialShipRequestInfo); /** * 预留单明细表 */ CreateMaterialShipRequestDetailInfo createMaterialShipRequestDetailInfo = new CreateMaterialShipRequestDetailInfo(); createMaterialShipRequestDetailInfo.setSiteName("SDK"); createMaterialShipRequestDetailInfo.setMaterialSpecName(materialSpecName); createMaterialShipRequestDetailInfo.setShipRequestDetailName("10"); createMaterialShipRequestDetailInfo.setShipRequestName(shipRequestName); Map hashMap = new HashMap (); // hashMap.put("sdk_id", sdk_id); // hashMap.put("phase", phase); hashMap.put("erpFactory", erpfactory); createMaterialShipRequestDetailInfo.setUserColumns(hashMap); MaterialShipRequestDetailServiceProxy.getMaterialShipRequestDetailService().create(createMaterialShipRequestDetailInfo); return AjaxResult.me().setResultObj(shipRequestName); } /** * 生成销售备货单号 * @param in * @return */ @RequestMapping(value = "/getSDKSPEC", method = RequestMethod.POST) public AjaxResult getSDKSPEC(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String materialSpecName = materialShipRequest.getMaterialSpecName();//料号 //根据料号获取sdk规格信息 if (materialSpecName == null || "".equals(materialSpecName)) { return null; } if (materialSpecName.startsWith("4")) { materialSpecName = "4"; } String sql = " SELECT SDK_ID as \"value\" ,SPECNAME as \"text\" FROM SDK_SPEC ss WHERE ss.PARTNUMBER = :PARTNUMBER"; Map hashMap = new HashMap (); hashMap.put("PARTNUMBER", materialSpecName); List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); return AjaxResult.me().setResultObj(queryForList); } /******************************************************************************************************************************/ /*****************************************20240719修改出库单自动备货********************************************************************************/ /******************************************************************************************************************************/ /** * 获取待完成的出库单集合 * @param in * @return */ @RequestMapping(value = "/getStockOutInvoiceList2", method = RequestMethod.POST) public AjaxResult getStockOutInvoiceList2(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String sql = "SELECT\r\n" + " DISTINCT T.SHIPREQUESTNAME " + "FROM\r\n" + " MATERIALSHIPREQUESTDETAIL T\r\n" + "LEFT JOIN MATERIALSHIPREQUEST M ON\r\n" + " T.SHIPREQUESTNAME = M.SHIPREQUESTNAME\r\n" + "WHERE\r\n" + " T.SHIPREQUESTNAME LIKE :SHIPREQUESTNAME \r\n" + // " AND SHIPREQUESTTYPE <> '4C' " + "AND SHIPREQUESTSTATE <> 'Completed'"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME","%" + shipRequestName + "%"); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } return AjaxResult.me().setResultObj(list); } /** * 获取出库明细信息 * @param in * @return */ @RequestMapping(value = "/getStockOutInvoiceInfo", method = RequestMethod.POST) public AjaxResult getStockOutInvoiceInfo(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String sql = "SELECT\r\n" + " m.MATERIALSPECNAME ,\r\n" + " m.SDK_ID ,\r\n" + " ss.SPECNAME ,\r\n" + " m.PHASE ,\r\n" + " m.REQUESTQUANTITY ,\r\n" + " m.ASSIGNEDQUANTITY ,\r\n" + " m3.DESC_CN ,\r\n" + " m4.FNAME UNIT,\r\n" + " m.SHIPREQUESTNAME ,\r\n" + " m.SHIPREQUESTDETAILNAME ,\r\n" + " count(DISTINCT m5.MATERIALPACKINGNAME) JS\r\n" + "FROM\r\n" + " MATERIALSHIPREQUESTDETAIL m\r\n" + "LEFT JOIN MATERIALSHIPREQUEST m2 ON\r\n" + " m.SHIPREQUESTNAME = m2.SHIPREQUESTNAME\r\n" + "LEFT JOIN MATERIALSPEC m3 ON\r\n" + " m.MATERIALSPECNAME = m3.MATERIALSPECNAME\r\n" + "LEFT JOIN SDK_SPEC ss ON\r\n" + " ss.SDK_ID = m.SDK_ID\r\n" + "LEFT JOIN MATERIALUNIT m4 ON\r\n" + " m.UNIT = m4.FNUMBER\r\n" + "LEFT JOIN MATERIALPACKING m5 ON\r\n" + " m.SHIPREQUESTNAME = m5.SHIPREQUESTNAME\r\n" + " AND m.SHIPREQUESTDETAILNAME = m5.SHIPREQUESTDETAILNAME\r\n" + " AND m5.STOCKSTATE = 'Stocked'\r\n" + "WHERE 1= 1 \r\n" + // " AND m2.SHIPREQUESTTYPE <> '4C'\r\n" + " AND m2.SHIPREQUESTNAME = :SHIPREQUESTNAME\r\n" + " AND m2.SHIPREQUESTSTATE <> 'Completed'\r\n" + "GROUP BY\r\n" + " m.MATERIALSPECNAME ,\r\n" + " m.SDK_ID ,\r\n" + " m.PHASE ,\r\n" + " m.REQUESTQUANTITY ,\r\n" + " m.ASSIGNEDQUANTITY ,\r\n" + " m3.DESC_CN ,\r\n" + " m4.FNAME ,\r\n" + " ss.SPECNAME ,\r\n" + " m.SHIPREQUESTNAME ,\r\n" + " m.SHIPREQUESTDETAILNAME"; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME",shipRequestName); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } return AjaxResult.me().setResultObj(list); } @RequestMapping(value = "/ReservePackingInfo2", method = RequestMethod.POST) public AjaxResult ReservePackingInfo2(@RequestBody JSONObject in ) { MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String user = materialShipRequest.getUser(); String erpfactory2 = materialShipRequest.getErpfactory(); List> zdbh = InvoiceServiceImpl.ZDBH(shipRequestName,user,erpfactory2); // if (zdbh == null || zdbh.size() < 1) { // return AjaxResult.me().setSuccess(false).setMessage("备货失败"); // } return AjaxResult.me().setResultObj(zdbh); } /** * 查询单据时自动备货 * @param in * @return */ @Transactional @RequestMapping(value = "/ReservePackingInfo", method = RequestMethod.POST) public AjaxResult ReservePackingInfo(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String user = materialShipRequest.getUser(); String erpfactory2 = materialShipRequest.getErpfactory(); //查询所有单号行项目明细 //只查询未拣配完成的单号行项目明细。zd.2024.9.26 String sql=" SELECT\r\n" + " *\r\n" + "FROM\r\n" + " (\r\n" + " SELECT\r\n" + " m.SITENAME,\r\n" + " m.ERPFACTORY,\r\n" + " m.SHIPREQUESTNAME ,\r\n" + " SUM(m.REQUESTQUANTITY - m.ASSIGNEDQUANTITY) MINUSQTY,\r\n" + " CASE WHEN U.USERNAME IS NULL THEN m.CAREER_ASSISTANCE ELSE U.USERNAME END CAREER_ASSISTANCE,\r\n" + " m.CUSTOMERNO,\r\n" + " SUM(m.REQUESTQUANTITY - m.SALEOUTQUANTITY) MQTY,\r\n" + " m.MATERIALSPECNAME ,\r\n" + " m.SDK_ID ,\r\n" + " m.PHASE,\r\n" + " T.SJMS ,\r\n" + " T.SHIPREQUESTTYPE ,\r\n" + " M2.COMMONMATERIALFLAG\r\n" + " FROM\r\n" + " MATERIALSHIPREQUESTDETAIL m\r\n" + " LEFT JOIN MATERIALSHIPREQUEST T ON\r\n" + " m.SHIPREQUESTNAME = T.SHIPREQUESTNAME\r\n" + " LEFT JOIN MATERIALSPEC M2 ON\r\n" + " m.MATERIALSPECNAME = M2.MATERIALSPECNAME\r\n" + " LEFT JOIN NC_USER U ON m.CAREER_ASSISTANCE = U.USERID \r\n" + " WHERE\r\n" + " m.SHIPREQUESTNAME = :SHIPREQUESTNAME\r\n" + " AND T.ERPFACTORY = :ERPFACTORY\r\n" + " GROUP BY\r\n" + " m.SITENAME,\r\n" + " m.ERPFACTORY,\r\n" + " m.SHIPREQUESTNAME ,\r\n" + " m.MATERIALSPECNAME ,\r\n" + " m.SDK_ID ,\r\n" + " m.PHASE ,\r\n" + " U.USERNAME,\r\n" + " m.CUSTOMERNO,\r\n" + " T.SJMS ,\r\n" + " T.SHIPREQUESTTYPE ,m.CAREER_ASSISTANCE,\r\n" + " M2.COMMONMATERIALFLAG\r\n" + " ORDER BY\r\n" + " m.MATERIALSPECNAME ,\r\n" + " m.SDK_ID ,\r\n" + " m.PHASE)\r\n" + "WHERE\r\n" + " MQTY>0 "; Map bindMap = new HashMap(); bindMap.put("SHIPREQUESTNAME",shipRequestName); bindMap.put("ERPFACTORY",erpfactory2); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap); if(Objects.isNull(list) || list.isEmpty()) { throw new GlobalException("未找到对应的数据!"); } List> resList = new ArrayList> (); List> tempList = new ArrayList> (); for (Map map : list) { String sdk_id = map.get("SDK_ID") == null ? "" : map.get("SDK_ID").toString(); String materialSpecName = map.get("MATERIALSPECNAME") == null ? "" : map.get("MATERIALSPECNAME").toString(); String phase = map.get("PHASE") == null ? "" : map.get("PHASE").toString(); String erpfactory = map.get("ERPFACTORY") == null ? "" : map.get("ERPFACTORY").toString(); String siteName = map.get("SITENAME") == null ? "" : map.get("SITENAME").toString(); String MINUSQTY = map.get("MINUSQTY") == null ? "" : map.get("MINUSQTY").toString(); String SJMS = map.get("SJMS") == null ? "" : map.get("SJMS").toString(); String CAREER_ASSISTANCE = map.get("CAREER_ASSISTANCE") == null ? "" : map.get("CAREER_ASSISTANCE").toString(); String CUSTOMERNO = map.get("CUSTOMERNO") == null ? "" : map.get("CUSTOMERNO").toString(); String COMMONMATERIALFLAG = map.get("COMMONMATERIALFLAG") == null ? "" : map.get("COMMONMATERIALFLAG").toString(); if ("Y".equals(COMMONMATERIALFLAG)) { CUSTOMERNO = ""; CAREER_ASSISTANCE = ""; } BigDecimal minQty = new BigDecimal(MINUSQTY);//剩余需求数量 //汇总满足条件的box String boxList = "SELECT\r\n" + " A.MATERIALSPECNAME ,\r\n" + " A.PHASE ,\r\n" + " A.SDK_ID ,\r\n" + " to_char(A.MAKEDATE, 'yyyymmdd') JSSJ,\r\n" + " SUM(A.MATERIALQUANTITY) MATERIALQUANTITY\r\n" + "FROM\r\n" + " MATERIALPACKING A\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " A.SDK_ID = SS.SDK_ID \r\n" + " LEFT JOIN BS_ERPLOCATION B ON A.ERPLOCATION = B.ERPLOCATIONNAME \r\n" + "WHERE\r\n" + " A.MATERIALSPECNAME = :MATERIALSPECNAME\r\n" + " AND A.SITENAME =:SITENAME\r\n" + " AND A.MATERIALPACKINGTYPE = 'Box'\r\n" + " AND (:SDK_ID IS NULL\r\n" + " OR A.SDK_ID = :SDK_ID)\r\n" + " AND (:SJMS IS NULL\r\n" + " OR A.MATERIALQUANTITY * 1000 / SUBSTR( SS.SPECNAME , 1, INSTR( SS.SPECNAME , 'mm') -1 ) >= :SJMS)\r\n" + " AND (:PHASE IS NULL\r\n" + " OR A.PHASE = :PHASE)\r\n" + // " AND (:CAREER_ASSISTANCE IS NULL AND A.CAREER_ASSISTANCE IS NULL)\r\n" + // " AND (:CAREER_ASSISTANCE IS NULL OR (:CAREER_ASSISTANCE IS NOT NULL AND A.CAREER_ASSISTANCE = :CAREER_ASSISTANCE))\r\n" + " \r\n" + // " AND (:CUSTOMERNO IS NULL AND A.CUSTOMNO IS NULL)\r\n" + // " AND (:CUSTOMERNO IS NULL OR (:CUSTOMERNO IS NOT NULL AND A.CUSTOMNO IN ( SELECT CUSTOMERNO FROM CUSTOMERGROUP T WHERE T.CUSTOMERGROUPNO IN ( \r\n" + // " SELECT C.CUSTOMERGROUPNO FROM CUSTOMERGROUP C WHERE C.CUSTOMERNO = :CUSTOMERNO) ) ) )\r\n" + " \r\n" + " AND A.ERPFACTORY = :ERPFACTORY\r\n" + " AND B.ZDBHFLAG = 'Y'\r\n" + " AND A.SHIPREQUESTNAME IS NULL\r\n" + " AND A.SHIPREQUESTDETAILNAME IS NULL\r\n" + " AND A.STOCKSTATE = 'Stocked'\r\n" + " AND A.PACKINGSTATE = 'Released'\r\n" + " AND A.HOLDSTATE = 'N'\r\n" + " AND A.PACKINGGRADE IN ('OK', 'OKEY')\r\n" + " AND A.MATERIALQUANTITY <> '0'\r\n" + " AND (A.NPFLAG <> 'Y'\r\n" + " OR A.NPFLAG IS NULL)\r\n" + " AND (A.ETCSTATE IS NULL\r\n" + " OR A.ETCSTATE = 'EtcIn')\r\n" + " AND A.OQARESULTSTATE <> 'PREOQA'\r\n" + " AND to_char(A.EXPIRINGDATE, 'yyyymmdd') >= to_char(SYSDATE, 'yyyymmdd')\r\n" + "GROUP BY\r\n" + " A.MATERIALSPECNAME ,\r\n" + " A.PHASE ,\r\n" + " A.SDK_ID ,\r\n" + " to_char(A.MAKEDATE, 'yyyymmdd')\r\n" + "ORDER BY\r\n" + " to_char(A.MAKEDATE, 'yyyymmdd')"; Map bindMap1 = new HashMap(); bindMap1.put("SHIPREQUESTNAME",shipRequestName); bindMap1.put("MATERIALSPECNAME",materialSpecName); bindMap1.put("SDK_ID",sdk_id); bindMap1.put("PHASE",phase); bindMap1.put("ERPFACTORY",erpfactory); bindMap1.put("SITENAME",siteName); bindMap1.put("CAREER_ASSISTANCE",CAREER_ASSISTANCE); bindMap1.put("CUSTOMERNO",CUSTOMERNO); bindMap1.put("SJMS",SJMS); List> list2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(boxList, bindMap1); for (Map map2 : list2) { String string = map2.get("MATERIALQUANTITY").toString(); BigDecimal pcQty = new BigDecimal(string);//批次数量 String jssj = map2.get("JSSJ").toString(); bindMap1.put("JSSJ", jssj); //如果需求数量大于批次数量,则要求全部备货。小于则表示只能备货这一批次内数量,并且将批次结果传递到前端可以扫描备货 int compareTo = minQty.compareTo(pcQty); if (compareTo >= 0) {//要求该批次全备货 minQty = minQty.subtract(pcQty); //1.备货 //2.更新单据数量与剩余数量比较 String sqll = "SELECT\r\n" + " A.MATERIALPACKINGNAME ,\r\n" + " A.SITENAME\r\n" + "FROM\r\n" + " MATERIALPACKING A\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " A.SDK_ID = SS.SDK_ID \r\n" + " LEFT JOIN BS_ERPLOCATION B ON A.ERPLOCATION = B.ERPLOCATIONNAME \r\n" + "WHERE\r\n" + " A.MATERIALSPECNAME = :MATERIALSPECNAME\r\n" + // " AND A.MATERIALSPECNAME = B.MATERIALSPECNAME\r\n" + // " AND A.SITENAME = B.SITENAME\r\n" + " AND A.SITENAME =:SITENAME\r\n" + " AND A.MATERIALPACKINGTYPE = 'Box'\r\n" + " AND (:SDK_ID IS NULL\r\n" + " OR A.SDK_ID = :SDK_ID)\r\n" + //收卷米数 " AND (:SJMS IS NULL\r\n" + " OR A.MATERIALQUANTITY * 1000 / SUBSTR( SS.SPECNAME , 1, INSTR( SS.SPECNAME , 'mm') -1 ) >= :SJMS)\r\n" + " AND (:PHASE IS NULL\r\n" + " OR A.PHASE = :PHASE)\r\n" + // " AND (:CAREER_ASSISTANCE IS NULL AND A.CAREER_ASSISTANCE IS NULL)\r\n" + // " AND (:CAREER_ASSISTANCE IS NULL OR (:CAREER_ASSISTANCE IS NOT NULL AND A.CAREER_ASSISTANCE = :CAREER_ASSISTANCE))\r\n" + " \r\n" + // " AND (:CUSTOMERNO IS NULL AND A.CUSTOMNO IS NULL)\r\n" + // " AND (:CUSTOMERNO IS NULL OR (:CUSTOMERNO IS NOT NULL AND A.CUSTOMNO IN ( SELECT CUSTOMERNO FROM CUSTOMERGROUP T WHERE T.CUSTOMERGROUPNO IN (\r\n" + // " SELECT C.CUSTOMERGROUPNO FROM CUSTOMERGROUP C WHERE C.CUSTOMERNO = :CUSTOMERNO) )))\r\n" + " \r\n" + " AND A.ERPFACTORY = :ERPFACTORY\r\n" + " AND B.ZDBHFLAG = 'Y'\r\n" + " AND A.SHIPREQUESTNAME IS NULL\r\n" + " AND A.SHIPREQUESTDETAILNAME IS NULL\r\n" + " AND A.STOCKSTATE = 'Stocked'\r\n" + " AND A.PACKINGSTATE = 'Released'\r\n" + " AND A.HOLDSTATE = 'N'\r\n" + " AND A.PACKINGGRADE IN ('OK', 'OKEY')\r\n" + " AND A.MATERIALQUANTITY <> '0'\r\n" + " AND (A.NPFLAG <> 'Y'\r\n" + " OR A.NPFLAG IS NULL)\r\n" + " AND (A.ETCSTATE IS NULL\r\n" + " OR A.ETCSTATE = 'EtcIn')\r\n" + " AND A.OQARESULTSTATE <> 'PREOQA'\r\n" + " AND to_char(A.EXPIRINGDATE, 'yyyymmdd') >= to_char(SYSDATE, 'yyyymmdd')\r\n" + " AND to_char(A.MAKEDATE, 'yyyymmdd') = :JSSJ"; List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqll, bindMap1); for (Map map3 : queryForList) { MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",map3.get("MATERIALPACKINGNAME").toString()); com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking selectByKey = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(materialPackingKey); try { InvoiceServiceImpl.Reserve(selectByKey, shipRequestName,materialSpecName,sdk_id,phase, "Assign", siteName, user,"","Y"); } catch (CustomException e) { e.printStackTrace(); AjaxResult.me().setSuccess(false).setMessage(e.toString()); } } } else { //记录批次并传递回前端查询 String resSql = "SELECT\r\n" + " A.MATERIALPACKINGNAME ,A.MATERIALSPECNAME,A.MATERIALQUANTITY, CASE WHEN MATERIALQUANTITY2 > 0 THEN A.MATERIALQUANTITY2 " + " ELSE A.MATERIALQUANTITY END MATERIALQUANTITY2 ,A.AREANAME ,A.SHELFNAME ,\r\n" + " A.SDK_ID ,SS.SPECNAME,A.PHASE,\r\n" + " TO_CHAR(A.MAKEDATE, 'YYYY-MM-DD') RECEIVETIME,\r\n" + " be.DESCRIPTION ERPLOCATION ,\r\n" + " s.DESCRIPTION LOCATIONNAME ,\r\n" + " A.CHARGE ,\r\n" + " 'N' BHFLG, \r\n" + " 'N' IS_CHECK\r\n" + "FROM\r\n" + " MATERIALPACKING A\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " A.SDK_ID = SS.SDK_ID\r\n" + "LEFT JOIN MATERIALSPEC B ON\r\n" + " A.MATERIALSPECNAME = B.MATERIALSPECNAME\r\n" + "LEFT JOIN BS_ERPLOCATION be ON\r\n" + " A.ERPLOCATION = be.ERPLOCATIONNAME\r\n" + "LEFT JOIN STORAGESPEC s ON\r\n" + " A.LOCATIONNAME = s.STORAGENAME\r\n" + " AND s.ERPLOCATION = A.ERPLOCATION AND A.ERPFACTORY = s.ERPFACTORY\r\n" + "WHERE\r\n" + " A.MATERIALSPECNAME = :MATERIALSPECNAME\r\n" + " AND A.MATERIALSPECNAME = B.MATERIALSPECNAME\r\n" + " AND A.SITENAME = B.SITENAME\r\n" + " AND A.SITENAME =:SITENAME\r\n" + " AND A.MATERIALPACKINGTYPE = 'Box'\r\n" + " AND (:SDK_ID IS NULL\r\n" + " OR A.SDK_ID = :SDK_ID)\r\n" + //收卷米数 " AND (:SJMS IS NULL\r\n" + " OR A.MATERIALQUANTITY * 1000 / SUBSTR( SS.SPECNAME , 1, INSTR( SS.SPECNAME , 'mm') -1 ) >= :SJMS)\r\n" + " AND (:PHASE IS NULL\r\n" + " OR A.PHASE = :PHASE)\r\n" + // " AND (:CAREER_ASSISTANCE IS NULL AND A.CAREER_ASSISTANCE IS NULL)\r\n" + // " AND (:CAREER_ASSISTANCE IS NULL OR (:CAREER_ASSISTANCE IS NOT NULL AND A.CAREER_ASSISTANCE = :CAREER_ASSISTANCE))\r\n" + " \r\n" + // " AND (:CUSTOMERNO IS NULL AND A.CUSTOMNO IS NULL)\r\n" + // " AND (:CUSTOMERNO IS NULL OR (:CUSTOMERNO IS NOT NULL AND A.CUSTOMNO IN ( SELECT CUSTOMERNO FROM CUSTOMERGROUP T WHERE T.CUSTOMERGROUPNO IN (\r\n" + // " SELECT C.CUSTOMERGROUPNO FROM CUSTOMERGROUP C WHERE C.CUSTOMERNO = :CUSTOMERNO) )))\r\n" + " \r\n" + " AND A.ERPFACTORY = :ERPFACTORY\r\n" + " AND be.ZDBHFLAG = 'Y'\r\n" + " AND A.SHIPREQUESTNAME IS NULL\r\n" + " AND A.SHIPREQUESTDETAILNAME IS NULL\r\n" + " AND A.STOCKSTATE = 'Stocked'\r\n" + " AND A.PACKINGSTATE = 'Released'\r\n" + " AND A.HOLDSTATE = 'N'\r\n" + " AND A.PACKINGGRADE IN ('OK', 'OKEY')\r\n" + " AND A.MATERIALQUANTITY <> '0'\r\n" + " AND (A.NPFLAG <> 'Y'\r\n" + " OR A.NPFLAG IS NULL)\r\n" + " AND (A.ETCSTATE IS NULL\r\n" + " OR A.ETCSTATE = 'EtcIn')\r\n" + " AND A.OQARESULTSTATE <> 'PREOQA'\r\n" + " AND to_char(A.EXPIRINGDATE, 'yyyymmdd') >= to_char(SYSDATE, 'yyyymmdd')\r\n" + " AND to_char(A.MAKEDATE, 'yyyymmdd') = :JSSJ"; List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(resSql, bindMap1); // tempList = new ArrayList> (); tempList.addAll(queryForList); break; } } } String ressSql = "SELECT\r\n" + " A.MATERIALPACKINGNAME ,A.MATERIALSPECNAME,A.MATERIALQUANTITY, CASE WHEN MATERIALQUANTITY2 > 0 THEN A.MATERIALQUANTITY2 " + " ELSE A.MATERIALQUANTITY END MATERIALQUANTITY2,A.AREANAME ,A.SHELFNAME ,\r\n" + " A.CHARGE ,\r\n" + " TO_CHAR(A.MAKEDATE, 'YYYY-MM-DD') RECEIVETIME,A.SDK_ID,A.PHASE,SS.SPECNAME,\r\n" + " be.DESCRIPTION ERPLOCATION,\r\n" + " s.DESCRIPTION LOCATIONNAME,\r\n" + " 'Y' BHFLG, A.SHIPREQUESTNAME,A.SHIPREQUESTDETAILNAME, \r\n" + " 'N' IS_CHECK\r\n" + "FROM\r\n" + " MATERIALPACKING A\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " A.SDK_ID = SS.SDK_ID\r\n" + "LEFT JOIN \r\n" + " MATERIALSPEC B ON\r\n" + " A.MATERIALSPECNAME = B.MATERIALSPECNAME\r\n" + "LEFT JOIN BS_ERPLOCATION be ON\r\n" + " A.ERPLOCATION = be.ERPLOCATIONNAME\r\n" + "LEFT JOIN STORAGESPEC s ON\r\n" + " A.LOCATIONNAME = s.STORAGENAME AND A.ERPLOCATION = s.ERPLOCATION AND A.ERPFACTORY = s.ERPFACTORY \r\n" + "WHERE\r\n" + " 1 = 1\r\n" + " AND A.MATERIALSPECNAME = B.MATERIALSPECNAME\r\n" + " AND A.SITENAME = B.SITENAME\r\n" + " AND A.SITENAME =:SITENAME\r\n" + " AND A.SHIPREQUESTNAME = :SHIPREQUESTNAME\r\n" + " AND A.STOCKSTATE = 'Stocked'\r\n" + " AND A.PACKINGSTATE = 'Released'\r\n" + " AND A.HOLDSTATE = 'N'\r\n" + " AND A.PACKINGGRADE IN ('OK', 'OKEY')\r\n" + " AND A.MATERIALQUANTITY <> '0'\r\n" + " AND (A.NPFLAG <> 'Y'\r\n" + " OR A.NPFLAG IS NULL)\r\n" + " AND (A.ETCSTATE IS NULL\r\n" + " OR A.ETCSTATE = 'EtcIn')\r\n" + " AND A.OQARESULTSTATE <> 'PREOQA'\r\n" + " AND to_char(A.EXPIRINGDATE, 'yyyymmdd') >= to_char(SYSDATE, 'yyyymmdd')"; Map hashMap = new HashMap (); hashMap.put("SITENAME", "SDK"); hashMap.put("SHIPREQUESTNAME", shipRequestName); List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(ressSql, hashMap); resList.addAll(queryForList); resList.addAll(tempList); //根据规则自动筛选当前满足条件的库存 return AjaxResult.me().setResultObj(resList); } /** * 非先进先出备货 * @param in * @return */ @Transactional @RequestMapping(value = "/getReservePackingInfo", method = RequestMethod.POST) public AjaxResult getReservePackingInfo(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = materialShipRequest.getShipRequestName() == null ? "" : materialShipRequest.getShipRequestName(); String user = materialShipRequest.getUser(); String ressSql = "SELECT\r\n" + " A.MATERIALPACKINGNAME ,A.MATERIALSPECNAME,A.MATERIALQUANTITY, CASE WHEN MATERIALQUANTITY2 > 0 THEN A.MATERIALQUANTITY2 " + " ELSE A.MATERIALQUANTITY END MATERIALQUANTITY2,A.AREANAME ,A.SHELFNAME ,\r\n" + " A.CHARGE ,\r\n" + " TO_CHAR(A.RECEIVETIME, 'YYYY-MM-DD') RECEIVETIME,A.SDK_ID,A.PHASE,\r\n" + " be.DESCRIPTION ERPLOCATION,\r\n" + " s.DESCRIPTION LOCATIONNAME,\r\n" + " 'Y' BHFLG, A.SHIPREQUESTNAME,A.SHIPREQUESTDETAILNAME, \r\n" + " 'N' IS_CHECK\r\n" + "FROM\r\n" + " MATERIALPACKING A\r\n" + "LEFT JOIN SDK_SPEC SS ON\r\n" + " A.SDK_ID = SS.SDK_ID\r\n" + "LEFT JOIN \r\n" + " MATERIALSPEC B ON\r\n" + " A.MATERIALSPECNAME = B.MATERIALSPECNAME\r\n" + "LEFT JOIN BS_ERPLOCATION be ON\r\n" + " A.ERPLOCATION = be.ERPLOCATIONNAME\r\n" + "LEFT JOIN STORAGESPEC s ON\r\n" + " A.LOCATIONNAME = s.STORAGENAME AND A.ERPLOCATION = s.ERPLOCATION AND A.ERPFACTORY = s.ERPFACTORY \r\n" + "WHERE\r\n" + " 1 = 1\r\n" + " AND A.MATERIALSPECNAME = B.MATERIALSPECNAME\r\n" + " AND A.SITENAME = B.SITENAME\r\n" + " AND A.SITENAME =:SITENAME\r\n" + " AND A.SHIPREQUESTNAME = :SHIPREQUESTNAME\r\n" + " AND A.STOCKSTATE = 'Stocked'\r\n" + " AND A.PACKINGSTATE = 'Released'\r\n" + " AND A.HOLDSTATE = 'N'\r\n" + // " AND A.PACKINGGRADE IN ('OK', 'OKEY')\r\n" + " AND A.MATERIALQUANTITY <> '0'\r\n" + " AND (A.NPFLAG <> 'Y'\r\n" + " OR A.NPFLAG IS NULL)\r\n" + " AND (A.ETCSTATE IS NULL\r\n" + " OR A.ETCSTATE = 'EtcIn')\r\n" + " AND A.OQARESULTSTATE <> 'PREOQA'\r\n" + " ORDER BY A.MATERIALSPECNAME,A.SDK_ID,A.PHASE, A.RECEIVETIME"; Map hashMap = new HashMap (); hashMap.put("SITENAME", "SDK"); hashMap.put("SHIPREQUESTNAME", shipRequestName); List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(ressSql, hashMap); return AjaxResult.me().setResultObj(queryForList); } /** * 备货或者取消 * @param in * @return */ @Transactional @RequestMapping(value = "/DessignOrAssign", method = RequestMethod.POST) public AjaxResult DessignOrAssign(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String type = materialShipRequest.getType();//Assign 备货 Dessign 解绑 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()) { return AjaxResult.me().setSuccess(false).setMessage("未找到对应的数据!"); } String judge = "SELECT\r\n" + " m.SDK_ID,MATERIALSPECNAME,\r\n" + " m.PHASE,\r\n" + " CASE WHEN MATERIALQUANTITY2 > 0 THEN MATERIALQUANTITY2 " + " ELSE MATERIALQUANTITY END MATERIALQUANTITY2 , " + " m.SHIPREQUESTNAME,\r\n" + " m.STOCKSTATE,\r\n" + " m.PACKINGGRADE ,\r\n" + " m.SHELFNAME ,\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); 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(materialShipRequest.getSdk_id().toString())) ? "" : 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(); String shelfName = queryForList2.get(0).get("SHELFNAME") == null ? "" : queryForList2.get(0).get("SHELFNAME").toString(); if (!"Stocked".equals(stockState)) { return AjaxResult.me().setSuccess(false).setMessage("条码不在库!"); } if (!"OK".equals(packinggrade)) { return AjaxResult.me().setSuccess(false).setMessage("批次不合格!"); } if (!"1".equals(exp)) { return AjaxResult.me().setSuccess(false).setMessage("批次已过期!"); } if (!"END".equals(oqaresultstate)) { return AjaxResult.me().setSuccess(false).setMessage("未完成质检!"); } // if (!"".equals(invoice)) { // return AjaxResult.me().setSuccess(false).setMessage("条码已被" + invoice + "备货!"); // } // if(!"".equals(shelfName) && !"B".equals(shelfName.substring(0, 1))) { // return AjaxResult.me().setSuccess(false).setMessage("产品在立库上,请先下架再出库!"); // } } else { return AjaxResult.me().setSuccess(false).setMessage("未找到对应的条码!"); } 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) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!"); } } } else if ("BLSQ4K".equals(shipRequestType)) {//领料 if (dy0 < 0) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!"); } } else if ("CKSQ4I".equals(shipRequestType)) { //其他出库 if (dy0 < 0) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!"); } } else if ("4C".equals(shipRequestType)) { if (dy0 <= 0) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("销售不允许超发!"); } }else { return AjaxResult.me().setSuccess(false).setMessage("单据类型不正确!"); } } else if ("Dessign".equals(type)) { } try { InvoiceServiceImpl.Reserve(selectByKey, shipRequestName, materialSpecName,sdk_id, phase, type, "SDK", user,materialQuantity2,"Y"); } catch (CustomException e) { e.printStackTrace(); return AjaxResult.me().setSuccess(false).setMessage(e.toString()); } return AjaxResult.me().setSuccess(true).setMessage("备货成功"); } /** * 备货或者取消 * @param in * @return */ @Transactional @RequestMapping(value = "/UnFIFODessignOrAssign", method = RequestMethod.POST) public AjaxResult UnFIFODessignOrAssign(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName2 = materialShipRequest.getShipRequestName(); //根据单据类型判断生产订单类型,如果是领料单且单据类型是复卷和返工的不卡控批次质量状态 String dTypeSql = "SELECT M.PRODUCTORDERTYPE,M.PRODUCTORDERNO FROM MATERIALSHIPREQUEST M WHERE M.SHIPREQUESTNAME = :SHIPREQUESTNAME"; Map hashMap3 = new HashMap (); hashMap3.put("SHIPREQUESTNAME", shipRequestName2); String productOrderType = ""; String productOrderNo = ""; // 生产订单 List> queryForListW = new ArrayList<>(); List> queryForList3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(dTypeSql, hashMap3); if (queryForList3 != null && queryForList3.size() > 0) { productOrderType = queryForList3.get(0).get("PRODUCTORDERTYPE") == null ? "" :queryForList3.get(0).get("PRODUCTORDERTYPE").toString(); productOrderNo = queryForList3.get(0).get("PRODUCTORDERNO") == null ? "" :queryForList3.get(0).get("PRODUCTORDERNO").toString(); // 查询工单维护表 是否有对应的生产订单 String workSql = "SELECT w.WORKORDER FROM WORKORDER w WHERE w.WORKORDER =:WORKORDER"; Map hashMapW = new HashMap (); hashMapW.put("WORKORDER", productOrderNo); queryForListW = IDMFrameServiceProxy.getSqlTemplate().queryForList(workSql, hashMapW); } String type = materialShipRequest.getType();//Assign 备货 Dessign 解绑 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 ? "" : materialShipRequest.getSdk_id(); String phase = materialShipRequest.getPhase() == null ? "" : materialShipRequest.getPhase(); String user = materialShipRequest.getUser(); //根据条码查询库存状态 String judge = "SELECT\r\n" + " m.SDK_ID,MATERIALSPECNAME,\r\n" + " m.PHASE,\r\n" + " CASE WHEN MATERIALQUANTITY2 > 0 THEN MATERIALQUANTITY2 " + " ELSE MATERIALQUANTITY END 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); 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 ? "" : 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)) { return AjaxResult.me().setSuccess(false).setMessage("条码不在库!"); } if (!"OK".equals(packinggrade) && (!"55A2-02".equals(productOrderType) && !"55A2-Cxx-08".equals(productOrderType) && !"4455-Cxx-10".equals(productOrderType) && !"4455-Cxx-01".equals(productOrderType) && !"5X-Cxx-07".equals(productOrderType)) && (queryForListW == null || queryForListW.size() < 1)) {//复卷,返工工单 return AjaxResult.me().setSuccess(false).setMessage("单据类型不为复卷或 返工, 引膜领用和研发领用, 批次不合格不能出库!"); } if (!"1".equals(exp) && (!"55A2-02".equals(productOrderType) && !"55A2-Cxx-08".equals(productOrderType) && !"4455-Cxx-10".equals(productOrderType) && !"4455-Cxx-01".equals(productOrderType) && !"5X-Cxx-07".equals(productOrderType)) && (queryForListW == null || queryForListW.size() < 1)) {//复卷,返工工单 return AjaxResult.me().setSuccess(false).setMessage("单据类型不为复卷或 返工, 引膜领用和研发领用, 批次已过期!"); } if (!"END".equals(oqaresultstate)) { return AjaxResult.me().setSuccess(false).setMessage("未完成质检!"); } // if (!"".equals(invoice)) { // return AjaxResult.me().setSuccess(false).setMessage("条码已被" + invoice + "备货!"); // } if (!"".equals(invoice) && "Assign".equals(type)) { return AjaxResult.me().setSuccess(false).setMessage("条码已被" + invoice + "备货!"); } } else { return AjaxResult.me().setSuccess(false).setMessage("未找到对应的条码!"); } //查询单据类型 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()) { return AjaxResult.me().setSuccess(false).setMessage("条码与单据无法匹配!"); } 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 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 ("NLCC".equals(shipRequestType)) {//调拨单 // if ( "4Y-Cxx-03".equals(shipRequestDetailType)) { if (dy0 < 0) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!"); } // } } else if ("01".equals(shipRequestType)) {//领料 if (dy0 < 0) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!"); } } // else if ("CKSQ4I".equals(shipRequestType)) { //其他出库 // if (dy0 < 0) {//只能超发一个 // return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!"); // } // } else if ("OEM".equals(shipRequestType)) { //委外出库 if (dy0 < 0) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!"); } } else if (shipRequestType.contains("ZLF")) { if (dy0 < 0) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("销售不允许超发!"); } }else { return AjaxResult.me().setSuccess(false).setMessage("单据类型不正确!"); } } else if ("Dessign".equals(type)) { } try { InvoiceServiceImpl.Reserve(selectByKey, shipRequestName, materialSpecName,sdk_id, phase, type, "SDK", user,materialQuantity2,"N"); } catch (CustomException e) { e.printStackTrace(); AjaxResult.me().setSuccess(false).setMessage(e.toString()); } return AjaxResult.me().setSuccess(true).setMessage("备货或解绑成功"); } /** * BOPP备货取消 * @param in * @return */ @Transactional @RequestMapping(value = "/BOPPDessignOrAssign", method = RequestMethod.POST) public AjaxResult BOPPDessignOrAssign(@RequestBody JSONObject in ){ MaterialshipRequest materialShipRequest = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName2 = materialShipRequest.getShipRequestName(); //根据单据类型判断生产订单类型,如果是领料单且单据类型是复卷和返工的不卡控批次质量状态 String dTypeSql = "SELECT M.PRODUCTORDERTYPE FROM MATERIALSHIPREQUEST M WHERE M.SHIPREQUESTNAME = :SHIPREQUESTNAME"; Map hashMap3 = new HashMap (); hashMap3.put("SHIPREQUESTNAME", shipRequestName2); String productOrderType = ""; List> queryForList3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(dTypeSql, hashMap3); if (queryForList3 != null && queryForList3.size() > 0) { productOrderType = queryForList3.get(0).get("PRODUCTORDERTYPE") == null ? "" :queryForList3.get(0).get("PRODUCTORDERTYPE").toString(); } String type = materialShipRequest.getType();//Assign 备货 Dessign 解绑 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 ? "" : materialShipRequest.getSdk_id(); String phase = materialShipRequest.getPhase() == null ? "" : materialShipRequest.getPhase(); String user = materialShipRequest.getUser(); //根据条码查询库存状态 String judge = "SELECT\r\n" + " m.SDK_ID,MATERIALSPECNAME,ERPLOCATION,\r\n" + " m.PHASE,\r\n" + " CASE WHEN MATERIALQUANTITY2 > 0 THEN MATERIALQUANTITY2 " + " ELSE MATERIALQUANTITY END 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); List> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(judge, hashMap2); String erpLocation = ""; if (queryForList2 != null && queryForList2.size() > 0) { erpLocation = queryForList2.get(0).get("ERPLOCATION") == null ? "" : queryForList2.get(0).get("ERPLOCATION").toString(); materialSpecName = queryForList2.get(0).get("MATERIALSPECNAME") == null ? "" : queryForList2.get(0).get("MATERIALSPECNAME").toString(); sdk_id = queryForList2.get(0).get("SDK_ID") == null ? "" : 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)) { return AjaxResult.me().setSuccess(false).setMessage("条码不在库!"); } if (!"OK".equals(packinggrade) && (!"55A2-02".equals(productOrderType) && !"55A2-Cxx-08".equals(productOrderType) && !"4455-Cxx-10".equals(productOrderType) && !"455-Cxx-01".equals(productOrderType) && !"5X-Cxx-07".equals(productOrderType))) {//复卷,返工工单 return AjaxResult.me().setSuccess(false).setMessage("单据类型不为复卷或 返工, 引膜领用和研发领用, 批次不合格不能出库!"); } if (!"1".equals(exp) && (!"55A2-02".equals(productOrderType) && !"55A2-Cxx-08".equals(productOrderType) && !"4455-Cxx-10".equals(productOrderType) && !"455-Cxx-01".equals(productOrderType) && !"5X-Cxx-07".equals(productOrderType))) {//复卷,返工工单 return AjaxResult.me().setSuccess(false).setMessage("单据类型不为复卷或 返工, 引膜领用和研发领用, 批次已过期!"); } if (!"END".equals(oqaresultstate)) { return AjaxResult.me().setSuccess(false).setMessage("未完成质检!"); } if (!"".equals(invoice)) { return AjaxResult.me().setSuccess(false).setMessage("条码已被" + invoice + "备货!"); } } else { return AjaxResult.me().setSuccess(false).setMessage("未找到对应的条码!"); } //查询单据类型 String sql = "SELECT\r\n" + " m.SHIPREQUESTTYPE ,\r\n" + " m.SHIPREQUESTDETAILTYPE,\r\n" + " t.MATERIALSPECNAME ,t.ERPLOCATION ,\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,t.ERPLOCATION \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()) { return AjaxResult.me().setSuccess(false).setMessage("条码与单据无法匹配!"); } String shipRequestType = queryForList.get(0).get("SHIPREQUESTTYPE").toString(); String djErpLocation = queryForList.get(0).get("ERPLOCATION") == null ? "" : queryForList.get(0).get("ERPLOCATION").toString(); if (!erpLocation.equals(djErpLocation)) { return AjaxResult.me().setSuccess(false).setMessage("单据指定仓库和批次不一致 单据" + djErpLocation + "批次" + erpLocation); } String shipRequestDetailType = queryForList.get(0).get("SHIPREQUESTDETAILTYPE").toString(); String minusQty = queryForList.get(0).get("MINUSQTY").toString(); 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) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!"); } } } else if ("BLSQ4K".equals(shipRequestType)) {//领料 if (dy0 < 0) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!"); } } else if ("CKSQ4I".equals(shipRequestType)) { //其他出库 if (dy0 < 0) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!"); } } else if ("4C".equals(shipRequestType)) { if (dy0 < 0) {//只能超发一个 return AjaxResult.me().setSuccess(false).setMessage("销售不允许超发!"); } }else { return AjaxResult.me().setSuccess(false).setMessage("单据类型不正确!"); } } else if ("Dessign".equals(type)) { } try { InvoiceServiceImpl.Reserve(selectByKey, shipRequestName, materialSpecName,sdk_id, phase, type, "SDK", user,materialQuantity2,"N"); } catch (CustomException e) { e.printStackTrace(); AjaxResult.me().setSuccess(false).setMessage(e.toString()); } return AjaxResult.me().setSuccess(true).setMessage("备货成功"); } }