Commit 273fc33c zshaohui

研华等待中,调用出库通知 修改

1 个父辈 4430ac19
package com.neotel.smfcore.advantech;
import com.google.common.collect.Lists;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.system.service.po.DataLog;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
public class AdvantechApi extends BaseSmfApiListener {
@Autowired
protected ILiteOrderItemManager liteOrderItemManager;
/**
* 料塔-检查料卷是否可以存料
* http://172.21.203.166/etl_api/api/Mcs/Rv
* {
* "webServiceType": "AKMU1",
* "param": "<root><METHOD ID='MMS_CL.LTCheckReel001'/><REELS>2204BW0015DR00001-26,2218B05424,2218B05699</REELS></root>"
* }
* 说明:
* REELS:料卷号,可批量,逗号隔开
*
*
* "{
* ""Result"": {
* ""Table1"": [
* {
* ""Reel"": ""2204BW0015DR00001-26"",
* ""result"": ""FAIL""
* },
* {
* ""Reel"": ""2218B05424"",
* ""result"": ""OK""
* },
* {
* ""Reel"": ""2218B05699"",
* ""result"": ""FAIL""
* }
* ]
* },
* ""Success"": true,
* ""Error"": null
* }
* REEL_NO:料卷号
* CHECK:OK 可以存料,FAIL 不可存料"
*/
@Override
public Barcode canPutIn(String inCheckUrl, Barcode barcode) throws ValidateException {
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("webServiceType","AKMU1");
String paramStr = "<root><METHOD ID='MMS_CL.LTCheckReel001'/><REELS>"+ barcode.getBarcode()+"</REELS></root>";
paramMap.put("param",paramStr);
try {
log.info(barcode.getBarcode() + "入库验证,参数" + JsonUtil.toJsonStr(paramMap));
String result = HttpHelper.postJson(inCheckUrl, paramMap);
log.info(barcode.getBarcode() + "入库验证返回" + result);
Map<String, Object> resultMap = JsonUtil.toMap(result);
boolean success = Boolean.valueOf(resultMap.get("Success").toString());
if(!success){
String errorMsg = resultMap.get("Success").toString();
throw new ValidateException("smfcore.mesApi.inCheck.ng","MES验证失败:"+errorMsg);
}
Map<String,Map<String,Object>> resultData = (Map<String, Map<String, Object>>) resultMap.get("Result");
List<Map<String,String>> reelResultList = (List<Map<String, String>>) resultData.get("Table1");
for (Map<String, String> reelMap : reelResultList) {
String reelId = reelMap.get("Reel");
if(barcode.getBarcode().equals(reelId)){
String reelResult = reelMap.get("Result").toString();
if("OK".equalsIgnoreCase(reelResult)){
return barcode;
}else{
throw new ValidateException("smfcore.mesApi.inCheck.ng","MES验证失败:" + reelResult);
}
}
}
throw new ValidateException("smfcore.mesApi.inCheck.ng","MES返回结果中未找到:" + barcode.getBarcode());
} catch (Exception e) {
log.error("入库验证接口出错:",e);
throw new ValidateException("smfcore.mesApi.inCheck.error","MES验证出错:" + e.getMessage());
}
}
/**
* {
* "webServiceType": "AKMU1",
* "param": "<root><METHOD ID='MMS_CL.LTUpdateReel001'/><TYPE>I</TYPE><ISSUE_FLG></ISSUE_FLG><USER_NO>Q-06342</USER_NO><REELS><REEL_NO>2204BW0015DR00001-26</REEL_NO><TOWER_NO>T001</TOWER_NO><TOWER_INFO>ABCDEFG</TOWER_INFO></REELS><REELS><REEL_NO>2218B05424</REEL_NO><TOWER_NO>T001</TOWER_NO><TOWER_INFO>ABCDEFG</TOWER_INFO></REELS><REELS><REEL_NO>2218B05699</REEL_NO><TOWER_NO>T001</TOWER_NO><TOWER_INFO>ABCDEFG</TOWER_INFO></REELS></root>"
* }
* 说明:
* REELS:父节点,可批量
* TYPE: I 存料
* ISSUE_FLG:发料标记 要传值,可置空
* USER_NO:人员工号
* REEL_NO:料卷编号
* TOWER_NO:料塔编号
* TOWER_INFO:料塔和料卷绑定信息(位置信息等)
* WIP_NO:工单号码 置空,可不传
* SIDE:工单背正面 置空,可不传
* LINE_ID:线别ID 置空,可不传
*
* "{
* ""Result"": {
* ""Table1"": [
* {
* ""Reel"": ""2204BW0015DR00001-26"",
* ""result"": ""Error- reel status 1002.""
* },
* {
* ""Reel"": ""2218B05424"",
* ""result"": ""OK""
* },
* {
* ""Reel"": ""2218B05699"",
* ""result"": ""Error- reel status 1000.""
* }
* ]
* },
* ""Success"": true,
* ""Error"": null
* }
* Reel:料卷号
* result:OK 存料完成,Error-XXX 存料失败"
*/
@Override
public void inTaskStatusChange(String inNotifyUrl, DataLog task){
if(task.isFinished()){
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("webServiceType","AKMU1");
String paramStr = "<root><METHOD ID='MMS_CL.LTUpdateReel001'/><TYPE>I</TYPE><ISSUE_FLG></ISSUE_FLG>" +
"<USER_NO>"+task.getOperator()+"</USER_NO><REELS>" +
"<REEL_NO>"+task.getBarcode()+"</REEL_NO>" +
"<TOWER_NO>"+task.getCid()+"</TOWER_NO>" +
"<TOWER_INFO>"+task.getPosName()+"</TOWER_INFO>" +
"</REELS></root>";
paramMap.put("param",paramStr);
try {
log.info(task.getBarcode() + "入库通知,参数" + JsonUtil.toJsonStr(paramMap));
String result = HttpHelper.postJson(inNotifyUrl, paramMap);
log.info(task.getBarcode() + "入库通知返回" + result);
} catch (Exception e) {
log.error("入库通知接口出错:" , e);
}
}
}
/**
*料塔-更新料卷和料塔绑定关系(出料)
* "{
* ""webServiceType"": ""AKMU1"",
* ""param"": ""<root><METHOD ID='MMS_CL.LTUpdateReel001'/><TYPE>O</TYPE><ISSUE_FLG>Y</ISSUE_FLG><USER_NO>Q-06342</USER_NO><REELS><REEL_NO>2214B02825</REEL_NO><TOWER_NO>T001</TOWER_NO><WIP_NO>KEM2730SA</WIP_NO><SIDE>SS</SIDE><LINE_ID>1085</LINE_ID></REELS><REELS><REEL_NO>2210B00479</REEL_NO><TOWER_NO>T001</TOWER_NO><WIP_NO>KEM2730SA</WIP_NO><SIDE>SS</SIDE><LINE_ID>1085</LINE_ID></REELS><REELS><REEL_NO>2214B02822</REEL_NO><TOWER_NO>T001</TOWER_NO><WIP_NO>KEM2730SA</WIP_NO><SIDE>SS</SIDE><LINE_ID>1085</LINE_ID></REELS></root>""
* }
* 说明:
* REELS:父节点,可批量
* TYPE: O 出料
* ISSUE_FLG:发料标记 默认 Y
* USER_NO:人员工号
* REEL_NO:料卷编号
* TOWER_NO:料塔编号
* TOWER_INFO:料塔和料卷绑定信息(位置信息等)
* WIP_NO:工单号码
* SIDE:工单背正面
* LINE_ID:线别ID"
*
*/
@Override
public void outTaskStatusChange(String outNotifyUrl, DataLog task){
if(task.isFinished()){
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("webServiceType","AKMU1");
String orderId = task.getSourceId();
LiteOrder liteOrder = liteOrderManager.get(orderId);
String WIP_NO = "";
String LINE_ID = "";
String ISSUE_FLG = "Y";
if(liteOrder != null){
WIP_NO = liteOrder.getOrderNo();
LINE_ID = liteOrder.getSource();
}else{
ISSUE_FLG = "N";
}
String orderItemId = task.getSubSourceId();
LiteOrderItem orderItem = liteOrderItemManager.get(orderItemId);
String SIDE = "";
if(orderItem != null){
SIDE = orderItem.getSide();
}
String paramStr = "<root><METHOD ID='MMS_CL.LTUpdateReel001'/><TYPE>O</TYPE>" +
"<ISSUE_FLG>"+ISSUE_FLG+"</ISSUE_FLG>" +
"<USER_NO>"+task.getOperator()+"</USER_NO>" +
"<REELS><REEL_NO>"+task.getBarcode()+"</REEL_NO>" +
"<TOWER_NO>"+ task.getCid()+"</TOWER_NO>" +
"<WIP_NO>" + WIP_NO + "</WIP_NO>" +
"<SIDE>"+SIDE+"</SIDE>" +
"<LINE_ID>"+LINE_ID+"</LINE_ID>" +
"</REELS></root>";
paramMap.put("param",paramStr);
try {
log.info(task.getBarcode() + "出库通知,参数" + JsonUtil.toJsonStr(paramMap));
String result = HttpHelper.postJson(outNotifyUrl, paramMap);
log.info(task.getBarcode() + "出库通知返回" + result);
} catch (Exception e) {
log.error("出库通知接口出错:" , e);
}
}
}
/**
* {
* "webServiceType": "AKMU1",
* "param": "<root><METHOD ID='MMS_CL.LTReelGet001'/><NUMBER>KKL90HISA#5020#1BLF#1015</NUMBER><USER_NO>Q-06342</USER_NO><TOWER_NO>T001</TOWER_NO></root>"
* }
* 说明:
* NUMBER:编号 (台车编号或旧料卷号)
* USER_NO: 工号
* TOWER_NO:料塔编号
* @param orderNumber
* 返回: "{
* ""Result"": {
* ""Table1"": [
* {
* ""WIP_NO"": ""KKL90HISA"",
* ""LINE_ID"": ""1015"",
* ""SIDE"": ""SS"",
* ""MATERIAL_NO"": ""1100006536"",
* ""REEL_NO"": ""2221B19668"",
* ""TABLE_NO"": ""1BLF"",
* ""ADDRESS"": ""25"",
* ""LOCATION"": ""-"",
* ""USER_NO"": ""Q-06342"",
* ""Result"": ""OK""
* },
* {
* ""WIP_NO"": ""KKL90HISA"",
* ""LINE_ID"": ""1015"",
* ""SIDE"": ""SS"",
* ""MATERIAL_NO"": ""1100006537"",
* ""REEL_NO"": ""2221B19680"",
* ""TABLE_NO"": ""1BLF"",
* ""ADDRESS"": ""29"",
* ""LOCATION"": ""-"",
* ""USER_NO"": ""Q-06342"",
* ""Result"": ""OK""
* },
* {
* ""WIP_NO"": ""KKL90HISA"",
* ""LINE_ID"": ""1015"",
* ""SIDE"": ""SS"",
* ""MATERIAL_NO"": ""1100006537"",
* ""REEL_NO"": ""2221B19682"",
* ""TABLE_NO"": ""1BLF"",
* ""ADDRESS"": ""30"",
* ""LOCATION"": ""-"",
* ""USER_NO"": ""Q-06342"",
* ""Result"": ""OK""
* }
* ]
* },
* ""Success"": true,
* ""Error"": null
* }
* WIP_NO:工单号码
* LINE_ID:线别ID
* SIDE:背正面
* MATERIAL_NO:物料料号
* REEL_NO:料卷号
* TABLE_NO:台车号
* ADDRESS:站位
* LOCATION:通道
* USER_NO:工号
* RESULT:备注"
*/
@Override
public LiteOrder fetchOrder(String fetchOrderUrl, String orderNumber,String username) throws ValidateException{
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("webServiceType","AKMU1");
String paramStr = "<root><METHOD ID='MMS_CL.LTReelGet001'/>" +
"<NUMBER>"+orderNumber+"</NUMBER>" +
"<USER_NO>"+username+"</USER_NO>" +
"<TOWER_NO>T001</TOWER_NO></root>";
paramMap.put("param",paramStr);
try {
log.info(username + "获取工单"+orderNumber+",参数" + JsonUtil.toJsonStr(paramMap));
String result = HttpHelper.postJson(fetchOrderUrl, paramMap);
//String result = "{\"Result\":{\"Table1\":[{\"WIP_NO\":\"KEM3838SA\",\"MODEL_NO\":\"9497CLA4020\",\"LINE_ID\":\"1154\",\"LINE_DESC\":\"S-L12\",\"SIDE\":\"CS\",\"MATERIAL_NO\":\"1100000332\",\"REEL_NO\":\"2229B15523\",\"TABLE_NO\":\"1TF\",\"ADDRESS\":\"15\",\"LOCATION\":\"1\",\"USER_NO\":\"Q-20946\",\"Result\":\"OK\"},{\"WIP_NO\":\"KEM3838SA\",\"MODEL_NO\":\"9497CLA4020\",\"LINE_ID\":\"1154\",\"LINE_DESC\":\"S-L12\",\"SIDE\":\"CS\",\"MATERIAL_NO\":\"1100000332\",\"REEL_NO\":\"2229B15522\",\"TABLE_NO\":\"1TF\",\"ADDRESS\":\"15\",\"LOCATION\":\"2\",\"USER_NO\":\"Q-20946\",\"Result\":\"OK\"},{\"WIP_NO\":\"KEM3838SA\",\"MODEL_NO\":\"9497CLA4020\",\"LINE_ID\":\"1154\",\"LINE_DESC\":\"S-L12\",\"SIDE\":\"CS\",\"MATERIAL_NO\":\"1100000332\",\"REEL_NO\":null,\"TABLE_NO\":\"1TF\",\"ADDRESS\":\"16\",\"LOCATION\":\"1\",\"USER_NO\":\"Q-20946\",\"Result\":\"Error- Tower have no reel.\"},{\"WIP_NO\":\"KEM3838SA\",\"MODEL_NO\":\"9497CLA4020\",\"LINE_ID\":\"1154\",\"LINE_DESC\":\"S-L12\",\"SIDE\":\"CS\",\"MATERIAL_NO\":\"1100000332\",\"REEL_NO\":null,\"TABLE_NO\":\"1TF\",\"ADDRESS\":\"16\",\"LOCATION\":\"2\",\"USER_NO\":\"Q-20946\",\"Result\":\"Error- Tower have no reel.\"},{\"WIP_NO\":\"KEM3838SA\",\"MODEL_NO\":\"9497CLA4020\",\"LINE_ID\":\"1154\",\"LINE_DESC\":\"S-L12\",\"SIDE\":\"CS\",\"MATERIAL_NO\":\"1000000558\",\"REEL_NO\":\"\",\"TABLE_NO\":\"1TF\",\"ADDRESS\":\"17\",\"LOCATION\":\"1\",\"USER_NO\":\"Q-20946\",\"Result\":\"Error- Tower have no reel.\"},{\"WIP_NO\":\"KEM3838SA\",\"MODEL_NO\":\"9497CLA4020\",\"LINE_ID\":\"1154\",\"LINE_DESC\":\"S-L12\",\"SIDE\":\"CS\",\"MATERIAL_NO\":\"1000000558\",\"REEL_NO\":\"\",\"TABLE_NO\":\"1TF\",\"ADDRESS\":\"17\",\"LOCATION\":\"2\",\"USER_NO\":\"Q-20946\",\"Result\":\"Error- Tower have no reel.\"}]},\"Success\":true,\"Error\":null}";
log.info(username + "获取工单"+orderNumber+"返回" + result);
Map<String, Object> resultMap = JsonUtil.toMap(result);
boolean success = Boolean.valueOf(resultMap.get("Success").toString());
if(!success){
String errorMsg = resultMap.get("Success").toString();
throw new ValidateException("smfcore.mesApi.fetchOrder.ng","MES获取工单失败:"+errorMsg);
}
Map<String,Map<String,Object>> resultData = (Map<String, Map<String, Object>>) resultMap.get("Result");
List<Map<String,String>> reelResultList = (List<Map<String, String>>) resultData.get("Table1");
List<LiteOrderItem> items = Lists.newArrayList();
LiteOrder liteOrder = null;
for (Map<String, String> reelMap : reelResultList) {
//Result
String itemResult = reelMap.get("Result");
//WIP_NO:工单号码
String wip_no = reelMap.get("WIP_NO");
//LINE_ID:线别ID
String line_id = reelMap.get("LINE_ID");
//LINE_DESC:线别名称
String line_desc = reelMap.get("LINE_DESC");
//MODEL_NO
String model_no = reelMap.get("MODEL_NO");
//SIDE:背正面
String side = reelMap.get("SIDE");
//MATERIAL_NO:物料料号
String material_no = reelMap.get("MATERIAL_NO");
//REEL_NO:料卷号
String reel_no = reelMap.get("REEL_NO");
//TABLE_NO:台车号
String table_no = reelMap.get("TABLE_NO");
//ADDRESS:站位
String address = reelMap.get("ADDRESS");
//LOCATION:通道
String location = reelMap.get("LOCATION");
//USER_NO:工号
String user_no = reelMap.get("USER_NO");
if(liteOrder == null){
liteOrder = new LiteOrder();
liteOrder.setOrderNo(wip_no);
liteOrder.setLine(line_desc);
liteOrder.setSource(line_id);
liteOrder.setSo(model_no);
}
LiteOrderItem item = new LiteOrderItem();
item.setPn(material_no);
if(!"OK".equalsIgnoreCase(itemResult)){
reel_no = itemResult;
}
item.setRi(reel_no);
item.setNeedReelCount(1);
item.setTableNo(table_no);
item.setSide(side);
item.setFeederInfo(address +" ["+location+"]");
items.add(item);
}
liteOrder.setOrderItems(items);
liteOrder = liteOrderManager.createWithItems(liteOrder);
log.info("新增加订单:" + liteOrder.getOrderNo() + "["+liteOrder.getId()+"],共" + items.size() + "条工单详情");
liteOrderCache.addOrderToMap(liteOrder);
return liteOrder;
} catch (Exception e) {
log.info(username + "获取工单"+orderNumber+" 接口出错:",e);
throw new ValidateException("mes.api.orderError","从MES获取接口出错:"+e.getMessage());
}
}
@Override
public boolean isForThisApi(String apiName) {
return apiName != null && apiName.equalsIgnoreCase("Advantech");
}
}
......@@ -154,9 +154,10 @@ public class TaskService {
* @param task
*/
public DataLog updateQueueTask(DataLog task) {
tiggerTaskChangeListener(task);
task = dataLogDao.save(task);
taskMap.put(task.getId(), task);
tiggerTaskChangeListener(task);
//tiggerTaskChangeListener(task);
return task;
}
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!