自动化立体仓库 - WMS系统
zhangc
2025-01-08 21357f1d42f995e11e99a12a5f225fe6442b9ad1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package com.zy.asrs.task;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.R;
import com.zy.asrs.entity.AgvBasDevp;
import com.zy.asrs.entity.WrkMastExecute;
import com.zy.asrs.service.AgvBasDevpService;
import com.zy.asrs.service.WrkMastExecuteService;
import com.zy.asrs.task.handler.AutoMoveTwoAndThreeGoOneHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import java.util.Date;
import java.util.List;
 
// 自动移库
@Slf4j
@Component
public class AutoMoveTwoAndThreeGoOneScheduler {
 
    @Autowired
    private WrkMastExecuteService wrkMastExecuteService;
    @Autowired
    private AutoMoveTwoAndThreeGoOneHandler autoMoveTwoAndThreeGoOneHandler;
    @Autowired
    private AgvBasDevpService agvBasDevpService;
 
    /**
     * 执行agv_wrk_mast_execute任务
     */
//    @Scheduled(cron = "0/2 * * * * ? ")
    private void autoMove(){
        List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectList(new EntityWrapper<WrkMastExecute>().eq("io_type", 121).eq("wrk_sts",0L));
        for (WrkMastExecute wrkMastExecute:wrkMastExecuteList){
            try{
                if (true){
                    autoMoveTwoAndThreeGoOneHandler.start(wrkMastExecute);
                }
            }catch (Exception e){
                log.error("执行agv_wrk_mast_execute任务异常===》异常原因:"+e.getMessage());
            }
        }
    }
 
    /**
     * 下一步agv_wrk_mast_execute任务
     */
//    @Scheduled(cron = "0/2 * * * * ? ")
    private void autoMove2(){
        List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectList(new EntityWrapper<WrkMastExecute>().eq("io_type", 121).eq("wrk_sts",3L));
        for (WrkMastExecute wrkMastExecute:wrkMastExecuteList){
            Date now = new Date();
            try{
                if (wrkMastExecute.getStatus()==2 && wrkMastExecute.getNowPosition()==1){
                    AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("dev_no", wrkMastExecute.getRoute()[1]));
                    if (Cools.isEmpty(agvBasDevp) || !agvBasDevp.getLocSts().equals("F")){
                        continue;
                    }
                    //判断电梯忙不忙
                    int count = wrkMastExecuteService.selectCount(new EntityWrapper<WrkMastExecute>().eq("io_type", 121).eq("status", 2));
                    if(count<3){
                        wrkMastExecute.setStatus(3);
                        wrkMastExecute.setWrkSts(0L);
                        wrkMastExecute.setModiTime(now);
                        wrkMastExecute.setEndPosition(4);
                        wrkMastExecuteService.updateById(wrkMastExecute);
                        updateAgvBasDevp(agvBasDevp,"R",agvBasDevp.getLocType2(),agvBasDevp.getBarcode());
                    }
                }
            }catch (Exception e){
                log.error("执行agv_wrk_mast_execute任务异常===》异常原因:"+e.getMessage());
            }
        }
    }
 
    /**
     * 下一步agv_wrk_mast_execute任务
     */
//    @Scheduled(cron = "0/2 * * * * ? ")
    private void autoMove3(){
        List<WrkMastExecute> wrkMastExecuteList = wrkMastExecuteService.selectList(new EntityWrapper<WrkMastExecute>().eq("io_type", 121).eq("wrk_sts",2L));
        for (WrkMastExecute wrkMastExecute:wrkMastExecuteList){
            Date now = new Date();
            try{
                if (wrkMastExecute.getStatus()==2){
                    AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("dev_no", wrkMastExecute.getRoute()[wrkMastExecute.getEndPosition()]));
                    if (Cools.isEmpty(agvBasDevp) || !agvBasDevp.getLocSts().equals("S")){
                        log.error("站点状态locsts参数有误:locSts:"+agvBasDevp.getLocSts$());
                    }else {
                        wrkMastExecute.setWrkSts(wrkMastExecute.getWrkStsCode());
                        wrkMastExecute.setModiTime(now);
                        wrkMastExecute.setNowPosition(wrkMastExecute.getEndPosition());
                        wrkMastExecuteService.updateById(wrkMastExecute);
                        updateAgvBasDevp(agvBasDevp,"F",agvBasDevp.getLocType2(),agvBasDevp.getBarcode());
                    }
                }else if (wrkMastExecute.getStatus()==3 || wrkMastExecute.getStatus()==4){
                    AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>().eq("dev_no", wrkMastExecute.getRoute()[wrkMastExecute.getNowPosition()]));
                    if (Cools.isEmpty(agvBasDevp) || !agvBasDevp.getLocSts().equals("R")){
                        log.error("站点状态locsts参数有误:locSts:"+agvBasDevp.getLocSts$());
                    }else {
                        wrkMastExecute.setWrkSts(wrkMastExecute.getWrkStsCode());
                        wrkMastExecute.setModiTime(now);
                        wrkMastExecute.setNowPosition(wrkMastExecute.getEndPosition());
                        wrkMastExecuteService.updateById(wrkMastExecute);
                        agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvBasDevp.getDevNo(),"O","",(short)0);
                    }
                }else if (wrkMastExecute.getStatus()==1){
                    wrkMastExecute.setWrkSts(wrkMastExecute.getWrkStsCode());
                    wrkMastExecute.setModiTime(now);
                    wrkMastExecute.setNowPosition(wrkMastExecute.getEndPosition());
                    wrkMastExecuteService.updateById(wrkMastExecute);
                }
            }catch (Exception e){
                log.error("执行agv_wrk_mast_execute任务异常===》异常原因:"+e.getMessage());
            }
        }
    }
 
 
 
    private void updateAgvBasDevp(AgvBasDevp agvBasDevp, String locSts, Short continerType, String containerCode){
        if(!Cools.isEmpty(agvBasDevp)){
            agvBasDevp.setLocSts(locSts);
            agvBasDevp.setLocType2(continerType);
            agvBasDevp.setBarcode(containerCode);
            agvBasDevpService.updateById(agvBasDevp);
        }
    }
}