1116 lines
51 KiB
Java
1116 lines
51 KiB
Java
package com.cim.idm.controller;
|
||
|
||
import com.alibaba.fastjson.JSON;
|
||
import com.alibaba.fastjson.JSONArray;
|
||
import com.alibaba.fastjson.JSONObject;
|
||
import com.cim.idm.framework.IDMFrameServiceProxy;
|
||
import com.cim.idm.framework.data.EventInfo;
|
||
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.IMaterialShipService;
|
||
import com.cim.idm.service.Impl.InvoiceServiceImpl;
|
||
import com.cim.idm.service.Impl.SaleOutServiceImpl;
|
||
import com.cim.idm.utils.AjaxResult;
|
||
import com.cim.idm.utils.EventInfoUtil;
|
||
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;
|
||
|
||
@Autowired
|
||
private IMaterialShipService materialShipService;
|
||
|
||
@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<String, Object> bindMap = new HashMap<String, Object>();
|
||
bindMap.put("MATERIALPACKINGNAME",barCode);
|
||
List<Map<String,Object>> 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<String, Object> bindMap = new HashMap<String, Object>();
|
||
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<Map<String,Object>> 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<String, Object> bindMap = new HashMap<String, Object>();
|
||
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<Map<String,Object>> 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<String, Object> bindMap = new HashMap<String, Object>();
|
||
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<Map<String,Object>> 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<String> boxList=new ArrayList<>();
|
||
for(int i=0;i<mpList.length;i++)
|
||
{
|
||
if(StringUtils.isNotEmpty(mpList[i]))
|
||
{
|
||
boxList.add(mpList[i]);
|
||
}
|
||
}
|
||
|
||
InvoiceServiceImpl invoiceServiceImpl =new InvoiceServiceImpl();
|
||
|
||
String sql=" SELECT * FROM (\r\n" +
|
||
" SELECT sum(m.MATERIALQUANTITY)ALLQTY,min(m.MATERIALQUANTITY)MINQTY FROM MATERIALPACKING m \r\n" +
|
||
" WHERE m.SITENAME = :SITENAME \r\n" +
|
||
" AND m.MATERIALPACKINGNAME IN (:BOXLIST))\r\n" +
|
||
" LEFT JOIN (SELECT (sum(m2.REQUESTQUANTITY)-sum(m2.ASSIGNEDQUANTITY))MINUSQTY FROM MATERIALSHIPREQUESTDETAIL m2 \r\n" +
|
||
" WHERE m2.SHIPREQUESTNAME=:SHIPREQUESTNAME\r\n" +
|
||
" AND m2.MATERIALSPECNAME=:MATERIALSPECNAME\r\n" +
|
||
" AND (:PHASE IS NULL OR m2.PHASE=:PHASE)\r\n" +
|
||
" AND ( :SDK_ID IS NULL OR m2.SDK_ID=:SDK_ID) \r\n" +
|
||
" ) ON 1=1\r\n" +
|
||
" LEFT JOIN (SELECT m3.SHIPREQUESTTYPE FROM MATERIALSHIPREQUEST m3 WHERE m3.SHIPREQUESTNAME=:SHIPREQUESTNAME)\r\n" +
|
||
" ON 1=1 ";
|
||
|
||
Map<String,Object> 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<Map<String,Object>> 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("单据类型不正确!");
|
||
// }
|
||
|
||
if ("NLCC".equals(shipRequestType)) {//调拨单
|
||
// if ( "4Y-Cxx-03".equals(shipRequestDetailType)) {
|
||
if ((allQty.subtract(minusQty)).compareTo(minQty)>0) {//只能超发一个
|
||
return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!");
|
||
}
|
||
// }
|
||
} else if ("01".equals(shipRequestType) || "02".equals(shipRequestType) || "06".equals(shipRequestType)) {//领料 06成品中心领料
|
||
if ((allQty.subtract(minusQty)).compareTo(minQty)>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 ((allQty.subtract(minusQty)).compareTo(minQty)>0) {//只能超发一个
|
||
return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!");
|
||
}
|
||
} else if (shipRequestType.contains("ZLF")) {
|
||
if ((allQty.subtract(minusQty)).compareTo(minQty)>0) {//只能超发一个
|
||
return AjaxResult.me().setSuccess(false).setMessage("销售不允许超发!");
|
||
}
|
||
} else if ("Z008".equals(shipRequestType)) {
|
||
if ((allQty.subtract(minusQty)).compareTo(minQty)>0) {//只能超发一个
|
||
return AjaxResult.me().setSuccess(false).setMessage("采购退货不允许超发!");
|
||
}
|
||
}else {
|
||
return AjaxResult.me().setSuccess(false).setMessage("单据类型不正确!");
|
||
}
|
||
|
||
|
||
|
||
|
||
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 {
|
||
invoiceServiceImpl.Reserve2(selectByKey, shipRequestName, materialSpecName,sdk_id, phase, "Assign", "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 = "/DeAssignShipRequest", method = RequestMethod.POST)
|
||
public AjaxResult deAssignShipRequest(@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<String> 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<String> 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++)
|
||
{
|
||
String sqlmp=" SELECT m.MATERIALPACKINGNAME,m.MATERIALSPECNAME,m.MATERIALQUANTITY FROM MATERIALPACKING m WHERE m.CHARGE =:CHARGE AND m.STOCKSTATE ='Stocked' AND m.MATERIALQUANTITY >0 ";
|
||
Map<String,Object> bpmp=new HashMap<>();
|
||
bpmp.put("CHARGE", boxList.get(i));
|
||
List<Map<String,Object>> 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<String, Object> hashMap = new HashMap<String,Object> ();
|
||
hashMap.put("SHIPREQUESTNAME", shipRequestName);
|
||
hashMap.put("MATERIALSPECNAME", materialSpecName);
|
||
hashMap.put("SDK_ID", "");
|
||
hashMap.put("PHASE", "");
|
||
List<Map<String, Object>> 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<String, Object> hashMap2 = new HashMap<String,Object> ();
|
||
hashMap2.put("MATERIALPACKINGNAME", boxid);
|
||
List<Map<String, Object>> 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 ("NLCC".equals(shipRequestType)) {//调拨单
|
||
// if ( "4Y-Cxx-03".equals(shipRequestDetailType)) {
|
||
if (dy0 < 0) {//只能超发一个
|
||
return AjaxResult.me().setSuccess(false).setMessage("只能超发一个不能出库了!");
|
||
}
|
||
// }
|
||
} else if ("01".equals(shipRequestType) || "02".equals(shipRequestType) || "06".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("单据类型不正确!");
|
||
}
|
||
|
||
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<String,Object> bp=new HashMap<>();
|
||
bp.put("SITENAME", siteName);
|
||
bp.put("MATERIALPACKINGNAME", materialPackingName);
|
||
bp.put("MQTY2", mqty2);
|
||
List<Map<String,Object>> 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<String,Object> 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<String,Object> 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)";
|
||
|
||
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 (:PHASE IS NULL OR m.PHASE = :PHASE)";
|
||
Map<String,Object> 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<com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking> boxList = new ArrayList<>();
|
||
|
||
Map<String, Object> hashMap = new HashMap<String,Object> ();
|
||
hashMap.put("SHIPREQUESTNAME", shipRequestName);
|
||
|
||
// 关联详情单据,去除当是现场仓时多余已经入库到现场仓的批次条码
|
||
/*
|
||
String sqlGetBox="SELECT\n" +
|
||
"m.MATERIALPACKINGNAME,\n" +
|
||
"m.MATERIALQUANTITY,\n" +
|
||
"DECODE(NVL(m.MATERIALQUANTITY2, 0), 0 , m.MATERIALQUANTITY, m.MATERIALQUANTITY2) MATERIALQUANTITY2\n" +
|
||
"FROM\n" +
|
||
"MATERIALPACKING m\n" +
|
||
"LEFT JOIN MATERIALSHIPREQUESTDETAIL mdl ON\n" +
|
||
"mdl.SHIPREQUESTNAME=m.SHIPREQUESTNAME \n" +
|
||
"AND mdl.MATERIALSPECNAME = m.MATERIALSPECNAME\n" +
|
||
"WHERE\n" +
|
||
"m.SHIPREQUESTNAME =:SHIPREQUESTNAME\n" +
|
||
"AND m.STOCKSTATE = 'Stocked'\n" +
|
||
"AND m.MATERIALQUANTITY2 >0\n" +
|
||
"AND (m.ERPLOCATION <> mdl.ERPRECEIVELOCATION OR mdl.ERPRECEIVELOCATION IS NULL)";
|
||
*/
|
||
|
||
String sqlGetBox = " SELECT m.MATERIALPACKINGNAME,\n" +
|
||
" m.MATERIALQUANTITY,\n" +
|
||
" DECODE(NVL(m.MATERIALQUANTITY2, 0), 0 , m.MATERIALQUANTITY, m.MATERIALQUANTITY2) MATERIALQUANTITY2\n" +
|
||
"FROM MATERIALPACKING m\n" +
|
||
"WHERE " +
|
||
"m.SHIPREQUESTNAME =:SHIPREQUESTNAME\n" +
|
||
"AND m.STOCKSTATE = 'Stocked'\n" +
|
||
"AND m.MATERIALQUANTITY2 > 0\n" +
|
||
"AND NOT EXISTS (\n" +
|
||
" SELECT 1 FROM MATERIALSHIPREQUESTDETAIL mdl\n" +
|
||
" WHERE mdl.SHIPREQUESTNAME = m.SHIPREQUESTNAME\n" +
|
||
" AND mdl.MATERIALSPECNAME = m.MATERIALSPECNAME\n" +
|
||
" AND (m.ERPLOCATION = mdl.ERPRECEIVELOCATION AND mdl.ERPRECEIVELOCATION IS NOT NULL)\n" +
|
||
") ";
|
||
List<Map<String, Object>> sr = IDMFrameServiceProxy.getSqlTemplate().queryForList(sqlGetBox, hashMap);
|
||
if(sr.size()>0)
|
||
{
|
||
for(int i=0;i<sr.size();i++)
|
||
{
|
||
MaterialPackingKey mpk=new MaterialPackingKey(siteName, sr.get(i).get("MATERIALPACKINGNAME").toString());
|
||
com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking mp = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(mpk);
|
||
mp.setMaterialQuantity( Double.parseDouble(sr.get(i).get("MATERIALQUANTITY").toString()));
|
||
mp.setMaterialQuantity2( Double.parseDouble(sr.get(i).get("MATERIALQUANTITY2").toString()));
|
||
boxList.add(mp);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
throw new CustomException("找不到出库单号" + shipRequestName);
|
||
}
|
||
String sendERPStockOut = null;
|
||
String shipRequestType="";
|
||
String sql = "SELECT m.SHIPREQUESTTYPE FROM MATERIALSHIPREQUEST m WHERE m.SHIPREQUESTNAME = :SHIPREQUESTNAME";
|
||
|
||
List<Map<String, Object>> 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<SalePreOrderDto> 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<String, Object> hashMap = new HashMap<String,Object> ();
|
||
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<String, Object> hashMap3 = new HashMap<String,Object> ();
|
||
hashMap3.put("SHIPREQUESTNAME", shipRequestName2);
|
||
String productOrderType = "";
|
||
List<Map<String, Object>> queryForListW = new ArrayList<>();
|
||
List<Map<String, Object>> 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<String, Object> hashMapW = new HashMap<String,Object> ();
|
||
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<MaterialPacking> 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<String, Object> hashMap = new HashMap<String,Object> ();
|
||
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<String, Object> bindMap = new HashMap<String,Object> ();
|
||
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<Map<String, Object>> 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<Map<String, Object>> 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<Map<String, Object>> 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("更新备货成功");
|
||
}
|
||
|
||
/**
|
||
* 确认备货
|
||
* @param in
|
||
* @return
|
||
* @throws Exception
|
||
*/
|
||
@RequestMapping(value = "/auxiliaryAssign", method = RequestMethod.POST)
|
||
public AjaxResult AuxiliaryAssign(@RequestBody JSONObject in ) throws Exception{
|
||
String siteName = (String)in.get("SITENAME");
|
||
String user = (String)in.get("USER");
|
||
String shipRequestName = (String)in.get("SHIPREQUESTNAME");
|
||
JSONArray boxListArray = in.getJSONArray("BOXLIST");
|
||
List<LinkedHashMap<String,String>> boxList = new ArrayList<LinkedHashMap<String,String>>();
|
||
if(null == boxListArray || boxListArray.size() <= 0) {
|
||
return AjaxResult.me().setSuccess(true).setMessage("未获取到:" + shipRequestName + "的发货单据信息").setErrorCode(400);
|
||
}
|
||
// 遍历 JSONArray 并转换为 LinkedHashMap
|
||
for (int i = 0; i < boxListArray.size(); i++) {
|
||
JSONObject jsonObject = boxListArray.getJSONObject(i);
|
||
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
|
||
// 将每个字段添加到 LinkedHashMap 中
|
||
for (String key : jsonObject.keySet()) {
|
||
linkedHashMap.put(key, jsonObject.getString(key));
|
||
}
|
||
// 添加到列表中
|
||
boxList.add(linkedHashMap);
|
||
}
|
||
EventInfo eventInfo = new EventInfoUtil().makeEventInfo("auxiliaryAssign", user, "auxiliaryAssign", "", "");
|
||
return materialShipService.MaterialShipRequestAuxiliaryConfirmStocking(eventInfo,siteName,shipRequestName,user,boxList);
|
||
}
|
||
|
||
/**
|
||
* 辅材出库
|
||
* @param in
|
||
* @return
|
||
* @throws Exception
|
||
*/
|
||
@RequestMapping(value = "/auxiliaryStockOut", method = RequestMethod.POST)
|
||
public AjaxResult AuxiliaryStockOut(@RequestBody JSONObject in ) throws Exception{
|
||
String siteName = (String)in.get("SITENAME");
|
||
String user = (String)in.get("USER");
|
||
String shipRequestName = (String)in.get("SHIPREQUESTNAME");
|
||
String commitDate = (String)in.get("commitDate");
|
||
JSONArray boxListArray = in.getJSONArray("BOXLIST");
|
||
List<LinkedHashMap<String,String>> boxList = new ArrayList<LinkedHashMap<String,String>>();
|
||
if(null == boxListArray || boxListArray.size() <= 0) {
|
||
return AjaxResult.me().setSuccess(true).setMessage("未获取到:" + shipRequestName + "的发货单据信息").setErrorCode(400);
|
||
}
|
||
// 遍历 JSONArray 并转换为 LinkedHashMap
|
||
for (int i = 0; i < boxListArray.size(); i++) {
|
||
JSONObject jsonObject = boxListArray.getJSONObject(i);
|
||
LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<>();
|
||
// 将每个字段添加到 LinkedHashMap 中
|
||
for (String key : jsonObject.keySet()) {
|
||
linkedHashMap.put(key, jsonObject.getString(key));
|
||
}
|
||
// 添加到列表中
|
||
boxList.add(linkedHashMap);
|
||
}
|
||
|
||
EventInfo eventInfo = new EventInfoUtil().makeEventInfo("auxiliaryStockOut", user, "auxiliaryStockOut", "", "");
|
||
return materialShipService.MaterialShipRequestAuxiliaryStockOut(eventInfo,siteName,shipRequestName,user,boxList,commitDate);
|
||
}
|
||
|
||
/**
|
||
* 取消确认备货
|
||
* @param in
|
||
* @return
|
||
* @throws Exception
|
||
*/
|
||
@RequestMapping(value = "/auxiliaryDessign", method = RequestMethod.POST)
|
||
public AjaxResult AuxiliaryDessign(@RequestBody JSONObject in ) throws Exception{
|
||
String siteName = (String)in.get("SITENAME");
|
||
String user = (String)in.get("USER");
|
||
String shipRequestName = (String)in.get("SHIPREQUESTNAME");
|
||
if(StringUtils.isEmpty(shipRequestName)) {
|
||
return AjaxResult.me().setSuccess(true).setMessage("单号不能为空").setErrorCode(400);
|
||
}
|
||
EventInfo eventInfo = new EventInfoUtil().makeEventInfo("auxiliaryDessign", user, "auxiliaryDessign", "", "");
|
||
return materialShipService.MaterialShipRequestAuxiliaryCancelConfirmStocking(eventInfo,siteName,shipRequestName,user);
|
||
}
|
||
}
|