自动化立体仓库 - WMS系统
pang.jiabao
昨天 4725ab4c1f4d0560097ae3469a42de23eb459056
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
package com.zy.asrs.task;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.BasCrnp;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.Order;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.*;
import com.zy.asrs.task.handler.AutoLocMoveHandler;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.properties.SlaveWmsParameterProperties;
import com.zy.common.service.CommonService;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.util.Date;
 
@Slf4j
@Component
public class AutoLocMoveScheduler {
 
 
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WorkService workService;
    @Autowired
    private AutoLocMoveHandler autoLocMoveHandler;
    @Autowired
    private BasCrnpService basCrnpService;
    @Autowired
    private ConfigService configService;
    @Autowired
    private SlaveWmsParameterProperties slaveWmsParameterProperties;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private AutoMoveService autoMoveService;
    
    @Resource
    private CommonService commonService;
 
    @Resource
    private LocMastService locMastService;
 
    // 立体库跑库程序,生产勿用 ,一个巷道放一个托盘
//    @Scheduled(cron = "0/5 * * * * ? ")
    public synchronized void autoMoveLoc() {
        for(int i = 1; i <= 2; i++ ){
            // 源库位
            LocMast sourceLocMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "D").eq("crn_no", i));
            if(sourceLocMast != null) {
                // 获取一个移动的目标库位
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("crn_no", i).eq("loc_type3", "0")
                        .eq("loc_sts","O").orderBy("lev1").orderBy("bay1").orderBy("row1"));
 
                if (locMast != null) {
                    if (!locMast.getLocSts().equals("O") || (!sourceLocMast.getLocSts().equals("F") && !sourceLocMast.getLocSts().equals("D"))){
                        log.error("{}库位状态已改变",sourceLocMast.getLocNo());
                        continue;
                    }
                    String sourceLoc = sourceLocMast.getLocNo(); // 源库位
                    String locNo = locMast.getLocNo(); // 目标库位
 
                    // 创建移库任务
                    Date now = new Date();
                    // 获取工作号
                    int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
                    // 保存工作档
                    WrkMast wrkMast = new WrkMast();
                    wrkMast.setWrkNo(workNo);
                    wrkMast.setIoTime(now);
                    wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
                    wrkMast.setIoType(11); // 入出库状态: 11.库格移载
                    wrkMast.setIoPri(10D);
                    wrkMast.setCrnNo(locMast.getCrnNo());
                    wrkMast.setSourceLocNo(sourceLoc); // 源库位
                    wrkMast.setLocNo(locNo); // 目标库位
                    wrkMast.setFullPlt("N"); // 满板:Y
                    wrkMast.setPicking("N"); // 拣料
                    wrkMast.setExitMk("N"); // 退出
                    wrkMast.setEmptyMk("Y"); // 空板
                    wrkMast.setBarcode(locMast.getBarcode()); // 托盘码
                    wrkMast.setLinkMis("N");
                    wrkMast.setAppeTime(now);
                    wrkMast.setModiTime(now);
                    wrkMastService.insert(wrkMast);
 
                    // 修改源库位状态
                    if (sourceLocMast.getLocSts().equals("D") || sourceLocMast.getLocSts().equals("F")) {
                        sourceLocMast.setLocSts("R"); // R.出库预约
                        sourceLocMast.setModiTime(now);
                        sourceLocMast.setLocType3((short)1);
                        if (!locMastService.updateById(sourceLocMast)){
                            throw new CoolException("更新源库位状态失败");
                        }
                    } else {
                        throw new CoolException("源库位出库失败,状态:"+sourceLocMast.getLocSts$());
                    }
                    // 修改目标库位状态
                    if (locMast.getLocSts().equals("O")) {
                        locMast.setLocSts("S"); // S.入库预约
                        locMast.setModiTime(now);
                        if (!locMastService.updateById(locMast)) {
                            throw new CoolException("更新目标库位状态失败");
                        }
                    } else {
                        throw new CoolException("移转失败,目标库位状态:"+locMast.getLocSts$());
                    }
                    log.info("移库任务下发成功,源库位:{},目标库位:{}",sourceLoc,locNo);
                }
            }
        }
    }
 
    //定时出库   经典双伸
//    @Scheduled(cron = "0/3 * * * * ? ")
    public void locToLocAutoLocMove(){
        if (slaveWmsParameterProperties.isAutoLocMoveBoolean()){
            Config config = configService.selectConfigByCode("AutoLocMove");
            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
                return;
            }
            Order order = orderService.selectOrderMoveStatus();
            if (!Cools.isEmpty(order)){
//                autoMoveService.selectList()
            }else {
                order = orderService.selectOrderMoveStatusInitial();
                if (Cools.isEmpty(order)){
                    return;
                }
                order.setMoveStatus(2);
                orderService.updateById(order);
            }
        }
    }
 
    //定时出库
//    @Scheduled(cron = "0/3 * * * * ? ")
    public void locToLoc11(){
        if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){
            Config config = configService.selectConfigByCode("AutoLocMoveUnilateral");
            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
                return;
            }
            int crnCount = basCrnpService.selectCount(new EntityWrapper<>());
            for (int crnNo = 1;crnNo < crnCount;crnNo++){
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo));
                WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo));
                if (Cools.isEmpty(wrkMast) && Cools.isEmpty(wrkMast1)){
                    autoLocMoveHandler.start(crnNo,11);
                }
            }
        }
    }
 
    //定时入库
//    @Scheduled(cron = "0/3 * * * * ? ")
    public void locToLoc111() {
        if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){
            Config config = configService.selectConfigByCode("AutoLocMoveUnilateral");
            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
                return;
            }
            int crnCount = basCrnpService.selectCount(new EntityWrapper<>());
            for (int crnNo = 1;crnNo < crnCount;crnNo++){
                BasCrnp basCrnp = basCrnpService.selectById(crnNo);
                if (basCrnp == null) {
                    continue;
                }
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo));
                WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo));
                if (Cools.isEmpty(wrkMast)  && Cools.isEmpty(wrkMast1)){
                    autoLocMoveHandler.start(crnNo,111);
                }
            }
        }
    }
}