1
1 天以前 de3b9f5658c4a16e1d20764089db47c24e3f9c81
lsh#
1个文件已删除
12个文件已修改
286 ■■■■ 已修改文件
asrs-schedule/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/api/service/impl/AgvServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/api/service/impl/InBoundServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/api/service/impl/WcsServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/common/security/JwtAuthenticationFilter.java 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/common/security/JwtSubject.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/common/security/SecurityConfig.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/manager/service/impl/LocItemServiceImpl.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/manager/service/impl/OutStockServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/manager/service/impl/TaskServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/manager/utils/LocManageUtil.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/schedules/AutoRunSchedules.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/src/main/java/com/vincent/rsf/schedule/schedules/TaskSchedules.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
asrs-schedule/pom.xml
@@ -57,6 +57,12 @@
    <build>
        <finalName>asrs-schedule</finalName>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
asrs-schedule/src/main/java/com/vincent/rsf/schedule/api/service/impl/AgvServiceImpl.java
@@ -1,5 +1,6 @@
package com.vincent.rsf.schedule.api.service.impl;
import com.vincent.rsf.framework.common.SpringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.R;
@@ -280,7 +281,7 @@
        if (Cools.isEmpty(area)) {
            throw new CoolException("目标库区不能为空");
        }
        boolean isItAvailable = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(sta, area, waitPakinPda.getBarcode(), "in");
        boolean isItAvailable = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableInArea(sta, area, waitPakinPda.getBarcode(), "in");
//        DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
//                .eq(DeviceSite::getSite, sta)
//                .eq(DeviceSite::getAreaIdEnd, Long.parseLong(area))
asrs-schedule/src/main/java/com/vincent/rsf/schedule/api/service/impl/InBoundServiceImpl.java
@@ -1,5 +1,6 @@
package com.vincent.rsf.schedule.api.service.impl;
import com.vincent.rsf.framework.common.SpringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -215,7 +216,7 @@
//                throw new CoolException("未找到所属库区信息");
            }
            boolean isItAvailable = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(station.getStationName(),  warehouseArea.getId(), param.getContainerNo(), TaskType.TASK_TYPE_EMPTY_IN.type);
            boolean isItAvailable = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableInArea(station.getStationName(),  warehouseArea.getId(), param.getContainerNo(), TaskType.TASK_TYPE_EMPTY_IN.type);
//            DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
//                    .eq(DeviceSite::getSite, )
//                    .eq(DeviceSite::getAreaIdEnd,)
asrs-schedule/src/main/java/com/vincent/rsf/schedule/api/service/impl/WcsServiceImpl.java
@@ -1,5 +1,6 @@
package com.vincent.rsf.schedule.api.service.impl;
import com.vincent.rsf.framework.common.SpringUtils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -771,7 +772,7 @@
        if (loc != null) {
            //查找路径
            boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
            boolean available = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
//            DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
//                    .eq(DeviceSite::getType, ioType)
//                    .eq(DeviceSite::getSite, sourceStaNo)
@@ -913,7 +914,7 @@
        if (loc != null) {
            //查找路径
            boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
            boolean available = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
//            DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
//                    .eq(DeviceSite::getType, ioType)
//                    .eq(DeviceSite::getSite, sourceStaNo)
@@ -994,7 +995,7 @@
        //查找路径
        if (loc != null) {
            //查找路径
            boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
            boolean available = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableInArea(sourceStaNo, loc.getAreaId().toString() ,loc.getBarcode(),"in");
//            DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
//                    .eq(DeviceSite::getType, ioType)
//                    .eq(DeviceSite::getSite, sourceStaNo)
asrs-schedule/src/main/java/com/vincent/rsf/schedule/common/security/JwtAuthenticationFilter.java
File was deleted
asrs-schedule/src/main/java/com/vincent/rsf/schedule/common/security/JwtSubject.java
@@ -29,4 +29,3 @@
    private Long tenantId;
}
asrs-schedule/src/main/java/com/vincent/rsf/schedule/common/security/SecurityConfig.java
@@ -1,125 +1,28 @@
package com.vincent.rsf.schedule.common.security;
import com.vincent.rsf.schedule.common.constant.Constants;
import com.vincent.rsf.schedule.common.utils.CommonUtil;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.stereotype.Component;
import jakarta.servlet.ServletException;
import jakarta.servlet.DispatcherType;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.annotation.Resource;
import java.io.IOException;
/**
 * Spring Security配置
 *
 * Spring Security配置 - 定时任务模块,放行所有请求
 */
@Configuration
@EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = true)
public class SecurityConfig {
    public static final String[] FILTER_PATH = new String[] {
            "/demo/**",
            "/test/**",
            "/system/info",
            "/tenant/list",
            "/email/code",
            "/pda/login",
            "/erp/**",
            "/base/**",
            "/order/**",
            "/login",
            "/register",
            "/druid/**",
            "/doc.html",
            "/swagger-ui.html",
            "/swagger-resources/**",
            "/webjars/**",
            "/v2/api-docs/**",
            "/v3/api-docs/**",
            "/swagger-ui/**",
            "/ws/**",
            "/wcs/**",
            "/monitor/**",
            "/ai/mcp/**",
            "/mcp/**",
            "/mes/**"
    };
    @Resource
    private JwtAccessDeniedHandler jwtAccessDeniedHandler;
    @Resource
    private JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint;
    @Resource
    private JwtAuthenticationFilter jwtAuthenticationFilter;
    @Bean
    public SecurityFilterChain securityFilterChain(org.springframework.security.config.annotation.web.builders.HttpSecurity http)
            throws Exception {
        http.authorizeHttpRequests(authorize -> authorize
                        .dispatcherTypeMatchers(DispatcherType.ASYNC, DispatcherType.ERROR).permitAll()
                        .requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()
                        .requestMatchers(HttpMethod.GET, "/file/**", "/captcha", "/", "/config/public/project-logo", "/config/public/project-copyright").permitAll()
                        .requestMatchers(FILTER_PATH).permitAll()
                        .anyRequest().authenticated())
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(authorize -> authorize.anyRequest().permitAll())
                .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .csrf(csrf -> csrf.disable())
                .cors(cors -> {
                })
                .cors(cors -> {})
                .logout(logout -> logout.disable())
                .headers(headers -> headers.frameOptions(frameOptions -> frameOptions.disable()))
                .exceptionHandling(exceptionHandling -> exceptionHandling
                        .accessDeniedHandler(jwtAccessDeniedHandler)
                        .authenticationEntryPoint(jwtAuthenticationEntryPoint))
                .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
                .headers(headers -> headers.frameOptions(frameOptions -> frameOptions.disable()));
        return http.build();
    }
    // 没有访问权限异常处理
    @Component
    static class JwtAccessDeniedHandler implements AccessDeniedHandler {
        @Override
        public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException e)
                throws IOException, ServletException {
            if (response.isCommitted()) {
                return;
            }
            CommonUtil.responseError(response, Constants.UNAUTHORIZED_CODE, Constants.UNAUTHORIZED_MSG, e.getMessage());
        }
    }
    // 没有登录异常处理
    @Component
    static class JwtAuthenticationEntryPoint implements AuthenticationEntryPoint {
        @Override
        public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e)
                throws IOException, ServletException {
            if (response.isCommitted()) {
                return;
            }
            CommonUtil.responseError(response, Constants.UNAUTHENTICATED_CODE, Constants.UNAUTHENTICATED_MSG,
                    e.getMessage());
        }
    }
}
asrs-schedule/src/main/java/com/vincent/rsf/schedule/manager/service/impl/LocItemServiceImpl.java
@@ -1,5 +1,6 @@
package com.vincent.rsf.schedule.manager.service.impl;
import com.vincent.rsf.framework.common.SpringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.vincent.rsf.framework.common.Cools;
@@ -117,7 +118,7 @@
                .setMemo(map.getMemo());
        if (map.getType().equals(Constants.TASK_TYPE_OUT_STOCK_EMPTY)) {//空容器出库
            boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableOutArea(loc.getAreaId().toString(), siteNo, loc.getBarcode(),TaskType.TASK_TYPE_EMPTY_OUT.type.toString());
            boolean available = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableOutArea(loc.getAreaId().toString(), siteNo, loc.getBarcode(),TaskType.TASK_TYPE_EMPTY_OUT.type.toString());
            if (!available) {
                throw new CoolException("站点不支持空容器出库!!");
            }
@@ -221,7 +222,7 @@
                    || map.getType().equals(Constants.TASK_TYPE_WAVE_OUT_STOCK)) {
                if (orgQty.compareTo(outQty) > 0) {
                    //拣料出库 -- 盘点出库
                    boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableOutArea(loc.getAreaId().toString(), siteNo, loc.getBarcode(),TaskType.TASK_TYPE_PICK_AGAIN_OUT.type);
                    boolean available = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableOutArea(loc.getAreaId().toString(), siteNo, loc.getBarcode(),TaskType.TASK_TYPE_PICK_AGAIN_OUT.type);
                    if (!available) {
                        throw new CoolException("站点不支持此容器拣选出库!!");
                    }
@@ -230,7 +231,7 @@
                } else {
                    if (resouce.equals(TaskResouceType.TASK_RESOUCE_STOCK_NOT_OUT.val)){
                        //全板出库
                        boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableOutArea(loc.getAreaId().toString(), siteNo, loc.getBarcode(),TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type);
                        boolean available = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableOutArea(loc.getAreaId().toString(), siteNo, loc.getBarcode(),TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type);
                        if (!available) {
                            throw new CoolException("站点不支持越库!!");
                        }
@@ -238,7 +239,7 @@
                        task.setTaskType(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type).setWarehType(warehouseAreas.getType());//越库
                    } else {
                        //全板出库
                        boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableOutArea(loc.getAreaId().toString(), siteNo, loc.getBarcode(),TaskType.TASK_TYPE_OUT.type);
                        boolean available = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableOutArea(loc.getAreaId().toString(), siteNo, loc.getBarcode(),TaskType.TASK_TYPE_OUT.type);
                        if (!available) {
                            throw new CoolException("站点不支持全板出库!!");
                        }
@@ -249,7 +250,7 @@
                }
            } else if (map.getType().equals(Constants.TASK_TYPE_OUT_CHECK)) {
                //盘点出库
                boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableOutArea(loc.getAreaId().toString(), siteNo, loc.getBarcode(),TaskType.TASK_TYPE_CHECK_OUT.type);
                boolean available = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableOutArea(loc.getAreaId().toString(), siteNo, loc.getBarcode(),TaskType.TASK_TYPE_CHECK_OUT.type);
                if (!available) {
                    throw new CoolException("当前站点不支持盘点出库!!");
                }
@@ -440,7 +441,7 @@
        if (Objects.isNull(map.getTarLoc()) || StringUtils.isBlank(map.getTarLoc())) {
            //目标库位为空,自动获取新库位
            List<String> outWarehouseAreasByReservoirAreaAndContainer = new WarehouseLocationRetrievalUtil().getOutWarehouseAreasByReservoirAreaAndContainer(orgLoc.getAreaId(), orgLoc.getBarcode(), TaskType.TASK_TYPE_LOC_MOVE.type);
            List<String> outWarehouseAreasByReservoirAreaAndContainer = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).getOutWarehouseAreasByReservoirAreaAndContainer(orgLoc.getAreaId(), orgLoc.getBarcode(), TaskType.TASK_TYPE_LOC_MOVE.type);
            if (!Cools.isEmpty(outWarehouseAreasByReservoirAreaAndContainer) || outWarehouseAreasByReservoirAreaAndContainer.isEmpty()) {
                throw new CoolException("未找到可用目标库区!!!源库区:"+orgLoc.getAreaId());
            }
@@ -449,7 +450,7 @@
                List<LocItem> locItems = this.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocCode, orgLoc.getCode()));
                boolean sign = false;
                for (LocItem locItem : locItems) {
                    if (!new WarehouseLocationRetrievalUtil().retrieveMatnrIsItAvailable(areaId, locItem.getMatnrId())){
                    if (!SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).retrieveMatnrIsItAvailable(areaId, locItem.getMatnrId())){
                        sign = true;
                        break;
                    }
asrs-schedule/src/main/java/com/vincent/rsf/schedule/manager/service/impl/OutStockServiceImpl.java
@@ -1,5 +1,6 @@
package com.vincent.rsf.schedule.manager.service.impl;
import com.vincent.rsf.framework.common.SpringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -832,7 +833,7 @@
                        OrderOutItemDto orderOutItemDto = new OrderOutItemDto();
//                        orderOutItemDto.setLocItem(locItem);
                        orderOutItemDto.getLocItemList().add(locItem);
                        List<String> outboundSiteByReservoirAreaAndContainer = new WarehouseLocationRetrievalUtil().getOutboundSiteByReservoirAreaAndContainer(loc.getAreaId(), loc.getBarcode(),itemList.size() == 1 ? TaskType.TASK_TYPE_OUT.type.toString() : TaskType.TASK_TYPE_PICK_AGAIN_OUT.type.toString());
                        List<String> outboundSiteByReservoirAreaAndContainer = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).getOutboundSiteByReservoirAreaAndContainer(loc.getAreaId(), loc.getBarcode(),itemList.size() == 1 ? TaskType.TASK_TYPE_OUT.type.toString() : TaskType.TASK_TYPE_PICK_AGAIN_OUT.type.toString());
                        if (!outboundSiteByReservoirAreaAndContainer.isEmpty()) {
                            List<OrderOutItemDto.staListDto> maps = new ArrayList<>();
                            for (String staNo : outboundSiteByReservoirAreaAndContainer) {
@@ -917,7 +918,7 @@
                        locItem.setBarcode(loc.getBarcode());
                        OrderOutItemDto orderOutItemDto = new OrderOutItemDto();
                        orderOutItemDto.getLocItemList().add(locItem);
                        List<String> outboundSiteByReservoirAreaAndContainer = new WarehouseLocationRetrievalUtil().getOutboundSiteByReservoirAreaAndContainer(loc.getAreaId(), loc.getBarcode(),itemList.size() == 1 ? TaskType.TASK_TYPE_OUT.type : TaskType.TASK_TYPE_PICK_AGAIN_OUT.type);
                        List<String> outboundSiteByReservoirAreaAndContainer = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).getOutboundSiteByReservoirAreaAndContainer(loc.getAreaId(), loc.getBarcode(),itemList.size() == 1 ? TaskType.TASK_TYPE_OUT.type : TaskType.TASK_TYPE_PICK_AGAIN_OUT.type);
                        if (!outboundSiteByReservoirAreaAndContainer.isEmpty()) {
                            List<OrderOutItemDto.staListDto> maps = new ArrayList<>();
                            for (String staNo : outboundSiteByReservoirAreaAndContainer) {
asrs-schedule/src/main/java/com/vincent/rsf/schedule/manager/service/impl/TaskServiceImpl.java
@@ -1,5 +1,6 @@
package com.vincent.rsf.schedule.manager.service.impl;
import com.vincent.rsf.framework.common.SpringUtils;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -202,7 +203,7 @@
                throw new CoolException("任务明细保存失败!!");
            }
            waitPakinItems.forEach(item -> {
                boolean b = new WarehouseLocationRetrievalUtil().retrieveMatnrIsItAvailable(areaId, item.getMatnrId());
                boolean b = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).retrieveMatnrIsItAvailable(areaId, item.getMatnrId());
                if (!b){
                    throw new CoolException("入库失败!!物料Id:"+item.getMatnrId()+"不支持此目标库区:"+areaId);
                }
asrs-schedule/src/main/java/com/vincent/rsf/schedule/manager/utils/LocManageUtil.java
@@ -1,5 +1,6 @@
package com.vincent.rsf.schedule.manager.utils;
import com.vincent.rsf.schedule.manager.utils.WarehouseLocationRetrievalUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.common.Cools;
import com.vincent.rsf.framework.common.SpringUtils;
@@ -225,7 +226,7 @@
//                        orderOutItemDto.setLocItem(locItem);
                        orderOutItemDto.setLoc(loc);
                        orderOutItemDto.getLocItemList().add(locItem);
                        BasContainer containerType = new WarehouseLocationRetrievalUtil().getContainerByBarcode(loc.getBarcode());
                        BasContainer containerType = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).getContainerByBarcode(loc.getBarcode());
                        if (Cools.isEmpty(containerType)){
                            continue;
                        }
@@ -317,7 +318,7 @@
                            if (Objects.isNull(basStation)) {
                                throw new CoolException("绑定站點不存在!!");
                            }
                            boolean available = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableOutArea(loc.getAreaId().toString(), stationId, loc.getBarcode(),"out");
                            boolean available = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableOutArea(loc.getAreaId().toString(), stationId, loc.getBarcode(),"out");
                            if (!available) {
                                throw new CoolException("未找到符合条件路径!!!请检查路径配置!!!");
                            }
asrs-schedule/src/main/java/com/vincent/rsf/schedule/schedules/AutoRunSchedules.java
@@ -1,5 +1,6 @@
package com.vincent.rsf.schedule.manager.schedules;
import com.vincent.rsf.framework.common.SpringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.vincent.rsf.framework.common.Cools;
@@ -229,7 +230,7 @@
                    throw new CoolException("无可用站点!!");
                }
                for (String stationName : stationNames) {
                    boolean isItAvailable = new WarehouseLocationRetrievalUtil().queryPathIsItAvailableOutArea(loc.getAreaId(), stationName, loc.getBarcode(), TaskType.TASK_TYPE_CHECK_OUT.type);
                    boolean isItAvailable = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).queryPathIsItAvailableOutArea(loc.getAreaId(), stationName, loc.getBarcode(), TaskType.TASK_TYPE_CHECK_OUT.type);
                    if (!isItAvailable) {
                        continue;
                    }
asrs-schedule/src/main/java/com/vincent/rsf/schedule/schedules/TaskSchedules.java
@@ -180,11 +180,11 @@
                    MissionTaskIssueParam missionTaskIssueParam = new MissionTaskIssueParam(flowStepInstance,subsystemFlowTemplate,flowStepTemplate);
                    missionTaskIssueParam.setType(RcsTaskType.getTypeDesc(task.getTaskType()));
                    boolean souSign = new WarehouseLocationRetrievalUtil().retrieveMissionmMergeReservoirAreaIsItAvailable(taskInstance.getSourceCode());
                    boolean souSign = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).retrieveMissionmMergeReservoirAreaIsItAvailable(taskInstance.getSourceCode());
                    if (souSign){
                        missionTaskIssueParam.setSourceCode(taskInstance.getSourceCode());
                    } else {
                        BasStation basStation = new WarehouseLocationRetrievalUtil().retrieveMissionmMergeSizeIsItAvailable(taskInstance.getSourceCode());
                        BasStation basStation = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).retrieveMissionmMergeSizeIsItAvailable(taskInstance.getSourceCode());
                        if (Cools.isEmpty(basStation)){
                            flowStepInstance.setRetryTimes(flowStepInstance.getRetryTimes() + 1);
                            if (flowStepInstance.getRetryTimes()>5){
@@ -200,11 +200,11 @@
                            missionTaskIssueParam.setSourceCode(basStation.getStationName());
                        }
                    }
                    boolean endSign = new WarehouseLocationRetrievalUtil().retrieveMissionmMergeReservoirAreaIsItAvailable(taskInstance.getTargetCode());
                    boolean endSign = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).retrieveMissionmMergeReservoirAreaIsItAvailable(taskInstance.getTargetCode());
                    if (endSign){
                        missionTaskIssueParam.setTargetCode(taskInstance.getTargetCode());
                    } else {
                        BasStation basStation = new WarehouseLocationRetrievalUtil().retrieveMissionmMergeSizeIsItAvailable(taskInstance.getTargetCode());
                        BasStation basStation = SpringUtils.getBean(WarehouseLocationRetrievalUtil.class).retrieveMissionmMergeSizeIsItAvailable(taskInstance.getTargetCode());
                        if (Cools.isEmpty(basStation)){
                            flowStepInstance.setRetryTimes(flowStepInstance.getRetryTimes() + 1);
                            if (flowStepInstance.getRetryTimes()>5){