2025-03-JS-SDK-svr/zi-wms-pda/src/main/java/com/cim/idm/controller/NoInvoiceManagerContoller.java
2025-05-23 17:48:27 +08:00

478 lines
21 KiB
Java

package com.cim.idm.controller;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import com.cim.idm.constants.receive.ReceiveTypeEnums;
import com.cim.idm.exception.GlobalException;
import com.cim.idm.framework.data.EventInfo;
import com.cim.idm.model.po.MaterialReceiveRequest;
import com.cim.idm.model.ShelfDto;
import com.cim.idm.service.Impl.NoInvoiceManagerServiceImpl;
import com.cim.idm.service.Impl.SDKMaterialPackingServiceImpl;
import com.cim.idm.service.impl.ToSAPServiceImpl;
import com.cim.idm.utils.AjaxResult;
import com.cim.idm.utils.CommonUtils;
import com.cim.idm.utils.EventInfoUtil;
import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey;
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 com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cim.idm.framework.IDMFrameServiceProxy;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking;
import io.swagger.annotations.Api;
@Api("已批次管理入库")
@RestController
@RequestMapping("/api/NoInvoice")
@EnableAutoConfiguration
public class NoInvoiceManagerContoller {
@Autowired
NoInvoiceManagerServiceImpl NoInvoiceManagerServiceImpl;
@Autowired
private ToSAPServiceImpl toSAPService;
private EventInfo makeEventInfo;
@Autowired
private com.cim.idm.service.Impl.SDKMaterialPackingServiceImpl SDKMaterialPackingServiceImpl;
CommonUtils untils=new CommonUtils();
/**
* 获取其他待入集合
* @param in
* @return
*/
@RequestMapping(value = "/getBarCode", method = RequestMethod.POST)
public AjaxResult getQTRList(@RequestBody JSONObject in ){
MaterialPacking m = JSON.toJavaObject(in, MaterialPacking.class);
String materialPackingName = m.getMaterialPackingName();
String locationName = m.getLocationName();
String erpFactory = m.getErpFactory();
String erpLocation = m.getErpLocation();
String createUser = m.getCreateUser();
String[] split = materialPackingName.split("\\|");
// 470110856|1|C|75mm*1000m|SHBP01JT1202305240009|20230524|11|75
String materialSpecName = split[0];
String phase = split[2];
String specName = split[3];
String charge = split[4];
String makeDate = split[5];
String unit = split[6];
String qty = split[7];
//恒温恒湿管控
if(!(untils.JudgeMentERPLocationAndMaterialSpec(erpLocation,materialSpecName)))
{
throw new GlobalException("物料为:"+materialSpecName+" 仓库为:"+erpLocation+" ,不符合恒温恒湿管理");
}
Map<String, Object> expridate = getExpridate(makeDate, materialSpecName);
String sql = "SELECT STOCKSTATE, MAKEDATE, EXPIRINGDATE, CHARGE, MATERIALQUANTITY, ERPFACTORY,ERPLOCATION,SUPPLIERNAME,LOCATIONNAME,SDK_ID,PHASE,MATERIALSPECNAME FROM MATERIALPACKING WHERE ((MATERIALSPECNAME = :MATERIALSPECNAME AND CHARGE = :CHARGE) OR MATERIALPACKINGNAME = :MATERIALPACKINGNAME) ";
Map<String, Object> hashMap = new HashMap<String,Object> ();
hashMap.put("MATERIALSPECNAME", materialSpecName);
hashMap.put("CHARGE", charge);
hashMap.put("MATERIALPACKINGNAME", materialPackingName);
List<Map<String,Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap);
if (queryForList == null || queryForList.size() < 1) {
throw new GlobalException("录入批次系统未在系统流转");
}
if ("Stocked".equals(queryForList.get(0).get("STOCKSTATE").toString())) {
throw new GlobalException("录入批次在库");
}
String packingGrade = queryForList.get(0).get("OQARESULT") == null ? "" : queryForList.get(0).get("OQARESULT").toString();
Boolean judgeMtaerialStateWithERPLocation = untils.JudgeMtaerialStateWithERPLocation(erpLocation, packingGrade);
if (!judgeMtaerialStateWithERPLocation) {
throw new GlobalException("仓库类型和物料品质等级不一致");
}
List<Map<String, Object>> arrayList = new ArrayList<Map<String,Object>> ();
Map<String,Object> map = new HashMap<String,Object> ();
map.put("MATERIALPACKINGNAME", materialPackingName);
map.put("MATERIALSPECNAME", queryForList.get(0).get("MATERIALSPECNAME") == null ? "" : queryForList.get(0).get("MATERIALSPECNAME") .toString());
map.put("CHARGE", queryForList.get(0).get("CHARGE") == null ? "" : queryForList.get(0).get("CHARGE") .toString());
map.put("PHASE", phase);
map.put("MATERIALQUANTITY", queryForList.get(0).get("MATERIALQUANTITY") == null ? "" : queryForList.get(0).get("MATERIALQUANTITY") .toString());
map.put("SPECNAME", specName);
map.put("LOCATIONNAME", locationName);
map.put("ERPFACTORY", erpFactory);
map.put("ERPLOCATION", erpLocation);
map.put("SDK_ID", queryForList.get(0).get("SDK_ID") == null ? "" : queryForList.get(0).get("SDK_ID") .toString());
// if (expridate != null) {
// map.put("MAKEDATE", makeDate);
// map.put("EXPRIDATE", expridate);
// }
map.put("MAKEDATE", queryForList.get(0).get("MAKEDATE") == null ? "" : queryForList.get(0).get("MAKEDATE") .toString());
map.put("EXPIRINGDATE", queryForList.get(0).get("EXPIRINGDATE") == null ? "" : queryForList.get(0).get("EXPIRINGDATE") .toString());
arrayList.add(map);
return AjaxResult.me().setResultObj(arrayList);
}
/**
* 获取其他待出接口
* @param in
* @return
*/
@RequestMapping(value = "/getQTCList", method = RequestMethod.POST)
public AjaxResult getQTCList(@RequestBody JSONObject in ){
MaterialPacking materialPacking = JSON.toJavaObject(in, MaterialPacking.class);
String sql = "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" +
" bsn.DESCRIPTION\r\n" +
"FROM\r\n" +
" MATERIALPACKING M\r\n" +
"LEFT JOIN MATERIALSPEC m2 ON\r\n" +
" M.MATERIALSPECNAME = m2.MATERIALSPECNAME\r\n" +
"LEFT JOIN BS_ERPLOCATION bsn ON\r\n" +
" bsn.ERPLOCATIONNAME = M.ERPLOCATION\r\n" +
"WHERE\r\n" +
" M.STOCKSTATE = 'Stocked'\r\n" +
" AND M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
Map<String, Object> bindMap = new HashMap<String, Object>();
bindMap.put("MATERIALPACKINGNAME", materialPacking.getMaterialPackingName());
List<Map<String,Object>> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap);
if(Objects.isNull(list) || list.isEmpty()) {
throw new GlobalException("未找到对应的数据!");
}
// if(!Objects.isNull(list) && !list.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 description = list.get(0).get("DESCRIPTION") == null ? "" : list.get(0).get("DESCRIPTION").toString();
if(!description.contains("半成品-B")) {
throw new GlobalException("该产品不是报废材料,不允许出库!");
}
// 过账Z07
return AjaxResult.me().setResultObj(list);
}
@RequestMapping(value = "/getQTCOutList", method = RequestMethod.POST)
public AjaxResult getQTCOutList(@RequestBody JSONObject in ){
MaterialPacking materialPacking = JSON.toJavaObject(in, MaterialPacking.class);
String sql = "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" +
" bsn.DESCRIPTION\r\n" +
"FROM\r\n" +
" MATERIALPACKING M\r\n" +
"LEFT JOIN MATERIALSPEC m2 ON\r\n" +
" M.MATERIALSPECNAME = m2.MATERIALSPECNAME\r\n" +
"LEFT JOIN BS_ERPLOCATION bsn ON\r\n" +
" bsn.ERPLOCATIONNAME = M.ERPLOCATION\r\n" +
"WHERE\r\n" +
" M.STOCKSTATE = 'Stocked'\r\n" +
" AND M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
Map<String, Object> bindMap = new HashMap<String, Object>();
bindMap.put("MATERIALPACKINGNAME", materialPacking.getMaterialPackingName());
List<Map<String,Object>> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap);
if(Objects.isNull(list) || list.isEmpty()) {
throw new GlobalException("未找到对应的数据!");
}
return AjaxResult.me().setResultObj(list);
}
/**
* 报废出提交
* @param in
* @return
*/
@RequestMapping(value = "/QTCCommit", method = RequestMethod.POST)
public AjaxResult QTCCommit(@RequestBody JSONObject in ){
// List<MaterialPacking> object = (List<MaterialPacking>) in.get("boxList");
MaterialReceiveRequest sl = JSON.toJavaObject(in, MaterialReceiveRequest.class);
List<MaterialPacking> boxList = sl.getBoxList();
String user2 = sl.getUser();
String siteName = sl.getSiteName();
String user = in.get("user").toString();
String commitDatesString = sl.getCommitDate();
String commitDate = commitDatesString + " 00:00:00";
String opCode = sl.getOpCode();
// 移动类型
String qtc = sl.getQtc();
// 成本中心
String costName = sl.getCostName();
ArrayList<MaterialPackingKey> arrayList = new ArrayList<>();
for(MaterialPacking map : boxList) {
// String supplierCharge = map.get("SUPPLIERCHARGE") == null ? "" : map.get("SUPPLIERCHARGE").toString();
MaterialPackingKey MaterialPackingKey = new MaterialPackingKey("SDK", map.getMaterialPackingName());
arrayList.add(MaterialPackingKey);
}
String undoId = "";
try {
// NoInvoiceManagerServiceImpl.QTC(boxList,user,siteName,commitDate,opCode);
undoId = toSAPService.MaterialScrapStockOut(arrayList,siteName,user,commitDate,opCode,qtc,costName);
} catch (Exception e) {
e.printStackTrace();
return AjaxResult.me().setSuccess(false).setMessage(e.toString());
}
// 发送过账
EventInfoUtil util = new EventInfoUtil();
String enentName = "报废出库";
if ("Z05".equals(qtc)) {
enentName = "盘亏出库";
}
makeEventInfo = util.makeEventInfo(enentName, user, enentName);
// 更新库存状态
SDKMaterialPackingServiceImpl.SaveUnDoInfo( undoId,commitDate);
// SDKMaterialPackingServiceImpl.updateStockState( makeEventInfo, undoId,opCode);
// 更新入库凭证和库存状态
SDKMaterialPackingServiceImpl.updateUndoIdByList(boxList, undoId, makeEventInfo,opCode);
return AjaxResult.me().setResultObj(null);
}
@RequestMapping(value = "/QTRCommit", method = RequestMethod.POST)
public AjaxResult QTCRommit(@RequestBody JSONObject in ) throws ParseException{
MaterialReceiveRequest sl = JSON.toJavaObject(in, MaterialReceiveRequest.class);
String commitDateString = sl.getCommitDate();
List<MaterialPacking> boxList = sl.getBoxList();
String user2 = sl.getUser();
String opCode = sl.getOpCode();
// ArrayList<MaterialPacking> arrayList = new ArrayList<>();
// arrayList.add(selectByKey);
String commitDate = commitDateString + " 00:00:00";
String costName = sl.getCostName();
String lifnr = sl.getLifnr();
String qtc = sl.getQtc();
NoInvoiceManagerServiceImpl.QTR(boxList,user2,commitDate,opCode,costName,lifnr,qtc);
return AjaxResult.me().setResultObj(null);
}
@RequestMapping(value = "/getChangeLocationBarCode", method = RequestMethod.POST)
public AjaxResult getChangeLocationBarCode(@RequestBody JSONObject in ){
MaterialPacking m = JSON.toJavaObject(in, MaterialPacking.class);
String materialPackingName = m.getMaterialPackingName();
String locationName = m.getLocationName();
String erpFactory = m.getErpFactory();
String erpLocation = m.getErpLocation();
String supplierCharge = m.getSupplierCharge();
String createUser = m.getCreateUser();
String[] split = materialPackingName.split("\\|");
// 470110856|1|C|75mm*1000m|SHBP01JT1202305240009|20230524|11|75
String materialSpecName = split[0];
// String phase = split[2];
String specName = split[3];
// String charge = split[4];
// String makeDate = split[5];
// String unit = split[6];
// String qty = split[7];
// String materialSpecName=m.getMaterialSpecName();
if (erpFactory == null || "".equals(erpFactory)) {
throw new GlobalException("组织不能为空!");
}
if (erpLocation == null || "".equals(erpLocation)) {
throw new GlobalException("仓库不能为空!");
}
if (locationName == null || "".equals(locationName)) {
throw new GlobalException("货位不能为空!");
}
//判断货位是否在同一个ERP组织下
String sql = "SELECT PACKINGGRADE,CHARGE, MATERIALQUANTITY, ERPFACTORY,ERPLOCATION,SUPPLIERNAME,LOCATIONNAME,SDK_ID,PHASE,MATERIALSPECNAME FROM MATERIALPACKING M WHERE M.STOCKSTATE = 'Stocked' AND M.MATERIALPACKINGNAME = :MATERIALPACKINGNAME ";
Map<String, Object> bindMap = new HashMap<String, Object>();
bindMap.put("MATERIALPACKINGNAME", materialPackingName);
List<Map<String,Object>> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap);
if(Objects.isNull(list) || list.isEmpty()) {
throw new GlobalException("未找到对应的数据!该标签为空或者不为在库状态");
}
// 良品与不良品与仓校验
String packingGrade = list.get(0).get("PACKINGGRADE") == null ? "" : list.get(0).get("PACKINGGRADE").toString();
Boolean judgeMtaerialStateWithERPLocation = untils.JudgeMtaerialStateWithERPLocation(erpLocation, packingGrade);
if (!judgeMtaerialStateWithERPLocation) {
throw new GlobalException("仓库类型和物料品质等级不一致");
}
if ("101".equals(erpFactory) || "102".equals(erpFactory)) {
if ("OK".equals(packingGrade)) {
//恒温恒湿管控
if (!(untils.JudgeMentERPLocationAndMaterialSpec(erpLocation, materialSpecName))) {
throw new GlobalException("物料为:" + materialSpecName + " 仓库为:" + erpLocation + " ,不符合恒温恒湿管理");
}
}
}
//判断是否需要绑定供应商
String SupSql="SELECT ASSFLAG FROM SUPPLIER s WHERE SUPPLIERNO =:SUPPLIERNO";
Map<String, Object> bindMap2 = new HashMap<String, Object>();
bindMap2.put("SUPPLIERNO", list.get(0).get("SUPPLIERNAME") == null ? "" : list.get(0).get("SUPPLIERNAME").toString());
List<Map<String,Object>> list2 = IDMFrameServiceProxy.getSqlTemplate().queryForList(SupSql, bindMap2);
if (list2 == null || list2.size() < 1) {
} else {
String flag = list2.get(0).get("ASSFLAG") == null ? "N" : list2.get(0).get("ASSFLAG").toString();
if("Y".equals(flag) && ("".equals(supplierCharge) || supplierCharge == null ))
{
throw new GlobalException("需要绑定供应商批次!");
}
}
if (!erpFactory.equals(list.get(0).get("ERPFACTORY").toString()) || !erpLocation.equals(list.get(0).get("ERPLOCATION").toString()) ) {
throw new GlobalException("目标仓库与组织与原库存不一致!组织:"+erpFactory+"库存组织:"+list.get(0).get("ERPFACTORY")+"仓库:"+erpLocation+"目标仓库:"+list.get(0).get("ERPLOCATION"));
}
String preLocation = list.get(0).get("LOCATIONNAME") == null ? "" : list.get(0).get("LOCATIONNAME").toString();
if (list.get(0).get("LOCATIONNAME") != null && locationName.equals(preLocation) ) {
throw new GlobalException("货位一致不需要调整");
}
List<Map<String, Object>> arrayList = new ArrayList<Map<String,Object>> ();
Map<String,Object> map = new HashMap<String,Object> ();
map.put("MATERIALPACKINGNAME", materialPackingName);
map.put("MATERIALSPECNAME", list.get(0).get("MATERIALSPECNAME"));
map.put("CHARGE", list.get(0).get("CHARGE"));
map.put("PHASE", list.get(0).get("PHASE"));
map.put("SUPPLIERCHARGE", supplierCharge);
map.put("MATERIALQUANTITY", list.get(0).get("MATERIALQUANTITY"));
map.put("SPECNAME", specName);
map.put("LOCATIONNAME", locationName);
map.put("PRELOCATIONNAME", preLocation);
map.put("ERPFACTORY", erpFactory);
map.put("ERPLOCATION", erpLocation);
// map.put("SUPPLIERCHARGE", supplierCharge);
map.put("SDK_ID", list.get(0).get("SDK_ID") == null ? "" : list.get(0).get("SDK_ID").toString());
arrayList.add(map);
return AjaxResult.me().setResultObj(arrayList);
}
@RequestMapping(value = "/getSupplierChargeByPakingname", method = RequestMethod.POST)
public AjaxResult getSupplierChargeByPakingname(@RequestBody JSONObject in ){
MaterialPacking m = JSON.toJavaObject(in, MaterialPacking.class);
String materialPackingName = m.getMaterialPackingName();
String siteName = "SDK";
String sql = "SELECT\n" +
"\tm.MATERIALPACKINGNAME ,\n" +
"\tm.SUPPLIERCHARGE\n" +
"FROM\n" +
"\tMATERIALPACKING m\n" +
"WHERE\n" +
"\tm.MATERIALPACKINGNAME = :MATERIALPACKINGNAME\n" +
"\tAND m.SITENAME = :SITENAME";
Map<String, Object> bindMap = new HashMap<String, Object>();
bindMap.put("MATERIALPACKINGNAME", materialPackingName);
bindMap.put("SITENAME", siteName);
List<Map<String,Object>> list = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, bindMap);
String supplierCharge = "";
if(list != null && list.size() > 0){
for(Map<String,Object> map : list) {
supplierCharge = map.get("SUPPLIERCHARGE") == null ? "" : map.get("SUPPLIERCHARGE").toString();
if(supplierCharge == null) {
return AjaxResult.me().setSuccess(false).setMessage("当前批次之前未绑定供应商批次,请确认");
}
}
} else {
return AjaxResult.me().setSuccess(false).setMessage("条码不存在");
}
List<Map<String, Object>> arrayList = new ArrayList<Map<String,Object>> ();
Map<String,Object> map = new HashMap<String,Object> ();
map.put("MATERIALPACKINGNAME", materialPackingName);
map.put("SUPPLIERCHARGE", supplierCharge);
arrayList.add(map);
return AjaxResult.me().setSuccess(true).setResultObj(arrayList);
}
/**
* 货位移动
* @param in
* @return
*/
@RequestMapping(value = "/ChangeLocation", method = RequestMethod.POST)
public AjaxResult ChangeLocation(@RequestBody JSONObject in ){
// com.zxy.idm.wms.solution.model.MaterialPacking materialPacking = JSON.toJavaObject(in, ShelfDto.class);
ShelfDto ShelfDto = JSON.toJavaObject(in, ShelfDto.class);
String siteName = ShelfDto.getSiteName();
String user = ShelfDto.getUser();
String commitDateString = ShelfDto.getCommitDate();
String opCode = ShelfDto.getOpCode();
String commitDate = commitDateString + " 00:00:00";
// List<MaterialPackingKey> list1 = new ArrayList<> ();
// for (MaterialPacking materialPacking : ShelfDto.getBoxList()) {
// MaterialPackingKey materialPackingKey;
// materialPackingKey = new MaterialPackingKey();
// materialPackingKey.setSiteName(siteName);
// materialPackingKey.setMaterialPackingName(materialPacking.getMaterialPackingName());
// list1.add(materialPackingKey);
// }
// List<MaterialPacking> selectByKey = MaterialPackingServiceProxy.getMaterialPackingService().selectByKey(list1);
// ArrayList<MaterialPacking> arrayList = new ArrayList<>();
// arrayList.add(selectByKey);
// NoInvoiceManagerServiceImpl.PDAShelf(ShelfDto.getBoxList(),user,commitDate,opCode);
// String SelectSql="SELECT m.MATERIALSPECNAME ,m2.DESC_CN ,m2.DESCRIPTION ,m.PHASE,m.CHARGE,m.MATERIALQUANTITY FROM MATERIALPACKING m LEFT JOIN MATERIALSPEC m2 ON m.MATERIALSPECNAME =m2.MATERIALSPECNAME WHERE m.MATERIALPACKINGNAME =:MATERIALPACKINGNAME";
// Map<String, Object> bindMap3 = new HashMap<String, Object>();
// bindMap3.put("MATERIALPACKINGNAME", materialPackingName);
// List<Map<String,Object>> list3 = IDMFrameServiceProxy.getSqlTemplate().queryForList(SelectSql, bindMap3);
return AjaxResult.me().setResultObj(null);
}
/**
* 批次换绑供应商批次
*/
@RequestMapping(value = "/ChangeSupplierCharge", method = RequestMethod.POST)
public AjaxResult ChangeSupplierCharge(@RequestBody JSONObject in ){
ShelfDto ShelfDto = JSON.toJavaObject(in, ShelfDto.class);
String user = ShelfDto.getUser();
// NoInvoiceManagerServiceImpl.ChangeChargeName(ShelfDto.getBoxList(),user);
return AjaxResult.me().setResultObj(null);
}
public static Map<String,Object> getExpridate(String makeDate,String materialSpecName) {
String sql = "SELECT TO_TIMESTAMP(:MAKEDATE,'YYYYMMDD') MAKEDATE, NVL(T.EXPIRATIONDAY,180) + TO_TIMESTAMP(:MAKEDATE,'YYYYMMDD') EXP FROM MATERIALSPEC T WHERE T.MATERIALSPECNAME = :MATERIALSPECNAME";
Map<String, Object> hashMap = new HashMap<String,Object> ();
hashMap.put("MATERIALSPECNAME", materialSpecName);
hashMap.put("MAKEDATE", makeDate);
List<Map<String,Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap);
if (queryForList != null && queryForList.size() > 0) {
HashMap<String, Object> hashMap2 = new HashMap<String, Object> ();
hashMap2.put("MAKEDATE", queryForList.get(0).get("MAKEDATE"));
hashMap2.put("EXP", queryForList.get(0).get("EXP"));
return new HashMap<String, Object> ();
}
return null;
}
}