304 lines
16 KiB
Java
304 lines
16 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.framework.util.time.TimeStampUtil;
|
|
import com.cim.idm.model.CheckMark;
|
|
import com.cim.idm.model.CheckPlan;
|
|
import com.cim.idm.service.Impl.CheckPlanServiceImpl;
|
|
import com.cim.idm.service.Impl.ReturnStockIntoServiceImpl;
|
|
import com.cim.idm.service.impl.ToSAPServiceImpl;
|
|
import com.cim.idm.utils.AjaxResult;
|
|
import com.cim.idm.utils.EventInfoUtil;
|
|
import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy;
|
|
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey;
|
|
import com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo;
|
|
import 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.util.*;
|
|
|
|
/**
|
|
* 盘点 标记
|
|
* @author
|
|
*
|
|
*/
|
|
@RestController
|
|
@EnableAutoConfiguration
|
|
@RequestMapping("/api/checkmark")
|
|
public class CheckMarkController {
|
|
@Autowired
|
|
private ToSAPServiceImpl toSAPServiceImpl;
|
|
|
|
@Autowired
|
|
private com.cim.idm.service.Impl.CheckPlanServiceImpl CheckPlanServiceImpl;
|
|
@RequestMapping(value = "/createMark", method = RequestMethod.POST)
|
|
public AjaxResult createMark(@RequestBody JSONObject in ) throws Exception{
|
|
|
|
CheckMark javaObject = JSON.toJavaObject(in, CheckMark.class);
|
|
String checkplanname = javaObject.getCHECKPLANNAME();
|
|
String materialpackingname = javaObject.getMATERIALPACKINGNAME();
|
|
String sitename = javaObject.getSITENAME();
|
|
String checkplatate = javaObject.getCHECKPLATATE();
|
|
String sql = "UPDATE CHECKPLAN c SET CHECKPLATATE = :CHECKPLATATE WHERE CHECKPLANNAME = :CHECKPLANNAME AND SITENAME = :SITENAME AND MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
|
|
Map<String, Object> bindMap = new HashMap<String, Object>();
|
|
bindMap.put("SITENAME",sitename);
|
|
bindMap.put("MATERIALPACKINGNAME",materialpackingname);
|
|
bindMap.put("CHECKPLANNAME",checkplanname);
|
|
bindMap.put("CHECKPLATATE",checkplatate);
|
|
int update = IDMFrameServiceProxy.getSqlTemplate().update(sql, bindMap);
|
|
System.out.println("****"+update);
|
|
String sqlString = "UPDATE CHECKRECORD SET CHECKPLATATE = :CHECKPLATATE WHERE CHECKPLANNAME = :CHECKPLANNAME AND SITENAME = :SITENAME AND MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
|
|
int update2 = IDMFrameServiceProxy.getSqlTemplate().update(sqlString, bindMap);
|
|
System.out.println("****"+update2);
|
|
return AjaxResult.me().setResultObj(update);
|
|
}
|
|
|
|
// @RequestMapping(value = "/deleteMark", method = RequestMethod.POST)
|
|
// public AjaxResult deleteMark(@RequestBody JSONObject in ) throws Exception{
|
|
//
|
|
// CheckMark javaObject = JSON.toJavaObject(in, CheckMark.class);
|
|
// String checkplanname = javaObject.getCHECKPLANNAME();
|
|
// String materialpackingname = javaObject.getMATERIALPACKINGNAME();
|
|
// String sitename = javaObject.getSITENAME();
|
|
// String sql = "UPDATE CHECKPLAN c SET CHECKPLATATE = '否' WHERE CHECKPLANNAME = :CHECKPLANNAME AND SITENAME = :SITENAME AND MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
|
|
// Map<String, Object> bindMap = new HashMap<String, Object>();
|
|
// bindMap.put("SITENAME",sitename);
|
|
// bindMap.put("MATERIALPACKINGNAME",materialpackingname);
|
|
// bindMap.put("CHECKPLANNAME",checkplanname);
|
|
// int update = IDMFrameServiceProxy.getSqlTemplate().update(sql, bindMap);
|
|
// System.out.println("****"+update);
|
|
// String sqlString = "UPDATE CHECKRECORD SET CHECKPLATATE = '否' WHERE CHECKPLANNAME = :CHECKPLANNAME AND SITENAME = :SITENAME AND MATERIALPACKINGNAME = :MATERIALPACKINGNAME";
|
|
// int update2 = IDMFrameServiceProxy.getSqlTemplate().update(sql, bindMap);
|
|
// System.out.println("****"+update2);
|
|
// return AjaxResult.me().setResultObj(update);
|
|
// }
|
|
|
|
@RequestMapping(value = "/checkmarkAudit", method = RequestMethod.POST)
|
|
public AjaxResult checkmarkAudit(@RequestBody JSONObject in ) throws Exception{
|
|
|
|
CheckPlan javaObject = JSON.toJavaObject(in, CheckPlan.class);
|
|
String planDate = javaObject.getPlanDate(); //时间
|
|
String checkPlanName = javaObject.getCheckPlanName();//测试名
|
|
|
|
Map<String, Object> bindMap = new HashMap<String, Object>();
|
|
bindMap.put("PLANDATE",planDate);
|
|
bindMap.put("CHECKPLANNAME",checkPlanName);
|
|
|
|
|
|
String sql = "UPDATE CHECKPLAN c SET CHECKPLANSTATE = 'Audit' WHERE PLANDATE = :PLANDATE AND CHECKPLANNAME = :CHECKPLANNAME";
|
|
|
|
int update = IDMFrameServiceProxy.getSqlTemplate().update(sql, bindMap);
|
|
return AjaxResult.me().setResultObj(update);
|
|
}
|
|
|
|
//Approved
|
|
@RequestMapping(value = "/Auditcheckmark", method = RequestMethod.POST)
|
|
public AjaxResult Auditcheckmark(@RequestBody JSONObject in ) throws Exception{
|
|
|
|
CheckPlan javaObject = JSON.toJavaObject(in, CheckPlan.class);
|
|
String planDate = javaObject.getPlanDate(); //时间
|
|
String checkPlanName = javaObject.getCheckPlanName();//测试名
|
|
String user=javaObject.getUser();
|
|
String commitDate=javaObject.getCommitDate();
|
|
String opCode = javaObject.getOpCode();
|
|
if(StringUtils.isEmpty(commitDate))
|
|
{
|
|
commitDate=TimeStampUtil.getCurrentTime("yyyy-MM-dd");
|
|
}
|
|
String billCode="";
|
|
String siteName="SDK";
|
|
EventInfoUtil eventInfoUtil=new EventInfoUtil();
|
|
EventInfo makeEventInfo=new EventInfo();
|
|
ReturnStockIntoServiceImpl rs=new ReturnStockIntoServiceImpl();
|
|
|
|
Map<String, Object> bindMap = new HashMap<String, Object>();
|
|
bindMap.put("PLANDATE",planDate);
|
|
bindMap.put("CHECKPLANNAME",checkPlanName);
|
|
|
|
//盘点计划有,实物没有。做其他出库.zd.2024.8.30
|
|
// 获取盘亏的ERPLOCATION
|
|
String sql_erp = " SELECT DISTINCT ERPLOCATION FROM (\r\n"
|
|
+ " SELECT c.ERPLOCATION, (NVL(c2.MATERIALQUANTITY, 0) -c.MATERIALQUANTITY) AS DifferenceQuantity,\r\n"
|
|
+ " c.CHECKPLATATE,c.CHECKPLANSTATE\r\n" + " FROM CHECKPLAN c\r\n"
|
|
+ " LEFT JOIN CHECKRECORD c2 ON c.CHECKPLANNAME = c2.CHECKPLANNAME AND c.ERPLOCATION = c2.ERPLOCATION \r\n"
|
|
+ " AND c.MATERIALPACKINGNAME = c2.MATERIALPACKINGNAME AND c.SYSLOCATION = c2.ACTLOCATION\r\n"
|
|
+ " WHERE c.CHECKPLANNAME =:CHECKPLANNAME AND c.PLANDATE = :PLANDATE )\r\n"
|
|
+ " WHERE DifferenceQuantity<0 AND nvl(CHECKPLATATE,'是')='是' AND nvl(CHECKPLANSTATE,'N')<>'Approved' ";
|
|
List<Map<String, Object>> sr_erp = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql_erp, bindMap);
|
|
if (sr_erp.size() > 0) {
|
|
for (int i = 0; i < sr_erp.size(); i++) {
|
|
String erpLocation = sr_erp.get(i).get("ERPLOCATION").toString();
|
|
bindMap.put("ERPLOCATION", erpLocation);
|
|
//查找盘亏的批次
|
|
String sql_pk = " SELECT a.*,ABS(DifferenceQuantity)NUM FROM (\r\n" +
|
|
" SELECT c.MATERIALPACKINGNAME,c.MATERIALSPECNAME,m.UNIT,c.ERPLOCATION,c.SYSLOCATION,m.ERPFACTORY,\r\n" +
|
|
" NVL( c.MATERIALQUANTITY,0) AS MATERIALQUANTITY,NVL(c2.MATERIALQUANTITY, 0) AS MATERIALACTQUANTITY, \r\n" +
|
|
" (NVL(c2.MATERIALQUANTITY, 0) -c.MATERIALQUANTITY) AS DifferenceQuantity,c.CHECKPLATATE,c.CHECKPLANSTATE,\r\n" +
|
|
" m.CHARGE ,m.SDK_ID ,m.PHASE ,TO_CHAR(m.EXPIRINGDATE, 'YYYY-MM-DD HH24:MI:SS') expdate,\r\n" +
|
|
" TO_CHAR(m.MAKEDATE, 'YYYY-MM-DD HH24:MI:SS') proddate,TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') indate\r\n" +
|
|
" FROM CHECKPLAN c\r\n" +
|
|
" LEFT JOIN MATERIALPACKING m ON c.MATERIALPACKINGNAME=m.MATERIALPACKINGNAME \r\n" +
|
|
" LEFT JOIN CHECKRECORD c2 ON c.CHECKPLANNAME = c2.CHECKPLANNAME AND c.ERPLOCATION = c2.ERPLOCATION \r\n" +
|
|
" AND c.MATERIALPACKINGNAME = c2.MATERIALPACKINGNAME AND c.SYSLOCATION = c2.ACTLOCATION\r\n" +
|
|
" WHERE c.CHECKPLANNAME =:CHECKPLANNAME AND c.PLANDATE = :PLANDATE AND c.ERPLOCATION=:ERPLOCATION)A\r\n" +
|
|
" WHERE DifferenceQuantity<0 AND nvl(CHECKPLATATE,'是')='是' AND nvl(CHECKPLANSTATE,'N')<>'Approved' ";
|
|
List<Map<String, Object>> sr_pk = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql_pk, bindMap);
|
|
if(sr_pk.size()>0)
|
|
{
|
|
//调用SAP接口
|
|
billCode=toSAPServiceImpl.qtcrNoInvoiceForCheckPlan(sr_pk, "qtc", user, commitDate,opCode);
|
|
//更新盘点计划状态
|
|
String sql = "UPDATE CHECKPLAN c SET CHECKPLANSTATE = 'Approved' WHERE PLANDATE = :PLANDATE AND CHECKPLANNAME = :CHECKPLANNAME AND ERPLOCATION=:ERPLOCATION";
|
|
IDMFrameServiceProxy.getSqlTemplate().update(sql, bindMap);
|
|
//更新批次状态
|
|
List<MaterialPackingKey> mpkList=new ArrayList<>();
|
|
for(int j=0;j<sr_pk.size();j++)
|
|
{
|
|
MaterialPackingKey mpk=new MaterialPackingKey();
|
|
mpk.setSiteName(siteName);
|
|
mpk.setMaterialPackingName(sr_pk.get(j).get("MATERIALPACKINGNAME").toString());
|
|
mpkList.add(mpk);
|
|
}
|
|
SetEventInfo setEventInfo=new SetEventInfo();
|
|
Map<String,Object> userc=new HashMap<>();
|
|
userc.put("unDoID", billCode);
|
|
userc.put("stockState", "StockOut");
|
|
setEventInfo.setUserColumns(userc);
|
|
makeEventInfo = eventInfoUtil.makeEventInfo("StockOutForCheckPlan", user, "StockOutForCheckPlan");
|
|
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpkList, makeEventInfo, setEventInfo);
|
|
|
|
//存储物料凭证
|
|
rs.SaveUnDoInfo(billCode, commitDate);
|
|
}
|
|
}
|
|
}
|
|
|
|
//盘点计划没有,实物有。做其他入库.zd.2024.8.30
|
|
// 获取盘盈的ERPLOCATION
|
|
String sql_erp_py = " SELECT DISTINCT ERPLOCATION FROM (\r\n" +
|
|
"SELECT c.ERPLOCATION , c.CHECKPLANSTATE,\r\n" +
|
|
" (NVL(c.MATERIALQUANTITY, 0) -NVL(c2.MATERIALQUANTITY, 0)) AS DifferenceQuantity,c.CHECKPLATATE\r\n" +
|
|
" FROM CHECKRECORD c \r\n" +
|
|
" LEFT JOIN CHECKPLAN c2 ON c.CHECKPLANNAME = c2.CHECKPLANNAME AND c.ERPLOCATION = c2.ERPLOCATION \r\n" +
|
|
" AND c.MATERIALPACKINGNAME = c2.MATERIALPACKINGNAME AND c.ACTLOCATION = c2.SYSLOCATION \r\n" +
|
|
" WHERE c.CHECKPLANNAME =:CHECKPLANNAME AND c.PLANDATE = :PLANDATE )\r\n" +
|
|
" WHERE DifferenceQuantity>0 AND nvl(CHECKPLATATE,'是')='是' AND nvl(CHECKPLANSTATE,'N')<>'Approved' ";
|
|
List<Map<String, Object>> sr_erp_py = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql_erp_py, bindMap);
|
|
if (sr_erp_py.size() > 0) {
|
|
for (int i = 0; i < sr_erp_py.size(); i++) {
|
|
String erpLocation = sr_erp_py.get(i).get("ERPLOCATION").toString();
|
|
bindMap.put("ERPLOCATION", erpLocation);
|
|
// 查找盘盈的批次
|
|
String sql_py = " SELECT a.*,ABS(DifferenceQuantity)NUM FROM (\r\n" +
|
|
" SELECT c.MATERIALPACKINGNAME,c.MATERIALSPECNAME,c.ERPLOCATION,c.ACTLOCATION SYSLOCATION,m.ERPFACTORY,\r\n" +
|
|
" NVL( c.MATERIALQUANTITY,0) AS MATERIALQUANTITY,NVL(c2.MATERIALQUANTITY, 0) AS MATERIALACTQUANTITY, \r\n" +
|
|
" (NVL(c.MATERIALQUANTITY, 0) -NVL(c2.MATERIALQUANTITY, 0)) AS DifferenceQuantity,c.CHECKPLATATE,c.CHECKPLANSTATE,\r\n" +
|
|
" m.CHARGE ,m.SDK_ID ,m.PHASE ,TO_CHAR(m.EXPIRINGDATE, 'YYYY-MM-DD HH24:MI:SS') expdate,\r\n" +
|
|
" TO_CHAR(m.MAKEDATE, 'YYYY-MM-DD HH24:MI:SS') proddate,TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') indate\r\n" +
|
|
" FROM CHECKRECORD c \r\n" +
|
|
" LEFT JOIN MATERIALPACKING m ON c.MATERIALPACKINGNAME=m.MATERIALPACKINGNAME\r\n" +
|
|
" LEFT JOIN CHECKPLAN c2 ON c.CHECKPLANNAME = c2.CHECKPLANNAME AND c.ERPLOCATION = c2.ERPLOCATION \r\n" +
|
|
" AND c.MATERIALPACKINGNAME = c2.MATERIALPACKINGNAME AND c.ACTLOCATION = c2.SYSLOCATION \r\n" +
|
|
" WHERE c.CHECKPLANNAME =:CHECKPLANNAME AND c.PLANDATE = :PLANDATE AND c.ERPLOCATION =:ERPLOCATION)a\r\n" +
|
|
" WHERE DifferenceQuantity>0 AND nvl(CHECKPLATATE,'是')='是' AND nvl(CHECKPLANSTATE,'N')<>'Approved' ";
|
|
List<Map<String, Object>> sr_pk = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql_py, bindMap);
|
|
if (sr_pk.size() > 0) {
|
|
// 调用SAP接口
|
|
billCode = toSAPServiceImpl.qtcrNoInvoiceForCheckPlan(sr_pk, "qtr", user, commitDate,opCode);
|
|
// 更新盘点计划状态
|
|
String sql = "UPDATE CHECKRECORD c SET CHECKPLANSTATE = 'Approved' WHERE PLANDATE = :PLANDATE AND CHECKPLANNAME = :CHECKPLANNAME AND ERPLOCATION=:ERPLOCATION";
|
|
IDMFrameServiceProxy.getSqlTemplate().update(sql, bindMap);
|
|
// 更新批次状态
|
|
List<MaterialPackingKey> mpkList = new ArrayList<>();
|
|
for (int j = 0; j < sr_pk.size(); j++) {
|
|
MaterialPackingKey mpk = new MaterialPackingKey();
|
|
mpk.setSiteName(siteName);
|
|
mpk.setMaterialPackingName(sr_pk.get(j).get("MATERIALPACKINGNAME").toString());
|
|
mpkList.add(mpk);
|
|
String sqlu=" UPDATE MATERIALPACKING m SET m.ERPLOCATION =:ERPLOCATION,m.LOCATIONNAME =:LOCATIONNAME\r\n" +
|
|
" WHERE m.SITENAME =:SITENAME AND m.MATERIALPACKINGNAME =:MATERIALPACKINGNAME ";
|
|
Map<String,Object> bpu=new HashMap<>();
|
|
bpu.put("ERPLOCATION", erpLocation);
|
|
bpu.put("LOCATIONNAME", sr_pk.get(j).get("SYSLOCATION").toString());
|
|
bpu.put("SITENAME", siteName);
|
|
bpu.put("MATERIALPACKINGNAME", sr_pk.get(j).get("MATERIALPACKINGNAME").toString());
|
|
IDMFrameServiceProxy.getSqlTemplate().update(sqlu, bpu);
|
|
}
|
|
SetEventInfo setEventInfo = new SetEventInfo();
|
|
Map<String, Object> userc = new HashMap<>();
|
|
userc.put("unDoID", billCode);
|
|
userc.put("stockState", "Stocked");
|
|
setEventInfo.setUserColumns(userc);
|
|
makeEventInfo = eventInfoUtil.makeEventInfo("StockInForCheckPlan", user, "StockInForCheckPlan");
|
|
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(mpkList, makeEventInfo,
|
|
setEventInfo);
|
|
|
|
//存储物料凭证
|
|
rs.SaveUnDoInfo(billCode, commitDate);
|
|
}
|
|
}
|
|
}
|
|
|
|
return AjaxResult.me().setResultObj(null);
|
|
}
|
|
/**
|
|
* 创建盘点单
|
|
* @param in 参数
|
|
* @return
|
|
* @throws Exception
|
|
*/
|
|
@RequestMapping(value = "/createCheckPlan", method = RequestMethod.POST)
|
|
public AjaxResult CreateCheckPlan(@RequestBody JSONObject in ) throws Exception {
|
|
AjaxResult ajaxResult = new AjaxResult();
|
|
String user = (String) in.get("USER");
|
|
String palanDate = (String) in.get("PLANDATE");
|
|
String checkPlanName = (String) in.get("CHECKPLANNAME");
|
|
String moveFlag = (String) in.get("MOVEFLAG");
|
|
String siteName = (String) in.get("SITENAME");
|
|
|
|
//3、遍历map中的值
|
|
JSONArray boxListArray = in.getJSONArray("BOXLIST");
|
|
// 创建一个列表来存储转换后的 LinkedHashMap
|
|
List<LinkedHashMap<String, String>> boxList = new ArrayList<>();
|
|
// 遍历 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);
|
|
}
|
|
if("全盘".equals(boxList.get(0).get("PLANTYPE").toString())){
|
|
//如果是全盘,校验所选盘点日期是否已经创建过盘带单
|
|
String querySql = " SELECT * FROM CHECKPLAN" +
|
|
" WHERE SITENAME =:SITENAME AND PLANDATE =:PLANDATE AND PLANTYPE =:PLANTYPE ";
|
|
Map<String, Object> qeuryMap = new HashMap<String, Object> ();
|
|
qeuryMap.put("SITENAME", siteName);
|
|
qeuryMap.put("PLANDATE", palanDate);
|
|
qeuryMap.put("PLANTYPE", boxList.get(0).get("PLANTYPE").toString());
|
|
List<Map<String, Object>> queryCheckPlanList = IDMFrameServiceProxy.getSqlTemplate().queryForList(querySql, qeuryMap);
|
|
if(null != queryCheckPlanList && queryCheckPlanList.size() > 0){
|
|
return AjaxResult.me().setSuccess(true).setMessage("已存在方式为全盘日期:" + palanDate + "的盘点计划").setErrorCode(400);
|
|
}
|
|
}
|
|
//LinkedHashMap<String,String> linkedHashMap = ( LinkedHashMap<String,String>) in.get("BOXLIST");
|
|
EventInfo eventInfo = new EventInfoUtil().makeEventInfo("CreateCheckPlan", user, "CreateCheckPlan", "", "");
|
|
if(null != boxList && boxList.size() > 0 && StringUtils.isNotEmpty(user)){
|
|
return CheckPlanServiceImpl.CreateCheckPlanListCreate(eventInfo,boxList,palanDate,checkPlanName,moveFlag,siteName);
|
|
}
|
|
return AjaxResult.me().setSuccess(true).setErrorCode(200);
|
|
}
|
|
}
|