2025-03-18 13:42:06 +08:00

201 lines
8.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.MaterialPacking;
import com.cim.idm.model.MoveInDto;
import com.cim.idm.service.Impl.InvoiceServiceImpl;
import com.cim.idm.utils.AjaxResult;
import com.cim.idm.utils.CommonUtils;
import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey;
import com.cim.idm.wmspackage.materialpacking.management.info.MaterialPackingAssignShipRequestInfo;
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.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.util.*;
import com.cim.idm.service.Impl.MoveInServiceImpl;
@Api("移库接口")
@RestController
@RequestMapping("/MoveIn")
@EnableAutoConfiguration
public class MoveInController {
@Autowired
private MoveInServiceImpl MoveInServiceImpl;
CommonUtils untils=new CommonUtils();
/**
* 获取调拨退待操作单号集合
* @param in
* @return
*/
@RequestMapping(value = "/BindBarCodeToMoveIn", method = RequestMethod.POST)
public AjaxResult BindBarCodeToMoveIn(@RequestBody JSONObject in ){
MaterialPacking materialPacking = JSON.toJavaObject(in, MaterialPacking.class);
String locationName = materialPacking.getLocationName();
String charge = materialPacking.getCharge();
String materialPackingName = materialPacking.getMaterialPackingName();
String materialSpecName = materialPacking.getMaterialSpecName();
String shipRequestName = materialPacking.getShipRequestName();
String shipRequestDetailName = materialPacking.getShipRequestDetailName();
String user = materialPacking.getUser();
String materialQty=materialPacking.getMaterialQuantity();
String erpLocation=materialPacking.getErpLocation();
//恒温恒湿管控
if(!(untils.JudgeMentERPLocationAndMaterialSpec(erpLocation,materialSpecName)))
{
throw new GlobalException("物料为:"+materialSpecName+" 仓库为:"+erpLocation+" ,不符合恒温恒湿管理");
}
//判断条码是否存在且状态是在库
String sql = "SELECT * FROM MATERIALPACKING M WHERE M.CHARGE = :CHARGE AND M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME"
+ " AND M.MATERIALSPECNAME = :MATERIALSPECNAME AND M.STOCKSTATE = 'Stocked' AND (M.SHIPREQUESTNAME <> :SHIPREQUESTNAME OR M.SHIPREQUESTNAME IS NULL )";
Map<String, Object> bindMap = new HashMap<String, Object>();
bindMap.put("MATERIALSPECNAME",materialSpecName);
bindMap.put("CHARGE",charge );
bindMap.put("SHIPREQUESTNAME",shipRequestName );
bindMap.put("MATERIALPACKINGNAME",materialPackingName );
List<Map<String,Object>> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap);
if(Objects.isNull(list) || list.isEmpty()) {
throw new GlobalException("未找到对应的条码出库记录!");
}
if(list.size() > 1) {
throw new GlobalException("批次找到不唯一记录,请联系IT处理");
}
String sql3 = "SELECT\r\n" +
" M.*,\r\n" +
" CASE\r\n" +
" WHEN M.MATURATIONINTIME IS NOT NULL THEN SYSDATE - M.MATURATIONINTIME - m2.MATURATIONTIME\r\n" +
" ELSE 1\r\n" +
" END FLAG\r\n" +
"FROM\r\n" +
" MATERIALPACKING M\r\n" +
"LEFT JOIN MATERIALSPEC m2 ON\r\n" +
" M.MATERIALSPECNAME = m2.MATERIALSPECNAME\r\n" +
"WHERE\r\n" +
" M.STOCKSTATE = 'Stocked'\r\n" +
" AND M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME ";
Map<String, Object> bindMap3 = new HashMap<String, Object>();
bindMap.put("MATERIALPACKINGNAME", materialPacking.getMaterialPackingName());
List<Map<String,Object>> list3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql3, bindMap3);
if(Objects.isNull(list3) || list3.isEmpty()) {
throw new GlobalException("未找到对应的数据!");
}
if(!Objects.isNull(list3) && !list3.isEmpty()) {
String string = list.get(0).get("FLAG").toString();
float parseFloat = Float.parseFloat(string);
float abs = Math.abs(parseFloat);
if (parseFloat < 0) {
throw new GlobalException("还差" + abs + "天才能熟化出库!");
}
}
//查找该单据该物料下的单据明细+需求数量+绑定数量
String ShipDetailSql = "SELECT SHIPREQUESTDETAILNAME ,NVL(REQUESTQUANTITY ,0) REQUESTQUANTITY,NVL(ASSIGNEDQUANTITY ,0) ASSIGNEDQUANTITY FROM MATERIALSHIPREQUESTDETAIL m WHERE SHIPREQUESTNAME =:SHIPREQUESTNAME AND MATERIALSPECNAME =:MATERIALSPECNAME";
Map<String, Object> ShipDetailMap = new HashMap<String, Object>();
ShipDetailMap.put("SHIPREQUESTNAME",shipRequestName);
ShipDetailMap.put("MATERIALSPECNAME",materialSpecName );
List<Map<String,Object>> ShipDetaillist = IDMFrameServiceProxy.getSqlTemplate().queryForList(ShipDetailSql, ShipDetailMap);
if(Objects.isNull(ShipDetaillist) || ShipDetaillist.isEmpty()) {
throw new GlobalException("未找到对应的转库入库明细!");
}
for(int i=0;i<ShipDetaillist.size();i++)
{
String shipNo=(String) ShipDetaillist.get(i).get("SHIPREQUESTDETAILNAME");
BigDecimal requestQtyBigDecimal = (BigDecimal) ShipDetaillist.get(i).get("REQUESTQUANTITY");
BigDecimal assQtyBigDecimal = (BigDecimal) ShipDetaillist.get(i).get("ASSIGNEDQUANTITY");
float requestQtyFloat = requestQtyBigDecimal.floatValue();
float assQtyFloat = assQtyBigDecimal.floatValue();
if(requestQtyFloat>=assQtyFloat+Float.parseFloat(materialQty))
{
shipRequestDetailName=shipNo;
break;
}
}
if("".equals(shipRequestDetailName))
throw new GlobalException("该单据下无该物料的明细或该明细剩余接收数量低于该标签数量");
boolean bindBarCodeToMoveIn = MoveInServiceImpl.BindBarCodeToMoveIn(materialPackingName, charge, materialSpecName, user, shipRequestName, shipRequestDetailName,locationName);
if (!bindBarCodeToMoveIn) {
throw new GlobalException("绑定失败!");
}
return AjaxResult.me().setResultObj(list);
}
/**
* 获取调拨退待操作单号集合
* @param in
* @return
* @throws Exception
*/
@RequestMapping(value = "/CommitMoveInInvoice", method = RequestMethod.POST)
public AjaxResult CommitMoveInInvoice(@RequestBody JSONObject in ) throws Exception{
MaterialPacking materialPacking = JSON.toJavaObject(in, MaterialPacking.class);
String locationName = materialPacking.getLocationName();
String charge = materialPacking.getCharge();
String materialPackingName = materialPacking.getMaterialPackingName();
String materialSpecName = materialPacking.getMaterialSpecName();
String shipRequestName = materialPacking.getShipRequestName();
String shipRequestDetailName = materialPacking.getShipRequestDetailName();
String user = materialPacking.getUser();
String commitDate = materialPacking.getCommitDate();
String opCode = materialPacking.getOpCode();
boolean commitMoveInInvoice = MoveInServiceImpl.CommitMoveInInvoice(shipRequestName, user,commitDate,opCode);
if (!commitMoveInInvoice) {
throw new GlobalException("过账失败!");
}
return AjaxResult.me().setResultObj(null);
}
@RequestMapping(value = "/AllCommitMoveInInvoice", method = RequestMethod.POST)
public AjaxResult AllCommitMoveInInvoice(@RequestBody JSONObject in ) throws Exception {
MoveInDto materialPacking = JSON.toJavaObject(in, MoveInDto.class);
String locationName = materialPacking.getLocationName();
// String charge = materialPacking.getCharge();
String materialPackingName = materialPacking.getMaterialPackingName();
// String materialSpecName = materialPacking.getMaterialSpecName();
String shipRequestName = materialPacking.getShipRequestName();
String shipRequestDetailName = materialPacking.getShipRequestDetailName();
String user = materialPacking.getUser();
String commitDate = materialPacking.getCommitDate();
String opCode = materialPacking.getOpCode();
List<com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking> boxList = materialPacking.getBoxList();
boolean bindBarCodeToMoveIn = MoveInServiceImpl.BindBarCodeToMoveIn2(boxList,materialPackingName, user, shipRequestName, shipRequestDetailName,locationName);
if (!bindBarCodeToMoveIn) {
throw new GlobalException("货位绑定到条码失败!");
}
boolean commitMoveInInvoice = MoveInServiceImpl.CommitMoveInInvoice(shipRequestName, user,commitDate,opCode);
if (!commitMoveInInvoice) {
throw new GlobalException("过账失败!");
}
return AjaxResult.me().setResultObj(null);
}
}