skyouc
20 小时以前 523d8cf68615134c7780f74933e70a14edb60f01
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java
@@ -13,7 +13,9 @@
import com.vincent.rsf.server.manager.enums.*;
import com.vincent.rsf.server.manager.service.*;
import com.vincent.rsf.server.manager.service.impl.BasStationServiceImpl;
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;
@@ -25,6 +27,7 @@
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
import static com.vincent.rsf.server.system.utils.SystemAuthUtils.getLoginUserId;
@@ -101,54 +104,34 @@
     * @version 1.0
     */
    @Scheduled(cron = "0/35 * * * * ?")
    @Transactional(rollbackFor = Exception.class)
    public void autoCheckComplete() {
        Boolean autoRunArea = configService.getVal("AUTO_RUN_CHECK_ORDERS", Boolean.class);
        if (!autoRunArea) {
            return;
        }
        //获取任务列表中,为盘点出库的任务
        List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>()
                .in(Task::getTaskType, Arrays.asList(TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_CHECK_IN.type)));
                .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)));
        if (tasks.size() >= 5) {
            return;
        }
        if (!tasks.isEmpty()) {
            tasks.forEach(task -> {
                if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)) {
                    if (task.getTaskStatus().equals(TaskStsType.COMPLETE_IN.id)) {
                        if (!stationService.update(new LambdaUpdateWrapper<BasStation>()
                                .eq(BasStation::getStationName, task.getOrgSite())
                                .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type))) {
                            throw new CoolException("站点状态修改失败!!");
                        }
                    }
                } else {
                    //创建出库任务状态
//                    if (task.getTaskStatus().equals(TaskStsType.WCS_EXECUTE_OUT.id)) {
//                        task.setTaskStatus(TaskStsType.COMPLETE_OUT.id);
//                        if (!taskService.updateById(task)) {
//                            throw new CoolException("盘点出库任务完成失败!!");
//                        }
//                        //出库已完成,等待盘点中
//                    } else
                    if (task.getTaskStatus().equals(TaskStsType.WAVE_SEED.id)) {
                        if (!stationService.update(new LambdaUpdateWrapper<BasStation>()
                                .eq(BasStation::getStationName, task.getOrgSite())
                                .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_F.type))) {
                            throw new CoolException("站点状态修改失败!!");
                                .eq(BasStation::getStationName, task.getTargSite())
                                .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_R.type))) {
                            log.error("站点状态修改完成失败,当前任务状态:", task.getTaskStatus());
//                                throw new CoolException("站点状态修改失败!!");
                        }
                        try {
                            taskService.pickOrCheckTask(task.getId(), Constants.TASK_TYPE_OUT_CHECK);
                            taskService.pickOrCheckTask(task.getId(),  task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type) ? Constants.TASK_TYPE_OUT_CHECK : "");
                            if (!stationService.update(new LambdaUpdateWrapper<BasStation>()
                                    .eq(BasStation::getStationName, task.getOrgSite())
                                    .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_R.type))) {
                                throw new CoolException("站点状态修改失败!!");
                            }
                        } catch (Exception e) {
                            throw new CoolException(e.getMessage());
                            log.error("error====>", e);
                        }
                    }
                }
@@ -160,13 +143,13 @@
    /**
     * @author Ryan
     * @date 2025/9/1
     * @description: 自动完成盘点功能
     * @description: 自动生成任务
     * @version 1.0
     */
    @Scheduled(cron = "0/25 * * * * ?")
    public void genRun() {
        Boolean flagAuto = configService.getVal("AUTO_RUN_CHECK_ORDERS", Boolean.class);
        if (!flagAuto) {
        Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_RUN_CHECK_ORDERS));
        if (!Boolean.parseBoolean(config.getVal())) {
            return;
        }
        //获取任务列表中,为盘点出库的任务
@@ -218,12 +201,15 @@
                locItems.forEach(locItem -> {
                    locItem.setOutQty(locItem.getAnfme());
                });
                List<BasStation> stations = stationService.list(new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type));
                List<BasStation> stations = stationService.list(new LambdaQueryWrapper<BasStation>()
                        .eq(BasStation::getStatus, 1)
                        .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, stations)
                        .in(DeviceSite::getSite, stationNames)
                        .eq(DeviceSite::getType, TaskType.TASK_TYPE_CHECK_OUT.type), false);
                if (Cools.isEmpty(deviceSite)) {
                    throw new CoolException("无可用路径!!");
@@ -240,19 +226,12 @@
                    continue;
                }
                try {
                    //生成盘点出库任务,站点预约
                    if (!stationService.update(new LambdaUpdateWrapper<BasStation>()
                            .eq(BasStation::getStationName, deviceSite.getSite())
                            .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_S.type))) {
                        throw new CoolException("站点状态更新失败!!");
                    }
                    locItemService.generateTask(TaskResouceType.TASK_RESOUCE_CHECK_TYPE.val, locToTaskParams, getLoginUserId());
                } catch (Exception e) {
                    throw new CoolException(e.getMessage());
                }
            }
        }
        // 入库 应该根据工作档回去
//        this.runStaToLoc(locGroupList, staGroupList, staTaskMemo);
@@ -267,14 +246,6 @@
    private List<Loc> getAreaLocs(List<Integer> locGroupList, List<String> staGroupList, String memo) {
        Integer startRow = Collections.min(locGroupList);
        Integer endRow = Collections.max(locGroupList);
        // STA IDLE
//        LambdaQueryWrapper<BasStation> idleWrapper = new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type).in(BasStation::getStationName, staGroupList);
//        List<BasStation> idleList = stationService.list(idleWrapper);
//        if (Cools.isEmpty(idleList)) {
//            return new ArrayList<>();
//        }
//        Collections.shuffle(idleList);
        // LOC STOCK
        LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type);
@@ -291,57 +262,8 @@
        Collections.shuffle(stockList);
        return stockList;
        //生成入库工作档
//        generateTask(idleList.get(0).getStationName(), stockList.get(0).getCode(), idleList.get(0).getBarcode());
    }
    // 出库
    private void runLocToSta(List<Integer> locGroupList, List<String> staGroupList, String memo) {
        Integer startRow = Collections.min(locGroupList);
        Integer endRow = Collections.max(locGroupList);
        // STA IDLE
        LambdaQueryWrapper<BasStation> idleWrapper = new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type).in(BasStation::getStationName, staGroupList);
        List<BasStation> idleList = stationService.list(idleWrapper);
        if (Cools.isEmpty(idleList)) {
            return;
        }
        Collections.shuffle(idleList);
        // LOC STOCK
        LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type);
        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);
        Loc loc = stockList.get(0);
        List<LocItem> list = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId()));
        LocToTaskParams param = new LocToTaskParams();
        param.setType(Constants.TASK_TYPE_OUT_STOCK);
        param.setTarLoc(loc.getCode());
        param.setItems(list);
        param.setSiteNo(idleList.get(0).getStationName());
        param.setMemo(memo);
        //生成出库工作档
        try {
            locItemService.generateTask(TaskResouceType.TASK_RESOUCE_STOCK_TYPE.val, param, getLoginUserId());
        } catch (Exception e) {
            log.info("生成出库任务失败", e);
        }
    }
    // 移库
    private void runLocToLoc(List<Integer> locGroupList, String staTaskMemo) {
@@ -395,52 +317,6 @@
        }
    }
    private void generateTask(String sourceStaNo, String locNo, String barcode) {
        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null);
        if (StringUtils.isBlank(ruleCode)) {
            throw new CoolException("编码错误:请确认编码「SYS_TASK_CODE」是否已生成!!");
        }
        Task task = new Task();
        task.setTaskCode(ruleCode)
                .setTaskStatus(TaskStsType.GENERATE_IN.id)
                .setTaskType(TaskType.TASK_TYPE_IN.type)
                .setResource(TaskResouceType.TASK_RESOUCE_PAKIN_TYPE.val)
                .setTargLoc(locNo)
                .setBarcode(barcode)
                .setOrgSite(sourceStaNo)
                .setCreateBy(6666L)
                .setUpdateBy(6666L);
        if (!taskService.save(task)) {
            throw new CoolException("任务保存失败!!");
        }
        LambdaQueryWrapper<Matnr> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Matnr::getStatus, 1);
        wrapper.orderByAsc(Matnr::getUpdateTime);
        List<Matnr> list = matnrService.page(new Page<>(1, 100), wrapper).getRecords();
        Collections.shuffle(list);
        List<TaskItem> taskItems = new ArrayList<>();
        int i = 0;
        for (Matnr item : list) {
            if (i > 5) {
                break;
            }
            TaskItem taskItem = new TaskItem();
            BeanUtils.copyProperties(item, taskItem);
            taskItem.setTaskId(task.getId())
                    .setOrderType(OrderType.ORDER_IN.type)
                    .setCreateBy(6666L)
                    .setUpdateBy(6666L)
                    .setExtendFields(item.getExtendFields());
            taskItems.add(taskItem);
            item.setUpdateTime(new Date());
            matnrService.updateById(item);
            i++;
        }
        taskItemService.saveBatch(taskItems);
    }
    public static List<String> getStaPrefixes(List<String> staGroupList) {
        Set<String> rowSet = new HashSet<>();