From 4154cbe213dcbdf7e3366561eccdb94a2ac904e2 Mon Sep 17 00:00:00 2001 From: liuhanqing Date: Mon, 13 Oct 2025 10:53:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A5=E5=BA=93=E5=86=99=E5=85=A5=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=8F=B7=EF=BC=8C=E7=9B=98=E7=82=B9=E5=9B=9E=E6=B5=81?= =?UTF-8?q?=20=E5=87=BA=E5=BA=93=E5=9B=9E=E6=B5=81=E5=86=99=E5=85=A5?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/Wcs2WmsController.java | 1 + .../com/ruoyi/api/domain/SsjTaskNoParam.java | 13 ++++++ .../com/ruoyi/api/service/IApiService.java | 11 ++++- .../api/service/impl/ApiServiceImpl.java | 46 +++++++++++++++++-- .../main/java/com/ruoyi/common/Constant.java | 1 + .../com/ruoyi/device/agv/domain/AgvQueue.java | 10 ++++ .../scheduleTask/ssj/bs/BsInSsjThread.java | 12 ++--- .../scheduleTask/ssj/js/JsInSsjThread.java | 3 +- .../mapper/device/AgvQueueMapper.xml | 5 ++ 9 files changed, 88 insertions(+), 14 deletions(-) create mode 100644 ruoyi-admin/src/main/java/com/ruoyi/api/domain/SsjTaskNoParam.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/Wcs2WmsController.java b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/Wcs2WmsController.java index 9ce6004..647bf72 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/controller/Wcs2WmsController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/controller/Wcs2WmsController.java @@ -1,5 +1,6 @@ package com.ruoyi.api.controller; +import com.ruoyi.api.domain.SsjTaskNoParam; import com.ruoyi.api.domain.wcs2wms.JobParam; import com.ruoyi.api.domain.wcs2wms.ReceiveJob; import com.ruoyi.api.service.IApiService; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/SsjTaskNoParam.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/SsjTaskNoParam.java new file mode 100644 index 0000000..8ba89ba --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/SsjTaskNoParam.java @@ -0,0 +1,13 @@ +package com.ruoyi.api.domain; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class SsjTaskNoParam { + private String taskNo; + private String deviceCode; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiService.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiService.java index 32a7620..5230cc0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/IApiService.java @@ -1,6 +1,7 @@ package com.ruoyi.api.service; import com.ruoyi.api.domain.RequestLog; +import com.ruoyi.api.domain.SsjTaskNoParam; import com.ruoyi.api.domain.agv.agvCallback.AgvCallbackRequest; import com.ruoyi.api.domain.agv.agvCallback.AgvCallbackResponse; import com.ruoyi.api.domain.agv.cancelTask.CancelTaskRequest; @@ -29,10 +30,18 @@ public interface IApiService /** * 根据条码请求入库 + * * @param mydoJob * @return 返回入库口位置 */ public MydoJob requestEnterByTrayCode(MydoJob mydoJob); + /** + * 根据任务号请求入库 + * + * @param mydoJob + * @return + */ + public MydoJob requestEnterByTaskNo(MydoJob mydoJob); /** * 根据入口请求入库 @@ -110,7 +119,7 @@ public interface IApiService * @param param * @return */ - public AjaxResult sendOutMydoJobStatus(Map param) ; + public AjaxResult startMydoJobStatus(Map param) ; /** 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 6827573..2377d6a 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 @@ -33,8 +33,8 @@ import com.ruoyi.schedule.plcRead.ssj.PlcRead; import com.ruoyi.schedule.plcRead.ssj.domain.SendData; import com.ruoyi.schedule.plcRead.util.Tools; import lombok.extern.slf4j.Slf4j; -import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -78,6 +78,25 @@ public class ApiServiceImpl implements IApiService { } + /** + * 请求入库 + * + * @param mydoJob + * @return 返回入库口位置 + */ + @Override + public MydoJob requestEnterByTaskNo(MydoJob mydoJob) { + RequestLog requestLog = requestLogService.getRequestLog(REQUEST_ENTER_BY_TASK_NO, "根据条码请求入库", JSONUtil.toJsonStr(mydoJob)); + if ("1".equals(requestLog.getIsSuccessful())) { + String responseBody = requestLog.getResponseBody(); + InterfaceReceive bean = JSONUtil.toBean(responseBody, InterfaceReceive.class); + return JSONUtil.toBean(JSONUtil.toJsonStr(bean.getData()), MydoJob.class); + } else { + return null; + } + + } + /** * 请求入库 * @param mydoJob @@ -199,7 +218,7 @@ public class ApiServiceImpl implements IApiService { * @return */ @Override - public AjaxResult sendOutMydoJobStatus(Map param) { + public AjaxResult startMydoJobStatus(Map param) { RequestLog requestLog = requestLogService.getRequestLog(SEND_TASK_STARTED, "发送任务开始信号", JSONUtil.toJsonStr(param)); if ("1".equals(requestLog.getIsSuccessful())) { return AjaxResult.success(); @@ -245,7 +264,7 @@ public class ApiServiceImpl implements IApiService { //通知wms param.put("taskNo", agvQueue.getWmsTaskNo()); param.put("wmsType", agvQueue.getWmsTaskType()); - sendOutMydoJobStatus(param); + startMydoJobStatus(param); break; case "outbin": //走出储位 @@ -396,7 +415,7 @@ public class ApiServiceImpl implements IApiService { */ @Override public AjaxResult receiveInMydoJob(ReceiveJob receiveInJob) { - AgvQueue agvQueue = createAgvQueue(receiveInJob.getEntranceId(),receiveInJob.getCargoSpaceId(),receiveInJob.getTrayCode(),receiveInJob.getTaskNo(),"1"); + AgvQueue agvQueue = createAgvQueue(receiveInJob.getEntranceId(), receiveInJob.getCargoSpaceId(), receiveInJob.getTrayCode(), receiveInJob.getTaskNo(), "1"); if (agvQueue != null){ return AjaxResult.success(); }else { @@ -404,6 +423,24 @@ public class ApiServiceImpl implements IApiService { } } + @Scheduled(cron = "0/5 * * * * ?") + public void sendInSsjTaskNo(){ + AgvQueue agvQueueParam = new AgvQueue(); + agvQueueParam.setSsjTaskNo("0"); + List agvQueues = agvQueueService.selectAgvQueueList(agvQueueParam); + for (AgvQueue agvQueue : agvQueues) { + //输送机写入任务号 + DeviceSsj deviceSsj = PlcRead.deviceMap.get(agvQueue.getPositionCode1()); + SendData rwh = new SendData(Tools.DINT, agvQueue.getWmsTaskNo()); + byte[] bytes = Tools.sendData(rwh); + int i = PlcRead.WriteToSSJ(deviceSsj.getPlcDbWriteAddress(), bytes); + if (i==1){ + agvQueue.setSsjTaskNo("1"); + agvQueueService.updateAgvQueue(agvQueue); + } + } + } + /** * 流利架出库确认,清空流利架状态信息 * @param jobParam @@ -484,6 +521,7 @@ public class ApiServiceImpl implements IApiService { agvQueue.setStatus("0"); agvQueue.setTaskCode(taskCode); agvQueue.setWmsTaskType(wmsTaskType); + agvQueue.setSsjTaskNo("0"); agvQueueService.insertAgvQueue(agvQueue); return agvQueue; } 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 ab9dae7..6563f59 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java @@ -20,6 +20,7 @@ public class Constant { public static final String REQUEST_ENTER_BY_TRAYCODE = "http://localhost:8080/api2wms/requestEnterByTrayCode"; + public static final String REQUEST_ENTER_BY_TASK_NO = "http://localhost:8080/api2wms/requestEnterByTaskNo"; public static final String REQUEST_ENTER_BY_ENTER_ID = "http://localhost:8080/api2wms/requestEnterByEnterId"; public static final String JOB_FINISH_URL = "http://localhost:8080/api2wms/jobFinish"; public static final String CONTINUE_TASK_URL = "http://127.0.0.1:8081/rcms-dps/rest/queryAgvStatus/"; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/device/agv/domain/AgvQueue.java b/ruoyi-admin/src/main/java/com/ruoyi/device/agv/domain/AgvQueue.java index ebb74c7..c14ee77 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/device/agv/domain/AgvQueue.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/device/agv/domain/AgvQueue.java @@ -80,6 +80,16 @@ public class AgvQueue extends BaseEntity private String wmsTaskType; + private String ssjTaskNo; + + public String getSsjTaskNo() { + return ssjTaskNo; + } + + public void setSsjTaskNo(String ssjTaskNo) { + this.ssjTaskNo = ssjTaskNo; + } + public String getWmsTaskType() { return wmsTaskType; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/bs/BsInSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/bs/BsInSsjThread.java index df4313b..51ab74b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/bs/BsInSsjThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/bs/BsInSsjThread.java @@ -1,6 +1,7 @@ package com.ruoyi.schedule.scheduleTask.ssj.bs; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjUtil; @@ -148,19 +149,16 @@ public class BsInSsjThread implements Runnable { */ public void inDispatch(DeviceSsj inSsjDevice) { //如果入库请求1 并且 托盘码不为空 - if (inSsjDevice.getDw()==1 && inSsjDevice.getRkqq() == 1 && StrUtil.isNotEmpty(inSsjDevice.getTrayCode())) { + if (inSsjDevice.getDw()==1 && inSsjDevice.getRkqq() == 1 && inSsjDevice.getTaskNo()>0) { //判断是否生成队列 AgvQueue agvQueueParam = new AgvQueue(); - agvQueueParam.setWmsTraycode(inSsjDevice.getTrayCode()); - //agvQueueParam.setStatus("0"); + agvQueueParam.setWmsTaskNo(String.valueOf(inSsjDevice.getTaskNo())); List agvQueues = agvQueueService.selectAgvQueueList(agvQueueParam); if (CollUtil.isEmpty(agvQueues)) { //根据入口,查询对应的入库作业 MydoJob mydoJobParam = new MydoJob(); - mydoJobParam.setStatus("1"); - mydoJobParam.setTrayCode(inSsjDevice.getTrayCode()); - mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode()); - MydoJob mydoJob = apiService.requestEnterByTrayCode(mydoJobParam); + mydoJobParam.setTaskNo(Convert.toStr(inSsjDevice.getTaskNo())); + MydoJob mydoJob = apiService.requestEnterByTaskNo(mydoJobParam); if (ObjUtil.isNotNull(mydoJob)) { //生成agv队列 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/js/JsInSsjThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/js/JsInSsjThread.java index 88fefe7..603c7a0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/js/JsInSsjThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/js/JsInSsjThread.java @@ -95,9 +95,8 @@ public class JsInSsjThread implements Runnable { mydoJobParam.setStatus("1"); mydoJobParam.setTrayCode(inSsjDevice.getTrayCode()); mydoJobParam.setEntranceId(inSsjDevice.getDeviceCode()); - MydoJob mydoJob = apiService.requestEnterByTrayCode(mydoJobParam); + MydoJob mydoJob = apiService.requestEnterByTaskNo(mydoJobParam); if (ObjUtil.isNotNull(mydoJob)) { - //生成agv队列 AgvQueue agvQueue = apiService.createAgvQueue(inSsjDevice.getName(), mydoJob.getCargoSpaceId(),mydoJob.getTrayCode(),mydoJob.getTaskNo(),"1"); //请求任务生成 diff --git a/ruoyi-admin/src/main/resources/mapper/device/AgvQueueMapper.xml b/ruoyi-admin/src/main/resources/mapper/device/AgvQueueMapper.xml index 3ca69aa..7e14010 100644 --- a/ruoyi-admin/src/main/resources/mapper/device/AgvQueueMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/device/AgvQueueMapper.xml @@ -49,6 +49,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and status = #{status} and task_code = #{taskCode} and wms_task_type = #{wmsTaskType} + and ssj_task_no = #{ssjTaskNo} order by req_time desc @@ -83,6 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" status, task_code, wms_task_type, + ssj_task_no, #{reqCode}, @@ -103,6 +105,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{status}, #{taskCode}, #{wmsTaskType}, + #{ssjTaskNo}, + @@ -130,6 +134,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" wms_traycode = #{wmsTraycode}, wms_task_no = #{wmsTaskNo}, status = #{status}, + ssj_task_no =#{ssjTaskNo}, where req_code = #{reqCode}