rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsChangeLocParam.java
@@ -13,16 +13,28 @@ @ApiModel(value = "WcsTaskReportParam", description = "WCS任务上报通知") public class WcsChangeLocParam implements Serializable { @ApiModelProperty("托盘码") private String barcode; @ApiModelProperty("通知流水号") private Long id; @ApiModelProperty("源站") private Integer sourceStaNo; @ApiModelProperty("通知类型:task") private String notifyType; @ApiModelProperty("可用排") private List<Integer> rowList; @ApiModelProperty("设备号") private String device; @ApiModelProperty("库位类型") private Integer locType1; @ApiModelProperty("WCS工作号") private String taskNo; @ApiModelProperty("上级系统工作号") private String superTaskNo; @ApiModelProperty("消息类型:task_complete、task_cancel") private String msgType; @ApiModelProperty("消息描述") private String msgDesc; @ApiModelProperty("消息数据") private String data; } rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsTaskReportParam.java
@@ -13,16 +13,28 @@ @ApiModel(value = "WcsTaskReportParam", description = "WCS任务上报通知") public class WcsTaskReportParam implements Serializable { @ApiModelProperty("托盘码") private String barcode; @ApiModelProperty("通知流水号") private Long id; @ApiModelProperty("源站") private Integer sourceStaNo; @ApiModelProperty("通知类型:task") private String notifyType; @ApiModelProperty("可用排") private List<Integer> rowList; @ApiModelProperty("设备号") private String device; @ApiModelProperty("库位类型") private Integer locType1; @ApiModelProperty("WCS工作号") private String taskNo; @ApiModelProperty("上级系统工作号") private String superTaskNo; @ApiModelProperty("消息类型:task_complete、task_cancel") private String msgType; @ApiModelProperty("消息描述") private String msgDesc; @ApiModelProperty("消息数据") private String data; } rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsWcsServiceImpl.java
@@ -106,7 +106,7 @@ try { CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class); if (result.getCode() == 200) { return R.ok().add(result.getData()); return R.ok(result.getMsg()).add(result.getData()); } else { return R.error(result.getMsg()); // throw new CoolException("任务执行状态上报失败!!"); @@ -145,7 +145,7 @@ try { CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class); if (result.getCode() == 200) { return R.ok().add(result.getData()); return R.ok(result.getMsg()).add(result.getData()); } else { return R.error(result.getMsg()); // throw new CoolException("任务执行状态上报失败!!"); @@ -184,7 +184,7 @@ try { CommonResponse result = objectMapper.readValue(exchange.getBody(), CommonResponse.class); if (result.getCode() == 200) { return R.ok().add(result.getData()); return R.ok(result.getMsg()).add(result.getData()); } else { return R.error(result.getMsg()); // throw new CoolException("任务执行状态上报失败!!"); rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/WcsMsgTypeEvent.java
New file @@ -0,0 +1,23 @@ package com.vincent.rsf.server.api.entity.enums; /** * @author Munch D. Luffy * @date 2026/01/10 * @description: WCS消息类型 * @version 1.0 */ public enum WcsMsgTypeEvent { /**消息类型*/ TASK_COMPLETE("task_complete", "任务完成"), TASK_CANCEL("task_cancel", "任务取消"), ; WcsMsgTypeEvent(String event, String desc) { this.event = event; this.desc = desc; } public String event; public String desc; } rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ChangeLocParam.java
@@ -10,7 +10,7 @@ @Data @Accessors(chain = true) @ApiModel(value = "ChangeLocParam", description = "WCS任务上报通知") @ApiModel(value = "ChangeLocParam", description = "WCS申请在库库位更换库位") public class ChangeLocParam implements Serializable { @ApiModelProperty("托盘码") rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ReassignLocParam.java
@@ -10,7 +10,7 @@ @Data @Accessors(chain = true) @ApiModel(value = "ReassignLocParam", description = "WCS任务上报通知") @ApiModel(value = "ReassignLocParam", description = "WCS申请任务重新分配入库") public class ReassignLocParam implements Serializable { @ApiModelProperty("托盘码") rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/TaskReportParam.java
@@ -13,16 +13,28 @@ @ApiModel(value = "TaskReportParam", description = "WCS任务上报通知") public class TaskReportParam implements Serializable { @ApiModelProperty("托盘码") private String barcode; @ApiModelProperty("通知流水号") private Long id; @ApiModelProperty("源站") private Integer sourceStaNo; @ApiModelProperty("通知类型:task") private String notifyType; @ApiModelProperty("可用排") private List<Integer> rowList; @ApiModelProperty("设备号") private String device; @ApiModelProperty("库位类型") private Integer locType1; @ApiModelProperty("WCS工作号") private String taskNo; @ApiModelProperty("上级系统工作号") private String superTaskNo; @ApiModelProperty("消息类型:task_complete、task_cancel") private String msgType; @ApiModelProperty("消息描述") private String msgDesc; @ApiModelProperty("消息数据") private String data; } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -19,6 +19,7 @@ import com.vincent.rsf.server.api.controller.erp.params.TaskInParam; import com.vincent.rsf.server.api.entity.dto.SyncLocsDto; import com.vincent.rsf.server.api.entity.enums.CallBackEvent; import com.vincent.rsf.server.api.entity.enums.WcsMsgTypeEvent; import com.vincent.rsf.server.api.entity.params.*; import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams; import com.vincent.rsf.server.manager.enums.*; @@ -957,7 +958,7 @@ GenerateTaskParams taskParams = new GenerateTaskParams(); taskParams.setWaitPakins(waitPakins) .setSiteId(deviceSite.getId()); R r = taskService.generateTasksWcs(taskParams, 111L);//lsh待修改 WCS用户信息 R r = taskService.generateTasksWcs(taskParams, 111L,params.getRowList());//lsh待修改 WCS用户信息 if (r.get("msg").equals("任务生成完毕!")) { one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getBarcode, params.getBarcode())); InTaskWcsReportParam inTaskWcsReportParam = new InTaskWcsReportParam(); @@ -973,7 +974,7 @@ } /** * WCS入库任务申请 * WCS任务上报通知 * * @return */ @@ -982,21 +983,28 @@ if (Objects.isNull(params)) { return R.error("参数不能为空!!"); } List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, params.getBarcode())); if (waitPakins.isEmpty()) { throw new CoolException("单据不存在 !!"); Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSuperTaskNo())); if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_COMPLETE.event)){ if (!Cools.isEmpty(one)) { one.setTaskStatus(one.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id); if (!taskService.updateById(one)) { // throw new CoolException("完成任务失败"); return R.error("完成任务失败").add(one); } return R.ok("任务完成成功").add(one); } } else if (params.getMsgType().equals(WcsMsgTypeEvent.TASK_CANCEL.event)){ // if (!Cools.isEmpty(one)) { // one.setTaskStatus(one.getTaskType() < 100 ? TaskStsType.COMPLETE_IN.id : TaskStsType.AWAIT.id); // return R.ok("!").add(one); // } return R.error("暂不允许取消"); } GenerateTaskParams taskParams = new GenerateTaskParams(); taskParams.setWaitPakins(waitPakins) .setSiteId(params.getSourceStaNo().longValue()); return R.ok(taskService.generateTasks(taskParams, 111L)); // return R.ok("任务生成完毕!"); // log.info(JSONObject.toJSONString(params)); // return R.ok(JSONObject.toJSONString(params)); return R.error("数据异常"); } /** * WCS入库任务申请 * WCS申请任务重新分配入库 * * @return */ @@ -1019,7 +1027,7 @@ } /** * WCS入库任务申请 * WCS申请在库库位更换库位 * * @return */ rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java
@@ -10,7 +10,7 @@ public interface TaskService extends IService<Task> { R generateTasks(GenerateTaskParams waitPakin, Long loginUserId); R generateTasksWcs(GenerateTaskParams waitPakin, Long loginUserId); R generateTasksWcs(GenerateTaskParams waitPakin, Long loginUserId,List<Integer> rowList); R generateFlatWarehouseTasks(WaitPakin waitPakins, String locCode, Long loginUserId); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -448,16 +448,14 @@ /** * @param * @param loginUserId * @return * @author Munch D. Luffy * @date 2026/01/10 * @description: WCS入库任务申请 */ @Override @Transactional(rollbackFor = Exception.class) public synchronized R generateTasksWcs(GenerateTaskParams waitPakin, Long loginUserId) { public synchronized R generateTasksWcs(GenerateTaskParams waitPakin, Long loginUserId,List<Integer> rowList) { if (Objects.isNull(waitPakin) || waitPakin.getWaitPakins().isEmpty()) { throw new CoolException("参数不能为空!!"); } @@ -490,7 +488,7 @@ throw new CoolException("容器未维护入库,请维护后再操作!!"); } /**获取库位*/ String targetLoc = LocManageUtil.getTargetLoc(warehouseArea.getId(), container.getContainerType()); String targetLoc = LocManageUtil.getTargetLoc(warehouseArea.getId(), container.getContainerType(),rowList); if (Cools.isEmpty(targetLoc)) { throw new CoolException("该站点对应库区未找到库位"); } rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
@@ -33,6 +33,25 @@ return getTargetLoc(areaId, null); } public static String getTargetLoc(Long areaId, Long containerType,List<Integer> rowList) { Long locType = containerType; //TODO 库位策略后续排期 LocService locService = SpringUtils.getBean(LocService.class); Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() .eq(!Objects.isNull(locType), Loc::getType, locType) .eq(Loc::getAreaId, areaId) .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) .in(Objects.nonNull(rowList) && !rowList.isEmpty(), Loc::getRow, rowList) .orderByAsc(Loc::getLev) .orderByAsc(Loc::getCol) .orderByAsc(Loc::getRow) .last("LIMIT 1") ); return !Objects.isNull(loc) ? loc.getCode() : null; } public static String getTargetLoc(Long areaId, Long containerType) { Long locType = null; // if (!Objects.isNull(containerType)) { rsf-server/src/main/resources/application.yml
@@ -33,7 +33,7 @@ :banner: false db-config: id-type: auto logic-delete-value: 1 logic-delete-value: 0 logic-not-delete-value: 0 super: