From d6372ccc0c068e0584e661784ab73a9a572a6947 Mon Sep 17 00:00:00 2001 From: lsymicc Date: Fri, 12 Jun 2026 13:22:04 +0800 Subject: [PATCH] =?UTF-8?q?wms=E5=8F=96=E6=B6=88=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E7=A8=8B=E5=BA=8F=E4=BE=BF=E5=88=A9?= =?UTF-8?q?=E6=80=A7=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/Wcs2WmsController.java | 11 ++ .../com/ruoyi/api/service/IApiService.java | 2 + .../api/service/impl/ApiServiceImpl.java | 30 +++++- .../java/com/ruoyi/common/TaskStatusCode.java | 4 +- .../job/service/impl/MydoJobServiceImpl.java | 16 ++- .../scheduleTask/ssj/RoadConvThread.java | 100 +++++++++--------- .../resources/mapper/job/MydoJobMapper.xml | 3 +- 7 files changed, 105 insertions(+), 61 deletions(-) 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 2cd981d..5c03d54 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 @@ -55,6 +55,17 @@ public class Wcs2WmsController { return apiService.cancelMydoJob(jobParam); } + /** + * @@@ FT568 - wms取消任务 + * @param wmsTaskCode + * @return + */ + @DeleteMapping("/cancelJob/{wmsTaskCode}") + public AjaxResult cancelMydoJob(@PathVariable String wmsTaskCode) + { + return apiService.cancelMydoJob(wmsTaskCode); + } + /** * 查询缓存点 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 6a91c9f..3d6b5cd 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 @@ -111,6 +111,8 @@ public interface IApiService */ AjaxResult cancelMydoJob(JobParam jobParam); + AjaxResult cancelMydoJob(String wmsTaskCode); + AjaxResult selectWcsPort(WcsPort wcsPort); AjaxResult updateWcsPort(WcsPort wcsPort); 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 daa3531..6bfc365 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 @@ -252,6 +252,28 @@ public class ApiServiceImpl implements IApiService { } } + /** + * wms删除任务(单选) + * + * @param wmsTaskCode + * @return + */ + @Override + public AjaxResult cancelMydoJob(String wmsTaskCode) { + + if (wmsTaskCode == null || wmsTaskCode.equals("")) { + return AjaxResult.error("查不到执行wms任务号的作业"); + } + + MydoJob mydoJob = mydoJobService.selectMydoJobByWmsTaskNo(wmsTaskCode); + if (mydoJob == null) { + return AjaxResult.error("查不到该wms任务号正在执行中的作业,可能是已经取消或完成,请检查wcs任务状态"); + } + + return AjaxResult.success(mydoJobService.deleteMydoJobByJobId(mydoJob.getJobId())); + + } + @@ -575,10 +597,10 @@ public class ApiServiceImpl implements IApiService { return AjaxResult.error("【警告】生成作业失败,已存在的作业号:{}" + mydoJob.getJobId() + "(仅提示)"); } - if (mydoJobService.selectMydoJobByWmsTaskNo(mydoJob.getWmsTaskNo()) != null){ - log.info("【警告】生成作业失败,已存在的作业号:{}", mydoJob.getJobId() + "(此条可忽略)"); - return AjaxResult.error("【警告】生成作业失败,已存在的wms任务号:{}" + mydoJob.getJobId() + "(仅提示)"); - } +// if (mydoJobService.selectMydoJobByWmsTaskNo(mydoJob.getWmsTaskNo()) != null){ +// log.info("【警告】生成作业失败,已存在的作业号:{}", mydoJob.getJobId() + "(此条可忽略)"); +// return AjaxResult.error("【警告】生成作业失败,已存在的wms任务号:{}" + mydoJob.getJobId() + "(仅提示)"); +// } int i = mydoJobService.insertMydoJob(mydoJob); // boolean success = mydoJobService.saveOrUpdate(mydoJob); 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 43587e0..c67c9b9 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskStatusCode.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskStatusCode.java @@ -30,12 +30,12 @@ public class TaskStatusCode { /** * 任务状态-手动完成 */ - public static final String TASK_STATUS_FINISH_MANUAL = "5"; + public static final String TASK_STATUS_FINISH_MANUAL = "4"; /** * 任务状态-作废 */ - public static final String TASK_STATUS_INVALID = "6"; + public static final String TASK_STATUS_INVALID = "5"; //>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 【执行阶段】 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java index fce03f0..3af9b2c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/service/impl/MydoJobServiceImpl.java @@ -24,6 +24,7 @@ import com.ruoyi.job.domain.MydoJob; import com.ruoyi.job.service.IMydoJobService; import static com.ruoyi.common.TaskStatusCode.TASK_STATUS_FINISH_MANUAL; +import static com.ruoyi.common.TaskStatusCode.TASK_STATUS_INVALID; import static com.ruoyi.common.WmsTaskTypeCode.*; /** @@ -106,14 +107,18 @@ public class MydoJobServiceImpl implements IMydoJobService public int deleteMydoJobByJobIds(String[] jobIds) { for (String jobId : jobIds) { + + if (selectMydoJobByJobId(jobId) == null) continue; + MydoJob mydoJob = selectMydoJobByJobId(jobId); + selectMydoJobByJobId(jobId).setStatus(TASK_STATUS_INVALID); + updateMydoJob(mydoJob); mydoJobMapper.insertHistory(jobId); + //当执行任务的【删除】操作时(特殊场景需要手动处理异常导致不需要入库时,此时不需要向回传异常) // 此处顺便处理对应任务号生成的堆垛机执行队列,省去sql直接表中删记录的操作 - if (selectMydoJobByJobId(jobId) != null){ - String taskNo = selectMydoJobByJobId(jobId).getTaskNo(); - if (ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByTaskNo(taskNo) != null) { - ddjDeviceExecutionQueueService.deleteDdjDeviceExecutionQueueByTaskNo(taskNo); - } + String taskNo = selectMydoJobByJobId(jobId).getTaskNo(); + if (ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueByTaskNo(taskNo) != null) { + ddjDeviceExecutionQueueService.deleteDdjDeviceExecutionQueueByTaskNo(taskNo); } } @@ -187,6 +192,7 @@ public class MydoJobServiceImpl implements IMydoJobService } } + @Override public MydoJob selectMydoJobByExitList(List exitList ) { return mydoJobMapper.selectMydoJobByExitList(exitList); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/RoadConvThread.java b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/RoadConvThread.java index 84f9474..f678ce4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/RoadConvThread.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/schedule/scheduleTask/ssj/RoadConvThread.java @@ -174,62 +174,66 @@ public class RoadConvThread implements Runnable { private void sendStackerOut(DeviceSsj roadSsjDevice){ //---------------------------出库任务--------------------------- //检查巷道口输送机是否空闲 - if(roadSsjDevice.getKx()==1 && roadSsjDevice.getTaskNo() == 0){ + if(roadSsjDevice.getKx()!=1 || roadSsjDevice.getTaskNo() != 0) return; - //检查是否有入口是【TD1001-出库到位输送机】的入库任务 - 此处查询作用:如果已经有入库任务,则只可生成出库作业,不可生成堆垛机队列 - String exitId = CONV_STOCKOUT; + //检查是否有入口是【TD1001-出库到位输送机】的入库任务 - 此处查询作用:如果已经有入库任务,则只可生成出库作业,不可生成堆垛机队列 + String exitId = CONV_STOCKOUT; + List jobs = mydoJobService.selectMydoJobList( + new MydoJob().builder().inOrOut(STOCKIN).build() + ); - List jobs = mydoJobService.selectMydoJobList( - new MydoJob().builder().inOrOut(STOCKIN).build() - ); + if(jobs.size() != 0) { + log.info("【提示】当前出口"+ exitId +"有正在执行的任务,无法执行堆垛机出库,请等待执行的入库任务结束"); + return; + } - if(jobs.size() == 0){ + //检查是否有出库任务 + MydoJob mydoJob = mydoJobService.selectMydoJobByExitId(exitId); + if (ObjUtil.isNotNull(mydoJob)) { - //检查是否有出库任务 - MydoJob mydoJob = mydoJobService.selectMydoJobByExitId(exitId); - if (ObjUtil.isNotNull(mydoJob)) { + //如果有出库任务 - 检查货位编码是否合法 + BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(mydoJob.getCargoSpaceId()); + if (ObjUtil.isNull(basCargoSpace)) { + log.error("【任务异常】货位不存在 cargoSpaceId{}", mydoJob.getCargoSpaceId()); + return; + } - //如果有出库任务 - 检查货位编码是否合法 - BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(mydoJob.getCargoSpaceId()); - if (ObjUtil.isNull(basCargoSpace)) { - log.error("【任务异常】货位不存在 cargoSpaceId{}", mydoJob.getCargoSpaceId()); - } else { - //生成队列 - List list = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueListByRwlx(DDJ_RWLX_2, Convert.toInt(mydoJob.getRoadwayId())); - List pclList = roadwayMap.get(roadSsjDevice.getDeviceCode()); - if (CollUtil.isEmpty(list) && CollUtil.isNotEmpty(pclList)) { - DdjDeviceExecutionQueue ddjDeviceExecutionQueue = new DdjDeviceExecutionQueue(); - ddjDeviceExecutionQueue.setUuid(IdUtil.simpleUUID()); - ddjDeviceExecutionQueue.setRwh(Convert.toLong(mydoJob.getTaskNo())); - ddjDeviceExecutionQueue.setDevName(mydoJob.getRoadwayId()); - ddjDeviceExecutionQueue.setDevId(Convert.toInt(mydoJob.getRoadwayId())); - ddjDeviceExecutionQueue.setRwzt(0); - ddjDeviceExecutionQueue.setYph(Convert.toInt(basCargoSpace.getThePlatoon())); - ddjDeviceExecutionQueue.setYlh(Convert.toInt(basCargoSpace.getTheColumn())); - ddjDeviceExecutionQueue.setYch(Convert.toInt(basCargoSpace.getTheFloor())); - ddjDeviceExecutionQueue.setMbph(pclList.get(0)); - ddjDeviceExecutionQueue.setMblh(pclList.get(1)); - ddjDeviceExecutionQueue.setMbch(pclList.get(2)); - ddjDeviceExecutionQueue.setDdjxf("0"); - ddjDeviceExecutionQueue.setMlfs(5); - ddjDeviceExecutionQueue.setSpare1(mydoJob.getTraySize());//货物高度 - ddjDeviceExecutionQueue.setScsj(DateUtil.formatDateTime(DateUtil.date())); - ddjDeviceExecutionQueue.setRwlx(DDJ_RWLX_2); - ddjDeviceExecutionQueueService.insertDdjDeviceExecutionQueue(ddjDeviceExecutionQueue); - - //修改作业状态 - mydoJob.setStatus(TASK_STATUS_RUNNING); - mydoJob.setExecutionPhase(TASK_EP_DDJ); - mydoJob.setStartTime(DateUtil.formatDateTime(DateUtil.date())); - mydoJobService.updateMydoJob(mydoJob); - } - } - } - }else{ - log.info("【警告】当前出口"+ exitId +"有正在执行的任务,无法出库,请等待执行的任务结束"); + //生成队列 + List list = ddjDeviceExecutionQueueService.selectDdjDeviceExecutionQueueListByRwlx(DDJ_RWLX_2, Convert.toInt(mydoJob.getRoadwayId())); + List pclList = roadwayMap.get(roadSsjDevice.getDeviceCode()); + if (CollUtil.isEmpty(list) && CollUtil.isNotEmpty(pclList)) { + DdjDeviceExecutionQueue ddjDeviceExecutionQueue = new DdjDeviceExecutionQueue(); + ddjDeviceExecutionQueue.setUuid(IdUtil.simpleUUID()); + ddjDeviceExecutionQueue.setRwh(Convert.toLong(mydoJob.getTaskNo())); + ddjDeviceExecutionQueue.setDevName(mydoJob.getRoadwayId()); + ddjDeviceExecutionQueue.setDevId(Convert.toInt(mydoJob.getRoadwayId())); + ddjDeviceExecutionQueue.setRwzt(0); + ddjDeviceExecutionQueue.setYph(Convert.toInt(basCargoSpace.getThePlatoon())); + ddjDeviceExecutionQueue.setYlh(Convert.toInt(basCargoSpace.getTheColumn())); + ddjDeviceExecutionQueue.setYch(Convert.toInt(basCargoSpace.getTheFloor())); + ddjDeviceExecutionQueue.setMbph(pclList.get(0)); + ddjDeviceExecutionQueue.setMblh(pclList.get(1)); + ddjDeviceExecutionQueue.setMbch(pclList.get(2)); + ddjDeviceExecutionQueue.setDdjxf("0"); + ddjDeviceExecutionQueue.setMlfs(5); + ddjDeviceExecutionQueue.setSpare1(mydoJob.getTraySize());//货物高度 + ddjDeviceExecutionQueue.setScsj(DateUtil.formatDateTime(DateUtil.date())); + ddjDeviceExecutionQueue.setRwlx(DDJ_RWLX_2); + ddjDeviceExecutionQueueService.insertDdjDeviceExecutionQueue(ddjDeviceExecutionQueue); + //修改作业状态 + mydoJob.setStatus(TASK_STATUS_RUNNING); + mydoJob.setExecutionPhase(TASK_EP_DDJ); + mydoJob.setStartTime(DateUtil.formatDateTime(DateUtil.date())); + mydoJobService.updateMydoJob(mydoJob); } } + + + + + + } } diff --git a/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml b/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml index 5b25298..f917aab 100644 --- a/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/job/MydoJobMapper.xml @@ -49,7 +49,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" FROM mydo_job_wcs_finish ) AS combined_jobs - ORDER BY create_time DESC; -- 按创建时间倒序(最新在前)