自动化立体仓库 - WMS系统
zyx
2023-10-11 3614fc3249b3de228000234d384e07b97c0079ec
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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
package com.zy.asrs.task.handler;
 
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.AgvLocDetl;
import com.zy.asrs.entity.AgvWaitPakin;
import com.zy.asrs.entity.AgvWrkDetl;
import com.zy.asrs.entity.AgvWrkMast;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.io.IOException;
import java.util.List;
import java.util.Map;
 
@Slf4j
@Service
public class AgvWrkMastHandler extends AbstractHandler<String> {
 
    @Autowired
    AgvWrkMastService agvWrkMastService;
    @Autowired
    AgvLocMastService agvLocMastService;
    @Autowired
    AgvLocDetlService agvLocDetlService;
    @Autowired
    AgvWrkMastLogService agvWrkMastLogService;
    @Autowired
    AgvWrkDetlService agvWrkDetlService;
    @Autowired
    AgvWrkDetlLogService agvWrkDetlLogService;
    @Autowired
    AgvWaitPakinService agvWaitPakinService;
    @Autowired
    AgvWaitPakinLogService agvWaitPakinLogService;
    @Autowired
    OrderService orderService;
 
    @Transactional
    public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) {
        int wrkNo = agvWrkMast.getWrkNo();
        String barcode = agvWrkMast.getBarcode();
        String orderNo = getOrderNoByWrkNo(wrkNo);
 
        //修改工作档状态为207.库存更新完成
        agvWrkMast.setWrkSts(207L);
        agvWrkMastService.updateById(agvWrkMast);
        if(agvWrkMast.getIoType() == 10){
            // 空板入库 设置库位状态为D.空桶/空栈板
            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D");
        }else{
            //修改目标库位状态为F.在库
            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F");
        }
        //生成AGV工作历史档
        agvWrkMastLogService.save(agvWrkMast);
        //生成AGV工作明细历史档
        agvWrkDetlLogService.save(wrkNo);
        //类型为入库时
        if(agvWrkMast.getIoType() == 1){
            //更新目标库位明细
            log.info("更新目标库位明细 agvWrkMast.getLocNo(): " + agvWrkMast.getLocNo() + ", wrkNo: " + wrkNo);
            agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo);
            //生成入库通知历史档
            boolean save = agvWaitPakinLogService.save(barcode);
            //删除入库通知档
            log.info("删除入库通知档 supp_code: " + barcode);
            agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("supp_code",barcode));
        }
        //类型为库位移转时
        if(agvWrkMast.getIoType() == 11){
            //更新库存明细
            agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo());
            //修改源库位状态为O
            agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O");
        }
 
        //删除AGV工作档
        agvWrkMastService.deleteById(wrkNo);
        //删除AGV工作明细档
        agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
 
        if(!isJSON(orderNo)){
            //检查订单是否已完成
            orderService.checkComplete(orderNo);
        }else{
            List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
            maps.forEach(map -> {
                String o = map.get("orderNo").toString();
                orderService.checkComplete(o);
            });
        }
 
        return SUCCESS;
    }
 
 
    @Transactional
    public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) {
        int wrkNo = agvWrkMast.getWrkNo();
        String orderNo = getOrderNoByWrkNo(wrkNo);
        //修改工作档状态为207.库存更新完成
        agvWrkMast.setWrkSts(207L);
        agvWrkMastService.updateById(agvWrkMast);
        //修改源库位状态为O
        agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O");
        if(agvWrkMast.getIoType() == 101){
            //更新目标库位明细 101.出库 删除源库位库存明细
            agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo()));
        }
 
        //生成AGV工作历史档
        agvWrkMastLogService.save(agvWrkMast);
        //生成AGV工作明细历史档
        agvWrkDetlLogService.save(wrkNo);
        //删除AGV工作档
        agvWrkMastService.deleteById(wrkNo);
        //删除AGV工作明细档
        agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo));
        if(!isJSON(orderNo)){
            //检查订单是否已完成
            orderService.checkComplete(orderNo);
        }else{
            List<Map> maps = JSONArray.parseArray(orderNo, Map.class);
            maps.forEach(map -> {
                String o = map.get("orderNo").toString();
                orderService.checkComplete(o);
            });
        }
        return SUCCESS;
    }
 
    @Transactional
    public ReturnT<String> startPutWayWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
 
        int startWwrkCode = agvWrkMastService.startWrk(agvWrkMastList,"putaway");
 
        int code = agvWrkMastService.containerMove(agvWrkMastList);
 
        if(code == 0){
            agvWrkMastList.forEach(agvWrkMast -> {
                //202.RCS取货中
                agvWrkMast.setWrkSts(202L);
                agvWrkMastService.updateById(agvWrkMast);
                if(agvWrkMast.getIoType() == 1){
                    //修改AGV入库通知档状态入出状态为Y
                    agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y");
                }
 
            });
            //agvWrkMastService.updateBatchById(agvWrkMastList);
 
            return SUCCESS;
        }
 
        return FAIL;
    }
 
    @Transactional
    public ReturnT<String> startCarryWrk(List<AgvWrkMast> agvWrkMastList) throws IOException {
        int code = agvWrkMastService.startWrk(agvWrkMastList,"carry");
        if(code == 0){
            agvWrkMastList.forEach(agvWrkMast -> {
                //202.RCS取货中
                agvWrkMast.setWrkSts(202L);
                agvWrkMastService.updateById(agvWrkMast);
            });
            //agvWrkMastService.updateBatchById(agvWrkMastList);
 
            return SUCCESS;
        }
 
        return FAIL;
    }
 
    private String getOrderNoByWrkNo(int wrkNo){
        AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkNo));
        if(Cools.isEmpty(agvWrkDetl)){
            return null;
        }
        return agvWrkDetl.getOrderNo();
    }
 
    private boolean isJSON(String str) {
        if (Cools.isEmpty(str)) {
            return false;
        } else {
            str = str.trim();
            if (str.startsWith("{") && str.endsWith("}")) {
                return true;
            } else if (str.startsWith("[") && str.endsWith("]")) {
                return true;
            } else {
                return false;
            }
        }
    }
}