自动化立体仓库 - WMS系统
1
zhang
2025-09-16 323d014b95241cd42dfa01227dd4a15575f58a2b
1
5个文件已修改
76 ■■■■ 已修改文件
src/main/java/com/zy/asrs/task/AgvWarnScheduler.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoMoveScheduler.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OverYearLogScheduler.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/ScheduleConfig.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AgvWarnScheduler.java
@@ -55,7 +55,7 @@
     *  删除告警日志
     */
    @Scheduled(cron = "0 0 1 * * ? ")
    private void delWarnLog() {
    public void delWarnLog() {
        String format = DateUtil.format(DateUtil.offsetMonth(new Date(), -1), "yyyy-MM-dd HH:mm:ss");
        List<AgvWarnLog> agvWarnList = agvWarnLogService.selectList(new EntityWrapper<AgvWarnLog>().le("modi_time", format));
        for (AgvWarnLog agvWarn : agvWarnList) {
@@ -67,7 +67,7 @@
     * 超过一分钟没更新的,删除
     */
    @Scheduled(fixedDelay = 10000)
    private void del() {
    public void del() {
        String format = DateUtil.format(DateUtil.offsetMinute(new Date(), -1), "yyyy-MM-dd HH:mm:ss");
        List<AgvWarn> agvWarnList = agvWarnService.selectList(new EntityWrapper<AgvWarn>().le("modi_time", format));
        for (AgvWarn agvWarn : agvWarnList) {
@@ -76,7 +76,7 @@
    }
    @Scheduled(fixedDelay = 20000)
    private void report() {
    public void report() {
        List<Agv> agvs = agvBasMapper.selectList(new EntityWrapper<Agv>());
        Config first = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE1"));
        Config second = configService.selectOne(new EntityWrapper<Config>().eq("code", "AGV_WARN_RATE2"));
src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
@@ -46,10 +46,10 @@
    定时处理AGV工作档中工作状态为205.工作完成 且 (1.入库 || 53,拣料入库 || 57.盘点入库 || 10.空板入库 || 11.单层移库 || 12.跨层移库 || 108.自动调拨 || 109.手动调拨)的数据
     */
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 1000)
    @Scheduled(fixedDelay = 3000)
    public void excutePutwayWrk(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
                .eq("wrk_sts", 205)
                .eq("wrk_sts", 205L)
                .andNew().eq("io_type",53)
                .or().eq("io_type",1)
                .or().eq("io_type",57)
@@ -80,10 +80,10 @@
    定时处理AGV工作档中工作状态为206.出库完成 且 (101.出库 || 110.空板出库)
     */
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 1000)
    @Scheduled(fixedDelay = 3000)
    public void excuteCarryWrk(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
                .eq("wrk_sts", 206)
                .eq("wrk_sts", 206L)
                .andNew().eq("io_type",110)
                .or().eq("io_type",101));
        if(!Cools.isEmpty(agvWrkMastList)){
@@ -103,10 +103,10 @@
    定时处理AGV工作档中工作状态为206.出库完成 且 (101.出库 || 110.空板出库)
     */
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 1000)
    @Scheduled(fixedDelay = 3000)
    public void excuteCarryWrk2(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
                .eq("wrk_sts", 208)
                .eq("wrk_sts", 208L)
                .andNew().eq("io_type",110)
                .or().eq("io_type",101));
        if(!Cools.isEmpty(agvWrkMastList)){
@@ -126,11 +126,11 @@
    定时处理AGV工作档中工作状态为201.生成入库任务ID 且(出库类型为 53.拣料再入库 || 1.入库 || 10.空板入库栽 || 57.盘点再入库)的数据
     */
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 3000)
    @Scheduled(fixedDelay = 5000)
    public synchronized void startPutwayWrk(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50)
                ,new EntityWrapper<AgvWrkMast>()
                .eq("wrk_sts", 201)
                .eq("wrk_sts", 201L)
                .andNew().eq("io_type", 53)
                .or().eq("io_type", 1)
                .or().eq("io_type", 10)
@@ -161,11 +161,11 @@
    定时处理AGV工作档中工作状态为201.生成入库任务ID 且(出库类型为 53.拣料再入库 || 1.入库 || 10.空板入库栽 || 57.盘点再入库)的数据
     */
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 1000)
    @Scheduled(fixedDelay = 4000)
    public void startAllcationIn(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50)
                ,new EntityWrapper<AgvWrkMast>()
                        .eq("wrk_sts", 211)
                        .eq("wrk_sts", 211L)
                        .andNew().eq("io_type", 112)).getRecords();
        if(!Cools.isEmpty(agvWrkMastList)){
@@ -184,11 +184,11 @@
    定时处理AGV工作档中工作状态为21.生成出库任务 且(出库类型为 101.出库 || 103.拣料出库 || 11.库格移栽 || 110.空板出库 || 107.盘点出库)的数据
     */
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 2000)
    @Scheduled(fixedDelay = 4000)
    public void startCarryWrk(){
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50)
                ,new EntityWrapper<AgvWrkMast>()
                        .eq("wrk_sts", 21)
                        .eq("wrk_sts", 21L)
                        //.like("loc_no","@")
                        .andNew().eq("io_type", 101)
                        .or().eq("io_type", 103)
@@ -252,7 +252,7 @@
    自动生成空板出库任务
     */
    //@Scheduled(cron = "0/1 * * * * ? ")
    @Scheduled(fixedDelay = 1000)
    @Scheduled(fixedDelay = 3000)
    public void autoEmptyOut(){
        boolean packageEmptyAutoOUt = Cools.eq("Y",Parameter.get().getPackageEmptyAutoOUt());
        boolean mateEmptyAutoOut = Cools.eq("Y",Parameter.get().getMateEmptyAutoOut());
src/main/java/com/zy/asrs/task/AutoMoveScheduler.java
@@ -68,7 +68,7 @@
     * crnNo :2目标楼层
     */
    @Scheduled(cron = "0/10 * * * * ? ")
    private synchronized void execute2() {
    public synchronized void execute2() {
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 22).andNew().eq("io_type", 108).andNew().eq("crn_no", 2).or().eq("crn_no", 3).orderBy("io_pri", false).orderBy("appe_time", true));
        if (agvWrkMastList.isEmpty()) {
            return;
@@ -112,7 +112,7 @@
     * ioType 111.手动调拨
     */
    @Scheduled(cron = "0/10 * * * * ? ")
    private void execute3() {
    public void execute3() {
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 22).andNew().eq("io_type", 111).orderBy("io_pri", false).orderBy("appe_time", true));
        if (agvWrkMastList.isEmpty()) {
            return;
@@ -127,8 +127,8 @@
    }
    @Scheduled(cron = "0/2 * * * * ? ")
    private void execute4() {
    //@Scheduled(cron = "0/2 * * * * ? ")
    public void execute4() {
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 22).andNew().eq("io_type", 114).orderBy("io_pri", false).orderBy("appe_time", true));
        if (agvWrkMastList.isEmpty()) {
            return;
@@ -145,7 +145,7 @@
//    // 空板自动回库  库位-接驳点
//    //@Scheduled(cron = "0/2 * * * * ? ")
//    private void autoEmptyBack(){
//    public void autoEmptyBack(){
//        // 查询 不为1楼的空货架
//        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(
//                new EntityWrapper<AgvLocMast>()
@@ -170,8 +170,8 @@
     * wrkSts 214.空料架回流待分配
     * ioType 113.空托盘手动回流
     */
    @Scheduled(cron = "0/2 * * * * ? ")
    private void autoEmptyBack3() {
    @Scheduled(cron = "0/4 * * * * ? ")
    public void autoEmptyBack3() {
        // 工作档为201 且 入出库类型为109
        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 214).eq("loc_no", "").eq("io_type", 113).orderBy("io_pri", false));
        if (agvWrkMastList.isEmpty()) {
@@ -215,7 +215,7 @@
     * 2楼或3楼站点可入信号全部没有,代表走电梯自动搬运模式
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    private void autoEmptyBack4() {
    public void autoEmptyBack4() {
        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(new EntityWrapper<AgvLocMast>()
                // TODO 四期
                .eq("loc_sts", "D").eq("loc_type1", 3).andNew().ne("floor", 1).or().ne("lev1", 1));
@@ -266,7 +266,7 @@
     */
    // TODO 四期
    @Scheduled(cron = "0/10 * * * * ? ")
    private void autoEmptyBackSiqi() {
    public void autoEmptyBackSiqi() {
        Config config2 = configService.selectOne(new EntityWrapper<Config>().eq("code", "RETURN_6_EMPTY"));
        //先判断空库位数了
        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(new EntityWrapper<AgvLocMast>().eq("loc_type1", 6).eq("floor", 1).eq("lev1", 2).eq("loc_sts", "O"));
@@ -307,7 +307,7 @@
    }
    private void executeLocType6() {
    public void executeLocType6() {
        // 查询 二厂的的半成品箱壳类型的空货架
        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(new EntityWrapper<AgvLocMast>().eq("loc_sts", "D").eq("loc_type1", 6).in("floor", 2,3).orderBy("bay1",false));
        if (agvLocMasts.isEmpty()) {
@@ -322,7 +322,7 @@
        }
    }
    private boolean determineFloorConnection(Integer floor) {
    public boolean determineFloorConnection(Integer floor) {
        try {
            List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().eq("floor", floor).like("dev_no", "DB_"));
            if (!agvBasDevps.isEmpty()) {
@@ -345,8 +345,8 @@
     * 手动: 生成 113 手动回流
     * 优先选择先到接驳位(接驳位可入) 后选择直接回库
     */
    @Scheduled(cron = "0/2 * * * * ? ")
    private void autoEmptyBack5() {
    @Scheduled(cron = "0/8 * * * * ? ")
    public void autoEmptyBack5() {
        List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().ne("floor", 1).eq("loc_sts", "F").like("dev_no", "DB"));
        if (agvBasDevps.isEmpty()) {
            return;
@@ -365,7 +365,7 @@
     * 手动: 生成 113 手动回流
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    private void autoEmptyBack6() {
    public void autoEmptyBack6() {
        List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().eq("floor", 1).eq("loc_sts", "F").like("dev_no", "DB"));
        if (agvBasDevps.isEmpty()) {
            return;
@@ -382,8 +382,8 @@
    /**
     * 跨层自动移库
     */
    @Scheduled(cron = "0/2 * * * * ? ")
    private void autoEmptyBack7() throws ParseException {
    @Scheduled(cron = "0/8 * * * * ? ")
    public void autoEmptyBack7() throws ParseException {
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String currentDay = sdf.format(now);
@@ -431,7 +431,7 @@
     * 在库位不够的情况下,箱壳入库别的楼层库位的时候,晚上进行跨层移库
     */
    @Scheduled(cron = "0/30 * * * * ? ")
    private void autoEmptyBack8() throws ParseException {
    public void autoEmptyBack8() throws ParseException {
        Date now = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        String currentDay = sdf.format(now);
src/main/java/com/zy/asrs/task/OverYearLogScheduler.java
@@ -19,15 +19,15 @@
    @Autowired
    private OverYearLogHandler overYearLogHandler;
    @Scheduled(cron = "0/1 * * * * ? ")
    private void execute(){
    @Scheduled(cron = "0/3 * * * * ? ")
    public void execute(){
        ReturnT<String> returnT = overYearLogHandler.start();
        if (!returnT.isSuccess()) {
            log.error(returnT.getMsg());
        }
    }
    @Scheduled(cron = "* * 1 * * ? ")
    private void executeOrderLog() {
    public void executeOrderLog() {
        ReturnT<String> returnT = overYearLogHandler.start2();
        if (!returnT.isSuccess()) {
            log.error(returnT.getMsg());
src/main/java/com/zy/common/config/ScheduleConfig.java
@@ -15,9 +15,9 @@
        //采用定长的线程池,防止定时任务异常时导致大量线程被占用;
        // 创建一个 ScheduledThreadPoolExecutor,核心线程数为 12,最大线程数为 24
        ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(12, new ThreadPoolExecutor.DiscardPolicy());
        ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(3, new ThreadPoolExecutor.DiscardPolicy());
        // 设置最大线程数为 50
        executor.setMaximumPoolSize(24);
        executor.setMaximumPoolSize(6);
        taskRegistrar.setScheduler(executor);
    }
}