diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ResponseResult.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ResponseResult.java new file mode 100644 index 0000000..b87c61b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/ResponseResult.java @@ -0,0 +1,36 @@ +package com.ruoyi.api.domain.wcs2wms; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 请求响应信息 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class ResponseResult { + + /** + * 状态码:200 成功,500 失败,400 参数错误 + */ + private Integer code; + + /** + * 请求是否成功 + */ + private Integer success; + + /** + * 提示信息 + */ + private boolean message; + + /** + * 成功时返回任务信息对象 + */ + private Object result; + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/exception/TaskExceptionReceive.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/exception/TaskExceptionReceive.java new file mode 100644 index 0000000..fcc7362 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/exception/TaskExceptionReceive.java @@ -0,0 +1,36 @@ +package com.ruoyi.api.domain.wcs2wms.exception; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * 出入库异常信息上报响应信息 + * + * 【常见错误】 + * 任务编号不可为空 未传 taskCode + * 未找到该任务信息xxxxx taskCode 对应的任务在系统中不存在 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TaskExceptionReceive { + + /** + * 系统生成的任务编号(唯一) + */ + private String taskCode; + + /** + * 异请求时传入的 reqCode,原样回传 + */ + private String reqCode; + + /** + * 转存库位编号 + */ + private String siteCode; + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/exception/TaskExceptionRequest.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/exception/TaskExceptionRequest.java index 206f127..6a3c047 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/exception/TaskExceptionRequest.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/exception/TaskExceptionRequest.java @@ -4,19 +4,42 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +/** + * 出入库异常信息上报 + */ @Data @AllArgsConstructor @NoArgsConstructor public class TaskExceptionRequest { /** - * 任务号 + * 异常任务类型 */ - private String taskNo; + private String taskTypeCode; /** - * 异常类型 + * 需要上报异常的任务编号(系统任务号) */ - private int exceptionType; + private String taskCode; + + /** + * 异常类别:1-入库,2-出库 + */ + private String taskClass; + + /** + * 请求唯一编号,原样回传 + */ + private String reqCode; + + /** + * 异常信息 + */ + private String adverseCauses; + + /** + * 异常任务的类型 - 1052-入库有货,2-出库无货 + */ + private int type; } 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 568468a..d0dd908 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 @@ -1,29 +1,43 @@ package com.ruoyi.api.domain.wcs2wms.stockin; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 入库请求返回 + * + * 【常见错误】 + * 任务类型不可为空 未传 taskTypeCode + * 该任务类型未配置 taskTypeCode 在系统中不存在 + * 该任务类型无点位配置信息 任务类型缺少点位模板 + * 该任务类型未开启 任务类型状态为禁用 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor public class StockinReceive { /** - * wms下发任务号 + * 系统生成的任务编号(唯一) */ - private String taskNo; + private String taskCode; /** - * WMS分配的目标库位编号 + * 请求时传入的 reqCode,原样回传 */ - private String cargoSpaceId; + private String reqCode; /** - * 巷道编号 + * 容器编号(containerCode) */ - private String roadwayId; + private String cntCode; /** - * 作业单ID + * 终点库位编号 */ - private String jobId; + private String siteCode; + - /** - * 入出库标识 - */ - private String inOrOut; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinRequest.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinRequest.java index 65604d4..861cf85 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinRequest.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/stockin/StockinRequest.java @@ -13,24 +13,34 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class StockinRequest { + /** + * 任务类型编号(必填),对应 WMS 任务配置中的类型 code + */ + private String taskTypeCode; + + /** + * 请求码 - 请求唯一编号,原样回传到响应中,便于追踪 + */ + private String reqCode; + /** * 托盘号 */ - private String trayCode; + private String cntCode; /** - * 重量 + * 货物高度 - 0-第一档高度,1-第二档高度,2-超高 */ - private int weight; + private String altimetry; /** - * 货物高度 + * 重量 - 0-正常,1-超重。 */ - private int height; + private String weight; /** * 异常信息 */ - private String errorInfo; + private String adverseCauses; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/TaskFinishRequest.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/TaskFinishRequest.java index 507a238..71331d0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/TaskFinishRequest.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/TaskFinishRequest.java @@ -1,22 +1,32 @@ package com.ruoyi.api.domain.wcs2wms.taskFinish; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 任务完成回传请求 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor public class TaskFinishRequest { /** - * 任务号 + * 任务类型(必填) */ - private String taskNo; + private String taskTypeCode; /** - * 作业单ID + * 请求唯一编号,原样回传到响应中,便于追踪 */ - private String jobId; + private String reqCode; /** - * 完成类型枚举值 - * 1-入库完成 2-出库完成 + * 任务编号 */ - private String type; + private String taskCode; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/taskFinishReceive.java b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/taskFinishReceive.java index cb84a3b..c466593 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/taskFinishReceive.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/domain/wcs2wms/taskFinish/taskFinishReceive.java @@ -1,4 +1,36 @@ package com.ruoyi.api.domain.wcs2wms.taskFinish; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + + +/** + * 任务完成回传响应 + * + * 【常见错误】 + * 任务编号不可为空 未传 taskCode + * 未找到该任务信息xxxxx taskCode 对应的任务在系统中不存在 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor public class taskFinishReceive { + + /** + * 任务类型(必填) + */ + private String taskTypeCode; + + /** + * 请求唯一编号,原样回传到响应中,便于追踪 + */ + private String reqCode; + + /** + * 任务编号 + */ + private String taskCode; + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/domain/BasCargoSpace.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/domain/BasCargoSpace.java index 2a0c7ec..0bf0c4d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/domain/BasCargoSpace.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargospace/domain/BasCargoSpace.java @@ -75,7 +75,7 @@ Y锁、N开 */ /** 货位高度 */ @Excel(name = "货位高度") - private String cargoHight; + private String cargoHeight; /** 是否双伸 Y N */ @Excel(name = "是否双伸 Y N ") 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 1e98b4b..f769c7d 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,7 @@ 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 WMS_BASE_URL = "http://192.168.58.10:8082/api2wms"; public static final String RCS_BASE_URL = "http://192.168.58.101:8182/rcms/services/rest/hikRpcService/"; //#region AGV接口url @@ -27,16 +27,16 @@ public class Constant { /** * 向wms请求入库url */ - public static final String WMS_STOCKIN_MYDOJOB = WMS_BASE_URL + "wcs/inbound/info"; + public static final String WMS_STOCKIN_MYDOJOB = WMS_BASE_URL + "/api/external/taskIssue"; /** * 向wms请求任务回传url */ - public static final String WMS_TASK_FINISH = WMS_BASE_URL + "wcs/task/complete"; + public static final String WMS_TASK_FINISH = WMS_BASE_URL + "/api/external/taskIssue"; /** * 异常信息回传url */ - public static final String WMS_TASK_EXCEPTION = WMS_BASE_URL + "wcs/exception/report"; + public static final String WMS_TASK_EXCEPTION = WMS_BASE_URL + "/api/external/taskIssue"; } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskExceptionType.java b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskExceptionType.java index f14e712..63b88ca 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/common/TaskExceptionType.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/common/TaskExceptionType.java @@ -8,7 +8,7 @@ public class TaskExceptionType { /** * 任务异常 - 入库放货有货 */ - public static final int TASK_EXCEPTION_STOCKIN_OCCUPIED = 1; + public static final int TASK_EXCEPTION_STOCKIN_OCCUPIED = 1052; /** * 任务异常 - 出库取货无货 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 7a92701..8e58a27 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 @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.UUID; import cn.hutool.core.util.ObjUtil; import com.ruoyi.api.domain.wcs2wms.JobParam; import com.ruoyi.api.domain.wcs2wms.exception.TaskExceptionRequest; @@ -150,9 +151,16 @@ public class DdjThread implements Runnable { mydoJob.setStatus("1"); mydoJobService.updateMydoJob(mydoJob); - //向wms请求重分接口 - // todo-在此商定每种异常类型对应的值 - AjaxResult ajaxResult = apiService.reAssign(new TaskExceptionRequest(mydoJob.getTaskNo(),TASK_EXCEPTION_STOCKIN_OCCUPIED)); + //上报异常 - 向wms请求重分接口 + TaskExceptionRequest taskExceptionRequest = new TaskExceptionRequest(); + taskExceptionRequest.setTaskClass(mydoJob.getInOrOut()); + taskExceptionRequest.setType(TASK_EXCEPTION_STOCKIN_OCCUPIED); + taskExceptionRequest.setTaskCode(String.valueOf(mydoJob)); + taskExceptionRequest.setTaskTypeCode("");//todo 不知道填什么内容 + taskExceptionRequest.setReqCode(UUID.randomUUID().toString()); + taskExceptionRequest.setAdverseCauses("当前位置已有货物,盘点后重新分配货位"); + + AjaxResult ajaxResult = apiService.reAssign(taskExceptionRequest); if (ajaxResult.isSuccess()){ //获取返回的新货位 MydoJob mydoJobReAssign = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class); @@ -188,7 +196,15 @@ public class DdjThread implements Runnable { //找到对应任务 调用api接口 取货无货,重新分配单据 if (ObjUtil.isNotNull(ddjDeviceExecutionQueue)) { //向wms返回异常信息 - AjaxResult ajaxResult = apiService.reMaterial(new TaskExceptionRequest(mydoJob.getTaskNo(),TASK_EXCEPTION_STOCKOUT_EMPTY)); + TaskExceptionRequest taskExceptionRequest = new TaskExceptionRequest(); + taskExceptionRequest.setTaskClass(mydoJob.getInOrOut()); + taskExceptionRequest.setType(TASK_EXCEPTION_STOCKOUT_EMPTY); + taskExceptionRequest.setTaskCode(String.valueOf(mydoJob)); + taskExceptionRequest.setTaskTypeCode("");//todo 不知道填什么内容 + taskExceptionRequest.setReqCode(UUID.randomUUID().toString()); + taskExceptionRequest.setAdverseCauses("取货位置空,盘点后作废该任务"); + + AjaxResult ajaxResult = apiService.reMaterial(taskExceptionRequest); if (ajaxResult.isSuccess()) { //作废作业 InvalidMydoJob(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 f6897e1..828930d 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 @@ -2,8 +2,11 @@ package com.ruoyi.schedule.scheduleTask.ssj; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.lang.UUID; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; +import com.ruoyi.api.domain.wcs2wms.ResponseResult; +import com.ruoyi.api.domain.wcs2wms.stockin.StockinReceive; import com.ruoyi.api.service.IApiService; import com.ruoyi.bas.cargospace.domain.BasCargoSpace; import com.ruoyi.bas.cargospace.service.IBasCargoSpaceService; @@ -98,11 +101,14 @@ public class PortConvThread implements Runnable { //---------------------------入口取输送机(叉车取放货位置)--------------------------- //输送机【非空闲】、【输送到位】、【条码不为空】、有【入库请求】 if (inSsjDevice.getKx() != 1 && inSsjDevice.getDw() == 1) { + AjaxResult ajaxResult; //请求参数 HashMap paramMap = new HashMap<>(); - paramMap.put("trayCode", inSsjDevice.getTrayCode());//托盘条码 + paramMap.put("taskTypeCode", inSsjDevice.getTrayCode());//任务类型编号 + paramMap.put("reqCode", UUID.randomUUID().toString());//任请求码 + paramMap.put("cntCode", inSsjDevice.getTrayCode());//容器编号 int height = inSsjDevice.getHeight(); int weight = inSsjDevice.getWeight(); paramMap.put("weight", weight);//重量 @@ -113,7 +119,7 @@ public class PortConvThread implements Runnable { //外形检测异常 case ConvException.CHECK_SIZE_EXCEPTION: - paramMap.put("errorInfo", "外形检测异常-货物超高"); + paramMap.put("adverseCauses", "外形检测异常-货物超高"); ajaxResult = apiService.createInMydoJobException(paramMap); if (ajaxResult.isSuccess()) { //向输送机下发退回 @@ -123,7 +129,7 @@ public class PortConvThread implements Runnable { //超重检测 case ConvException.CHECK_OVERWEIGHT_EXCEPTION: - paramMap.put("errorInfo", "外形检测异常-货物超重"); + paramMap.put("adverseCauses", "外形检测异常-货物超重"); ajaxResult = apiService.createInMydoJobException(paramMap); if (ajaxResult.isSuccess()) { //向输送机下发退回 @@ -134,11 +140,11 @@ public class PortConvThread implements Runnable { //扫码异常 case ConvException.CHECK_BARCODE_EXCEPTION: if (inSsjDevice.getTrayCode() == "") { - paramMap.put("errorInfo", "条码扫描失败:扫描结果为空"); + paramMap.put("adverseCauses", "条码扫描失败:扫描结果为空"); ajaxResult = apiService.createInMydoJobException(paramMap); }else{ //条码格式校验 - paramMap.put("errorInfo", "条码扫描异常:格式错误"); + paramMap.put("adverseCauses", "条码扫描异常:格式错误"); ajaxResult = apiService.createInMydoJobException(paramMap); } if (ajaxResult.isSuccess()) { @@ -172,8 +178,13 @@ public class PortConvThread implements Runnable { //请求生成wcs任务 ajaxResult = apiService.createInMydoJob(paramMap); if (ajaxResult.isSuccess()) { + //获取wms下发的任务号和分配货位 - MydoJob mydoJob = BeanUtil.toBean(ajaxResult.get("data"), MydoJob.class); + StockinReceive result = BeanUtil.toBean(ajaxResult.get("result"), StockinReceive.class); + MydoJob mydoJob = new MydoJob(); + mydoJob.setTrayCode(result.getCntCode()); + mydoJob.setCargoSpaceId(result.getSiteCode()); + // mydoJob.setTaskNo(result.getTaskCode());//todo 确定是否用获取的任务号作为wcs的任务号 //todo 校验wms分配的货位(排列层)是否合法 if (mydoJob.getCargoSpaceId() == null) { diff --git a/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml b/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml index e7f0503..b4f539f 100644 --- a/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/bas/BasCargoSpaceMapper.xml @@ -18,7 +18,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -28,7 +28,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select cargo_space_id, warehouse_id, roadway_id, cargo_area_id, the_type, the_type_name, cargo_space_name, the_platoon, the_column, the_floor, status, locked, tray_code, cargo_hight, iss_double, group_coding_no, group_coding, cargo_space_logo, this_cargo_area, wms_cargo_space_id from bas_cargo_space + select cargo_space_id, warehouse_id, roadway_id, cargo_area_id, the_type, the_type_name, cargo_space_name, the_platoon, the_column, the_floor, status, locked, tray_code, cargo_height, iss_double, group_coding_no, group_coding, cargo_space_logo, this_cargo_area, wms_cargo_space_id from bas_cargo_space