Commit b3e54ce0 sunke

完善Neotel接口

1 个父辈 e949681c
...@@ -110,7 +110,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{ ...@@ -110,7 +110,7 @@ public class NLPShelfHandler extends BaseDeviceHandler{
return putIn(loginUser,groupId,storageId, barcodeSave,token); return putIn(loginUser,groupId,storageId, barcodeSave,token);
} }
private ResultBean putIn(String loginUser, String groupId,String storageId,Barcode barcode,String token) { protected ResultBean putIn(String loginUser, String groupId,String storageId,Barcode barcode,String token) {
// CodeBean codeBean = codeResolve.resolveSingleCode(codeStr); // CodeBean codeBean = codeResolve.resolveSingleCode(codeStr);
if (barcode == null || barcode.getBarcode() == null) { if (barcode == null || barcode.getBarcode() == null) {
......
...@@ -224,6 +224,19 @@ public class LiteOrderCache { ...@@ -224,6 +224,19 @@ public class LiteOrderCache {
smfApi.onOrderStatusChange(liteOrder); smfApi.onOrderStatusChange(liteOrder);
} }
private LiteOrder getLiteOrder(String orderNo){
LiteOrder order = liteOrderMap.get(orderNo);
if (order == null) {
log.info("缓存中未找到[" + orderNo + "],从数据库中重新加载");
order = liteOrderManager.findByOrderNo(orderNo);
if(order != null){
List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(order.getId());
order.setOrderItems(items);
}
}
return order;
}
/** /**
* 更新工单状态信息 * 更新工单状态信息
*/ */
...@@ -233,15 +246,7 @@ public class LiteOrderCache { ...@@ -233,15 +246,7 @@ public class LiteOrderCache {
//更新工单状态 //更新工单状态
String orderNo = task.getSourceName(); String orderNo = task.getSourceName();
if (!Strings.isNullOrEmpty(orderNo)) { if (!Strings.isNullOrEmpty(orderNo)) {
LiteOrder order = liteOrderMap.get(orderNo); LiteOrder order = getLiteOrder(orderNo);
if (order == null) {
log.info("缓存中未找到[" + orderNo + "],从数据库中重新加载");
order = liteOrderManager.findByOrderNo(orderNo);
if(order != null){
List<LiteOrderItem> items = liteOrderItemManager.findOrderItems(order.getId());
order.setOrderItems(items);
}
}
if (order != null) { if (order != null) {
//任务是取消的,需要将总待出库数量-1 //任务是取消的,需要将总待出库数量-1
if (task.isCancel()) { if (task.isCancel()) {
......
...@@ -66,4 +66,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> { ...@@ -66,4 +66,6 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List<StoragePos> findPosList(String storageId, List<String> posNames); List<StoragePos> findPosList(String storageId, List<String> posNames);
List<StoragePos> getSameSizeContinuityEmptyPosList(Storage storage, Barcode barcode) throws ValidateException; List<StoragePos> getSameSizeContinuityEmptyPosList(Storage storage, Barcode barcode) throws ValidateException;
List<StoragePos> findByBarcodesAndPartNums(List<String> storageIds, List<String> partNums, List<String> reelIds);
} }
...@@ -580,4 +580,22 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -580,4 +580,22 @@ public class StoragePosManagerImpl implements IStoragePosManager {
return prefixStr +String.format("%0"+posIndexStr.length()+"d",nextPosIndex); return prefixStr +String.format("%0"+posIndexStr.length()+"d",nextPosIndex);
} }
@Override
public List<StoragePos> findByBarcodesAndPartNums(List<String> storageIds, List<String> partNums, List<String> reelIds) {
//构造查询条件
Query query = new Query();
Criteria criteria = Criteria.where("barcode").exists(true);
if(storageIds != null && storageIds.isEmpty()){
criteria.and("storageId").in(storageIds);
}
if (reelIds != null && !reelIds.isEmpty()){
criteria.and("barcode.barcode").in(reelIds);
}
if (partNums != null && !partNums.isEmpty()){
criteria.and("barcode.partNumber").in(partNums);
}
query.addCriteria(criteria);
return storagePosDao.findByQuery(query);
}
} }
package com.neotel.smfcore.custom.neotel;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.DateUtil;
import com.neotel.smfcore.common.utils.HttpHelper;
import com.neotel.smfcore.common.utils.JsonUtil;
import com.neotel.smfcore.core.api.bean.ApiResult;
import com.neotel.smfcore.core.api.listener.BaseSmfApiListener;
import com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE;
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.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@Service
@Slf4j
public class NeotelApi extends BaseSmfApiListener {
@Autowired
private ILiteOrderItemManager liteOrderItemManager;
@Override
public boolean isForThisApi(String apiName) {
return apiName != null && apiName.equalsIgnoreCase("neotel");
}
@Override
public void inTaskStatusChange(String inNotifyUrl, DataLog task) {
String requestParams = "";
String responseInfo = "";
if (task.isFinished()) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("reelId", task.getBarcode());
paramMap.put("location", task.getPosName());
paramMap.put("source", "SMF");
Barcode barcode = barcodeManager.findByBarcode(task.getBarcode());
String fullCode = "";
if (barcode != null) {
fullCode = barcode.getFullCode();
}
paramMap.put("fullCode", fullCode);
try {
requestParams = JsonUtil.toJsonStr(paramMap);
log.info(task.getBarcode() + "入库通知,参数" + requestParams);
responseInfo = HttpHelper.postJson(inNotifyUrl, paramMap);
log.info(task.getBarcode() + "入库通知返回" + responseInfo);
ApiResult apiResult = JsonUtil.toObj(responseInfo, ApiResult.class);
} catch (Exception e) {
log.error("入库通知接口出错:" + e.getMessage());
}
}
}
@Override
public void outTaskStatusChange(String outNotifyUrl, DataLog task) {
String requestParams = "";
String responseInfo = "";
if (task.isFinished()) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("reelId", task.getBarcode());
paramMap.put("partNum", task.getPartNumber());
paramMap.put("qty", task.getNum() + "");
paramMap.put("boxNo", task.getCid());
paramMap.put("location", task.getPosName());
String hSerial = "";
String so = "";
String slotNum = "";
String feederInfo = "";
String sourceId = task.getSourceId();
if(Strings.isNotBlank(sourceId)){
LiteOrder liteOrder = liteOrderManager.get(task.getSourceId());
if(liteOrder != null){
hSerial = liteOrder.getOrderNo();
so = liteOrder.getSo();
}
String subSourceId = task.getSubSourceId();
LiteOrderItem orderItem = liteOrderItemManager.get(subSourceId);
if(orderItem != null){
slotNum = orderItem.getSlotNum() + "";
feederInfo = orderItem.getFeederInfo();
}
}
paramMap.put("hSerial", hSerial);
paramMap.put("so", so);
paramMap.put("slotNum", slotNum);
paramMap.put("feederInfo", feederInfo);
try {
requestParams = JsonUtil.toJsonStr(paramMap);
log.info(task.getBarcode() + "出库通知,参数" + requestParams);
responseInfo = HttpHelper.postJson(outNotifyUrl, paramMap);
log.info(task.getBarcode() + "出库通知返回" + responseInfo);
ApiResult apiResult = JsonUtil.toObj(responseInfo, ApiResult.class);
} catch (Exception e) {
log.error("出库通知接口出错:" + e.getMessage());
}
}
}
private String getData(Map<String, Object> dataMap, String dataKey) {
Object data = dataMap.get(dataKey);
if (data == null) {
return "";
} else {
return data.toString();
}
}
/**
* 入库判定
*
* @param inCheckUrl
* @param barcode
* @return
* @throws ValidateException
*/
@Override
public Barcode canPutIn(String inCheckUrl, Barcode barcode) throws ValidateException {
log.info("{}类型为:{}", barcode.getBarcode(), barcode.getType());
if (COMPONENT_TYPE.COMPONENT != barcode.getType()) {
return null;
}
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("reelId", barcode.getBarcode());
paramMap.put("fullCode", barcode.getFullCode());
try {
log.info(barcode.getBarcode() + "入库验证,参数" + JsonUtil.toJsonStr(paramMap));
String result = HttpHelper.postJson(inCheckUrl, paramMap);
log.info(barcode.getBarcode() + "入库验证返回" + result);
ApiResult apiResult = JsonUtil.toObj(result, ApiResult.class);
if (apiResult.getCode() == 0) {
Map<String, Object> dataMap = (Map<String, Object>) apiResult.getData();
String partNum = getData(dataMap, "partNum");
if (Strings.isNotBlank(partNum)) {
barcode.setPartNumber(partNum);
}
String vendor = getData(dataMap, "vendor");
if (Strings.isNotBlank(vendor)) {
barcode.setProvider(vendor);
}
String qtyStr = getData(dataMap, "qty");
if (Strings.isNotBlank(qtyStr)) {
int qty = Integer.valueOf(qtyStr);
if (qty > 0) {
barcode.setAmount(qty);
}
}
String batch = getData(dataMap, "batch");
if (Strings.isNotBlank(batch)) {
barcode.setBatch(batch);
}
try {
String produceDateStr = getData(dataMap, "produceDate");
if (Strings.isNotBlank(produceDateStr)) {
Date produceDate = DateUtil.toDate(produceDateStr, "yyyy-MM-dd HH:mm:ss");
barcode.setProduceDate(produceDate);
}
} catch (ParseException e) {
log.error("日期转换出错", e);
}
barcode = barcodeManager.saveBarcode(barcode);
return barcode;
} else {
return null;
}
} catch (Exception e) {
log.error("入库验证接口出错:" + e.getMessage());
throw new ValidateException("smfcore.mesApi.inCheck.error", "MES验证出错:" + e.getMessage());
}
}
/**
* 需求单状态通知
*
* @param orderNotifyUrl
* @param liteOrder
*/
@Override
public void onOrderStatusChange(String orderNotifyUrl, LiteOrder liteOrder) {
}
@Override
public LiteOrder fetchOrder(String fetchOrderUrl, String orderNumber, String username) {
return null;
}
}
...@@ -2,11 +2,11 @@ server: ...@@ -2,11 +2,11 @@ server:
port: 8800 port: 8800
api: api:
#name: Neotel name: Hella
#inCheckUrl: DaLu
#outNotifyUrl: https://matlabel-tool.com:4434/SMD_BOXAPI/OutBox
#inNotifyUrl: https://matlabel-tool.com:4434/SMD_BOXAPI/InBox
hella:
host: 127.0.0.1
port: 9999
# 文件存储路径 # 文件存储路径
file: file:
...@@ -41,6 +41,6 @@ app: ...@@ -41,6 +41,6 @@ app:
type: "" type: ""
menu: menu:
show: show: orderSetting
hide: hide:
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!