diff --git a/pom.xml b/pom.xml index 589d24f..950dfb5 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ 5.3.39 5.8.27 1.18.30 - 3.7.0 + 2.0.0 3.5.2 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IRequestLogService.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IRequestLogService.java index 3897a66..4dd3127 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IRequestLogService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IRequestLogService.java @@ -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); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java index 740e500..75daa40 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ApiServiceImpl.java @@ -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{ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/RequestLogServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/RequestLogServiceImpl.java index 20e5cf8..6924c9b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/RequestLogServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/RequestLogServiceImpl.java @@ -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 请求响应字符串 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java b/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java index 728f035..3f870c0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java @@ -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 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskStatusCode.java b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskStatusCode.java index 07cacc0..57289d6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskStatusCode.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskStatusCode.java @@ -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完成 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/ddj/controller/MsgDdjController.java b/ruoyi-admin/src/main/java/com/ruoyi/device/ddj/controller/MsgDdjController.java index 3805aa4..2180d9d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/device/ddj/controller/MsgDdjController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/ddj/controller/MsgDdjController.java @@ -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 + ",查询超出最大索引"); + } + } + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/controller/DeviceSsjController.java b/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/controller/DeviceSsjController.java index 53090b2..e6fc802 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/controller/DeviceSsjController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/controller/DeviceSsjController.java @@ -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); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/ConvStatus.java b/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/ConvStatus.java deleted file mode 100644 index 85aad7b..0000000 --- a/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/ConvStatus.java +++ /dev/null @@ -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; - - - -} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/DeviceSsj.java b/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/DeviceSsj.java index b3d3fac..0be5da9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/DeviceSsj.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/ssj/domain/DeviceSsj.java @@ -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; /** * 称重 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/controller/JobCallBackController.java b/ruoyi-admin/src/main/java/com/ruoyi/job/controller/JobCallBackController.java index ae055f4..fc96de4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/controller/JobCallBackController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/controller/JobCallBackController.java @@ -104,10 +104,5 @@ public class JobCallBackController extends BaseController return toAjax(jobCallBackService.deleteJobCallBackByIds(ids)); } - @Scheduled(fixedDelay=3000) - public void jobCallBack() { - jobCallBackService.jobCallBack(); - } - } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/controller/MydoJobController.java b/ruoyi-admin/src/main/java/com/ruoyi/job/controller/MydoJobController.java index 49fd0ba..6ff36e4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/controller/MydoJobController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/controller/MydoJobController.java @@ -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 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())); - } - } - } - } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/domain/JobCallBack.java b/ruoyi-admin/src/main/java/com/ruoyi/job/domain/JobCallBack.java index 87e567c..3e884ea 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/domain/JobCallBack.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/domain/JobCallBack.java @@ -50,5 +50,9 @@ public class JobCallBack extends BaseEntity @Excel(name = "wms任务编号") private String taskCode; + /** 回传重试次数 */ + @Excel(name = "重试次数") + private int retry; + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/JobCallBackServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/JobCallBackServiceImpl.java index 1b6a5e5..fe8324b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/JobCallBackServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/JobCallBackServiceImpl.java @@ -121,6 +121,7 @@ public class JobCallBackServiceImpl implements IJobCallBackService jobCallBack.setStatus("1"); }else{ jobCallBack.setStatus("99"); + jobCallBack.setRetry(jobCallBack.getRetry() + 1); } jobCallBackMapper.updateJobCallBack(jobCallBack); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdj1Read.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdj1Read.java index 04fed79..75e36b5 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdj1Read.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdj1Read.java @@ -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); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdj2Read.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdj2Read.java index 3a061c4..495deae 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdj2Read.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ddj/PlcDdj2Read.java @@ -119,7 +119,8 @@ public class PlcDdj2Read extends Thread { void closeServer() { if (readWriteNet != null) { - readWriteNet.ConnectClose(); +// readWriteNet.ConnectClose(); + siemensS7Net.ConnectClose(); } setIsConnect(false); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java index 11147d1..bea1df6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/plcRead/ssj/PlcSsjRead.java @@ -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); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/TaskHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/TaskHandler.java new file mode 100644 index 0000000..5399a7e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/TaskHandler.java @@ -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 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 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 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()); + } + } + } + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/DdjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/DdjThread.java index 7767deb..b0fbb4d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/DdjThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ddj/DdjThread.java @@ -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()); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/PortConvThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/PortConvThread.java index c384465..3521ea6 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/PortConvThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/PortConvThread.java @@ -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️⃣ - 建立连接(带连接超时) diff --git a/ruoyi-admin/src/main/resources/mapper/job/JobCallBackMapper.xml b/ruoyi-admin/src/main/resources/mapper/job/JobCallBackMapper.xml index 04e93bb..93b9051 100644 --- a/ruoyi-admin/src/main/resources/mapper/job/JobCallBackMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/job/JobCallBackMapper.xml @@ -14,10 +14,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + - 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 @@ -39,7 +42,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -53,6 +56,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" req_code, task_type_code, task_code, + retry, #{type}, @@ -63,6 +67,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{reqCode}, #{taskTypeCode}, #{taskCode}, + #{retry}, @@ -77,6 +82,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" req_code = #{reqCode}, task_type_code = #{taskTypeCode}, task_code = #{taskCode}, + retry = #{retry}, where id = #{id} @@ -93,7 +99,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java index 5f10a96..0fba8ae 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -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))