Commit dc5bb044 LN

调用mes接口完善

1 个父辈 fe0b0488
package com.neotel.smfcore.core.device.handler.impl;
import cn.hutool.core.util.ObjectUtil;
import com.google.common.base.Strings;
import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.api.CodeValidateParam;
import com.neotel.smfcore.core.device.api.IOpAuthApi;
import com.neotel.smfcore.core.device.bean.StatusBean;
import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.inList.util.InListCache;
import com.neotel.smfcore.core.order.enums.ORDER_COLOR;
import com.neotel.smfcore.core.storage.enums.DeviceType;
import com.neotel.smfcore.core.storage.service.po.Storage;
......@@ -22,17 +19,15 @@ import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.websocket.MsgType;
import com.neotel.smfcore.core.system.websocket.SocketMsg;
import com.neotel.smfcore.core.system.websocket.WebSocketServer;
import com.neotel.smfcore.hikvision.HikApi;
import com.neotel.smfcore.hikvision.bean.InOutApiInfo;
import com.neotel.smfcore.security.TokenProvider;
import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.security.service.po.Group;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
......@@ -371,6 +366,10 @@ public class NLPShelfHandler extends BaseDeviceHandler{
String msg = queueTask.getBarcode() + "入库到" + pos.getPosName() + "成功";
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.INFO,"smfclient.nlp.inputOk",new String[]{queueTask.getBarcode(),pos.getPosName()}));
//入库完成,调用 7.5入库上架过账接口
boolean result= HikApi.putInApi("", InOutApiInfo.inputInfo(queueTask.getInType(),queueTask.getBarcode(),queueTask.getNum()));
break;
} catch (Exception e) {
log.error("入库出错", e);
......@@ -417,6 +416,10 @@ public class NLPShelfHandler extends BaseDeviceHandler{
String msg = queueTask.getBarcode()+ "从"+ posName+"出库成功";
log.error(msg);
WebSocketServer.sendMsg("",new SocketMsg(msg, MsgType.INFO,"smfclient.nlp.outputOk",new String[]{queueTask.getBarcode(),posName}));
//出库完成,调用 ,7.6出库下架过账接口
boolean result= HikApi.checkOutApi("",InOutApiInfo.outInfo( queueTask.getOutType(),queueTask.getBarcode(),queueTask.getNum(),queueTask.getBaseCode(),queueTask.getLgort()));
break;
} catch (Exception e) {
log.error("出库出错",e);
......
......@@ -23,6 +23,8 @@ import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.core.system.websocket.MsgType;
import com.neotel.smfcore.core.system.websocket.SocketMsg;
import com.neotel.smfcore.core.system.websocket.WebSocketServer;
import com.neotel.smfcore.hikvision.HikApi;
import com.neotel.smfcore.hikvision.bean.api.ResponseParam;
import com.neotel.smfcore.security.TokenProvider;
import com.neotel.smfcore.security.service.manager.IUserManager;
import com.neotel.smfcore.security.service.po.Group;
......@@ -163,6 +165,28 @@ public class SingleInController {
}
Barcode barcode = resolveBarcode(code);
//唯一码校验接口
ResponseParam param= HikApi.riCheckApi(SecurityUtils.getCurrentUsername(),barcode.getBarcode(),"","");
if(ObjectUtil.isNotEmpty(param)) {
if (param.getCode().equals(HikApi.CODE_OK)) {
//唯一码验证成功
} else {
throw new ValidateException("smfcore.riCheckApi.error", "唯一码[" + barcode.getBarcode() + "]验证失败:" + param.getCode() + "=" + param.getMessage() + "", new String[]{param.getCode(), param.getMessage()});
}
}
//判断如果是退料入库,需要获取数量
if(inType.equals(4)) {
int num = HikApi.returnMaterialApi(SecurityUtils.getCurrentUsername(), barcode.getBarcode());
if (num > 0) {
barcode.setAmount(num);
barcodeManager.saveBarcode(barcode);
log.info("退料入库,二维码 " + barcode.getBarcode() + " 从接口获得新数量:" + num + ",并更新");
}
}
String pn = barcode.getPartNumber();
String reelId = barcode.getBarcode();
String num = barcode.getAmount() + "";
......
......@@ -125,6 +125,10 @@ public class LiteOrder extends BasePo implements Serializable {
* 工单类型,默认1=PN,2=RI
*/
private int type=1;
/**
* 操作用户名
*/
private String operateUser;
/**
* 订单的详细信息
......
......@@ -92,6 +92,14 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
return this.getId().compareTo(o.getId());
}
public void UpdateData(LiteOrderItem item){
setReason(item.getReason());
setIncrement(item.getIncrement());
setOverFlag(item.getOverFlag());
setQty(item.getQty());
setStation(item.getStation());
}
// /**
// * 物料编号 materialNo
......
......@@ -208,8 +208,20 @@ public class DataLog extends BasePo implements Serializable {
* 入库类型:1=普通入库,2=并盘入库,3=截料入库,4=退料入库
*/
private int inType;
/**
* 出库类型: 0=普通出库,1=并盘出库 ,2=湿敏出库
*/
private int outType;
/**
* 基地
*/
private String baseCode;
/**
* 库位
*/
private String lgort;
/**
* MSD附加信息
*/
private MSDAppendInfo msdAppendInfo;
......
......@@ -11,7 +11,6 @@ import com.neotel.smfcore.hikvision.util.JsonUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import springfox.documentation.spring.web.json.Json;
import javax.annotation.PostConstruct;
import java.text.SimpleDateFormat;
......@@ -21,19 +20,32 @@ import java.util.*;
public class HikApi {
//读取配置中的地址
private static String mesServer = "";
@Value("${hik.server:}")
public void setHost(String host) {
public void setMesServer(String mesServer) {
HikApi.mesServer = mesServer;
}
private static String baseCode="";
@Value("${hik.baseCode:}")
public void setBaseCode(String baseCode) {
HikApi.baseCode = baseCode;
}
private static String lgort="";
@Value("${hik.lgort:}")
public void setLgort(String lgort) {
HikApi.lgort = lgort;
}
@Autowired
private DataCache dataCache;
@PostConstruct
public void init(){
mesServer=dataCache.GetConfigCache("hik.server","hik.server",mesServer);
log.info("HIK服务器地址:"+mesServer);
baseCode=dataCache.GetConfigCache("hik.baseCode","hik.baseCode",baseCode);
lgort=dataCache.GetConfigCache("hik.lgort","hik.lgort",lgort);
log.info("HIK服务器地址:"+mesServer+",baseCode="+baseCode+",lgort="+lgort);
}
/**
......@@ -293,14 +305,34 @@ public class HikApi {
* @param param
* @return 入库上架过账 是否成功,true=成功
*/
public static boolean inputApi(String userName, InOutApiInfo param){
String apiName="Hik 入库上架过账接口 (inputApi): ";
public static boolean putInApi(String userName, InOutApiInfo param){
String apiName="Hik 入库上架过账接口 (putInApi): ";
String url = getUrl( "入库上架过账接口");
// warehousingType Integer 是 入库类型(0普通入库1退料入库2并盘入库3截料入库)
// trayId String 41 是 料盘ID/唯一码
// qty Integer 是 数量
// baseCode String 16 是 基地
// lgort String 16 是 库位
int inType=0;
if(param.getInType().equals(2)){
//入库类型(1=普通入库,2=并盘入库,3=截料入库,4=退料入库)
inType=2;
}else if(param.getInType().equals(3)){
inType=3;
}else if(param.getInType().equals(4)){
inType=1;
}
param.setInType(inType);
if(ObjectUtil.isEmpty(param.getBaseCode())&& ObjectUtil.isNotEmpty(baseCode)){
param.setBaseCode(baseCode);
}
if(ObjectUtil.isEmpty(param.getLgort())&&ObjectUtil.isNotEmpty(lgort)){
param.setLgort(lgort);
}
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("warehousingType", param.getInType());//入库类型(0普通入库1退料入库2并盘入库3截料入库)
dataMap.put("trayId", param.getTrayId());//料盘ID/唯一码
......@@ -357,6 +389,14 @@ public class HikApi {
dataMap.put("baseCode", param.getBaseCode());//基地
dataMap.put("lgort", param.getLgort());//库位
if(ObjectUtil.isEmpty(param.getBaseCode())&& ObjectUtil.isNotEmpty(baseCode)){
param.setBaseCode(baseCode);
}
if(ObjectUtil.isEmpty(param.getLgort())&&ObjectUtil.isNotEmpty(lgort)){
param.setLgort(lgort);
}
String data = JsonUtil.toJsonStr(dataMap);
RequestParam info = new RequestParam(getReqCode(), userName, data);
......@@ -391,12 +431,13 @@ public class HikApi {
* @param orderNo 工单号、合单号
* @return 保存下架过账信息 是否成功,true=成功
*/
public static List<OrderItemInfo> checkOrderApi(String userName, String orderNo){
String apiName="Hik 工单发料状态查询接口 (checkOrderApi): ";
public static List<Object> updateOrderApi(String userName, String orderNo){
String apiName="Hik 工单发料状态查询接口 (updateOrderApi): ";
String url = getUrl( "工单发料状态查询接口");
// data String 16 是 工单号/合单号
RequestParam info = new RequestParam(getReqCode(), userName, orderNo);
HikApiRequest request = new HikApiRequest(1, url, new Date(), info);
List<Object> resultList=new ArrayList<>();
log.info(apiName+" 发送" + info.getData());
try {
ResponseParam responseInfo = HttpHelper.postJson(url, info);
......@@ -409,11 +450,22 @@ public class HikApi {
} else if (responseInfo.getCode().equals(CODE_PARAMERROR) || responseInfo.getCode().equals(CODE_REPEAT)) {
needResend = true;
log.info(apiName+"返回code=" + responseInfo.getCode() + ",需要重发," + JsonUtil.toJsonStr(responseInfo));
} else {
}
else if(responseInfo.getCode().equals(33)){
// code Integer 结果码(33关闭)
//工单已关闭
log.info(apiName+"返回code=" + responseInfo.getCode() + ",工单已关闭,无法出库" );
resultList.add(33);
resultList.add(new ArrayList<>());
return resultList;
}
else {
log.info(apiName + "返回" + JsonUtil.toJsonStr(responseInfo));
String dataStr = responseInfo.getData();
List<OrderItemInfo> list = JsonUtil.toList(dataStr, OrderItemInfo .class);
return list;
resultList.add(responseInfo.getCode());
resultList.add(list);
return resultList;
}
} catch (Exception e) {
......@@ -434,6 +486,16 @@ public class HikApi {
public static ResponseParam riCheckApi(String userName, String trayId,String baseCode,String lgort){
String apiName="Hik 唯一码校验接口 (riCheckApi): ";
String url = getUrl( "唯一码校验接口");
if(ObjectUtil.isEmpty(baseCode)&& ObjectUtil.isNotEmpty(HikApi.baseCode)){
baseCode=HikApi.baseCode;
}
if(ObjectUtil.isEmpty(lgort)&&ObjectUtil.isNotEmpty(HikApi.lgort)){
lgort=HikApi.lgort;
}
// trayId String 41 是 料盘ID
// baseCode String 16 是 基地
// lgort String 16 是 库位
......@@ -474,9 +536,10 @@ public class HikApi {
* @param replenishmentNo 补料单号
* @return 返回备料列表
*/
public static List<OrderItemInfo> checkReplenishmentOrderApi(String userName, String replenishmentNo){
String apiName="Hik 补料单发料状态查询接口 (checkReplenishmentOrderApi): ";
public static List<Object> updateReplenishmentOrderApi(String userName, String replenishmentNo){
String apiName="Hik 补料单发料状态查询接口 (updateReplenishmentOrderApi): ";
String url = getUrl( "补料单发料状态查询接口");
List<Object> resultList=new ArrayList<>();
// data String 41 是 补料单号
RequestParam info = new RequestParam(getReqCode(), userName, replenishmentNo);
HikApiRequest request = new HikApiRequest(1, url, new Date(), info);
......@@ -492,8 +555,67 @@ public class HikApi {
} else if (responseInfo.getCode().equals(CODE_PARAMERROR) || responseInfo.getCode().equals(CODE_REPEAT)) {
needResend = true;
log.info(apiName+"返回code=" + responseInfo.getCode() + ",需要重发," + JsonUtil.toJsonStr(responseInfo));
} else if(responseInfo.getCode().equals(33)){
// code Integer 结果码(33关闭)
//工单已关闭
log.info(apiName+"返回code=" + responseInfo.getCode() + ",工单已关闭,无法出库" );
resultList.add(33);
resultList.add(new ArrayList<>());
return resultList;
} else {
log.info(apiName + "返回" + JsonUtil.toJsonStr(responseInfo));
String dataStr = responseInfo.getData();
List<OrderItemInfo> list = JsonUtil.toList(dataStr, OrderItemInfo .class);
resultList.add(responseInfo.getCode());
resultList.add(list);
return resultList;
}
} catch (Exception e) {
log.error(apiName+"出错", e);
}
HikApiCache.addFailedRequest(request);
return null;
}
/**
* 7.10 预留单转储出库接口
* @param userName
* @param docNo 预留单号
* @param businessType 单据类型(0 线边仓间转储,1 )
* @return 返回预留单详情列表
*/
public static List<ReservedOrderItem> reservedOrderApi(String userName, String docNo , int businessType){
String apiName="Hik 预留单转储出库接口 (updateReplenishmentOrderApi): ";
String url = getUrl( "预留单转储出库接口");
// 接口名 预留单转储出库接口
// data docNo String 16 是 预留单号
// BusinessType Integer 是 单据类型(0 线边仓间转储,1 )
Map<String,Object> dataMap=new HashMap<>();
dataMap.put("docNo",docNo);
dataMap.put("BusinessType",businessType);
String data=JsonUtil.toJsonStr(dataMap);
RequestParam info = new RequestParam(getReqCode(), userName, data);
HikApiRequest request = new HikApiRequest(1, url, new Date(), info);
log.info(apiName+" 发送" + info.getData());
try {
ResponseParam responseInfo = HttpHelper.postJson(url, info);
boolean needResend = false;
if (responseInfo == null || responseInfo.getCode().equals(-1)) {
needResend = true;
log.info(apiName+" 未收到返回值,需要重发");
} else if (responseInfo.getCode().equals(CODE_PARAMERROR) || responseInfo.getCode().equals(CODE_REPEAT)) {
needResend = true;
log.info(apiName+"返回code=" + responseInfo.getCode() + ",需要重发," + JsonUtil.toJsonStr(responseInfo));
} else {
List<OrderItemInfo> list = JsonUtil.toList(responseInfo.getData(), OrderItemInfo .class);
log.info(apiName + "返回" + JsonUtil.toJsonStr(responseInfo));
String dataStr = responseInfo.getData();
List<ReservedOrderItem> list = JsonUtil.toList(dataStr, ReservedOrderItem.class);
return list;
}
......@@ -503,4 +625,51 @@ public class HikApi {
HikApiCache.addFailedRequest(request);
return null;
}
/**
* 7.11订单发料完成通知接口
* @param userName
* @param orderNo 工单号
* @return 返回备料列表
*/
public static boolean orderEndApi(String userName, String orderNo){
// 7.11订单发料完成通知接口
// 接口名 订单发料完成通知接口
// 功能说明 提供订单发料完成通知能
// 提供方 MES
// 调用方 SMF
// 请求参数 参数名 数据类型 最大长度 是否必填 备注
// reqCode String 32 是 唯一请求号
// userCode String 32 是 操作人
// data String 16 是 工单号
// 返回结果 code Integer 结果码
// message String 64 结果描述
// reqCode String 32 唯一请求号
String apiName="Hik 订单发料完成通知接口 (orderEndApi): ";
String url = getUrl( "订单发料完成通知接口");
// data String 41 是 补料单号
RequestParam info = new RequestParam(getReqCode(), userName, orderNo);
HikApiRequest request = new HikApiRequest(1, url, new Date(), info);
log.info(apiName+" 发送" + info.getData());
try {
ResponseParam responseInfo = HttpHelper.postJson(url, info);
boolean needResend = false;
if (responseInfo == null || responseInfo.getCode().equals(-1)) {
needResend = true;
log.info(apiName+" 未收到返回值,需要重发");
} else if (responseInfo.getCode().equals(CODE_PARAMERROR) || responseInfo.getCode().equals(CODE_REPEAT)) {
needResend = true;
log.info(apiName+"返回code=" + responseInfo.getCode() + ",需要重发," + JsonUtil.toJsonStr(responseInfo));
} else {
log.info(apiName+" 返回" + JsonUtil.toJsonStr(responseInfo));
return true;
}
} catch (Exception e) {
log.error(apiName+"出错", e);
}
HikApiCache.addFailedRequest(request);
return false;
}
}
......@@ -108,12 +108,13 @@ public class HikvisionApiController {
order.UpdateOutInfo(outInfo);
LiteOrderItem item = outInfo.crateOrderItem(orderNo);
item = liteOrderItemManager.save(item);
List<LiteOrderItem> items = order.getOrderItems();
items.add(item);
order.setOrderItems(items);
liteOrderManager.save(order);
order = liteOrderCache.updateOrderItem(order, item);
// item = liteOrderItemManager.save(item);
// List<LiteOrderItem> items = order.getOrderItems();
// items.add(item);
// order.setOrderItems(items);
// liteOrderManager.save(order);
liteOrderCache.addOrderToMap(order);
}
......
......@@ -25,6 +25,16 @@ public class InOutApiInfo {
// qty Integer 是 数量
// baseCode String 16 是 基地
// lgort String 16 是 库位
public static InOutApiInfo inputInfo(int inType,String trayId,int qty)
{
return new InOutApiInfo(inType,0,trayId,qty,"","");
}
public static InOutApiInfo outInfo(int outType,String trayId,int qty,String baseCode,String lgort){
return new InOutApiInfo(0,outType,trayId,qty,baseCode,lgort);
}
/**
* 入库类型(0普通入库1退料入库2并盘入库3截料入库)
*/
......
package com.neotel.smfcore.hikvision.bean;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*7.10 预留单转储出库接口 返回列表
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ReservedOrderItem {
/**
* docNo String 32 单据号
*/
private String docNo;
/**
* outLgort String 16 转出库位
*/
private String outLgort;
/**
* inLgort String 16 转入库位
*/
private String inLgort;
/**
* materialNo String 16 物料号
*/
private String materialNo;
/**
*baseCode String 16 基地编号
*/
private String baseCode;
/**
* dumpQty Integer 转出数量
*/
private Integer dumpQty;
}
......@@ -2,6 +2,8 @@ server:
port: 8800
hik:
server:
baseCode: baseCode
lgort: lgort
# 文件存储路径
file:
......@@ -30,6 +32,5 @@ spring:
rsa:
private_key: MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA0vfvyTdGJkdbHkB8mp0f3FE0GYP3AYPaJF7jUd1M0XxFSE2ceK3k2kw20YvQ09NJKk+OMjWQl9WitG9pB6tSCQIDAQABAkA2SimBrWC2/wvauBuYqjCFwLvYiRYqZKThUS3MZlebXJiLB+Ue/gUifAAKIg1avttUZsHBHrop4qfJCwAI0+YRAiEA+W3NK/RaXtnRqmoUUkb59zsZUBLpvZgQPfj1MhyHDz0CIQDYhsAhPJ3mgS64NbUZmGWuuNKp5coY2GIj/zYDMJp6vQIgUueLFXv/eZ1ekgz2Oi67MNCk5jeTF2BurZqNLR3MSmUCIFT3Q6uHMtsB9Eha4u7hS31tj1UWE+D+ADzp59MGnoftAiBeHT7gDMuqeJHPL4b+kC+gzV4FGTfhR9q3tTbklZkD2A==
app:
version: '@project.version@'
\ No newline at end of file
version: '1.23.2909'
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!