1
11 小时以前 e711c834aec2293c53b07efe53e81e3573c289b6
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java
@@ -2,7 +2,6 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.exception.CoolException;
import com.vincent.rsf.server.common.constant.Constants;
@@ -10,16 +9,16 @@
import com.vincent.rsf.server.manager.constant.StaGroupConstant;
import com.vincent.rsf.server.manager.controller.params.LocToTaskParams;
import com.vincent.rsf.server.manager.entity.*;
import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.manager.enums.LocStsType;
import com.vincent.rsf.server.manager.enums.TaskResouceType;
import com.vincent.rsf.server.manager.enums.TaskStsType;
import com.vincent.rsf.server.manager.enums.TaskType;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.service.impl.BasStationServiceImpl;
import com.vincent.rsf.server.manager.utils.WarehouseLocationRetrievalUtil;
import com.vincent.rsf.server.system.constant.GlobalConfigCode;
import com.vincent.rsf.server.system.constant.SerialRuleCode;
import com.vincent.rsf.server.system.entity.Config;
import com.vincent.rsf.server.system.service.ConfigService;
import com.vincent.rsf.server.system.utils.SerialRuleUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
@@ -60,7 +59,7 @@
     * 自动生成库位明细
     */
    @Transactional(rollbackFor = Exception.class)
    @Scheduled(cron = "0/25 * * * * ?")
//    @Scheduled(cron = "0/25 * * * * ?")
    public void insertRandomMats() {
        List<Loc> list = locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type));
        for (Loc loc : list) {
@@ -109,9 +108,13 @@
        //获取任务列表中,为盘点出库的任务
        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
                .in(Task::getTaskType, Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type,
                        TaskType.TASK_TYPE_PICK_IN.type,
                        TaskType.TASK_TYPE_PICK_AGAIN_OUT.type,
                        TaskType.TASK_TYPE_CHECK_IN.type)));
//                        TaskType.TASK_TYPE_PICK_IN.type,
                        TaskType.TASK_TYPE_PICK_AGAIN_OUT.type
//                                ,
//                        TaskType.TASK_TYPE_CHECK_IN.type
                        )
                )
        );
        if (!tasks.isEmpty()) {
            tasks.forEach(task -> {
@@ -128,7 +131,7 @@
//                                throw new CoolException("站点状态修改失败!!");
                        }
                        try {
                            taskService.pickOrCheckTask(task.getId(),  task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type) ? Constants.TASK_TYPE_OUT_CHECK : "");
                            taskService.pickOrCheckTask(task.getId(), task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type) ? Constants.TASK_TYPE_OUT_CHECK : "");
                        } catch (Exception e) {
                            log.error("error====>", e);
@@ -170,27 +173,35 @@
        if (Cools.isEmpty(autoRunArea)) {
            return;
        }
        List<Integer> array = new ArrayList<>();
        List<String> list = new ArrayList<>();
        for (char c : autoRunArea.toCharArray()) {
            switch (c) {
                case '1':
                    this.autoRun(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST, StaGroupConstant.FAR_RIGHT_STA_ROW_LIST);
                    array.addAll(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST);
                    list.addAll(StaGroupConstant.FAR_RIGHT_STA_ROW_LIST);
                    break;
                case '2':
                    this.autoRun(LocGroupConstant.RIGHT_LOC_ROW_LIST, StaGroupConstant.RIGHT_STA_ROW_LIST);
                    array.addAll(LocGroupConstant.RIGHT_LOC_ROW_LIST);
                    list.addAll(StaGroupConstant.RIGHT_STA_ROW_LIST);
                    break;
                case '3':
                    this.autoRun(LocGroupConstant.MIDDLE_LOC_ROW_LIST, StaGroupConstant.MIDDLE_STA_ROW_LIST);
                    array.addAll(LocGroupConstant.MIDDLE_LOC_ROW_LIST);
                    list.addAll(StaGroupConstant.MIDDLE_STA_ROW_LIST);
                    break;
                case '4':
                    this.autoRun(LocGroupConstant.LEFT_LOC_ROW_LIST, StaGroupConstant.LEFT_STA_ROW_LIST);
                    array.addAll(LocGroupConstant.LEFT_LOC_ROW_LIST);
                    list.addAll(StaGroupConstant.LEFT_STA_ROW_LIST);
                    break;
                case '5':
                    this.autoRun(LocGroupConstant.FAR_LEFT_LOC_ROW_LIST, StaGroupConstant.FAR_LEFT_STA_ROW_LIST);
                    array.addAll(LocGroupConstant.FAR_LEFT_LOC_ROW_LIST);
                    list.addAll(StaGroupConstant.FAR_LEFT_STA_ROW_LIST);
                    break;
                default:
                    break;
            }
        }
        this.autoRun(array, list);
    }
    private void autoRun(List<Integer> locGroupList, List<String> staGroupList) {
@@ -211,32 +222,33 @@
                });
                List<BasStation> stations = stationService.list(new LambdaQueryWrapper<BasStation>()
                        .eq(BasStation::getStatus, 1)
                        .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type));
                );
//                        .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
                List<String> stationNames = stations.stream().map(BasStation::getStationName).collect(Collectors.toList());
                if (Cools.isEmpty(stations)) {
                    throw new CoolException("无可用站点!!");
                }
                DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
                        .in(DeviceSite::getSite, stationNames)
                        .eq(DeviceSite::getType, TaskType.TASK_TYPE_CHECK_OUT.type).last("limit 1"));
                if (Cools.isEmpty(deviceSite)) {
                    throw new CoolException("无可用路径!!");
                }
                //生成盘点任务参数
                LocToTaskParams locToTaskParams = new LocToTaskParams();
                locToTaskParams.setType(Constants.TASK_TYPE_OUT_CHECK)
                        .setItems(locItems)
                        .setSiteNo(deviceSite.getSite())
                        .setOrgLoc(loc.getCode());
                for (String stationName : stationNames) {
                    boolean isItAvailable = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableOutArea(loc.getAreaId(), stationName, loc.getBarcode(), TaskType.TASK_TYPE_CHECK_OUT.type);
                    if (!isItAvailable) {
                        continue;
                    }
                    //生成盘点任务参数
                    LocToTaskParams locToTaskParams = new LocToTaskParams();
                    locToTaskParams.setType(Constants.TASK_TYPE_OUT_CHECK)
                            .setItems(locItems)
                            .setSiteNo(stationName)
                            .setOrgLoc(loc.getCode());
                List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTargSite, deviceSite.getSite()));
                if (!tasks.isEmpty()) {
                    continue;
                }
                try {
                    locItemService.generateTask(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val, locToTaskParams, getLoginUserId());
                } catch (Exception e) {
                    throw new CoolException(e.getMessage());
                    List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTargSite, stationName));
                    if (!tasks.isEmpty()) {
                        continue;
                    }
                    try {
                        locItemService.generateTask(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val, locToTaskParams, getLoginUserId());
                    } catch (Exception e) {
                        throw new CoolException(e.getMessage());
                    }
                }
            }
        }
@@ -275,6 +287,7 @@
    /**
     * 生成移库任务
     *
     * @param
     * @param
     */
@@ -286,49 +299,61 @@
        if (!Boolean.parseBoolean(config.getVal())) {
            return;
        }
        Integer maxThread = 50;
        Config confNum = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_RUN_MOVE_THEAD_MAX));
        if (!Objects.isNull(confNum)) {
            maxThread = Integer.valueOf(confNum.getVal());
        }
        List<Integer> locGroupList = new ArrayList<>();
        //获取任务列表中,为盘点出库的任务
        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
                .eq(Task::getTaskType, TaskType.TASK_TYPE_LOC_MOVE.type));
        if (!tasks.isEmpty() && tasks.size() >= maxThread) {
            return;
        }
        String autoRunArea = configService.getVal("AUTO_RUN_AREA", String.class);
        if (Cools.isEmpty(autoRunArea)) {
            return;
        }
        List<Integer> array = new ArrayList<>();
        List<String> list = new ArrayList<>();
        for (char c : autoRunArea.toCharArray()) {
            switch (c) {
                case '1':
                    locGroupList = LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST;
                    array.addAll(LocGroupConstant.FAR_RIGHT_LOC_ROW_LIST);
                    list.addAll(StaGroupConstant.FAR_RIGHT_STA_ROW_LIST);
                    break;
                case '2':
                    locGroupList = LocGroupConstant.RIGHT_LOC_ROW_LIST;
                    array.addAll(LocGroupConstant.RIGHT_LOC_ROW_LIST);
                    list.addAll(StaGroupConstant.RIGHT_STA_ROW_LIST);
                    break;
                case '3':
                    locGroupList = LocGroupConstant.MIDDLE_LOC_ROW_LIST;
                    array.addAll(LocGroupConstant.MIDDLE_LOC_ROW_LIST);
                    list.addAll(StaGroupConstant.MIDDLE_STA_ROW_LIST);
                    break;
                case '4':
                    locGroupList = LocGroupConstant.LEFT_LOC_ROW_LIST;
                    array.addAll(LocGroupConstant.LEFT_LOC_ROW_LIST);
                    list.addAll(StaGroupConstant.LEFT_STA_ROW_LIST);
                    break;
                case '5':
                    locGroupList = LocGroupConstant.FAR_LEFT_LOC_ROW_LIST;
                    array.addAll(LocGroupConstant.FAR_LEFT_LOC_ROW_LIST);
                    list.addAll(StaGroupConstant.FAR_LEFT_STA_ROW_LIST);
                    break;
                default:
                    break;
            }
        }
        xx(array);
    }
    private void xx(List<Integer> locGroupList) {
        Integer startRow = Collections.min(locGroupList);
        Integer endRow = Collections.max(locGroupList);
        String memo = "DEMO_LOC_" + startRow + "-" + endRow;
        Integer maxThread = 30;
        Config confNum = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_RUN_MOVE_THEAD_MAX));
        if (!Objects.isNull(confNum)) {
            maxThread = Integer.valueOf(confNum.getVal());
        }
        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
                .eq(Task::getMemo,memo));
        if (!tasks.isEmpty() && tasks.size() >= maxThread) {
            return;
        }
        // STOCK
        LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type);
        if (null != startRow) {
@@ -371,7 +396,6 @@
        } catch (Exception e) {
            log.info("生成出库任务失败", e);
        }
    }
    public static List<String> getStaPrefixes(List<String> staGroupList) {