1
zhang
昨天 3a49654f51096d4f9f95f4a5e8198e168e38a0c5
zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/AutoRunScheduler.java
@@ -57,13 +57,19 @@
    @Autowired
    private SnowflakeIdWorker snowflakeIdWorker;
    private Integer num = 0;
    private Integer max = 2;
//    @Scheduled(fixedRate = 500) // 固定频率执行,不同步
    @Scheduled(fixedDelay = 1000) // 固定频率执行,同步
//    @Scheduled(cron = "0/1 * * * * ? ")
    private void execute() {
        if (configService.getVal("TaskAssignMode", Boolean.class)) {
            String autoRunAreas = configService.getVal("autoRunAreas", String.class);
            if (Cools.isEmpty(autoRunAreas)) { return; }
            if (Cools.isEmpty(autoRunAreas)) {
                return;
            }
            for (char c : autoRunAreas.toCharArray()) {
                switch (c) {
                    case '1':
@@ -88,7 +94,9 @@
        }else {
            if (configService.getVal("InAndOutMode", Boolean.class,false)) {
                String autoRunAreas = configService.getVal("autoRunAreas", String.class);
                if (Cools.isEmpty(autoRunAreas)) { return; }
                if (Cools.isEmpty(autoRunAreas)) {
                    return;
                }
                for (char c : autoRunAreas.toCharArray()) {
                    switch (c) {
                        case '1':
@@ -116,7 +124,9 @@
    private void autoRun(List<Integer> locGroupList, List<String> staGroupList, List<String> agvGroupList) {
        int availableAgvCount = this.getAvailableAgvCount(agvGroupList);
        if (0 == availableAgvCount) { return; }
        if (0 == availableAgvCount) {
            return;
        }
        List<String> staPreNos = getStaPrefixes(staGroupList);
        String staTaskMemo = "DEMO_STA_" + String.join("-", staPreNos);
@@ -132,18 +142,22 @@
    private void autoOut(List<Integer> locGroupList, List<String> staGroupList, List<String> agvGroupList) {
        int availableAgvCount = this.getAvailableAgvCount(agvGroupList);
        if (0 == availableAgvCount) { return; }
        if (0 == availableAgvCount) {
            return;
        }
        List<String> staPreNos = getStaPrefixes(staGroupList);
        String staTaskMemo = "DEMO_STA_" + String.join("-", staPreNos);
        List<Task> list = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getDestSta, 33).in(Task::getTaskSts, TaskStsType.INIT.val(), TaskStsType.WAITING.val(), TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val()));
        if (Cools.isEmpty(list) && num < max) {
        // 出库
        this.runLocToSta(locGroupList, staGroupList, staTaskMemo);
        // 入库
        if (staGroupList.contains("1007")){
            this.runStaToLoc(locGroupList, staGroupList, staTaskMemo);
            this.runLocToSSXSta(locGroupList, staGroupList, staTaskMemo);
        }
        List<Task> list2 = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getOriSta, 34).in(Task::getTaskSts, TaskStsType.INIT.val(), TaskStsType.WAITING.val(), TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val()));
        if (Cools.isEmpty(list2) && num > 0) {
            // 入库
            this.runXXSStaToLoc(locGroupList, staGroupList, staTaskMemo);
        }
    }
    // 入库
@@ -153,9 +167,9 @@
        AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString()));
//        if (null == agvModel) {
//            return;
//        }
        if (null == agvModel) {
            return;
        }
        // STOCK
        LambdaQueryWrapper<Sta> stockWrapper = new LambdaQueryWrapper<Sta>()
@@ -164,15 +178,23 @@
                .eq(Sta::getInEnable,"Y")
                .in(Sta::getStaNo, staGroupList);
        List<Sta> stockList = staService.list(stockWrapper);
        if (Cools.isEmpty(stockList)) { return; }
        if (Cools.isEmpty(stockList)) {
            return;
        }
        Collections.shuffle(stockList);
        // IDLE
        LambdaQueryWrapper<Loc> idleWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.IDLE.val());
        if (null != startRow) { idleWrapper.ge(Loc::getRow, startRow); }
        if (null != endRow) { idleWrapper.le(Loc::getRow, endRow); }
        if (null != startRow) {
            idleWrapper.ge(Loc::getRow, startRow);
        }
        if (null != endRow) {
            idleWrapper.le(Loc::getRow, endRow);
        }
        List<Loc> idleList = locService.list(idleWrapper);
        if (Cools.isEmpty(idleList)) { return; }
        if (Cools.isEmpty(idleList)) {
            return;
        }
        Collections.shuffle(idleList);
        OpenBusSubmitParam param = new OpenBusSubmitParam();
@@ -188,6 +210,61 @@
            taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 19));
            param.getTaskList().add(taskDto);
        }
        mainService.generateBusAndTask(param, memo);
    }
    private void runXXSStaToLoc(List<Integer> locGroupList, List<String> staGroupList, String memo) {
        Integer startRow = Collections.min(locGroupList);
        Integer endRow = Collections.max(locGroupList);
        AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString()));
        if (null == agvModel) {
            return;
        }
        // STOCK
        LambdaQueryWrapper<Sta> stockWrapper = new LambdaQueryWrapper<Sta>()
                //.eq(Sta::getStaSts, StaStsType.STOCK.val())
                .eq(Sta::getStatus, StatusType.ENABLE.val)
                .eq(Sta::getInEnable, "Y")
                .in(Sta::getStaNo, staGroupList);
        List<Sta> stockList = staService.list(stockWrapper);
        if (Cools.isEmpty(stockList)) {
            return;
        }
        Collections.shuffle(stockList);
        // IDLE
        LambdaQueryWrapper<Loc> idleWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.IDLE.val());
        if (null != startRow) {
            idleWrapper.ge(Loc::getRow, startRow);
        }
        if (null != endRow) {
            idleWrapper.le(Loc::getRow, endRow);
        }
        List<Loc> idleList = locService.list(idleWrapper);
        if (Cools.isEmpty(idleList)) {
            return;
        }
        Collections.shuffle(idleList);
        OpenBusSubmitParam param = new OpenBusSubmitParam();
        param.setBatch(String.valueOf(snowflakeIdWorker.nextId()).substring(13, 19));
        for (int i = 0; i < max; i++) {
            Sta stockSta = stockList.get(0);
            Loc idleLoc = idleList.get(i);
            TaskDto taskDto = new TaskDto();
            taskDto.setOriSta(stockSta.getStaNo());
            taskDto.setDestLoc(idleLoc.getLocNo());
            taskDto.setPriority(99);
            taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 19));
            param.getTaskList().add(taskDto);
            num--;
        }
        mainService.generateBusAndTask(param, memo);
@@ -218,8 +295,12 @@
        // LOC STOCK
        LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.STOCK.val());
        if (null != startRow) { stockWrapper.ge(Loc::getRow, startRow); }
        if (null != endRow) { stockWrapper.le(Loc::getRow, endRow); }
        if (null != startRow) {
            stockWrapper.ge(Loc::getRow, startRow);
        }
        if (null != endRow) {
            stockWrapper.le(Loc::getRow, endRow);
        }
        List<Loc> stockList = locService.list(stockWrapper);
        if (Cools.isEmpty(stockList)) {
            return;
@@ -239,6 +320,62 @@
            taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 19));
            param.getTaskList().add(taskDto);
        }
        mainService.generateBusAndTask(param, memo);
    }
    private void runLocToSSXSta(List<Integer> locGroupList, List<String> staGroupList, String memo) {
        Integer startRow = Collections.min(locGroupList);
        Integer endRow = Collections.max(locGroupList);
        AgvModel agvModel = agvModelService.getOne(new LambdaQueryWrapper<AgvModel>().eq(AgvModel::getType, AgvModelType.CTU_BOX_TRANSPORT_AGV.toString()));
        if (null == agvModel) {
            return;
        }
        int maxCapacity = agvModel.getBackpack();
        // STA IDLE
        LambdaQueryWrapper<Sta> idleWrapper = new LambdaQueryWrapper<Sta>()
                //.eq(Sta::getStaSts, StaStsType.IDLE.val())
                .eq(Sta::getStatus, StatusType.ENABLE.val)
                .eq(Sta::getOutEnable, "Y")
                .in(Sta::getStaNo, staGroupList);
        List<Sta> idleList = staService.list(idleWrapper);
        if (Cools.isEmpty(idleList)) {
            return;
        }
        Collections.shuffle(idleList);
        // LOC STOCK
        LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.STOCK.val());
        if (null != startRow) {
            stockWrapper.ge(Loc::getRow, startRow);
        }
        if (null != endRow) {
            stockWrapper.le(Loc::getRow, endRow);
        }
        List<Loc> stockList = locService.list(stockWrapper);
        if (Cools.isEmpty(stockList)) {
            return;
        }
        Collections.shuffle(stockList);
        OpenBusSubmitParam param = new OpenBusSubmitParam();
        param.setBatch(String.valueOf(snowflakeIdWorker.nextId()).substring(13, 19));
        for (int i = 0; i < max; i++) {
            Loc stockLoc = stockList.get(i);
            Sta idleSta = idleList.get(0);
            TaskDto taskDto = new TaskDto();
            taskDto.setOriLoc(stockLoc.getLocNo());
            taskDto.setDestSta(idleSta.getStaNo());
            taskDto.setPriority(100);
            taskDto.setSeqNum(String.valueOf(snowflakeIdWorker.nextId()).substring(15, 19));
            param.getTaskList().add(taskDto);
            num++;
        }
        mainService.generateBusAndTask(param, memo);
@@ -269,8 +406,12 @@
        // STOCK
        LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.STOCK.val());
        if (null != startRow) { stockWrapper.ge(Loc::getRow, startRow); }
        if (null != endRow) { stockWrapper.le(Loc::getRow, endRow); }
        if (null != startRow) {
            stockWrapper.ge(Loc::getRow, startRow);
        }
        if (null != endRow) {
            stockWrapper.le(Loc::getRow, endRow);
        }
        List<Loc> stockList = locService.list(stockWrapper);
        if (Cools.isEmpty(stockList) || stockList.size() < agvModel.getBackpack()) {
            return;
@@ -279,8 +420,12 @@
        // IDLE
        LambdaQueryWrapper<Loc> idleWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.IDLE.val());
        if (null != startRow) { idleWrapper.ge(Loc::getRow, startRow); }
        if (null != endRow) { idleWrapper.le(Loc::getRow, endRow); }
        if (null != startRow) {
            idleWrapper.ge(Loc::getRow, startRow);
        }
        if (null != endRow) {
            idleWrapper.le(Loc::getRow, endRow);
        }
        List<Loc> idleList = locService.list(idleWrapper);
        if (Cools.isEmpty(idleList)) {
            return;