自动化立体仓库 - WMS系统
pang.jiabao
昨天 203e2664c13883f8bb64f638cb1794c0b4480ec2
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
package com.zy.asrs.task.handler;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
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.StaDesc;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.BasCrnpService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.StaDescService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
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.util.ArrayList;
import java.util.Date;
import java.util.List;
 
/**
 * Created by Monkey D. Luffy on 2023.10.25
 * 广德宜科..............以下.............广德宜科.............自动补空板再优化
 */
@Slf4j
@Service
@Transactional
public class BareBoardHandler extends AbstractHandler<String> {
 
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private CommonService commonService;
    @Autowired
    private StaDescService staDescService;
    @Autowired
    private BasCrnpService basCrnpService;
 
    public ReturnT<String> start(Integer ioType,Integer staNo,String locStsTarget) {
        try {
            if (wrkMastService.selectWrkMastBareBoardStaNo(ioType,staNo)!=0){
                return null;
            }
            // 获取工作号
            int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
            ArrayList<Integer> crns =new ArrayList<>();
            List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>().eq("crn_sts", 3).eq("out_enable", "Y").eq("wrk_no", 0));
            for (BasCrnp basCrnp : basCrnps){
                crns.add(basCrnp.getCrnNo());
            }
            for (BasCrnp basCrnp : basCrnpService.selectList(new EntityWrapper<>())){
                crns.add(basCrnp.getCrnNo());
            }
            if (Cools.isEmpty(crns) || crns.size()==0){
                return null;
            }
 
            boolean sign = true;
            for (Integer crnNo : crns){
                sign = true;
 
                LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts",locStsTarget).eq("crn_no",crnNo));
 
                if (Cools.isEmpty(locMast)) {
//                    throw new CoolException("库中无空板!!!");
                    sign=false;
                }
                if (sign && !locMast.getLocSts().equals(locStsTarget)){
//                    throw new CoolException("所选库位存在状态不为D的库位,库位号:"+locMast.getLocNo()+" 、当前状态:"+locMast.getLocSts()+"-"+locMast.getLocSts$());
                    sign=false;
                }
                if (sign){
                    // 获取源站
                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                            .eq("type_no", ioType)
                            .eq("stn_no", staNo)
                            .eq("crn_no", crnNo);
                    StaDesc staDesc = staDescService.selectOne(wrapper);
                    if (Cools.isEmpty(staDesc)){
                        sign = false;
                        continue;
                    }
                    Integer sourceStaNo = staDesc.getCrnStn();
                    if (Cools.isEmpty(sourceStaNo)) {
//                    throw new CoolException("检索源站失败");
                        sign = false;
                    }
                    if (sign){
                        Date now = new Date();
                        // 保存工作档
                        WrkMast wrkMast = new WrkMast();
                        wrkMast.setWrkNo(workNo);
                        wrkMast.setIoTime(now);
                        wrkMast.setWrkSts(11L); // 工作状态
                        wrkMast.setIoType(ioType); // 入出库状态
                        wrkMast.setIoPri(10D);
                        wrkMast.setSourceStaNo(sourceStaNo); // 源站
                        wrkMast.setStaNo(staNo); // 目标站
                        wrkMast.setCrnNo(locMast.getCrnNo());
                        wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
                        wrkMast.setFullPlt(ioType.equals(110)? "N" : "Y"); // 满板:Y
                        wrkMast.setPicking("N"); // 拣料
                        wrkMast.setExitMk("N"); // 退出
                        wrkMast.setEmptyMk(ioType.equals(110)? "Y" : "N"); // 空板
                        wrkMast.setLinkMis("N");
                        wrkMast.setAppeUser(9999L);
                        wrkMast.setAppeTime(now);
                        wrkMast.setModiUser(9999L);
                        wrkMast.setModiTime(now);
                        boolean res = wrkMastService.insert(wrkMast);
                        if (!res) {
                            throw new CoolException("保存工作档失败");
                        }
                        // 更新库位状态 D.空板 -> R.出库预约
                        if (locMast.getLocSts().equals(locStsTarget)){
                            locMast.setLocSts("R");
                            locMast.setModiUser(9999L);
                            locMast.setModiTime(now);
                            if (!locMastService.updateById(locMast)) {
                                throw new CoolException("更新库位状态失败");
                            }else {
                                return SUCCESS;
                            }
                        }
                    }
                }
            }
            if (!sign){
                log.error("未查到可出库的空板!!!");
                return null;
            }
        }catch (Exception e){
            log.error("异常!!!"+e);
            return null;
        }
        return SUCCESS;
    }
}