chen.lin
昨天 4206fedd87d92b8dd59c670f9fc0e8190d048c9c
rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -1057,7 +1057,7 @@
                    String shallowLocNo = LocUtils.getShallowLoc(loc1.getCode());
                    // 检测目标库位是否为空库位
                    Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLocNo));
                    if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
                    if (shallowLoc != null && Objects.equals(shallowLoc.getUseStatus(), LocStsType.LOC_STS_TYPE_O.type)) {
                        if (LocUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) {
                            loc = shallowLoc;
                            channel = shallowLoc.getChannel();
@@ -1240,7 +1240,7 @@
            loc = null;
        }
        // 递归查询
        if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
        if (Cools.isEmpty(loc) || !Objects.equals(loc.getUseStatus(), LocStsType.LOC_STS_TYPE_O.type)) {
            // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归
            if (times < rowCount * 2) {
                times = times + 1;
@@ -1276,16 +1276,26 @@
        Loc loc = new Loc();
        InTaskMsgDto inTaskMsgDto = new InTaskMsgDto();
        locTypeDto.setLocType1(18);
        List<Loc> loc1 = locService.list(new LambdaQueryWrapper<Loc>()
        LambdaQueryWrapper<Loc> locQw = new LambdaQueryWrapper<Loc>()
                .eq(Loc::getAreaId, area)
                .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
                .eq(Loc::getType, locTypeDto.getLocType1())
                .ge(Loc::getRow, deviceBind.getStartRow())
                .le(Loc::getRow, deviceBind.getEndRow())
                .orderByAsc(Loc::getLev)
                .orderByAsc(Loc::getCol)
                .orderByAsc(Loc::getRow)
        );
                .eq(Loc::getType, locTypeDto.getLocType1());
        if (deviceBind.getStartRow() != null && deviceBind.getEndRow() != null) {
            locQw.ge(Loc::getRow, deviceBind.getStartRow()).le(Loc::getRow, deviceBind.getEndRow());
        }
        locQw.orderByAsc(Loc::getLev).orderByAsc(Loc::getCol).orderByAsc(Loc::getRow);
        List<Loc> loc1 = locService.list(locQw);
        // 若按巷道行范围未查到空库位,则放宽条件:不限制行范围,仅按库区+空库+类型查询(与 loc/page 行为一致)
        if (Cools.isEmpty(loc1) && times == 0) {
            loc1 = locService.list(new LambdaQueryWrapper<Loc>()
                    .eq(Loc::getAreaId, area)
                    .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
                    .eq(Loc::getType, locTypeDto.getLocType1())
                    .orderByAsc(Loc::getLev)
                    .orderByAsc(Loc::getCol)
                    .orderByAsc(Loc::getRow)
            );
        }
        for (Loc loc2 : loc1) {
            if (!LocUtils.locMoveCheckLocTypeComplete(loc2, locTypeDto)) {
                continue;
@@ -1301,12 +1311,17 @@
        );
        if (Cools.isEmpty(deviceSite)) {
            deviceNo = 0;
            loc = null;
            // 有可用空库位但未配置路径时,用源站点作为目标站点,仍返回该库位,避免误报“没有空库位”
            if (loc != null && loc.getId() != null && Objects.equals(loc.getUseStatus(), LocStsType.LOC_STS_TYPE_O.type)) {
                inTaskMsgDto.setStaNo(sourceStaNo);
            } else {
                loc = null;
            }
        } else {
            inTaskMsgDto.setStaNo(deviceSite.getDeviceSite());
        }
        // 递归查询
        if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
        if (Cools.isEmpty(loc) || !Objects.equals(loc.getUseStatus(), LocStsType.LOC_STS_TYPE_O.type)) {
            // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归
            if (times < 5) {
                times = times + 1;
@@ -1376,7 +1391,8 @@
        // 情况1:如果是拣料/盘点入库任务,状态199已经在createInTask中更新为2了
        // 情况2:如果是新创建的任务(无订单号组托),状态是1,需要更新为2
        // 情况3:如果状态已经是2,不需要更新
        if (task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id)) {
        Integer taskStatus = task.getTaskStatus();
        if (taskStatus != null && taskStatus.equals(TaskStsType.GENERATE_IN.id)) {
            log.info("新创建的入库任务(无订单号组托),RCS申请入库时更新为状态2 - 任务编码:{}", task.getTaskCode());
            Long loginUserId = SystemAuthUtils.getLoginUserId();
            if (loginUserId == null) {
@@ -1397,11 +1413,11 @@
                log.warn("新创建的入库任务状态更新为2失败,可能状态已变更 - 任务编码:{},当前状态:{}", 
                        task.getTaskCode(), task.getTaskStatus());
            }
        } else if (task.getTaskStatus().equals(TaskStsType.WCS_EXECUTE_IN.id)) {
        } else if (taskStatus != null && taskStatus.equals(TaskStsType.WCS_EXECUTE_IN.id)) {
            log.info("入库任务状态已经是2(RCS任务已下发),无需更新 - 任务编码:{}", task.getTaskCode());
        } else {
            log.info("入库任务当前状态:{},RCS申请入库时保持当前状态 - 任务编码:{}", 
                    task.getTaskStatus(), task.getTaskCode());
                    taskStatus, task.getTaskCode());
        }
        
        log.info("========== RCS-申请入库任务成功 ==========");