优化调整

This commit is contained in:
lsymicc
2026-04-22 17:13:01 +08:00
parent 9d8496eeb6
commit 955b94c145
22 changed files with 322 additions and 99 deletions

View File

@@ -37,7 +37,7 @@
<spring-framework.version>5.3.39</spring-framework.version>
<hutool.version>5.8.27</hutool.version>
<lombok.version>1.18.30</lombok.version>
<HslCommunication.version>3.7.0</HslCommunication.version>
<HslCommunication.version>2.0.0</HslCommunication.version>
<mybatis-plus.version>3.5.2</mybatis-plus.version>
</properties>

View File

@@ -70,11 +70,12 @@ public interface IRequestLogService
/**
* 接收请求,并插入日志
* @param url
* @param param
* @param endPoint
* @return
*/
public RequestLog getRequestLog(String url, String param);
public RequestLog getRequestLog(String param, String endPoint);
RequestLog getRequestLog2(String url, String param, String endPoint);

View File

@@ -481,6 +481,13 @@ public class ApiServiceImpl implements IApiService {
@Override
public AjaxResult receiveOutMydoJob(StockoutReceive stockoutReceive) {
//生成接口记录
RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(stockoutReceive), "推送出库作业");
requestLog.setResponseBody(JSONUtil.toJsonStr(AjaxResult.success()));
requestLog.setResponseStatus("0");
requestLog.setIsSuccessful("1");
requestLogService.insertRequestLog(requestLog);
//检查任务是否存在,避免重复生成
MydoJob job = new MydoJob();
job.setWmsTaskNo(stockoutReceive.getTaskCode());
@@ -513,6 +520,8 @@ public class ApiServiceImpl implements IApiService {
int i = mydoJobService.insertMydoJob(mydoJob);
// boolean success = mydoJobService.saveOrUpdate(mydoJob);
if (i != 0) {
requestLog.setResponseStatus("1");
requestLogService.updateRequestLog(requestLog);
return AjaxResult.success(
"【请求成功】wms下发出库作业,下发任务号:" + stockoutReceive.getTaskCode() + ",出库货位:" + stockoutReceive.getSiteCode());
}else{

View File

@@ -201,6 +201,7 @@ public class RequestLogServiceImpl implements IRequestLogService
return requestLog;
}
/**
* @@@ FT568 使用用户自定义的wms请求响应
* @param url
@@ -272,6 +273,8 @@ public class RequestLogServiceImpl implements IRequestLogService
return requestLog;
}
/**
* @@@ FT568 将wms自定义的响应格式解析为本地响应格式(减少其他改动)
* @param responseStr 请求响应字符串

View File

@@ -3,7 +3,8 @@ package com.ruoyi.common;
public class Constant {
public static final String WMS_BASE_URL = "http://192.168.58.10:8082/api2wms";
public static final String LOCAL_URL = "http://127.0.0.1:8084";
public static final String WMS_BASE_URL = "http://10.88.10.69:8290/service";
public static final String RCS_BASE_URL = "http://192.168.58.101:8182/rcms/services/rest/hikRpcService/";
//#region AGV接口url

View File

@@ -81,6 +81,10 @@ public class TaskStatusCode {
*/
public static final String TASK_EP_DDJ_FINISH_TIMEOUT = "6_TIMEOUT_FINISH";
public static final String TASK_EXCEPTION_PUT = "IN_FAULT";
public static final String TASK_EXCEPTION_PICK = "OUT_FAULT";
/**
* 任务执行阶段 回传wms完成
*/

View File

@@ -3,7 +3,13 @@ package com.ruoyi.device.ddj.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.api.domain.RequestLog;
import com.ruoyi.api.service.IRequestLogService;
import com.ruoyi.device.ddj.domain.StackerStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +30,8 @@ import com.ruoyi.device.ddj.service.IMsgDdjService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import static com.ruoyi.common.Constant.LOCAL_URL;
/**
* 堆垛机状态表Controller
*
@@ -37,6 +45,9 @@ public class MsgDdjController extends BaseController
@Autowired
private IMsgDdjService msgDdjService;
@Autowired
private IRequestLogService requestLogService;
/**
* 查询堆垛机状态表列表
*/
@@ -108,7 +119,7 @@ public class MsgDdjController extends BaseController
/**
* 返回堆垛机状态的记录类型
* 返回堆垛机状态的记录类型 - 中
* @param id 编号
* @param mode 操作模式
* @param taskNo 任务号
@@ -118,7 +129,7 @@ public class MsgDdjController extends BaseController
* @param permission 允许下发
* @param position 当前位置
*/
public record StackerStatus(
public record StackerStatusContent(
@JsonProperty("堆垛机编号") String id,
@JsonProperty("操作模式") String mode,
@JsonProperty("任务号") String taskNo,
@@ -135,20 +146,22 @@ public class MsgDdjController extends BaseController
*/
@GetMapping("/getStackerStatus/{id}")
public AjaxResult getStackerStatus(@PathVariable Long id){
//返回堆垛机部分参数的状态映射
if (id == 1) {
MsgDdj msg = msgDdjService.selectMsgDdjById(id);
com.ruoyi.device.ddj.domain.StackerStatus status = new com.ruoyi.device.ddj.domain.StackerStatus();
// StackerStatus status = new StackerStatus();
//操作模式
String mode = "其他";
String mode;
switch (msg.getCzfs()){
case 1 -> mode = "手动";
case 5 -> mode = "联机自动";
default -> mode = "其他";
}
//设备状态
String deviceStatus = "待机";
String deviceStatus;
switch (msg.getSbzt()){
case 0 -> deviceStatus = "待机";
case 1 -> deviceStatus = "运行中";
@@ -156,16 +169,17 @@ public class MsgDdjController extends BaseController
}
//执行阶段
String executionPhase = "待机";
String executionPhase;
switch (msg.getJdbz()){
case 1 -> executionPhase = "取货途中";
case 2 -> executionPhase = "取货中";
case 3 -> executionPhase = "放货途中";
case 4 -> executionPhase = "放货中";
case 5 -> executionPhase = "放货完成";
default -> executionPhase = "待机";
}
StackerStatus statusContent = new StackerStatus(
StackerStatusContent statusContent = new StackerStatusContent(
String.valueOf(id),
mode,
String.valueOf(msg.getRwh()),
@@ -175,6 +189,14 @@ public class MsgDdjController extends BaseController
msg.getYxxf() == 1 ? "允许" : "禁止",
msg.getCurrentRow() + "排" + msg.getCurrentColumn() + "列" + msg.getCurrentFloor() + "层"
);
RequestLog requestLog = requestLogService.getRequestLog(String.valueOf(id), "获取指定堆垛机状态");
requestLog.setRequestUrl(LOCAL_URL + "/device/ddj/getStackerStatus/" + id);
requestLog.setRequestMethod("get");
requestLog.setResponseStatus("1");
requestLog.setResponseBody(JSON.toJSONString(statusContent));
requestLogService.insertRequestLog(requestLog);
// status.setId(msg.getId());
// status.setMode(msg.getCzfs());
// status.setTaskNo(msg.getRwh());
@@ -194,4 +216,77 @@ public class MsgDdjController extends BaseController
}
}
/**
* 返回堆垛机状态的记录类型 - 英
* @param id 编号
* @param mode 操作模式
* @param taskNo 任务号
* @param deviceStatus 设备状态
* @param forkStatus 货叉状态
* @param executionPhase 执行阶段
* @param permission 允许下发
* @param position 当前位置
*/
public record StackerStatus(
Long id,
int mode,
String taskNo,
int deviceStatus,
int forkStatus,
int executionPhase,
int permission,
String position){}
/**
* 请求获取堆垛机状态
* @param id 堆垛机编号
* @return
*/
@GetMapping("/getStackerStatus/en/{id}")
public AjaxResult getStackerStatusEn(@PathVariable Long id){
//返回堆垛机部分参数的状态映射
if (id == 1) {
MsgDdj msg = msgDdjService.selectMsgDdjById(id);
StackerStatus statusContent = new StackerStatus(
id,
msg.getCzfs(),
String.valueOf(msg.getRwh()),
msg.getSbzt(),
msg.getHczt(),
msg.getJdbz(),
msg.getYxxf(),
String.format("%02d",msg.getCurrentRow()) + String.format("%02d",msg.getCurrentColumn()) + String.format("%02d",msg.getCurrentFloor())
);
RequestLog requestLog = requestLogService.getRequestLog(String.valueOf(id), "获取指定堆垛机状态");
requestLog.setRequestUrl(LOCAL_URL + "/device/ddj/getStackerStatus/en/" + id);
requestLog.setRequestMethod("get");
requestLog.setResponseStatus("1");
requestLog.setResponseBody(JSON.toJSONString(statusContent));
requestLogService.insertRequestLog(requestLog);
// status.setId(msg.getId());
// status.setMode(msg.getCzfs());
// status.setTaskNo(msg.getRwh());
// status.setDeviceStatus(msg.getSbzt());
// status.setForkStatus(msg.getHczt());
// status.setExecutionPhase(msg.getJdbz());
// status.setPermission(msg.getYxxf());
// status.setCurrentRow(msg.getCurrentRow());
// status.setCurrentColumn(msg.getCurrentColumn());
// status.setCurrentFloor(msg.getCurrentFloor());
// status.setCurrentRoad(msg.getId());
// status.setCurrentPosition(msg.getCurrentRow() + "排" + msg.getCurrentColumn() + "列" + msg.getCurrentFloor() + "层");
return AjaxResult.success(statusContent);
}else{
return AjaxResult.error("【查询堆垛机状态】设备编号:" + id + ",查询超出最大索引");
}
}
}

View File

@@ -3,8 +3,10 @@ package com.ruoyi.device.ssj.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.alibaba.fastjson2.JSON;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.ruoyi.device.ssj.domain.ConvStatus;
import com.ruoyi.api.domain.RequestLog;
import com.ruoyi.api.service.IRequestLogService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@@ -24,6 +26,8 @@ import com.ruoyi.device.ssj.service.IDeviceSsjService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
import static com.ruoyi.common.Constant.LOCAL_URL;
/**
* 输送机Controller
*
@@ -37,6 +41,9 @@ public class DeviceSsjController extends BaseController
@Autowired
private IDeviceSsjService deviceSsjService;
@Autowired
private IRequestLogService requestLogService;
/**
* 查询输送机列表
*/
@@ -105,10 +112,13 @@ public class DeviceSsjController extends BaseController
return toAjax(deviceSsjService.deleteDeviceSsjByIds(ids));
}
/**
* 返回的输送机状态
* 返回的输送机状态 - 中
*/
private record ConvStatus(
private record ConvStatusContent(
@JsonProperty("输送机编号") String id,
@JsonProperty("操作模式") String mode,
@JsonProperty("占用状态") String free,
@@ -122,20 +132,68 @@ public class DeviceSsjController extends BaseController
*/
@GetMapping("/getConvStatus/{id}")
public AjaxResult getConvStatus(@PathVariable String id){
DeviceSsj msgSsj = deviceSsjService.selectDeviceSsjByDeviceCode(id);
ConvStatusContent status = new ConvStatusContent(
id,
msgSsj.getMode() == 1 ? "自动" : "手动",
msgSsj.getKx() == 1 ? "占用" : "空闲",
msgSsj.getDw() == 1 ? "输送到位" : "未到位",
// msgSsj.getMode() == 1 ? "1" : "0",
// msgSsj.getKx() == 1 ? "1" : "0",
// msgSsj.getDw() == 1 ? "1" : "0",
String.valueOf(msgSsj.getTaskNo())
);
if (msgSsj == null) {
return AjaxResult.error("【查询输送机状态】设备编号:" + id + ",该设备不存在!");
}
RequestLog requestLog = requestLogService.getRequestLog(id, "获取指定输送机状态");
requestLog.setRequestUrl(LOCAL_URL + "/device/ssj/getConvStatus/" + id);
requestLog.setRequestMethod("get");
requestLog.setResponseStatus("1");
requestLog.setResponseBody(JSON.toJSONString(status));
requestLogService.insertRequestLog(requestLog);
return AjaxResult.success(status);
}
/**
* 请求返回输送机状态 - 英
* @param id 输送机编号
* @return
*/
private record ConvStatus(
String id,
String mode,
String free,
String inPosition,
int taskNo){}
@GetMapping("/getConvStatus/en/{id}")
public AjaxResult getConvStatusEn(@PathVariable String id){
DeviceSsj msgSsj = deviceSsjService.selectDeviceSsjByDeviceCode(id);
ConvStatus status = new ConvStatus(
id,
msgSsj.getMode() == 1 ? "自动" : "手动",
msgSsj.getKx() == 1 ? "占用" : "空闲",
msgSsj.getDw() == 1 ? "输送到位" : "未到位",
String.valueOf(msgSsj.getTaskNo())
msgSsj.getMode() == 1 ? "1" : "0",
msgSsj.getKx() == 1 ? "1" : "0",
msgSsj.getDw() == 1 ? "1" : "0",
msgSsj.getTaskNo()
);
if (msgSsj == null) {
return AjaxResult.error("【查询输送机状态】设备编号:" + id + ",该设备不存在!");
}
RequestLog requestLog = requestLogService.getRequestLog(id, "获取指定输送机状态");
requestLog.setRequestUrl(LOCAL_URL + "/device/ssj/getConvStatus/en/" + id);
requestLog.setRequestMethod("get");
requestLog.setResponseStatus("1");
requestLog.setResponseBody(JSON.toJSONString(status));
requestLogService.insertRequestLog(requestLog);
return AjaxResult.success(status);
}

View File

@@ -1,41 +0,0 @@
package com.ruoyi.device.ssj.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class ConvStatus {
/**
* 输送机编号
*/
private String id;
/**
* 手/自动模式
*/
private String mode;
/**
* 0-空闲 1-占用
*/
private String free;
/**
* 0-未到位 1-到位
*/
private String inPosition;
/**
* 任务号
*/
private String taskNo;
}

View File

@@ -86,6 +86,9 @@ public class DeviceSsj extends BaseEntity
@Excel(name="允许放货")
private int allowPut;
/**
* 输送状态
*/
private int sszt;
private int taskNo2;
@@ -98,7 +101,7 @@ public class DeviceSsj extends BaseEntity
/**
* 托盘高度
*/
private String height;
private int height;
/**
* 称重

View File

@@ -104,10 +104,5 @@ public class JobCallBackController extends BaseController
return toAjax(jobCallBackService.deleteJobCallBackByIds(ids));
}
@Scheduled(fixedDelay=3000)
public void jobCallBack() {
jobCallBackService.jobCallBack();
}
}

View File

@@ -121,21 +121,4 @@ public class MydoJobController extends BaseController
}
/**
* 处理未正常移除的【堆垛机执行完成】或【出库到位】的遗留任务
*/
@Scheduled(fixedDelay = 3000)
public void mydoJobHandler() {
//此处堆垛机执行完成-【TASK_EP_DDJ_FINISH】或出库到位-【TASK_EP_SSJ_STOCKOUT_FINISH】的常量值相同,均可表示任务【已完成】
//用其中一种状态查询所有标记为【已完成】的任务
List<MydoJob> jobs = mydoJobService.selectMydoJobList(
new MydoJob().builder().executionPhase(TASK_EP_DDJ_FINISH).build()
);
if (!jobs.isEmpty()) {
for (MydoJob job : jobs) {
mydoJobService.taskFinish(Long.valueOf(job.getTaskNo()));
}
}
}
}

View File

@@ -50,5 +50,9 @@ public class JobCallBack extends BaseEntity
@Excel(name = "wms任务编号")
private String taskCode;
/** 回传重试次数 */
@Excel(name = "重试次数")
private int retry;
}

View File

@@ -121,6 +121,7 @@ public class JobCallBackServiceImpl implements IJobCallBackService
jobCallBack.setStatus("1");
}else{
jobCallBack.setStatus("99");
jobCallBack.setRetry(jobCallBack.getRetry() + 1);
}
jobCallBackMapper.updateJobCallBack(jobCallBack);
}

View File

@@ -72,9 +72,9 @@ public class PlcDdj1Read extends Thread {
msgDdj.setYxxf(ParseUtil.optInt(24, ddsx));
msgDdj.setXtxh(ParseUtil.optInt(26, ddsx));
msgDdj.setCurrentRow(ParseUtil.optInt(26, ddsx));
msgDdj.setCurrentColumn(ParseUtil.optInt(26, ddsx));
msgDdj.setCurrentFloor(ParseUtil.optInt(26, ddsx));
msgDdj.setCurrentRow(ParseUtil.optInt(18, ddsx));
msgDdj.setCurrentColumn(ParseUtil.optInt(18, ddsx));
msgDdj.setCurrentFloor(ParseUtil.optInt(18, ddsx));
}
}
@@ -119,7 +119,8 @@ public class PlcDdj1Read extends Thread {
void closeServer() {
if (readWriteNet != null) {
readWriteNet.ConnectClose();
// readWriteNet.ConnectClose();
siemensS7Net.ConnectClose();
}
setIsConnect(false);
}

View File

@@ -119,7 +119,8 @@ public class PlcDdj2Read extends Thread {
void closeServer() {
if (readWriteNet != null) {
readWriteNet.ConnectClose();
// readWriteNet.ConnectClose();
siemensS7Net.ConnectClose();
}
setIsConnect(false);
}

View File

@@ -108,9 +108,10 @@ public class PlcSsjRead implements Runnable {
ssjDevice.setTaskNo(ParseUtil.optDInt(4, ddsx1));
ssjDevice.setSszt(ParseUtil.optInt(8, ddsx1));
ssjDevice.setRkqq(ParseUtil.optInt(10, ddsx1));
ssjDevice.setTraySize(ParseUtil.optInt(12, ddsx1));
ssjDevice.setHeight(ParseUtil.optInt(12, ddsx1));
ssjDevice.setTrayCode(ParseUtil.optString(14, ddsx1));
ssjDevice.setMode(ParseUtil.optInt(24, ddsx1));//todo 输送机操作模式
ssjDevice.setException(ParseUtil.optInt(28, ddsx1));
ssjDevice.setMode(ParseUtil.optInt(30, ddsx1));//todo 输送机操作模式
}
}
@@ -246,7 +247,8 @@ public class PlcSsjRead implements Runnable {
void closeServer() {
if (readWriteNet != null) {
readWriteNet.ConnectClose();
// readWriteNet.ConnectClose();
siemensS7Net.ConnectClose();
}
setIsConnect(false);
}
@@ -254,9 +256,13 @@ public class PlcSsjRead implements Runnable {
public static int writeToSsj(String address, String taskNo, int qx , int completed) {
int jym = Tools.getJYM(Integer.parseInt(taskNo), qx);
//任务号
SendData taskNoSendData = new SendData(Tools.DINT, taskNo);
//去向
SendData qxSendData = new SendData(Tools.INT, qx);
//下发完成
SendData completedSendData = new SendData(Tools.INT, completed);
//校验码
SendData jymSendData = new SendData(Tools.INT, jym);
byte[] bytes = Tools.sendData(taskNoSendData, qxSendData, completedSendData, jymSendData);
return PlcSsjRead.WriteToSSJ(address, bytes);

View File

@@ -0,0 +1,87 @@
package com.ruoyi.schedule.scheduleTask;
import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService;
import com.ruoyi.job.domain.MydoJob;
import com.ruoyi.job.service.IJobCallBackService;
import com.ruoyi.job.service.IMydoJobService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.List;
import static com.ruoyi.common.TaskStatusCode.*;
@Component
public class TaskHandler {
@Autowired
private IMydoJobService mydoJobService;
@Autowired
private IJobCallBackService jobCallBackService;
@Autowired
private IBasCargoSpaceService basCargoSpaceService;
/**
* 处理未正常移除的【堆垛机执行完成】或【出库到位】的遗留任务
*/
@Scheduled(fixedDelay = 3000)
public void mydoJobHandler() {
//此处 - 堆垛机执行完成【TASK_EP_DDJ_FINISH】和出库到位【TASK_EP_SSJ_STOCKOUT_FINISH】的常量值相同,均可表示任务【已完成】
//用任意一种状态查询所有标记为【已完成】的任务
List<MydoJob> jobs = mydoJobService.selectMydoJobList(
new MydoJob().builder().executionPhase(TASK_EP_DDJ_FINISH).build()
);
if (!jobs.isEmpty()) {
for (MydoJob job : jobs) {
mydoJobService.taskFinish(Long.valueOf(job.getTaskNo()));
}
}
}
/**
* 定时扫描未回传或回传异常的任务记录
*/
@Scheduled(fixedDelay=3000)
public void jobCallBack() {
jobCallBackService.jobCallBack();
}
// @Scheduled(fixedDelay = 3000)
public void stockinExceptionHandler() {
List<MydoJob> jobs = mydoJobService.selectInOrOutMydoJobList(
new MydoJob().builder().executionPhase(TASK_EXCEPTION_PUT).build()
);
if (!jobs.isEmpty()) {
for (MydoJob job : jobs) {
}
}
}
// @Scheduled(fixedDelay = 3000)
public void stockoutExceptionHandler() {
List<MydoJob> jobs = mydoJobService.selectInOrOutMydoJobList(
new MydoJob().builder().executionPhase(TASK_EXCEPTION_PICK).build()
);
if (!jobs.isEmpty()) {
for (MydoJob job : jobs) {
mydoJobService.InvalidMydoJob(Long.valueOf(job.getTaskNo()), Integer.valueOf(job.getRoadwayId()));
//清空/重置【取货无货】的出库异常货位库存信息
basCargoSpaceService.resetCargoSpaceByStockoutException(job.getCargoSpaceId());
}
}
}
}

View File

@@ -31,7 +31,7 @@ import java.util.HashMap;
import java.util.List;
import static com.ruoyi.common.TaskExceptionType.TASK_EXCEPTION_STOCKIN_OCCUPIED;
import static com.ruoyi.common.TaskStatusCode.TASK_EP_DDJ_FINISH;
import static com.ruoyi.common.TaskStatusCode.*;
@Slf4j
@@ -155,6 +155,8 @@ public class DdjThread implements Runnable {
//更新异常类型【FaultFlag】-1
if ("0".equals(mydoJob.getFaultFlag()) && "1".equals(ddjDeviceExecutionQueue.getSpare1())) {
mydoJob.setStatus("1");
//把执行阶段标记为【入库放货有货】的异常
mydoJob.setExecutionPhase(TASK_EXCEPTION_PUT);
mydoJobService.updateMydoJob(mydoJob);
//上报异常 - 向wms请求重分接口
@@ -181,6 +183,7 @@ public class DdjThread implements Runnable {
//更新任务参数
mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh);
mydoJob.setCargoSpaceId(mydoJobReAssign.getSiteCode());
mydoJob.setExecutionPhase(TASK_EP_DDJ);
mydoJob.setFaultFlag("2");
mydoJobService.updateMydoJob(mydoJob);
@@ -208,6 +211,9 @@ public class DdjThread implements Runnable {
if (ddj.getCzfs() == 5 && ddj.getSbzt() == 1053 && ddj.getJdbz() < 5) {
Long rwh = ddj.getRwh();
MydoJob mydoJob = mydoJobService.selectMydoJobByTaskNo(rwh);
//把执行阶段标记为【出库取货无货】的异常
mydoJob.setExecutionPhase(TASK_EXCEPTION_PICK);
mydoJobService.updateMydoJob(mydoJob);
//无货异常处理
DdjDeviceExecutionQueue ddjDeviceExecutionQueue = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByRwh(rwh,ddj.getId());

View File

@@ -158,9 +158,9 @@ public class PortConvThread implements Runnable {
paramMap.put("taskTypeCode", WMS_TASK_TYPE_STOCKIN);//todo wms自定义的任务类型编号
paramMap.put("reqCode", UUID.randomUUID().toString());//请求码
paramMap.put("cntCode", inSsjDevice.getTrayCode());//容器编号
String height = inSsjDevice.getHeight();
int height = inSsjDevice.getHeight();
// String weight = inSsjDevice.getWeight();//todo 需要直读重量或从plc读值?
paramMap.put("weight", getWeight(MOXA_IP, MOXA_PORT, SO_TIMEOUT_MS));//重量
paramMap.put("weight", getWeightByMoxa(MOXA_IP, MOXA_PORT, SO_TIMEOUT_MS));//重量
paramMap.put("altimetry", height);//高度
String errorMessage = "";
@@ -325,7 +325,7 @@ public class PortConvThread implements Runnable {
* @param timeout 最大等待时间(单位:毫秒),建议 2000~5000
* @return 重量(kg),成功时为非 NaN 的 Double;失败(超时/断连/解析失败)返回 null
*/
public static Double getWeight(String moxaIp, int moxaPort, long timeout) {
public static Double getWeightByMoxa(String moxaIp, int moxaPort, long timeout) {
Socket socket = null;
try {
// 1️⃣ - 建立连接(带连接超时)

View File

@@ -14,10 +14,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="reqCode" column="req_code" />
<result property="taskTypeCode" column="task_type_code" />
<result property="taskCode" column="task_code" />
<result property="retry" column="retry" />
</resultMap>
<sql id="selectJobCallBackVo">
select id, type, task_no, mydoJob_Id, status, create_time,req_code,task_type_code,task_code from job_call_back
select id, type, task_no, mydoJob_Id, status, create_time, req_code, task_type_code, task_code, retry from job_call_back
</sql>
<select id="selectJobCallBackList" parameterType="JobCallBack" resultMap="JobCallBackResult">
@@ -30,6 +31,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="reqCode != null and reqCode != ''"> and req_code = #{reqCode}</if>
<if test="taskTypeCode != null and taskTypeCode != ''"> and task_type_code = #{taskTypeCode}</if>
<if test="taskCode != null and taskCode != ''"> and task_code = #{taskCode}</if>
<if test="retry != null and retry != ''"> and retry = #{retry}</if>
</where>
</select>
@@ -39,7 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectJobCallBackListNoSuccess" resultMap="JobCallBackResult">
<include refid="selectJobCallBackVo"/>
where status != '1'
where status != '1' and retry &lt; 10
</select>
<insert id="insertJobCallBack" parameterType="JobCallBack" useGeneratedKeys="true" keyProperty="id">
@@ -53,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="reqCode != null">req_code,</if>
<if test="taskTypeCode != null">task_type_code,</if>
<if test="taskCode != null">task_code,</if>
<if test="retry != null">retry,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="type != null">#{type},</if>
@@ -63,6 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="reqCode != null">#{reqCode},</if>
<if test="taskTypeCode != null">#{taskTypeCode},</if>
<if test="taskCode != null">#{taskCode},</if>
<if test="retry != null">#{retry},</if>
</trim>
</insert>
@@ -77,6 +82,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="reqCode != null">req_code = #{reqCode},</if>
<if test="taskTypeCode != null">task_type_code = #{taskTypeCode},</if>
<if test="taskCode != null">task_code = #{taskCode},</if>
<if test="retry != null">retry = #{retry},</if>
</trim>
where id = #{id}
</update>
@@ -93,7 +99,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</delete>
<select id="getTopJobCallBack" resultMap="JobCallBackResult">
select top(1) id, type, task_no, mydoJob_Id, status, create_time,req_code,task_type_code,task_code from job_call_back
select top(1) id, type, task_no, mydoJob_Id, status, create_time,req_code,task_type_code,task_code,retry from job_call_back
where status = '0' and spare1 in ('0','1','2')
order by create_time asc
</select>

View File

@@ -119,9 +119,9 @@ public class SecurityConfig
.antMatchers("/agv/api/**").permitAll()
.antMatchers("/device/api/**").permitAll()
.antMatchers("/wcs2Wms/api/**").permitAll()
.antMatchers("/largeScreen/monitor/**").permitAll()
.antMatchers("/largeScreen/monitor/**").permitAll();
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated();
// .anyRequest().authenticated();
})
// 添加Logout filter
.logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler))