From f944d7fef56e9d9dea34a52dece7681ece9f0c8e Mon Sep 17 00:00:00 2001 From: lsymicc Date: Fri, 17 Jul 2026 15:41:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/Wcs2WmsController.java | 24 ++++- .../ruoyi/api/domain/wcs2wms/JobParam.java | 1 + .../ruoyi/api/domain/wcs2wms/ReceiveJob.java | 7 +- .../wcs2wms/stockin/StockinReceive.java | 23 +++-- .../com/ruoyi/api/service/IApiService.java | 2 + .../api/service/impl/ApiServiceImpl.java | 98 +++++++++++++++---- .../service/impl/RequestLogServiceImpl.java | 13 ++- .../main/java/com/ruoyi/common/Constant.java | 35 ++++--- .../main/java/com/ruoyi/common/ConvType.java | 27 +++++ .../main/java/com/ruoyi/common/TaskType.java | 34 +++---- .../ruoyi/job/service/IMydoJobService.java | 2 +- .../service/impl/JobCallBackServiceImpl.java | 15 +-- .../job/service/impl/MydoJobServiceImpl.java | 32 +++--- .../scheduleTask/ssj/PortConvThread.java | 57 ++++++----- 14 files changed, 254 insertions(+), 116 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 fbf00fd..8afbda7 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 @@ -47,6 +47,18 @@ public class Wcs2WmsController { } + /** + * 接收移库任务 + * + * @param receiveJob + * @return + */ + @PostMapping("/receiveMoveMydoJob") + public AjaxResult receiveMoveMydoJob(@RequestBody ReceiveJob receiveJob) { + return apiService.receiveMoveMydoJob(receiveJob); + } + + /** * 接收盘点任务 * @@ -66,7 +78,17 @@ public class Wcs2WmsController { */ @PostMapping("/cancelMydoJob") public AjaxResult cancelMydoJob(@RequestBody JobParam jobParam) { - return apiService.cancelTask(jobParam.getTaskNo()); + return apiService.cancelTask(jobParam.getJobId()); + } + + /** + * wms取消任务 + * @param jobId + * @return + */ + @GetMapping("/cancelMydoJob") + public AjaxResult cancelMydoJob(@RequestParam("jobId") String jobId) { + return apiService.cancelTask(jobId); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/JobParam.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/JobParam.java index 88d943b..4023c5a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/JobParam.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/JobParam.java @@ -8,6 +8,7 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor public class JobParam { + /** * 作业号 */ diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ReceiveJob.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ReceiveJob.java index 65e7ad6..66f5502 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ReceiveJob.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ReceiveJob.java @@ -24,6 +24,9 @@ public class ReceiveJob { */ private String cargoSpaceId; + /** 货位(移库使用) */ + private String targetCargoSpaceId; + /** * 入口 */ @@ -49,10 +52,6 @@ public class ReceiveJob { */ private String roadwayId; - /** - * - */ - private String departmentId; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinReceive.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinReceive.java index b1cb860..320d675 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinReceive.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinReceive.java @@ -19,25 +19,30 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class StockinReceive { - /** - * 系统生成的任务编号(唯一)/wms下发的任务号 - */ - private String taskCode; - /** * 请求时传入的 reqCode,原样回传 */ private String reqCode; /** - * 容器编号(containerCode) + * 系统生成的任务编号(唯一)/wms下发的任务号 */ - private String cntCode; + private String taskNo; /** - * 终点库位编号 + * 系统生成的任务编号(唯一)/wms下发的作业号 */ - private String siteCode; + private String jobId; + + /** + * 容器编号 + */ + private String trayCode; + + /** + * 分配货位编号 + */ + private String cargoSpaceId; } 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 d16b973..e58ce4b 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 @@ -97,6 +97,8 @@ public interface IApiService AjaxResult receiveInMydoJob(ReceiveJob receiveJob); + AjaxResult receiveMoveMydoJob(ReceiveJob receiveJob); + AjaxResult receiveInventoryMydoJob(ReceiveJob receiveInventoryJob); AjaxResult selectMydoJobByTrayCodeAndEntranceId(HashMap paramMap); 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 b3e79f0..615c177 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 @@ -19,16 +19,12 @@ import com.ruoyi.api.domain.agv.genAgvSchedulingTask.PositionCodeData; import com.ruoyi.api.domain.wcs2wms.JobParam; import com.ruoyi.api.domain.wcs2wms.ReceiveJob; import com.ruoyi.api.domain.wcs2wms.ResponseResult; -import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionReceive; -import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionRequest; -import com.ruoyi.api.domain.wcs2wms.stockout.StockoutReceive; import com.ruoyi.api.service.IApiService; import com.ruoyi.bas.cargospace.domain.BasCargoSpace; import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; import com.ruoyi.bas.port.domain.WcsPort; import com.ruoyi.bas.port.service.IWcsPortService; import com.ruoyi.common.GoodsType; -import com.ruoyi.common.TaskType; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.job.domain.MydoJob; @@ -80,7 +76,7 @@ public class ApiServiceImpl implements IApiService { */ @Override public RequestLog finishMydoJob(Map param) { - return requestLogService.getRequestLog(WMS_TASK_FINISH, "任务完成上报", JSONUtil.toJsonStr(param)); + return requestLogService.getRequestLog(WMS_JOB_FINISH_URL, "任务完成上报", JSONUtil.toJsonStr(param)); } @@ -91,7 +87,7 @@ public class ApiServiceImpl implements IApiService { */ @Override public AjaxResult reAssign(JobParam jobParam) { - RequestLog requestLog = requestLogService.getRequestLog(RE_ASSIGN_URL, "重新分配货位", JSONUtil.toJsonStr(jobParam)); + RequestLog requestLog = requestLogService.getRequestLog(WMS_RE_ASSIGN_URL, "重新分配货位", JSONUtil.toJsonStr(jobParam)); if ("1".equals(requestLog.getIsSuccessful())){ InterfaceReceive bean = JSONUtil.toBean(requestLog.getResponseBody(), InterfaceReceive.class); MydoJob wmsMydoJob = BeanUtil.toBean(bean.getData(), MydoJob.class); @@ -111,7 +107,7 @@ public class ApiServiceImpl implements IApiService { */ @Override public AjaxResult reMaterial(JobParam jobParam) { - RequestLog requestLog = requestLogService.getRequestLog(RE_MATERIAL_URL, "重新分配物料", JSONUtil.toJsonStr(jobParam)); + RequestLog requestLog = requestLogService.getRequestLog(WMS_RE_MATERIAL_URL, "重新分配物料", JSONUtil.toJsonStr(jobParam)); if ("1".equals(requestLog.getIsSuccessful())){ return AjaxResult.success(); } @@ -142,7 +138,7 @@ public class ApiServiceImpl implements IApiService { */ @Override public AjaxResult createMydoJobForStockin(Map param) { - RequestLog requestLog = requestLogService.getRequestLogForResponseResult(WMS_STOCKIN_MYDOJOB, "入库请求生成作业", JSONUtil.toJsonStr(param)); + RequestLog requestLog = requestLogService.getRequestLog(WMS_STOCKIN_MYDOJOB, "入库请求生成作业", JSONUtil.toJsonStr(param)); if ("1".equals(requestLog.getIsSuccessful())) { ResponseResult bean = JSONUtil.toBean(requestLog.getResponseBody(), ResponseResult.class); return AjaxResult.success(bean.getResult()); @@ -232,7 +228,7 @@ public class ApiServiceImpl implements IApiService { // mydoJob.setTaskNo(stockoutReceive.getTaskNo()); //// mydoJob.setWmsTaskNo(stockoutReceive.getTaskCode()); // mydoJob.setCargoSpaceId(stockoutReceive.getCargoSpaceId()); -// mydoJob.setInOrOut(stockoutReceive.getInOrOut()); + mydoJob.setInOrOut(stockoutReceive.getInOrOut()); // mydoJob.setTraySize(GoodsType.TYPE_DEFAULT);//默认 mydoJob.setStatus(TASK_STATUS_CREATED); @@ -299,7 +295,7 @@ public class ApiServiceImpl implements IApiService { MydoJob mydoJob = new MydoJob(); mydoJob = BeanUtil.copyProperties(receiveInJob, MydoJob.class); // mydoJob.setJobId(mydoJobService.getJobId("RK")); -// mydoJob.setTaskNo(mydoJobService.getTaskNo("3")); + mydoJob.setTaskNo(mydoJobService.getTaskNo("3")); // mydoJob.setWmsTaskNo(receiveInJob.getJobId()); // mydoJob.setCargoSpaceId(receiveInJob.getTrayCode()); // mydoJob.setTrayCode(receiveOutJob.getTrayCode()); @@ -307,11 +303,9 @@ public class ApiServiceImpl implements IApiService { basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(receiveInJob.getCargoSpaceId()).getRoadwayId() ); // mydoJob.setTraySize(GoodsType.TYPE_DEFAULT); - mydoJob.setInOrOut("1"); +// mydoJob.setInOrOut("1"); mydoJob.setStatus(TASK_STATUS_CREATED); mydoJob.setPriority(Long.valueOf(10)); - //todo 可能需要查本地库存信息获取条码? - mydoJob.setCreateTime(DateUtils.getNowDate()); mydoJob.setExecutionPhase(TASK_EP_CREATED); // mydoJob.setTraySize(receiveOutJob.getDepartmentId()); @@ -334,6 +328,74 @@ public class ApiServiceImpl implements IApiService { } + @Override + public AjaxResult receiveMoveMydoJob(ReceiveJob receiveInJob) { + + RequestLog requestLog = requestLogService.getRequestLog(JSONUtil.toJsonStr(receiveInJob), "推送移库作业"); + requestLog.setResponseBody(JSONUtil.toJsonStr(AjaxResult.success())); + requestLog.setResponseStatus("0"); + requestLog.setIsSuccessful("1"); + requestLogService.insertRequestLog(requestLog); + + // -------------------------检查推送的任务参数------------------------- + log.info( + "【wms推送移库】作业号:{},源货位:{},目标货位:{},托盘号:{}",receiveInJob.getJobId(),receiveInJob.getCargoSpaceId(), receiveInJob.getTargetCargoSpaceId(), receiveInJob.getTrayCode() + ); + + // 1.wms推送的作业号是否重复 + MydoJob job = new MydoJob().builder().jobId(receiveInJob.getJobId()).build(); + List tasks = mydoJobService.selectMydoJobList(job); + if (tasks.size() != 0) { + log.info("【请求错误】wms下发移库任务失败,该任务已存在,wms作业号:{},源货位:{},目标货位:{}", receiveInJob.getJobId(), receiveInJob.getCargoSpaceId(), receiveInJob.getTargetCargoSpaceId()); + return AjaxResult.error("【请求错误】wms下发移库任务失败,该任务已存在,推送作业号:{}" + receiveInJob.getJobId() + ",目标货位:" + receiveInJob.getCargoSpaceId()); + } + + // 2.wms推送的目标货位是否已经有任务 + job = new MydoJob().builder().cargoSpaceId(receiveInJob.getCargoSpaceId()).build(); + tasks = mydoJobService.selectMydoJobList(job); + if (tasks.size() != 0) { + log.info("【请求错误】wms下发移库任务失败,已经存在该货位任务,推送作业号:{},源货位:{},目标货位:{}", receiveInJob.getJobId(), receiveInJob.getCargoSpaceId(), receiveInJob.getTargetCargoSpaceId()); + return AjaxResult.error("【请求错误】wms下发移库任务失败,已经存在目标货位任务,目标货位:{}" + receiveInJob.getJobId() + ",目标货位:" + receiveInJob.getCargoSpaceId()); + } + + //生成入库作业 + MydoJob mydoJob = new MydoJob(); + mydoJob = BeanUtil.copyProperties(receiveInJob, MydoJob.class); +// mydoJob.setJobId(mydoJobService.getJobId("RK")); + mydoJob.setTaskNo(mydoJobService.getTaskNo("3")); +// mydoJob.setWmsTaskNo(receiveInJob.getJobId()); +// mydoJob.setCargoSpaceId(receiveInJob.getTrayCode()); +// mydoJob.setTrayCode(receiveOutJob.getTrayCode()); + mydoJob.setRoadwayId( + basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(receiveInJob.getCargoSpaceId()).getRoadwayId() + ); +// mydoJob.setTraySize(GoodsType.TYPE_DEFAULT); +// mydoJob.setInOrOut("1"); + mydoJob.setStatus(TASK_STATUS_CREATED); + mydoJob.setPriority(Long.valueOf(10)); + mydoJob.setCreateTime(DateUtils.getNowDate()); + mydoJob.setExecutionPhase(TASK_EP_CREATED); +// mydoJob.setTraySize(receiveOutJob.getDepartmentId()); + + if (mydoJobService.selectMydoJobByJobId(mydoJob.getJobId()) != null){ + log.info("【警告】生成作业失败,已存在的作业号:{}", mydoJob.getJobId() + "(仅提示)"); + return AjaxResult.error("【警告】生成作业失败,已存在的作业号:{}" + mydoJob.getJobId() + "(仅提示)"); + } + + int i = mydoJobService.insertMydoJob(mydoJob); +// boolean success = mydoJobService.saveOrUpdate(mydoJob); + if (i != 0) { + requestLog.setResponseStatus("1"); + requestLogService.updateRequestLog(requestLog); + log.info("【推送移库】wms下发移库任务成功,wms作业号:{},源货位:{},目标货位:{}", receiveInJob.getJobId(), receiveInJob.getCargoSpaceId(), receiveInJob.getTargetCargoSpaceId()); + return AjaxResult.success( + "【推送移库】wms下发移库作业,作业号:" + receiveInJob.getJobId() + ",目标货位:" + receiveInJob.getCargoSpaceId()); + }else{ + return AjaxResult.error(); + } + + } + @Override public AjaxResult receiveInventoryMydoJob(ReceiveJob receiveInventoryJob) { @@ -405,7 +467,7 @@ public class ApiServiceImpl implements IApiService { @Override public AjaxResult selectMydoJobByTrayCodeAndEntranceId(HashMap paramMap) { - RequestLog requestLog = requestLogService.getRequestLog(REQUEST_ENTER_URL, "请求获取入库作业", JSONUtil.toJsonStr(paramMap)); + RequestLog requestLog = requestLogService.getRequestLog(WMS_REQUEST_ENTER_URL, "请求获取入库作业", JSONUtil.toJsonStr(paramMap)); if ("1".equals(requestLog.getIsSuccessful())) { InterfaceReceive bean = JSONUtil.toBean(requestLog.getResponseBody(), InterfaceReceive.class); return AjaxResult.success(bean.getData()); @@ -424,7 +486,7 @@ public class ApiServiceImpl implements IApiService { */ @Override public AjaxResult requestWmsSpace(MydoJob mydoJob) { - RequestLog requestLog = requestLogService.getRequestLog(REQUEST_IN_SPACE_URL, "入库请求分货位", JSONUtil.toJsonStr(mydoJob)); + RequestLog requestLog = requestLogService.getRequestLog(WMS_REQUEST_IN_SPACE_URL, "入库请求分货位", JSONUtil.toJsonStr(mydoJob)); if ("1".equals(requestLog.getIsSuccessful())) { InterfaceReceive bean = JSONUtil.toBean(requestLog.getResponseBody(), InterfaceReceive.class); return AjaxResult.success(bean.getData()); @@ -436,7 +498,7 @@ public class ApiServiceImpl implements IApiService { @Override public AjaxResult selectMydoJobByNoTrayCode(Map param) { - RequestLog requestLog = requestLogService.getRequestLog(REQUEST_MYDO_JOB_URL, "入库请求补码作业", JSONUtil.toJsonStr(param)); + RequestLog requestLog = requestLogService.getRequestLog(WMS_REQUEST_MYDO_JOB_URL, "入库请求补码作业", JSONUtil.toJsonStr(param)); if ("1".equals(requestLog.getIsSuccessful())) { InterfaceReceive bean = JSONUtil.toBean(requestLog.getResponseBody(), InterfaceReceive.class); return AjaxResult.success(bean.getData()); @@ -468,8 +530,8 @@ public class ApiServiceImpl implements IApiService { } - public AjaxResult cancelTask(String taskNo) { - return mydoJobService.cancelTask(taskNo); + public AjaxResult cancelTask(String jobId) { + return mydoJobService.cancelTask(jobId); } 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 e73bb41..5253b64 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 @@ -145,14 +145,13 @@ public class RequestLogServiceImpl implements IRequestLogService requestLog.setRequestUrl(url); Date responseTime =new Date(); try { -// String resStr = HttpUtil.post(url, param); - - String resStr = HttpRequest.post(url) - .body(param) - .header("X-Service-Secret", HEADER_TOKEN) - .execute() - .body(); + // String resStr = HttpRequest.post(url) +// .body(param) +// .header("X-Service-Secret", HEADER_TOKEN) +// .execute() +// .body(); + String resStr = HttpUtil.post(url, param); requestLog.setResponseBody(resStr); InterfaceReceive bean = JSONUtil.toBean(resStr, InterfaceReceive.class); 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 90b9daf..a6b0a37 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/Constant.java @@ -3,8 +3,8 @@ package com.ruoyi.common; public class Constant { - 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 LOCAL_URL = "http://127.0.0.1:8084/api2wms"; + public static final String WMS_BASE_URL = "http://127.0.0.1:8083/api/external"; public static final String RCS_BASE_URL = "http://192.168.58.101:8182/rcms/services/rest/hikRpcService/"; public static final String HEADER_TOKEN = "fed3d1511a5a474b9e1f9c56246cb1ec"; @@ -16,16 +16,25 @@ public class Constant { public static final String CONTINUE_TASK_URL = RCS_BASE_URL+"continueTask"; public static final String DELETE_BIN_URL = RCS_BASE_URL+"bindCtnrAndBin"; - public static final String JOB_FINISH_URL = WMS_BASE_URL+"jobFinish"; - public static final String CREATE_IN_MYDO_JOB_URL = WMS_BASE_URL+"requestEnterByTrayCode"; - public static final String REQUEST_MYDO_JOB_URL = WMS_BASE_URL+"requestByNoTrayCode"; - public static final String RE_ASSIGN_URL = WMS_BASE_URL+"reAssign"; - public static final String RE_MATERIAL_URL = WMS_BASE_URL+"reMaterial"; - public static final String REQUEST_ENTER_URL = WMS_BASE_URL+"requestEnterByTrayCodeAndEntranceId"; - public static final String REQUEST_IN_SPACE_URL = WMS_BASE_URL+"requestInSpace"; - //#endregion + /** + * 任务完成回传 + */ + public static final String WMS_JOB_FINISH_URL = LOCAL_URL+"jobFinish"; + + /** + * 请求创建入库任务 + */ + public static final String WMS_CREATE_IN_MYDO_JOB_URL = LOCAL_URL+"requestMydoJobByTrayCode"; + public static final String WMS_REQUEST_MYDO_JOB_URL = LOCAL_URL+"requestMydoJobByNoTrayCode"; + public static final String WMS_RE_ASSIGN_URL = LOCAL_URL+"reAssign"; + public static final String WMS_RE_MATERIAL_URL = LOCAL_URL+"reMaterial"; + public static final String WMS_REQUEST_ENTER_URL = LOCAL_URL+"requestMydoJobByTrayCodeAndEntranceId"; + public static final String WMS_REQUEST_IN_SPACE_URL = LOCAL_URL+"requestInSpace"; + + + /** * 本地测试wms服务端url */ @@ -36,16 +45,16 @@ public class Constant { /** * 向wms请求入库url */ - public static final String WMS_STOCKIN_MYDOJOB = WMS_BASE_URL + "/api/external/taskIssue"; + public static final String WMS_STOCKIN_MYDOJOB = LOCAL_URL + "/api/external/taskIssue"; /** * 出入库回传url */ - public static final String WMS_TASK_FINISH = WMS_BASE_URL + "/api/external/taskIssue"; + public static final String WMS_TASK_FINISH = LOCAL_URL + "/api/external/taskIssue"; /** * 异常信息回传url */ - public static final String WMS_TASK_EXCEPTION = WMS_BASE_URL + "/api/external/taskIssue"; + public static final String WMS_TASK_EXCEPTION = LOCAL_URL + "/api/external/taskIssue"; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/ConvType.java b/ruoyi-admin/src/main/java/com/ruoyi/common/ConvType.java index 8548e86..5d19576 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/ConvType.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/ConvType.java @@ -1,5 +1,10 @@ package com.ruoyi.common; +import java.util.HashMap; +import java.util.Map; + +import static java.util.Map.entry; + public class ConvType { /** @@ -31,4 +36,26 @@ public class ConvType { * 3#巷道入库输送机(入口源位置) */ public static final String ROADWAY3_ENTRANCE = "L1002"; + + + + //----------------------------- + + /** + * 输送机对应巷道 + */ + public static final Map CONV_ROAD = new HashMap<>(Map.ofEntries( + entry("L1001", 1), + entry("L1002", 1), + entry("L1003", 1), + entry("L1004", 2), + entry("L1005", 2), + entry("L1006", 2), + entry("L1007", 2), + entry("L1008", 3), + entry("L1009", 3), + entry("L1010", 3) + )); + + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskType.java b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskType.java index 77a6576..efa24ab 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskType.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskType.java @@ -17,31 +17,31 @@ public class TaskType { public static final int TASKTYPE_STOCKIN = 1; public static final String TASKTYPE_STOCKIN_STR = "1"; + + /** + * 拣选回流 + */ + public static final int TASKTYPE_STOCKIN_RETURN = 3; + public static final String TASKTYPE_STOCKIN_RETURN_STR = "3"; + /** * 常规出库 */ - public static final int TASKTYPE_STOCKOUT = 2; - public static final String TASKTYPE_STOCKOUT_STR = "2"; + public static final int TASKTYPE_STOCKOUT = 20; + public static final String TASKTYPE_STOCKOUT_STR = "20"; + + /** + * 拣选出库 + */ + public static final int TASKTYPE_STOCKOUT_PICK = 21; + public static final String TASKTYPE_STOCKOUT_PICK_STR = "21"; /** * 盘点出库 */ - public static final int TASKTYPE_INVENTORY = 3; - public static final String TASKTYPE_INVENTORY_STR = "3"; + public static final int TASKTYPE_INVENTORY = 26; + public static final String TASKTYPE_INVENTORY_STR = "26"; - /** - * 1-二楼入出 - */ - public static final int DDJ_RWLX_1 = 1; - /** - * 2-一楼出库 - */ - public static final int DDJ_RWLX_2 = 2; - /** - * 3-一楼入库 - */ - public static final int DDJ_RWLX_3 = 3; - } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java b/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java index d016a3d..7eba87a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/service/IMydoJobService.java @@ -94,7 +94,7 @@ public interface IMydoJobService AjaxResult manuallyCompeleteTask(String[] jobIds); - AjaxResult cancelTask(String taskNo); + AjaxResult cancelTask(String jobId); AjaxResult cancelTask(String[] JobIds); 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 fe8324b..524ab56 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 @@ -104,19 +104,22 @@ public class JobCallBackServiceImpl implements IJobCallBackService @Override public void jobCallBack() { - //获取【刚刚创建】和【请求失败】的回传记录 + + //获取【刚刚创建<1>】和【请求失败<99>】的回传记录 List jobCallBackList = jobCallBackMapper.selectJobCallBackListNoSuccess(); + for (JobCallBack jobCallBack : jobCallBackList) { //设定请求参数 Map param = new HashMap<>(); - param.put("taskTypeCode", jobCallBack.getTaskTypeCode()); - param.put("reqCode", UUID.randomUUID().toString().replace("-", "")); - param.put("taskCode", jobCallBack.getTaskCode()); + param.put("jobId", jobCallBack.getMydoJobId()); + param.put("taskNo", jobCallBack.getTaskNo()); + param.put("wmsType", jobCallBack.getType()); //请求回传 -// RequestLog requestLog = apiService.finishMydoJob(param); - RequestLog requestLog = apiService.finishMydoJobForResponseResult(param);//@@@ FT568 返回自定义的wms响应格式 + RequestLog requestLog = apiService.finishMydoJob(param); +// RequestLog requestLog = apiService.finishMydoJobForResponseResult(param);//@@@ FT568 返回自定义的wms响应格式 + if ("1".equals(requestLog.getIsSuccessful())){ jobCallBack.setStatus("1"); }else{ 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 3c9f42e..c48e302 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 @@ -365,14 +365,14 @@ public class MydoJobServiceImpl implements IMydoJobService /** * 手动作废指定【任务号】的作业 - * @param taskNo + * @param jobId * @return */ @Override - public AjaxResult cancelTask(String taskNo) { + public AjaxResult cancelTask(String jobId) { //获取所有符合【任务号】的作业 - MydoJob mydoJob = mydoJobMapper.selectMydoJobByTaskNo(taskNo); + MydoJob mydoJob = mydoJobMapper.selectMydoJobByJobId(jobId); if (mydoJob == null){ return AjaxResult.error("无该任务号的执行作业,请确认该任务是否已经处理和进行其他操作"); @@ -394,21 +394,21 @@ public class MydoJobServiceImpl implements IMydoJobService log.warn("【人工操作】手动作废操作失败:{}", e.getMessage()); } - JobCallBack jobCallBack = new JobCallBack(); - jobCallBack.setType(mydoJob.getInOrOut()); - jobCallBack.setTaskTypeCode(WMS_TASK_TYPE_FINISH);// wms下发的任务类型 - jobCallBack.setMydoJobId(mydoJob.getJobId()); - jobCallBack.setStatus("0"); - jobCallBack.setTaskNo(Convert.toLong(mydoJob.getTaskNo())); - jobCallBack.setCreateTime(new Date()); - jobCallBack.setTaskCode(mydoJob.getWmsTaskNo()); - jobCallBack.setRetry(0); - jobCallBack.setReqCode(UUID.randomUUID().toString()); - jobCallBackService.insertJobCallBack(jobCallBack); +// JobCallBack jobCallBack = new JobCallBack(); +// jobCallBack.setType(mydoJob.getInOrOut()); +// jobCallBack.setTaskTypeCode(WMS_TASK_TYPE_FINISH);// wms下发的任务类型 +// jobCallBack.setMydoJobId(mydoJob.getJobId()); +// jobCallBack.setStatus("0"); +// jobCallBack.setTaskNo(Convert.toLong(mydoJob.getTaskNo())); +// jobCallBack.setCreateTime(new Date()); +// jobCallBack.setTaskCode(mydoJob.getWmsTaskNo()); +// jobCallBack.setRetry(0); +// jobCallBack.setReqCode(UUID.randomUUID().toString()); +// jobCallBackService.insertJobCallBack(jobCallBack); - mydoJobMapper.deleteMydoJobByTaskNo(taskNo); + mydoJobMapper.deleteMydoJobByJobId(jobId); - log.info("【任务手动取消】生成历史记录,插入回传列表,作业号:{},wcs任务号:{}", mydoJob.getJobId(), taskNo); + log.info("【任务手动取消】生成历史记录,插入回传列表,作业号:{}", jobId); return AjaxResult.success("操作成功"); } 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 9f7a597..2fe6290 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 @@ -12,6 +12,7 @@ import com.ruoyi.api.service.IApiService; import com.ruoyi.api.service.IRequestLogService; import com.ruoyi.bas.cargospace.domain.BasCargoSpace; import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; +import com.ruoyi.common.ConvType; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.device.ssj.domain.DeviceSsj; @@ -128,7 +129,7 @@ public class PortConvThread implements Runnable { updateMydoJob(deviceSsj); //请求wms获取入库任务 - //requestMydoJob(deviceSsj); + requestMydoJob(deviceSsj); break; //1#巷道出库口(单向) @@ -172,13 +173,22 @@ public class PortConvThread implements Runnable { boolean flag = false; //---------------------------入口取输送机(叉车取放货位置)--------------------------- //输送机【条码】空 - if (inSsjDevice.getTrayCode() == "" || inSsjDevice.getTrayCode() == null) return flag; + if (inSsjDevice.getTrayCode() == "" || inSsjDevice.getTrayCode() == null) + return flag; + + //不存在扫描【条码】的作业 + if (mydoJobService.selectMydoJobList( + new MydoJob().builder().trayCode(inSsjDevice.getTrayCode()).build() + ).size() == 1) + return flag; //【入库请求】,表示输送到位和空闲 - if (inSsjDevice.getRkqq() != 1) return flag; + if (inSsjDevice.getRkqq() != 1) + return flag; //【输送高度】 - if (inSsjDevice.getHeight() == 0) return flag; + if (inSsjDevice.getHeight() == 0) + return flag; return true; } @@ -190,7 +200,8 @@ public class PortConvThread implements Runnable { */ private void requestMydoJob(DeviceSsj inSsjDevice){ - //请求成功已经生成该任务则不继续执行 + //如果已经生成wcs任务则不继续执行后续请求操作 + //包括请求成功生成作业和wms推送成功的情况 int count = mydoJobService.selectInOrOutMydoJobList( new MydoJob().builder().trayCode(inSsjDevice.getTrayCode()).build() ).size(); @@ -199,20 +210,20 @@ public class PortConvThread implements Runnable { return; } + String errorMessage = ""; AjaxResult ajaxResult; //初始化请求wms参数 HashMap paramMap = new HashMap<>(); - paramMap.put("taskTypeCode", WMS_TASK_TYPE_STOCKIN);//wms自定义的任务类型编号 paramMap.put("reqCode", UUID.randomUUID().toString());//请求码 - paramMap.put("cntCode", inSsjDevice.getTrayCode().trim());//容器编号 + paramMap.put("trayCode", inSsjDevice.getTrayCode().trim());//容器编号 +// paramMap.put("entranceId", inSsjDevice.getDeviceCode());//入口输送机编号 + paramMap.put("roadwayId", ConvType.CONV_ROAD.get(inSsjDevice.getDeviceCode()));//入口输送机编号对应巷道 int height = inSsjDevice.getHeight(); -// String weight = inSsjDevice.getWeight();//不需要直读重量或从plc读值,wms不需要该参数 -// paramMap.put("weight", getWeightByMoxa(MOXA_IP, MOXA_PORT, SO_TIMEOUT_MS));//重量 - paramMap.put("altimetry", height);//高度 - paramMap.put("adverseCauses", errorMessage); +// paramMap.put("trayType", height);//高度 +// paramMap.put("remark", errorMessage); //-----------------警告校验:条码已有库存----------------- @@ -231,9 +242,9 @@ public class PortConvThread implements Runnable { StockinReceive result = BeanUtil.toBean(ajaxResult.get("data"), StockinReceive.class); //校验:wms分配的货位(排列层)是否合法 - if (ObjUtil.isNull(basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(result.getSiteCode()))) { + if (ObjUtil.isNull(basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(result.getCargoSpaceId()))) { errorMessage = "wms下发货位错误,任务生成失败!"; - paramMap.put("adverseCauses", errorMessage); + paramMap.put("remark", errorMessage); apiService.createInMydoJobException(paramMap); log.info("【响应参数异常】分配货位:null,无法生成作业,托盘条码:{}",inSsjDevice.getTrayCode()); writeToSsj(inSsjDevice.getPlcDbWriteAddress(), "99", 2, 1); @@ -242,17 +253,16 @@ public class PortConvThread implements Runnable { //初始化要生成的任务 MydoJob mydoJob = new MydoJob().builder() - // mydoJob.setTaskNo(result.getTaskCode());//如果需要用wms下发的任务号作为wcs的任务号使用 - .trayCode(result.getCntCode()) - .cargoSpaceId(result.getSiteCode()) - .wmsTaskNo(result.getTaskCode()) - .jobId(mydoJobService.getJobId("RK")) - .taskNo(mydoJobService.getTaskNo("1")) + .jobId(result.getJobId()) + .taskNo(mydoJobService.getTaskNo("2"))//如果需要用wms下发的任务号作为wcs的任务号使用 + .status(TASK_STATUS_CREATED) + .trayCode(result.getTrayCode()) + .cargoSpaceId(result.getCargoSpaceId()) +// .wmsTaskNo(mydoJobService.getTaskNo("1")) .traySize(String.valueOf(inSsjDevice.getHeight())) - .status(TASK_STATUS_CREATED) .inOrOut("1") - .roadwayId(basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(result.getSiteCode()).getRoadwayId())//获取货位表货位对应的巷道号 - .entranceId("G1004") + .roadwayId(basCargoSpaceService.selectBasCargoSpaceByWmsCargoSpaceId(result.getCargoSpaceId()).getRoadwayId())//获取货位表货位对应的巷道号 + .entranceId(inSsjDevice.getDeviceCode()) .executionPhase(TASK_EP_CREATED) .faultFlag("0") .priority(10L) @@ -290,8 +300,6 @@ public class PortConvThread implements Runnable { MydoJob mydoJobStockin = new MydoJob().builder() .trayCode(inSsjDevice.getTrayCode()) .status(TASK_STATUS_CREATED) - .executionPhase(TASK_EP_CREATED) - .entranceId(inSsjDevice.getDeviceCode()) .build(); if(!mydoJobService.selectMydoJobList(mydoJobStockin).isEmpty()){ @@ -305,6 +313,7 @@ public class PortConvThread implements Runnable { //写入成功则更新执行阶段 mydoJobStockin.setStatus(TASK_STATUS_RUNNING); mydoJobStockin.setExecutionPhase(TASK_EP_SSJ); + mydoJobStockin.setEntranceId(inSsjDevice.getDeviceCode()); mydoJobStockin.setStartTime(DateUtil.formatDateTime(DateUtil.date())); mydoJobService.updateMydoJob(mydoJobStockin); log.info("【更新状态】G1009入口输送机下发成功,任务号:{},入库执行中", mydoJobStockin.getTaskNo());