Commit 4455fe9a zshaohui

1.增加运达反馈和出库通知到mes

1 个父辈 800ad6a4
...@@ -17,16 +17,24 @@ import org.apache.http.client.methods.CloseableHttpResponse; ...@@ -17,16 +17,24 @@ import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder; import org.apache.http.client.utils.URIBuilder;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity; import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair; import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HTTP;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils; import org.apache.http.util.EntityUtils;
import org.apache.logging.log4j.util.Strings; import org.apache.logging.log4j.util.Strings;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import javax.net.ssl.SSLContext;
import java.io.*; import java.io.*;
import java.net.URI; import java.net.URI;
import java.net.URL; import java.net.URL;
...@@ -166,7 +174,23 @@ public class HttpHelper { ...@@ -166,7 +174,23 @@ public class HttpHelper {
} }
} }
try { try {
CloseableHttpClient httpClient = HttpClients.createDefault();
SSLContext sslContext = new SSLContextBuilder()
.loadTrustMaterial(null, (x509CertChain, authType) -> true)
.build();
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setSslcontext(sslContext)
.setConnectionManager(
new PoolingHttpClientConnectionManager(
RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.INSTANCE)
.register("https", new SSLConnectionSocketFactory(sslContext,
NoopHostnameVerifier.INSTANCE))
.build()
))
.build();
//CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = httpClient.execute(httpPost); CloseableHttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity(); HttpEntity entity = response.getEntity();
String responseContent = EntityUtils.toString(entity, CONTENT_CHARSET); String responseContent = EntityUtils.toString(entity, CONTENT_CHARSET);
......
package com.neotel.smfcore.common.utils; package com.neotel.smfcore.common.utils;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
...@@ -44,8 +45,9 @@ public class ReelLockPosUtil { ...@@ -44,8 +45,9 @@ public class ReelLockPosUtil {
* @param reelLockPosInfo * @param reelLockPosInfo
*/ */
public static synchronized ReelLockPosInfo addReelLockPosInfo(ReelLockPosInfo reelLockPosInfo , List<String> cidList) { public static synchronized ReelLockPosInfo addReelLockPosInfo(ReelLockPosInfo reelLockPosInfo , List<String> cidList) {
log.info("为[" + reelLockPosInfo.getBarcode() + "]锁定库位[" + reelLockPosInfo.getLockPosName() + "]"); String key = processBarcode(reelLockPosInfo.getBarcode());
ReelLockPosInfo oldLocInfo = reelLocKPosMap.get(reelLockPosInfo.getBarcode()); log.info("为[" + reelLockPosInfo.getBarcode() + "]锁定库位[" + reelLockPosInfo.getLockPosName() + "],key=[" + key + "]");
ReelLockPosInfo oldLocInfo = reelLocKPosMap.get(key);
if (oldLocInfo != null && oldLocInfo.getLockPosName() != null) { if (oldLocInfo != null && oldLocInfo.getLockPosName() != null) {
if(cidList.contains(oldLocInfo.getCid())){ if(cidList.contains(oldLocInfo.getCid())){
log.info("[" + oldLocInfo.getBarcode() + "]已有锁定库位[" + oldLocInfo.getLockPosName() + "],返回之前锁定的库位"); log.info("[" + oldLocInfo.getBarcode() + "]已有锁定库位[" + oldLocInfo.getLockPosName() + "],返回之前锁定的库位");
...@@ -53,7 +55,7 @@ public class ReelLockPosUtil { ...@@ -53,7 +55,7 @@ public class ReelLockPosUtil {
}else{ }else{
//锁定库位不在cid列表中 //锁定库位不在cid列表中
log.info("[" + oldLocInfo.getBarcode() + "]已有锁定库位[" + oldLocInfo.getLockPosName() + "],Cid["+oldLocInfo.getCid()+"]不在["+String.join(",",cidList)+"]中,清理原有锁定库位"); log.info("[" + oldLocInfo.getBarcode() + "]已有锁定库位[" + oldLocInfo.getLockPosName() + "],Cid["+oldLocInfo.getCid()+"]不在["+String.join(",",cidList)+"]中,清理原有锁定库位");
reelLocKPosMap.remove(reelLockPosInfo.getBarcode()); reelLocKPosMap.remove(key);
} }
} }
for (ReelLockPosInfo locInfo : reelLocKPosMap.values()) { for (ReelLockPosInfo locInfo : reelLocKPosMap.values()) {
...@@ -62,7 +64,7 @@ public class ReelLockPosUtil { ...@@ -62,7 +64,7 @@ public class ReelLockPosUtil {
return null; return null;
} }
} }
reelLocKPosMap.put(reelLockPosInfo.getBarcode(), reelLockPosInfo); reelLocKPosMap.put(key, reelLockPosInfo);
dataCache.updateCache(REEL_LOCK_POS_MAP_KEY, reelLocKPosMap); dataCache.updateCache(REEL_LOCK_POS_MAP_KEY, reelLocKPosMap);
return reelLockPosInfo; return reelLockPosInfo;
} }
...@@ -74,7 +76,7 @@ public class ReelLockPosUtil { ...@@ -74,7 +76,7 @@ public class ReelLockPosUtil {
String lockBarcode = reelLockPosInfo.getBarcode(); String lockBarcode = reelLockPosInfo.getBarcode();
if (org.apache.logging.log4j.util.Strings.isNotBlank(lockBarcode)) { if (org.apache.logging.log4j.util.Strings.isNotBlank(lockBarcode)) {
if (lockBarcode.equals(barcode)) { if (lockBarcode.equals(processBarcode(barcode))) {
return reelLockPosInfo; return reelLockPosInfo;
} }
} }
...@@ -89,7 +91,7 @@ public class ReelLockPosUtil { ...@@ -89,7 +91,7 @@ public class ReelLockPosUtil {
* 清理条码锁定库位信息 * 清理条码锁定库位信息
*/ */
public static void removeReelLockPosInfo(String barcode) { public static void removeReelLockPosInfo(String barcode) {
reelLocKPosMap.remove(barcode); reelLocKPosMap.remove(processBarcode(barcode));
dataCache.updateCache(REEL_LOCK_POS_MAP_KEY, reelLocKPosMap); dataCache.updateCache(REEL_LOCK_POS_MAP_KEY, reelLocKPosMap);
} }
...@@ -100,7 +102,7 @@ public class ReelLockPosUtil { ...@@ -100,7 +102,7 @@ public class ReelLockPosUtil {
* @return * @return
*/ */
public static String getReelLockPosId(String barcode) { public static String getReelLockPosId(String barcode) {
ReelLockPosInfo lockPosInfo = reelLocKPosMap.get(barcode); ReelLockPosInfo lockPosInfo = reelLocKPosMap.get(processBarcode(barcode));
if (lockPosInfo != null) { if (lockPosInfo != null) {
return lockPosInfo.getLockPosId(); return lockPosInfo.getLockPosId();
} }
...@@ -117,4 +119,16 @@ public class ReelLockPosUtil { ...@@ -117,4 +119,16 @@ public class ReelLockPosUtil {
} }
return lockPosIds; return lockPosIds;
} }
private static String processBarcode(String str) {
if (ObjectUtil.isEmpty(str)) {
return str;
}
if (str.contains(".")) {
String res = str.replace(".", "__");
return res;
} else {
return str;
}
}
} }
...@@ -562,6 +562,8 @@ public class LiteOrderCache { ...@@ -562,6 +562,8 @@ public class LiteOrderCache {
task.setLightColor(nextColor.getRgb()); task.setLightColor(nextColor.getRgb());
task.setStatus(OP_STATUS.WAIT.name()); task.setStatus(OP_STATUS.WAIT.name());
task.setSingleOut(singleOut); task.setSingleOut(singleOut);
task.setLine(cacheOrder.getLine());
task.setSo(cacheOrder.getSo());
// task = dataLogDao.save(task); // task = dataLogDao.save(task);
taskService.addTaskToExecute(task); taskService.addTaskToExecute(task);
......
...@@ -237,6 +237,17 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog> ...@@ -237,6 +237,17 @@ public class DataLog extends BasePo implements Serializable ,Comparable<DataLog>
* 供应商编号 * 供应商编号
*/ */
private String providerNumber; private String providerNumber;
/**
* 线体
*/
private String line;
/**
* 工单号
*/
private String so;
/** /**
* MSD附加信息 * MSD附加信息
*/ */
......
package com.neotel.smfcore.custom.gree20242.api; package com.neotel.smfcore.custom.gree20242.api;
import com.alibaba.fastjson.JSON;
import com.neotel.smfcore.common.exception.ApiException;
import com.neotel.smfcore.common.kafka.KafkaMsgUtil; import com.neotel.smfcore.common.kafka.KafkaMsgUtil;
import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.common.utils.JsonUtil; import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.api.listener.BaseSmfApiListener; import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.shelf.bean.ShelfInfo;
import com.neotel.smfcore.core.shelf.bean.ShelfLoc;
import com.neotel.smfcore.core.shelf.util.TaskShelfUtil;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.gree20242.bean.GreeRequestMsg; import com.neotel.smfcore.custom.gree20242.bean.GreeRequestMsg;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -11,7 +19,9 @@ import org.apache.kafka.clients.producer.Callback; ...@@ -11,7 +19,9 @@ import org.apache.kafka.clients.producer.Callback;
import org.apache.kafka.clients.producer.RecordMetadata; import org.apache.kafka.clients.producer.RecordMetadata;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
...@@ -54,19 +64,72 @@ public class GreeApi extends BaseSmfApiListener { ...@@ -54,19 +64,72 @@ public class GreeApi extends BaseSmfApiListener {
} }
@Override @Override
public void shelfArriveLine(String arriveLineUrl, LiteOrder liteOrder,String shelfId) { public void shelfArriveLine(String arriveLineUrl, LiteOrder liteOrder, String shelfId) {
Map<String, String> params = new HashMap<>(); Map<String, Object> paramMap = new HashMap<>();
params.put("shelfId", shelfId); paramMap.put("hSerial", liteOrder.getOrderNo());
params.put("hSerial", liteOrder.getOrderNo()); paramMap.put("workCenterCode", liteOrder.getLine());
params.put("so", liteOrder.getSo()); paramMap.put("orderNo", liteOrder.getSo());
params.put("line", liteOrder.getLine()); paramMap.put("shelfId", shelfId);
GreeRequestMsg msg = GreeRequestMsg.newMsg(arriveLineUrl, params); List<Map<String, Object>> reelList = new ArrayList<>();
boolean result= SendMsg(arriveLineUrl,msg );
ShelfInfo shelfInfo = TaskShelfUtil.findShelfByRealRfid(shelfId);
if (shelfInfo != null) {
List<ShelfLoc> locList = shelfInfo.getLocList();
if (locList != null && !locList.isEmpty()) {
for (ShelfLoc shelfLoc : locList) {
String barcodeStr = shelfLoc.getBarcode();
if (StringUtils.isNotEmpty(barcodeStr)) {
Barcode barcode = barcodeManager.findByBarcode(barcodeStr);
if (barcode != null) {
Map<String, Object> reelMap = new HashMap<>();
reelMap.put("barcode", barcode.getBarcode());
reelMap.put("qty", barcode.getAmount());
reelMap.put("partNum", barcode.getPartNumber());
reelList.add(reelMap);
}
}
}
}
}
paramMap.put("reels", reelList);
log.info(liteOrder.getOrderNo() + ",到达产线,通知mes信息为:" + JSON.toJSONString(paramMap) + ",地址为:" + arriveLineUrl);
try {
String resultStr = HttpHelper.postJson(arriveLineUrl, paramMap);
log.info(liteOrder.getOrderNo() + ",到达产线,通知mes返回信息为:" + resultStr);
} catch (ApiException e) {
e.printStackTrace();
log.error(liteOrder.getOrderNo() + ",到达产线,通知mes报错:", e);
}
} }
public boolean SendMsg(String url,GreeRequestMsg msgBean ) { @Override
public void outTaskStatusChange(String outNotifyUrl, DataLog task) {
if (task.isFinished()) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("barcode", task.getBarcode());
paramMap.put("partNum", task.getPartNumber());
paramMap.put("qty", task.getNum());
paramMap.put("orderNo", task.getSourceName());
paramMap.put("workCenterCode", task.getLine());
paramMap.put("so", task.getSourceId());
paramMap.put("shelfId", task.getRealRfid());
log.info(task.getBarcode() + ",放到料架上,通知mes信息为:" + JSON.toJSONString(paramMap) + ",地址为:" + outNotifyUrl);
try {
String resultStr = HttpHelper.postJson(outNotifyUrl, paramMap);
log.info(task.getBarcode() + ",放到料架上,通知mes返回信息为:" + resultStr);
} catch (ApiException e) {
e.printStackTrace();
log.error(task.getBarcode() + ",放到料架上,通知mes报错:", e);
}
}
}
public boolean SendMsg(String url, GreeRequestMsg msgBean ) {
//url地址配置为发送主题 //url地址配置为发送主题
String msg = JsonUtil.toJsonStr(msgBean); String msg = JsonUtil.toJsonStr(msgBean);
......
...@@ -2,10 +2,11 @@ server: ...@@ -2,10 +2,11 @@ server:
port: 8800 port: 8800
api: api:
name: name: 20242
inCheckUrl: inCheckUrl:
outNotifyUrl: outNotifyUrl: https://gaolan-gateway.gree.com/gaolan-service-mes-kzq-work/MaterialRequisition/issueNotification
inNotifyUrl: inNotifyUrl:
arriveLineUrl: https://gaolan-gateway.gree.com/gaolan-service-mes-kzq-work/MaterialRequisition/yundaFeedback
#mqtt配置 #mqtt配置
com: com:
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!