package com.cim.idm.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.cim.idm.framework.IDMFrameServiceProxy; import com.cim.idm.model.MaterialPacking; import com.cim.idm.model.MaterialshipRequest; import com.cim.idm.model.SalePreOrderDto; import com.cim.idm.model.StockOutDto; import com.cim.idm.service.Impl.InvoiceServiceImpl; import com.cim.idm.service.Impl.SaleOutServiceImpl; import com.cim.idm.utils.AjaxResult; 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 io.swagger.annotations.Api; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.jdbc.core.BeanPropertyRowMapper; 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.io.IOException; import java.math.BigDecimal; import java.util.*; @Api("调拨入接口") @RestController @RequestMapping("/SaleOut") @EnableAutoConfiguration public class SaleOutController { @Autowired private SaleOutServiceImpl SaleOut; @RequestMapping(value = "/getBhCondition", method = RequestMethod.POST) public AjaxResult getBhCondition(@RequestBody JSONObject in ){ MaterialshipRequest ship = JSON.toJavaObject(in, MaterialshipRequest.class); String barCode = ship.getBarCode(); StringBuffer stringBuffer = new StringBuffer (); stringBuffer.append(" "); stringBuffer.append(" WITH AA AS ( SELECT MATERIALSPECNAME,LISTAGG(CAREER_ASSISTANCE, ',') "); stringBuffer.append(" WITHIN GROUP (ORDER BY MATERIALSPECNAME) CAREER_ASSISTANCE FROM "); stringBuffer.append(" (SELECT DISTINCT MATERIALSPECNAME,CAREER_ASSISTANCE FROM MATERIALPACKING m "); stringBuffer.append(" WHERE CAREER_ASSISTANCE IS NOT NULL) GROUP BY MATERIALSPECNAME ) "); stringBuffer.append(" SELECT "); stringBuffer.append(" m.MATERIALSPECNAME, "); stringBuffer.append(" m.SDK_ID, "); stringBuffer.append(" m.PHASE, "); stringBuffer.append(" AA.CAREER_ASSISTANCE, "); stringBuffer.append(" ss.SPECNAME "); stringBuffer.append(" FROM "); stringBuffer.append(" MATERIALPACKING m "); stringBuffer.append(" LEFT JOIN SDK_SPEC ss ON "); stringBuffer.append(" m.SDK_ID = ss.SDK_ID LEFT JOIN AA ON m.MATERIALSPECNAME = AA.MATERIALSPECNAME "); stringBuffer.append(" WHERE "); stringBuffer.append(" MATERIALPACKINGNAME = :MATERIALPACKINGNAME "); //查询单据明细信息 Map bindMap = new HashMap(); bindMap.put("MATERIALPACKINGNAME",barCode); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(stringBuffer.toString(), bindMap); if (list == null || list.size() < 1) { return AjaxResult.me().setSuccess(false).setMessage("标签不存在"); } return AjaxResult.me().setSuccess(true).setResultObj(list); } //查询预备货信息 @RequestMapping(value = "/getSalePreOrderInvoice", method = RequestMethod.POST) public AjaxResult getSalePreOrderInvoice(@RequestBody JSONObject in ){ MaterialshipRequest ship = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestType = ship.getShipRequestType(); String shipRequestName = ship.getShipRequestName(); String erpfactory = ship.getErpfactory(); String materialSpecName = ship.getMaterialSpecName(); String sdk_id = ship.getSdk_id(); String phase = ship.getPhase(); String user = ship.getUser(); StringBuffer stringBuffer = new StringBuffer (); stringBuffer.append(" "); stringBuffer.append(" SELECT "); stringBuffer.append(" m2.MATERIALSPECNAME , "); stringBuffer.append(" m2.PHASE , "); stringBuffer.append(" m2.SDK_ID , "); stringBuffer.append(" m2.REQUESTQUANTITY, m2.ASSIGNEDQUANTITY,"); stringBuffer.append(" m.SHIPREQUESTNAME , "); stringBuffer.append(" m2.SHIPREQUESTDETAILNAME , "); stringBuffer.append(" m.LASTEVENTUSER ,m2.ERPFACTORY, "); stringBuffer.append(" ss.SPECNAME "); stringBuffer.append(" FROM "); stringBuffer.append(" MATERIALSHIPREQUESTDETAIL m2 "); stringBuffer.append(" LEFT JOIN MATERIALSHIPREQUEST m ON "); stringBuffer.append(" m2.SHIPREQUESTNAME = m.SHIPREQUESTNAME "); stringBuffer.append(" LEFT JOIN SDK_SPEC ss ON m2.SDK_ID = ss.SDK_ID "); stringBuffer.append(" WHERE "); stringBuffer.append(" 1 = 1 "); stringBuffer.append(" AND m.SHIPREQUESTSTATE = 'Created' "); stringBuffer.append(" AND m2.ASSIGNEDQUANTITY <> 0 "); stringBuffer.append(" AND m.SHIPREQUESTTYPE = 'SaleOutPre' "); stringBuffer.append(" AND m2.ERPFACTORY = :ERPFACTORY "); stringBuffer.append(" AND m.LASTEVENTUSER = :USER "); // stringBuffer.append(" AND m.SHIPREQUESTNAME = :SHIPREQUESTNAME "); stringBuffer.append(" AND m2.MATERIALSPECNAME = :MATERIALSPECNAME "); stringBuffer.append(" AND ( :SDK_ID IS NULL OR m2.SDK_ID = :SDK_ID ) "); stringBuffer.append(" AND ( :PHASE IS NULL OR m2.PHASE = :PHASE ) "); //查询单据明细信息 Map bindMap = new HashMap(); bindMap.put("MATERIALSPECNAME",materialSpecName); bindMap.put("ERPFACTORY",erpfactory ); // bindMap.put("SHIPREQUESTNAME",shipRequestName ); bindMap.put("USER",user ); bindMap.put("SDK_ID",sdk_id ); bindMap.put("PHASE",phase ); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(stringBuffer.toString(), bindMap); return AjaxResult.me().setResultObj(list); } //查询发货单信息 @RequestMapping(value = "/getSaleOrderInvoice", method = RequestMethod.POST) public AjaxResult getSaleOrderInvoice(@RequestBody JSONObject in ){ MaterialshipRequest ship = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestType = ship.getShipRequestType(); String shipRequestName = ship.getShipRequestName(); String erpfactory = ship.getErpfactory(); String materialSpecName = ship.getMaterialSpecName(); String sdk_id = ship.getSdk_id(); String phase = ship.getPhase(); String user = ship.getUser(); StringBuffer stringBuffer = new StringBuffer (); stringBuffer.append(" "); stringBuffer.append(" SELECT "); stringBuffer.append(" m2.MATERIALSPECNAME , "); stringBuffer.append(" m2.PHASE , "); stringBuffer.append(" ss.SPECNAME , "); stringBuffer.append(" m2.ERPFACTORY , "); stringBuffer.append(" m2.SITENAME , "); stringBuffer.append(" m2.SHIPREQUESTNAME , "); stringBuffer.append(" m.LASTEVENTUSER, "); stringBuffer.append(" SUM(m2.REQUESTQUANTITY) REQUESTQUANTITY, "); stringBuffer.append(" SUM(m2.ASSIGNEDQUANTITY) ASSIGNEDQUANTITY ,m2.SDK_ID ,SUM(m2.REQUESTQUANTITY - m2.ASSIGNEDQUANTITY) MINUSQTY "); stringBuffer.append(" FROM "); stringBuffer.append(" MATERIALSHIPREQUESTDETAIL m2 "); stringBuffer.append(" LEFT JOIN MATERIALSHIPREQUEST m ON "); stringBuffer.append(" m2.SHIPREQUESTNAME = m.SHIPREQUESTNAME "); stringBuffer.append(" LEFT JOIN SDK_SPEC ss ON "); stringBuffer.append(" m2.SDK_ID = ss.SDK_ID "); stringBuffer.append(" LEFT JOIN MATERIALSPEC m3 ON "); stringBuffer.append(" m2.MATERIALSPECNAME = m3.MATERIALSPECNAME "); stringBuffer.append(" WHERE "); stringBuffer.append(" 1 = 1 "); stringBuffer.append(" AND m.SHIPREQUESTSTATE <> 'Completed' "); stringBuffer.append(" AND m.SHIPREQUESTTYPE = '4C' "); stringBuffer.append(" AND m.SHIPREQUESTNAME = :SHIPREQUESTNAME "); stringBuffer.append(" GROUP BY m2.MATERIALSPECNAME , "); stringBuffer.append(" m2.PHASE , "); stringBuffer.append(" ss.SPECNAME , "); stringBuffer.append(" m2.ERPFACTORY , "); stringBuffer.append(" m2.SITENAME , "); stringBuffer.append(" m2.SHIPREQUESTNAME , "); stringBuffer.append(" m.LASTEVENTUSER ,m2.SDK_ID "); //查询单据明细信息 Map bindMap = new HashMap(); bindMap.put("MATERIALSPECNAME",materialSpecName); bindMap.put("ERPFACTORY",erpfactory ); bindMap.put("SHIPREQUESTNAME",shipRequestName ); bindMap.put("USER",user ); bindMap.put("SDK_ID",sdk_id ); bindMap.put("PHASE",phase ); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(stringBuffer.toString(), bindMap); return AjaxResult.me().setResultObj(list); } //查询发货单绑定批次信息 @RequestMapping(value = "/getChargeBindBySale", method = RequestMethod.POST) public AjaxResult getChargeBindBySale(@RequestBody JSONObject in ){ MaterialshipRequest ship = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestType = ship.getShipRequestType(); String shipRequestName = ship.getShipRequestName(); String erpfactory = ship.getErpfactory(); String materialSpecName = ship.getMaterialSpecName(); String sdk_id = ship.getSdk_id(); String phase = ship.getPhase(); String user = ship.getUser(); StringBuffer stringBuffer = new StringBuffer (); stringBuffer.append(" "); stringBuffer.append(" SELECT "); stringBuffer.append(" m.MATERIALSPECNAME , "); stringBuffer.append(" m.MATERIALPACKINGNAME , "); stringBuffer.append(" m.CHARGE , "); stringBuffer.append(" m.ERPFACTORY , "); stringBuffer.append(" m.MATERIALQUANTITY , "); stringBuffer.append(" m.MATERIALQUANTITY2 , "); stringBuffer.append(" m2.SHIPREQUESTNAME , "); stringBuffer.append(" m3.DESC_CN , "); stringBuffer.append(" ss.SPECNAME ,m.PHASE, "); stringBuffer.append(" be.DESCRIPTION ERPLOCATION, "); stringBuffer.append(" s.DESCRIPTION LOCATIONNAME "); stringBuffer.append(" FROM "); stringBuffer.append(" MATERIALPACKING m "); stringBuffer.append(" LEFT JOIN MATERIALSHIPREQUEST m2 ON "); stringBuffer.append(" m.SHIPREQUESTNAME = m2.SHIPREQUESTNAME "); stringBuffer.append(" LEFT JOIN MATERIALSPEC m3 ON "); stringBuffer.append(" m.MATERIALSPECNAME = m3.MATERIALSPECNAME "); stringBuffer.append(" LEFT JOIN SDK_SPEC ss ON "); stringBuffer.append(" ss.SDK_ID = m.SDK_ID "); stringBuffer.append(" LEFT JOIN BS_ERPLOCATION be ON "); stringBuffer.append(" m.ERPLOCATION = be.ERPLOCATIONNAME "); stringBuffer.append(" LEFT JOIN STORAGESPEC s ON "); stringBuffer.append(" s.ERPLOCATION = m.ERPLOCATION "); stringBuffer.append(" AND s.STORAGENAME = m.LOCATIONNAME "); stringBuffer.append(" WHERE m2.SHIPREQUESTTYPE = '4C' "); stringBuffer.append(" AND m.SHIPREQUESTNAME = :SHIPREQUESTNAME AND m.STOCKSTATE = 'Stocked' "); if (sdk_id != null && !"".equals(sdk_id)) { stringBuffer.append(" AND m.SDK_ID = :SDK_ID "); } if (phase != null && !"".equals(phase)) { stringBuffer.append(" AND m.PHASE = :PHASE "); } stringBuffer.append(" ORDER BY m.MATERIALSPECNAME, be.DESCRIPTION,s.DESCRIPTION"); //查询单据明细信息 Map bindMap = new HashMap(); bindMap.put("MATERIALSPECNAME",materialSpecName); bindMap.put("ERPFACTORY",erpfactory ); bindMap.put("SHIPREQUESTNAME",shipRequestName ); bindMap.put("USER",user ); bindMap.put("SDK_ID",sdk_id ); bindMap.put("PHASE",phase ); List> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(stringBuffer.toString(), bindMap); return AjaxResult.me().setResultObj(list); } //重写拣配功能.zd.2024.9.10 @Transactional @RequestMapping(value = "/AssignShipRequest", method = RequestMethod.POST) public AjaxResult assignShipRequest(@RequestBody JSONObject in ) throws Exception { MaterialPacking materialPacking = JSON.toJavaObject(in, MaterialPacking.class); String materialPackingName = materialPacking.getMaterialPackingName(); String[] mpList=materialPackingName.split(";"); String user = materialPacking.getUser(); String siteName = "SDK"; String shipRequestName=materialPacking.getShipRequestName(); String materialSpecName=materialPacking.getMaterialSpecName(); String phase=materialPacking.getPhase(); String sdk_id=materialPacking.getSdk_id(); List boxList=new ArrayList<>(); for(int i=0;i bp=new HashMap<>(); bp.put("SITENAME", siteName); bp.put("BOXLIST", boxList); bp.put("SHIPREQUESTNAME", shipRequestName); bp.put("MATERIALSPECNAME", materialSpecName); bp.put("PHASE", phase); bp.put("SDK_ID", sdk_id); List> sr=IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bp); String MINUSQTY=sr.get(0).get("MINUSQTY")==null?"0":sr.get(0).get("MINUSQTY").toString(); String ALLQTY=sr.get(0).get("ALLQTY")==null?"0":sr.get(0).get("ALLQTY").toString(); String MINQTY=sr.get(0).get("MINQTY")==null?"0":sr.get(0).get("MINQTY").toString(); String shipRequestType=sr.get(0).get("SHIPREQUESTTYPE")==null?"":sr.get(0).get("SHIPREQUESTTYPE").toString(); String shipRequestDetailType=sr.get(0).get("SHIPREQUESTDETAILTYPE")==null?"":sr.get(0).get("SHIPREQUESTDETAILTYPE").toString(); BigDecimal minusQty = new BigDecimal(MINUSQTY);//剩余需求数量 BigDecimal allQty = new BigDecimal(ALLQTY);//Box总数量 BigDecimal minQty = new BigDecimal(MINQTY);//最小Box数量 BigDecimal Fzero = new BigDecimal(0); int dy0 = minusQty.compareTo(Fzero); // if ("4C".equals(shipRequestType)) { // if ((allQty.subtract(minusQty)).compareTo(Fzero)>0) { // //return AjaxResult.me().setSuccess(false).setMessage("销售不允许超发!"); // throw new CustomException("销售不允许超发"); // } // } // else // { // if ((allQty.subtract(minusQty)).compareTo(minQty)>0) { // return AjaxResult.me().setSuccess(false).setMessage("只允许超发1个!"); // //throw new CustomException("只允许超发1个"); // } // } // 销售订单不允许超发 但超发一只的时候可以挪到右侧,进行拆箱取数量保证不超发 // if ("4Y".equals(shipRequestType)) {//调拨单 // if ( "4Y-Cxx-03".equals(shipRequestDetailType)) { // if ((allQty.subtract(minusQty)).compareTo(minQty)>0) { // return AjaxResult.me().setSuccess(false).setMessage("只允许超发1个!"); // //throw new CustomException("只允许超发1个"); // } // } // } else if ("BLSQ4K".equals(shipRequestType)) {//领料 // if ((allQty.subtract(minusQty)).compareTo(minQty)>0) { // return AjaxResult.me().setSuccess(false).setMessage("只允许超发1个!"); // //throw new CustomException("只允许超发1个"); // } // } else if ("CKSQ4I".equals(shipRequestType)) { //其他出库 // if ((allQty.subtract(minusQty)).compareTo(minQty)>0) { // return AjaxResult.me().setSuccess(false).setMessage("只允许超发1个!"); // //throw new CustomException("只允许超发1个"); // } // } else if ("OEM".equals(shipRequestType)) { //委外 // if ((allQty.subtract(minusQty)).compareTo(minQty)>0) { // return AjaxResult.me().setSuccess(false).setMessage("只允许超发1个!"); // //throw new CustomException("只允许超发1个"); // } // } else if ("4C".equals(shipRequestType)) { // if ((allQty.subtract(minusQty)).compareTo(minQty)>0) { // return AjaxResult.me().setSuccess(false).setMessage("销售不允许超发!"); // //throw new CustomException("只允许超发1个"); // } // }else { // return AjaxResult.me().setSuccess(false).setMessage("单据类型不正确!"); // } for(int i=0;i boxList = new ArrayList<>(); for (int i = 0; i < mpList.length; i++) { if (StringUtils.isNotEmpty(mpList[i])) { boxList.add(mpList[i]); } } InvoiceServiceImpl invoiceServiceImpl = new InvoiceServiceImpl(); for (int i = 0; i < boxList.size(); i++) { MaterialPackingKey materialPackingKey = new MaterialPackingKey(siteName, boxList.get(i)); com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking selectByKey = MaterialPackingServiceProxy .getMaterialPackingService().selectByKey(materialPackingKey); try { String sdk_ID = selectByKey.getSDK_ID(); String phase = selectByKey.getPHASE(); invoiceServiceImpl.Reserve2(selectByKey, shipRequestName, materialSpecName, sdk_ID, phase, "Dessign", "SDK", user, "", "N"); } catch (Exception e) { return AjaxResult.me().setSuccess(false).setMessage(e.toString()); } } return AjaxResult.me().setResultObj(null); } //指定批次拣配功能.zd.2024.9.10 @Transactional @RequestMapping(value = "/AssignShipRequestByCharge", method = RequestMethod.POST) public AjaxResult assignShipRequestByCharge(@RequestBody JSONObject in) throws Exception { MaterialPacking materialPacking = JSON.toJavaObject(in, MaterialPacking.class); String materialPackingName = materialPacking.getMaterialPackingName(); String[] mpList = materialPackingName.split(";"); String user = materialPacking.getUser(); String siteName = "SDK"; String shipRequestName = materialPacking.getShipRequestName(); //String materialSpecName = materialPacking.getMaterialSpecName(); List boxList = new ArrayList<>(); for (int i = 0; i < mpList.length; i++) { if (StringUtils.isNotEmpty(mpList[i])) { boxList.add(mpList[i]); } } InvoiceServiceImpl invoiceServiceImpl = new InvoiceServiceImpl(); for(int i=0;i bpmp=new HashMap<>(); bpmp.put("CHARGE", boxList.get(i)); List> srmp=IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlmp, bpmp); if(srmp.size()==0) { return AjaxResult.me().setSuccess(false).setMessage("未查询到批次:"+boxList.get(i)); } String boxid=srmp.get(0).get("MATERIALPACKINGNAME").toString(); String materialSpecName=srmp.get(0).get("MATERIALSPECNAME").toString(); String materialQuantity=srmp.get(0).get("MATERIALQUANTITY").toString(); MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",boxid); com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking selectByKey = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(materialPackingKey); //查询单据类型 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", ""); hashMap.put("PHASE", ""); List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap); if(Objects.isNull(queryForList) || queryForList.isEmpty()) { return AjaxResult.me().setSuccess(false).setMessage("未找到对应的数据:"+shipRequestName+","+materialSpecName); } 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", boxid); List> queryForList2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(judge, hashMap2); String materialQuantity2=""; 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)) { 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 + "备货!"); // } } 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); 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("单据类型不正确!"); } try { invoiceServiceImpl.Reserve2(selectByKey, shipRequestName, materialSpecName,"", "", "Assign", "SDK", user,materialQuantity2,"N"); } catch (CustomException e) { e.printStackTrace(); AjaxResult.me().setSuccess(false).setMessage(e.toString()); } } return AjaxResult.me().setResultObj(null); } //修改发货数量功能.zd.2024.9.10 @Transactional @RequestMapping(value = "/UpdateOutQty", method = RequestMethod.POST) public AjaxResult updateOutQty(@RequestBody JSONObject in) { MaterialPacking materialPacking = JSON.toJavaObject(in, MaterialPacking.class); String materialPackingName = materialPacking.getMaterialPackingName(); String user = materialPacking.getUser(); String siteName = "SDK"; String shipRequestName = materialPacking.getShipRequestName(); String mqty2 = materialPacking.getMaterialQuantity2(); String materialSpecName=materialPacking.getMaterialSpecName(); String sdk_id = materialPacking.getSdk_id(); String phase = materialPacking.getPhase(); String sql="SELECT (m.MATERIALQUANTITY2 - :MQTY2) MQTY2,(m.MATERIALQUANTITY - :MQTY2)MQTY, SDK_ID,PHASE FROM MATERIALPACKING m \r\n" + " WHERE m.SITENAME =:SITENAME\r\n" + " AND m.MATERIALPACKINGNAME =:MATERIALPACKINGNAME"; Map bp=new HashMap<>(); bp.put("SITENAME", siteName); bp.put("MATERIALPACKINGNAME", materialPackingName); bp.put("MQTY2", mqty2); List> sr=IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bp); String minusQty=""; if(sr.size()>0) { minusQty=sr.get(0).get("MQTY2").toString(); sdk_id = sr.get(0).get("SDK_ID") == null ? "" : sr.get(0).get("SDK_ID").toString(); phase = sr.get(0).get("PHASE") == null ? "" : sr.get(0).get("PHASE").toString(); String mQty=sr.get(0).get("MQTY").toString(); if(Double.parseDouble(mQty)<0) { return AjaxResult.me().setSuccess(false).setMessage("发料数量不能超过批次总数量"); } } else { return AjaxResult.me().setSuccess(false).setMessage("未查询到条码"); } try { //更新materialpacking表字段materialQuantity2并留履历 MaterialPackingKey mpk=new MaterialPackingKey(siteName, materialPackingName); com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo setEventInfo=new com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo(); Map userc=new HashMap<>(); userc.put("materialQuantity2", mqty2); // //// set会精度缺失mqty2 // setEventInfo.setUserColumns(userc); // EventInfo eventInfo=EventInfoUtil.makeEventInfo("UpdateOutQty", user, "UpdateOutQty"); // MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpk, eventInfo, setEventInfo); // 再用这个update更新 Map LKbp=new HashMap<>(); LKbp.put("SITENAME", siteName); LKbp.put("MATERIALPACKINGNAME", materialPackingName); LKbp.put("MATERIALQUANTITY2", mqty2); String sqlK = "UPDATE\r\n" + " MATERIALPACKING m\r\n" + "SET\r\n" + " m.MATERIALQUANTITY2 = :MATERIALQUANTITY2\r\n" + "WHERE\r\n" + " m.MATERIALPACKINGNAME = :MATERIALPACKINGNAME\r\n" + " AND m.SITENAME = :SITENAME "; IDMFrameServiceProxy.getSqlTemplate().update(sqlK, LKbp); //更新MaterialShipRequestDetail表ASSIGNEDQUANTITY String sqlu="UPDATE MATERIALSHIPREQUESTDETAIL m SET m.ASSIGNEDQUANTITY=m.ASSIGNEDQUANTITY - :MQTY\r\n" + " WHERE m.SHIPREQUESTNAME =:SHIPREQUESTNAME AND m.MATERIALSPECNAME =:MATERIALSPECNAME\r\n" + " AND m.ASSIGNEDQUANTITY >0 AND (:SDK_ID IS NULL OR m.SDK_ID = :SDK_ID) AND (:PHASE IS NULL OR m.PHASE = :PHASE)"; Map bpu=new HashMap<>(); bpu.put("MQTY", minusQty); bpu.put("SHIPREQUESTNAME", shipRequestName); bpu.put("MATERIALSPECNAME", materialSpecName); bpu.put("SDK_ID", sdk_id); bpu.put("PHASE", phase); IDMFrameServiceProxy.getSqlTemplate().update(sqlu, bpu); } catch (Exception e) { return AjaxResult.me().setSuccess(false).setMessage(e.toString()); } return AjaxResult.me().setResultObj(null); } @Transactional @RequestMapping(value = "/CompleteShipRequest", method = RequestMethod.POST) public AjaxResult completeShipRequest(@RequestBody JSONObject in ) throws Exception{ StockOutDto ms = JSON.toJavaObject(in, StockOutDto.class); String shipRequestName = ms.getShipRequestName(); String siteName = "SDK"; 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(); String reMark = ms.getReMark(); List boxList = new ArrayList<>(); Map hashMap = new HashMap (); hashMap.put("SHIPREQUESTNAME", shipRequestName); String sqlGetBox="SELECT m.MATERIALPACKINGNAME,m.MATERIALQUANTITY,DECODE(NVL(m.MATERIALQUANTITY2,0), 0 ,m.MATERIALQUANTITY,m.MATERIALQUANTITY2) MATERIALQUANTITY2 FROM MATERIALPACKING m \r\n" + " WHERE m.SHIPREQUESTNAME =:SHIPREQUESTNAME\r\n" + " AND m.STOCKSTATE ='Stocked'\r\n" + " AND m.MATERIALQUANTITY2 >0"; List> sr = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlGetBox, hashMap); if(sr.size()>0) { for(int i=0;i> 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().setSuccess(false).setMessage("找不到出库单据" + shipRequestName); } InvoiceServiceImpl invoiceServiceImpl=new InvoiceServiceImpl(); sendERPStockOut=invoiceServiceImpl.SendERPStockOut20240802(shipRequestName, siteName, user, boxList,commitDate,opCode); // sendERPStockOut="1"; if (sendERPStockOut == null || "".equals(sendERPStockOut)) { return AjaxResult.me().setSuccess(false).setMessage("过账失败"); } return AjaxResult.me().setResultObj(null); } //查询发货单绑定批次信息 @RequestMapping(value = "/BindSalePreToSale", method = RequestMethod.POST) public AjaxResult BindSalePreToSale(@RequestBody JSONObject in ){ SalePreOrderDto sp = JSON.toJavaObject(in, SalePreOrderDto.class); List salePreList = sp.getSalePreList(); String saleOrder = sp.getSaleOrder();//第三个表格单据 String saleQty = sp.getSaleQty();//第三表格备货数量 String saleMaterialSpecName = sp.getSaleMaterialSpecName(); String saleSdk_id = sp.getSaleSdk_id(); String salePhase = sp.getSalePhase(); String user = sp.getUser(); if (saleMaterialSpecName == null || "".equals(saleMaterialSpecName)) { return AjaxResult.me().setSuccess(false).setMessage("发货物料号不能为空"); } if (saleOrder == null || "".equals(saleOrder)) { return AjaxResult.me().setSuccess(false).setMessage("发货单不能为空"); } if (user == null || "".equals(user)) { return AjaxResult.me().setSuccess(false).setMessage("作业员不能为空"); } // 比较数量,saleQty是salePreQty的和 // BigDecimal fsalePreQty = new BigDecimal(salePreQty); // BigDecimal fsaleQty = new BigDecimal(saleQty); // if (fsalePreQty.compareTo(fsaleQty) != 0) { // return AjaxResult.me().setSuccess(false).setMessage("数量不一致"); // } BigDecimal sumPreQty = BigDecimal.ZERO; int listSize = salePreList.size(); for (int i = 0; i < listSize; i++) { BigDecimal fsalePreQty = new BigDecimal(salePreList.get(i).getSalePreQty()); sumPreQty = sumPreQty.add(fsalePreQty); } BigDecimal fsaleQty = new BigDecimal(saleQty); if (sumPreQty.compareTo(fsaleQty) != 0) { return AjaxResult.me().setSuccess(false).setMessage("数量不一致"); } for(SalePreOrderDto pre : salePreList) { String salePreNo = pre.getSalePreNo();//第二个表格单据 // String salePreQty = pre.getSalePreQty();//第二表格剩余数量 String salePreSdk_id = pre.getSalePreSdk_id(); String salePrePhase = pre.getSalePrePhase(); String salePreMaterialSpecName = pre.getSalePreMaterialSpecName(); if (!salePreMaterialSpecName.equals(saleMaterialSpecName)) { return AjaxResult.me().setSuccess(false).setMessage("物料号不一致"); } if (salePrePhase != null && salePhase != null) { //规格都不为空 if (!salePrePhase.equals(salePhase)) { return AjaxResult.me().setSuccess(false).setMessage("物料阶段不一致"); } } else if (salePrePhase == null && salePhase == null) { } else { return AjaxResult.me().setSuccess(false).setMessage("物料阶段不一致"); } if (salePreSdk_id != null && saleSdk_id != null) { //规格都不为空 if (!salePreSdk_id.equals(saleSdk_id)) { return AjaxResult.me().setSuccess(false).setMessage("物料号规格不一致"); } } else if (salePreSdk_id == null && saleSdk_id == null) { } else { return AjaxResult.me().setSuccess(false).setMessage("物料号规格不一致"); } if (salePreMaterialSpecName == null || "".equals(salePreMaterialSpecName)) { return AjaxResult.me().setSuccess(false).setMessage("预备货物料号不能为空"); } if (salePreNo == null || "".equals(salePreNo)) { return AjaxResult.me().setSuccess(false).setMessage("预备货单不能为空"); } SaleOut.BindSalePreToSale(saleOrder, saleMaterialSpecName, salePreSdk_id, user, salePhase, salePreNo); String sql = "UPDATE MATERIALSHIPREQUEST SET SHIPREQUESTSTATE = 'Completed' WHERE SHIPREQUESTNAME = :SHIPREQUESTNAME "; Map hashMap = new HashMap (); hashMap.put("SHIPREQUESTNAME", salePreNo); IDMFrameServiceProxy.getSqlTemplate().update(sql, hashMap); } return AjaxResult.me().setSuccess(true).setMessage("备货成功"); } /** * pc备货出库添加是否可以不良品校验 * @param in * @return */ @Transactional @RequestMapping(value = "/RejectsAndExpCheck", method = RequestMethod.POST) public AjaxResult RejectsAndExpCheck(@RequestBody JSONObject in ) throws CustomException { 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 = ""; 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(); } // 查询工单维护表 是否有对应的生产订单 String workSql = "SELECT w.WORKORDER FROM WORKORDER w WHERE w.WORKORDER =:WORKORDER"; Map hashMapW = new HashMap (); hashMapW.put("WORKORDER", shipRequestName2); queryForListW = IDMFrameServiceProxy.getSqlTemplate().queryForList(workSql, hashMapW); String IsCheck = "N"; // 是否可以为不良和过期 if (("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.isEmpty())) {//复卷,返工工单 IsCheck = "Y"; } return AjaxResult.me().setResultObj(IsCheck); } /** * 销售出库 * @param in * @return */ @RequestMapping(value = "/Commit4CToERP", method = RequestMethod.POST) public AjaxResult Commit4CToERP(@RequestBody JSONObject in ){ MaterialshipRequest ship = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = ship.getShipRequestName(); String commitDate = ship.getCommitDate(); String opcode = ship.getOpcode(); List boxList = ship.getBoxList(); String user = ship.getUser(); try { SaleOut.Commit4CToERP(shipRequestName, boxList, user,commitDate,opcode); } catch (Exception e) { e.printStackTrace(); return AjaxResult.me().setSuccess(false).setMessage(e.toString()); } return AjaxResult.me().setSuccess(true).setMessage("出库成功"); } /** * 销售解绑 * @param in * @return */ @RequestMapping(value = "/DessignSaleCharge", method = RequestMethod.POST) public AjaxResult DessignSaleCharge(@RequestBody JSONObject in ){ MaterialshipRequest ship = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = ship.getShipRequestName(); String pcSql = "UPDATE MATERIALPACKING T SET T.MATERIALQUANTITY2 = 0,T.SHIPREQUESTNAME = '' WHERE T.SHIPREQUESTNAME = :SHIPREQUESTNAME"; String subSql = "DELETE FROM MATERIALPACKINGSUB m WHERE m.RECEIVEREQUESTNAME = :SHIPREQUESTNAME"; String dhSql = "UPDATE MATERIALSHIPREQUESTDETAIL T SET T.ASSIGNEDQUANTITY = 0 WHERE T.SHIPREQUESTNAME = :SHIPREQUESTNAME"; Map hashMap = new HashMap (); hashMap.put("SHIPREQUESTNAME", shipRequestName); IDMFrameServiceProxy.getSqlTemplate().update(dhSql, hashMap); IDMFrameServiceProxy.getSqlTemplate().update(pcSql, hashMap); IDMFrameServiceProxy.getSqlTemplate().update(subSql, hashMap); return AjaxResult.me().setSuccess(true).setMessage("取消备货成功"); } @RequestMapping(value = "/updateSalePreOrder", method = RequestMethod.POST) public AjaxResult updateSalePreOrder(@RequestBody JSONObject in ){ MaterialshipRequest ship = JSON.toJavaObject(in, MaterialshipRequest.class); String shipRequestName = ship.getShipRequestName(); String shipRequestDetailName = ship.getShipRequestDetailName(); String materialPackingName = ship.getMaterialPackingName(); String materialQuantity = ship.getMaterialQuantity(); String materialQuantity2 = ship.getMaterialQuantity2(); BigDecimal fmaterialQuantity = new BigDecimal(materialQuantity); BigDecimal fmaterialQuantity2 = new BigDecimal(materialQuantity2); String materialSpecName = ship.getMaterialSpecName(); String sdk_id = ship.getSdk_id(); String phase = ship.getPhase(); String pcSql = "UPDATE MATERIALPACKING T SET T.MATERIALQUANTITY2 = :QTY WHERE T.MATERIALPACKINGNAME = :MATERIALPACKINGNAME"; //查询已过帐,待过账数量更新到已接受数量 String dck = "SELECT SUM(DECODE(m2.MATERIALQUANTITY2, 0, m2.MATERIALQUANTITY,m2.MATERIALQUANTITY2)) QTY FROM MATERIALPACKING m2 WHERE m2.SHIPREQUESTNAME = :SHIPREQUESTNAME " + "AND m2.MATERIALSPECNAME = :MATERIALSPECNAME AND (:SDK_ID IS NULL OR m2.SDK_ID = :SDK_ID) AND (:PHASE IS NULL OR m2.PHASE = :PHASE) AND STOCKSTATE = 'Stocked'"; String ckls = "SELECT NVL(SUM(m.QTY),0) QTY FROM MATERIALPACKINGSUBHISTORY m LEFT JOIN MATERIALPACKING m2 ON m.MATERIALPACKINGNAME = m2.MATERIALPACKINGNAME WHERE m.RECEIVEREQUESTNAME = :SHIPREQUESTNAME " + "AND m2.MATERIALSPECNAME = :MATERIALSPECNAME AND (:SDK_ID IS NULL OR m2.SDK_ID = :SDK_ID) AND (:PHASE IS NULL OR m2.PHASE = :PHASE)"; String ck = "SELECT NVL(SUM(m.QTY),0) QTY FROM MATERIALPACKINGSUB m LEFT JOIN MATERIALPACKING m2 ON m.MATERIALPACKINGNAME = m2.MATERIALPACKINGNAME WHERE m.RECEIVEREQUESTNAME = :SHIPREQUESTNAME " + "AND m2.MATERIALSPECNAME = :MATERIALSPECNAME AND (:SDK_ID IS NULL OR m2.SDK_ID = :SDK_ID) AND (:PHASE IS NULL OR m2.PHASE = :PHASE)"; String dhSql = " UPDATE\r\n" + " MATERIALSHIPREQUESTDETAIL m\r\n" + "SET\r\n" + " m.ASSIGNEDQUANTITY = :ASSIGNEDQUANTITY WHERE\r\n" + " m.SITENAME = :SITENAME\r\n" + " AND m.SHIPREQUESTNAME = :SHIPREQUESTNAME\r\n" + " AND m.MATERIALSPECNAME = :MATERIALSPECNAME\r\n" + " AND (:SDK_ID IS NULL\r\n" + " OR m.SDK_ID = :SDK_ID)\r\n" + " AND (:PHASE IS NULL\r\n" + " OR m.PHASE = :PHASE) \r\n" + " AND ROWNUM = 1 "; Map bindMap = new HashMap (); bindMap.put("QTY", materialQuantity2); bindMap.put("SITENAME", "SDK"); bindMap.put("SHIPREQUESTNAME", shipRequestName); bindMap.put("MATERIALPACKINGNAME", materialPackingName); bindMap.put("MATERIALSPECNAME", materialSpecName); bindMap.put("SDK_ID", sdk_id); bindMap.put("PHASE", phase); IDMFrameServiceProxy.getSqlTemplate().update(pcSql, bindMap); BigDecimal ASSIGNEDQUANTITY = new BigDecimal(0); List> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(dck, bindMap); if (queryForList != null && queryForList.size() > 0) { String string = queryForList.get(0).get("QTY").toString(); BigDecimal bigDecimal = new BigDecimal(string); ASSIGNEDQUANTITY = ASSIGNEDQUANTITY.add(bigDecimal); } List> queryForList3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(ckls, bindMap); if (queryForList3 != null && queryForList3.size() > 0) { String string = queryForList3.get(0).get("QTY").toString(); ASSIGNEDQUANTITY = ASSIGNEDQUANTITY.add(new BigDecimal(string)); } List> queryForList4 = IDMFrameServiceProxy.getSqlTemplate().queryForList(ck, bindMap); if (queryForList4 != null && queryForList4.size() > 0) { String string = queryForList4.get(0).get("QTY").toString(); ASSIGNEDQUANTITY = ASSIGNEDQUANTITY.add(new BigDecimal(string)); } bindMap.put("ASSIGNEDQUANTITY", ASSIGNEDQUANTITY); IDMFrameServiceProxy.getSqlTemplate().update(dhSql, bindMap); return AjaxResult.me().setSuccess(true).setMessage("更新备货成功"); } }