1
2 天以前 e461c84027885a02f8af27cca01e0cbff0c5ade4
lsh#
1个文件已添加
11个文件已修改
182 ■■■■ 已修改文件
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsChangeLocParam.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/entity/params/WcsTaskReportParam.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-open-api/src/main/java/com/vincent/rsf/openApi/service/impl/WmsWcsServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/WcsMsgTypeEvent.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ChangeLocParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/ReassignLocParam.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/entity/params/TaskReportParam.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/TaskService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
rsf-server/src/main/resources/application.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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: