231 lines
11 KiB
Java
Raw Normal View History

2025-03-10 13:46:51 +08:00
package com.cim.idm.controller;
import com.alibaba.fastjson.JSONObject;
import com.cim.idm.framework.IDMFrameServiceProxy;
import com.cim.idm.framework.data.EventInfo;
import com.cim.idm.framework.template.workflow.BpelExecuter;
import com.cim.idm.model.BarCodeDto;
import com.cim.idm.model.ErpMessageLog;
import com.cim.idm.utils.AjaxResult;
import com.cim.idm.utils.BarCodeAnalyUtils;
import com.cim.idm.utils.EventInfoUtil;
import com.cim.idm.wmsextend.generic.util.ConvertUtil;
import com.cim.idm.wmspackage.materialpacking.MaterialPackingServiceProxy;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPacking;
import com.cim.idm.wmspackage.materialpacking.management.data.MaterialPackingKey;
import com.cim.idm.wmspackage.materialpacking.management.info.SetEventInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@RestController
@RequestMapping("/api/wms")
@EnableAutoConfiguration
public class WCSController {
@Autowired(required = false)
private BpelExecuter bpelExecuter;
private static final Logger log = LoggerFactory.getLogger(WCSController.class);
@RequestMapping(value = "/TransportCommandCompleted", method = RequestMethod.POST)
public String SyncErpData(@RequestBody JSONObject in) {
log.debug("***********************************");
log.debug("***********************************");
log.debug(in.toString());
log.debug("***********************************");
log.debug("***********************************");
// {"PALLETNAME":"470110856|1|C|75mm*1000m|SHBP01JT12023052400092|20230524|11|75","SHELFNAME":"F-11-01-01","TRAYNAME":"050101","TRANSPORTCOMMANDID":"TRANS202405010925233345514","WEIGHT":"0","TRANSPORTCOMMANDTYPE":"IN"}
// TRANSPORTCOMMANDTYPE
// TRANSPORTCOMMANDID
// TRAYNAME
// PALLETNAME
// SHELFNAME
// TRANSPORTCOMMANDID
// RETURNCODE
// RETURNMESSAGE
//通过ID获取立库的货区托盘库的货区不自动解绑AGV的要更新货区跟托盘字段
String TRANSPORTCOMMANDTYPE = in.get("TRANSPORTCOMMANDTYPE") == null ? "" : in.get("TRANSPORTCOMMANDTYPE") .toString();
String TRANSPORTCOMMANDID = in.get("TRANSPORTCOMMANDID") == null ? "" : in.get("TRANSPORTCOMMANDID").toString();
String TRAYNAME = in.get("TRAYNAME") == null ? "" : in.get("TRAYNAME").toString();
AjaxResult result = new AjaxResult();
ErpMessageLog loginfo = new ErpMessageLog();
loginfo.setServerName("WCSToWms");
loginfo.setMessageId("");
loginfo.setEventName("WCS" + TRANSPORTCOMMANDTYPE);
loginfo.setEventUser("WCS");
loginfo.setId(UUID.randomUUID().toString());
loginfo.setInterfaceTime(ConvertUtil.getCurrTime("yyy-MM-dd HH:mm:ss"));
loginfo.setSendMsg(in.toJSONString());
result = AjaxResult.me().setSuccess(true).setMessage("执行成功");
loginfo.setResultCode("success");
loginfo.setReturnMsg(JSONObject.toJSONString(result));
saveMessageLog(loginfo);
String SHELFNAME = in.get("SHELFNAME") == null ? "" : in.get("SHELFNAME").toString();
String PALLETNAME = in.get("PALLETNAME") == null ? "" : in.get("PALLETNAME").toString();
//判断是否是WMS下任务给立库如果是则根据ID去更新状态如果不是需要根据货位去判断是出库还是入库
if (!"".equals(TRANSPORTCOMMANDID)) {
String sql = "SELECT T.ISAGV,M.TRANSPORTCOMMANDDETAILTYPE,T.INDESTINATION,T.OUTDESTINATION FROM TRANSPORTCOMMANDDETAIL T "
+ "LEFT JOIN TRANSPORTCOMMAND M ON T.TRANSPORTCOMMANDID = M.TRANSPORTCOMMANDID WHERE T.TRANSPORTCOMMANDID = :TRANSPORTCOMMANDID";
Map<String, Object> hashMap2 = new HashMap<String,Object> ();
hashMap2.put("TRANSPORTCOMMANDID", TRANSPORTCOMMANDID);
String INDESTINATION = "";
String ISAGV = "";
String OUTDESTINATION = "";
List<Map<String,Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(sql, hashMap2);
if (queryForList != null && queryForList.size() > 0) {
OUTDESTINATION = queryForList.get(0).get("OUTDESTINATION") == null ? "" : queryForList.get(0).get("OUTDESTINATION").toString();
ISAGV = queryForList.get(0).get("ISAGV") == null ? "" : queryForList.get(0).get("ISAGV").toString();
INDESTINATION = queryForList.get(0).get("INDESTINATION") == null ? "" : queryForList.get(0).get("INDESTINATION").toString();
}
Map<String, Object> hashMap = new HashMap<String,Object> ();
Map<String, Object> bmap = new HashMap<String,Object> ();
hashMap.put("shelfName", SHELFNAME);
bmap.put("shelfName", SHELFNAME);
if (!"".equals(SHELFNAME)) {
hashMap.put("areaName", SHELFNAME.substring(0, 1));
bmap.put("areaName", SHELFNAME.substring(0, 1));
}
if ("OUT".equals(TRANSPORTCOMMANDTYPE) && !"E".equals(OUTDESTINATION)) {
hashMap.put("durableName", "");
hashMap.put("areaName", "");
bmap.put("durableName", "");
bmap.put("areaName", "");
}
if (("IN".equals(TRANSPORTCOMMANDTYPE) || "MOVE".equals(TRANSPORTCOMMANDTYPE)) ) {
hashMap.put("durableName", TRAYNAME);
hashMap.put("areaName", SHELFNAME.substring(0, 1));
bmap.put("durableName", TRAYNAME);
bmap.put("areaName", SHELFNAME.substring(0, 1));
}
String[] palletArr = PALLETNAME.split(";");
for (String pallet : palletArr) {
try {
// MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",pallet);
EventInfo makeEventInfo = new EventInfoUtil().makeEventInfo("WCSStockTo" + TRANSPORTCOMMANDTYPE, "WCS", "WCSStockTo" + TRANSPORTCOMMANDTYPE);
SetEventInfo setEventInfo = new SetEventInfo();
setEventInfo.setUserColumns(hashMap);
// MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo);
//修改更新方法
BarCodeDto barCodeDto = BarCodeAnalyUtils.AnalyBarCode(pallet);
if (barCodeDto != null) {
String materialSpecName = barCodeDto.getMaterialSpecName();
String charge = barCodeDto.getCharge();
MaterialPacking barCodeByMaterialPackingId = BarCodeAnalyUtils.getBarCodeByMaterialPackingId(materialSpecName, charge);
if (barCodeByMaterialPackingId != null) {
MaterialPackingKey key = barCodeByMaterialPackingId.getKey();
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(key, makeEventInfo, setEventInfo);
}
}
} catch (Exception e) {
// TODO: handle exception
}
bmap.put("PALLETNAME", pallet);
String sql22 = "UPDATE BS_MES_SHIPPED T SET T.LK_AREANAME = :areaName,T.LK_SHELFNAME = :shelfName, T.LK_DURABLENAME = :durableName WHERE T.LOTNAME = :PALLETNAME ";
IDMFrameServiceProxy.getSqlTemplate().update(sql22, bmap);
}
//更新任务状态
String updateSql = "UPDATE TRANSPORTCOMMAND T SET T.STATE = 'Completed' WHERE T.TRANSPORTCOMMANDID = :TRANSPORTCOMMANDID";
IDMFrameServiceProxy.getSqlTemplate().update(updateSql, hashMap2);
} else {
//{"PALLETNAME":"302110849|1|S|1900mm|24-10-31-SHJC07-A003|20241031|11|6954;","SHELFNAME":"C-01-09-01","TRAYNAME":"400644","WEIGHT":"0"}
String chk = "SELECT PORTNO,PORTNAME,AREANAME FROM PORT WHERE PORTNO = :PORT";
Map<String, Object> hashMap = new HashMap<String,Object> ();
hashMap.put("PORT", SHELFNAME);
List<Map<String, Object>> queryForList = IDMFrameServiceProxy.getSqlTemplate().queryForList(chk, hashMap);
Map<String, Object> uMap = new HashMap<String,Object> ();
Map<String, Object> bmap = new HashMap<String,Object> ();
//出库过滤掉托盘库 E-00-01-02 E-00-01-01
if (queryForList != null && queryForList.size() > 0) {//出库
if (!" E-00-01-02".equals(SHELFNAME) && ! "E-00-01-01".equals(SHELFNAME)) {
uMap.put("shelfName", "");
uMap.put("durableName", "");
uMap.put("areaName", "");
bmap.put("shelfName", "");
bmap.put("durableName", "");
bmap.put("areaName", "");
}
} else {
uMap.put("durableName", TRAYNAME);
uMap.put("shelfName", SHELFNAME);
bmap.put("durableName", TRAYNAME);
bmap.put("shelfName", SHELFNAME);
if (!"".equals(SHELFNAME)) {
uMap.put("areaName", SHELFNAME.substring(0, 1));
bmap.put("areaName", SHELFNAME.substring(0, 1));
}
}
String[] palletArr = PALLETNAME.split(";");
for (String pallet : palletArr) {
try {
// MaterialPackingKey materialPackingKey = new MaterialPackingKey("SDK",pallet);
EventInfo makeEventInfo = new EventInfoUtil().makeEventInfo("WCSStockTo" + TRANSPORTCOMMANDTYPE, "WCS", "WCSStockTo" + TRANSPORTCOMMANDTYPE);
SetEventInfo setEventInfo = new SetEventInfo();
setEventInfo.setUserColumns(hashMap);
// MaterialPackingServiceProxy.getMaterialPackingService().setEvent(materialPackingKey, makeEventInfo, setEventInfo);
//修改更新方法
BarCodeDto barCodeDto = BarCodeAnalyUtils.AnalyBarCode(pallet);
if (barCodeDto != null) {
String materialSpecName = barCodeDto.getMaterialSpecName();
String charge = barCodeDto.getCharge();
MaterialPacking barCodeByMaterialPackingId = BarCodeAnalyUtils.getBarCodeByMaterialPackingId(materialSpecName, charge);
if (barCodeByMaterialPackingId != null) {
MaterialPackingKey key = barCodeByMaterialPackingId.getKey();
MaterialPackingServiceProxy.getMaterialPackingService().setEvent(key, makeEventInfo, setEventInfo);
}
}
} catch (Exception e) {
// TODO: handle exception
}
bmap.put("PALLETNAME", pallet);
String sql = "UPDATE BS_MES_SHIPPED T SET T.LK_AREANAME = :areaName,T.LK_SHELFNAME = :shelfName, T.LK_DURABLENAME = :durableName WHERE T.LOTNAME = :PALLETNAME ";
IDMFrameServiceProxy.getSqlTemplate().update(sql, bmap);
}
}
JSONObject body = new JSONObject(true);
body.put("TRANSPORTCOMMANDID",in.get("TRANSPORTCOMMANDID"));
body.put("RETURNCODE","200");
body.put("RETURNMESSAGE","");
return body.toJSONString();
}
public static void saveMessageLog(ErpMessageLog log) {
String sql = "INSERT INTO BS_ERPMESSAGELOG(INTERFACETIME,SERVERNAME, EVENTNAME, EVENTTIMEKEY, EVENTUSER, MESSAGELOG,RESULTCODE,MESSAGEID,RESULTMESSAGE,MESSAGELOG2,RESULTMESSAGE2)\r\n"
+ "VALUES(TO_DATE(:INTERFACETIME,'yyyy-mm-dd hh24:mi:ss'),:SERVERNAME, :EVENTNAME, :EVENTTIMEKEY, :EVENTUSER, :MESSAGELOG,:RESULTCODE,:MESSAGEID,:RESULTMESSAGE,:MESSAGELOG2,:RESULTMESSAGE2)";
Map<String, Object> bindMap = new HashMap<String, Object>();
bindMap.put("SERVERNAME", log.getServerName());
bindMap.put("EVENTNAME", log.getEventName());
bindMap.put("EVENTTIMEKEY", log.getId());
bindMap.put("EVENTUSER", log.getEventUser());
bindMap.put("MESSAGEID", log.getMessageId());
bindMap.put("INTERFACETIME", log.getInterfaceTime());
bindMap.put("RESULTCODE", log.getResultCode());
bindMap.put("MESSAGELOG", log.getSendMsg());// 推送ERP的json
bindMap.put("RESULTMESSAGE", log.getReturnMsg());// 返回结果的json
bindMap.put("MESSAGELOG2", log.getSendMsg2());// 推送ERP的json
bindMap.put("RESULTMESSAGE2", log.getReturnMsg2());// 返回结果的json
IDMFrameServiceProxy.getSqlTemplate().update(sql, bindMap);
}
}