自动化立体仓库 - WMS系统
zwl
2 天以前 9145f8a44c6ae733019e43c775cc30243032e502
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
package com.zy.asrs.service.impl;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.core.common.Cools;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.result.FindLocNoAttributeVo;
import com.zy.asrs.mapper.WrkMastLogMapper;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.InboundCameraCaptureService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkMastService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
 
@Slf4j
@Service("wrkMastService")
public class WrkMastServiceImpl extends ServiceImpl<WrkMastMapper, WrkMast> implements WrkMastService {
 
    @Autowired
    private WrkMastLogMapper wrkMastLogMapper;
 
    @Autowired
    private LocMastService locMastService;
 
    @Override
    public boolean insert(WrkMast entity) {
        fillAreaId(entity);
        return super.insert(entity);
    }
 
    @Override
    public boolean updateById(WrkMast entity) {
        fillAreaId(entity);
        return super.updateById(entity);
    }
 
    @Override
    public int getWorkingMast(Integer devpNo) {
        return selectCount(new EntityWrapper<WrkMast>().eq("source_sta_no", devpNo).in("wrk_sts", 1, 6));
    }
 
    @Override
    public List<WrkMast> selectToBeCompleteData() {
        return this.baseMapper.selectToBeCompleteData();
    }
 
    @Override
    public List<WrkMast> selectToBeHistoryData() {
        return this.baseMapper.selectToBeHistoryData();
    }
 
    @Override
    public List<WrkMast> selectPendingInboundCameraCapture() {
        return this.baseMapper.selectPendingInboundCameraCapture(
                InboundCameraCaptureService.CAPTURE_PENDING,
                InboundCameraCaptureService.CAPTURE_RUNNING);
    }
 
    @Override
    public boolean updateMemoIfCurrent(Integer wrkNo, String current, String next) {
        return this.baseMapper.updateMemoIfCurrent(wrkNo, current, next) > 0;
    }
 
    @Override
    public WrkMast selectByBarcode(String barcode) {
        List<WrkMast> wrkMasts = this.selectList(new EntityWrapper<WrkMast>().eq("barcode", barcode));
        if (Cools.isEmpty(wrkMasts)) {
            return null;
        }
        return wrkMasts.get(0);
    }
 
    @Override
    public int getStoreCount(Integer crnNo) {
        return selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo)
                .last(" and (wrk_sts in (1,2) or (wrk_sts=3 and wrk_no in (select wrk_no from asr_bas_devp)))"));
    }
 
    @Override
    public int selectWrkMastBareBoardStaNo(Integer ioType,Integer staNo) {
        return this.baseMapper.selectWrkMastBareBoardStaNo(ioType,staNo);
    }
 
    @Override
    public List<WrkMast> selectWrkMastWrkDetl(Integer ioType, FindLocNoAttributeVo findLocNoAttributeVo, Integer crnNo) {
        return this.baseMapper.selectWrkMastWrkDetl(ioType,findLocNoAttributeVo.getMatnr(),findLocNoAttributeVo.getBatch(),findLocNoAttributeVo.getBrand()
                ,findLocNoAttributeVo.getStandby1(),findLocNoAttributeVo.getStandby2(),findLocNoAttributeVo.getStandby3()
                ,findLocNoAttributeVo.getBoxType1(),findLocNoAttributeVo.getBoxType2(),findLocNoAttributeVo.getBoxType3()
                ,crnNo);
    }
 
    @Override
    public WrkMast selectWrkMast(Integer workNo, String barcode) {
        return this.baseMapper.selectWrkMast(workNo, barcode);
    }
 
    @Override
    public int outboundSeqMaxContiguousPlt(String userNo, String batchSeq) {
        List<Integer> fromMast = baseMapper.listOutboundPltTypesByUserNo(userNo, batchSeq);
        List<Integer> fromLog = wrkMastLogMapper.listOutboundPltTypesByUserNo(userNo, batchSeq);
        Set<Integer> filled = new HashSet<>();
        addPositivePlt(fromMast, filled);
        addPositivePlt(fromLog, filled);
        int h = 0;
        while (filled.contains(h + 1)) {
            h++;
        }
        return h;
    }
 
    @Override
    public Date firstInboundCreateTimeByTrainNo(String trainNo) {
        if (Cools.isEmpty(trainNo)) {
            return null;
        }
        Date fromMast = baseMapper.selectFirstInboundCreateTimeByTrainNo(trainNo);
        Date fromLog = wrkMastLogMapper.selectFirstInboundCreateTimeByTrainNo(trainNo);
        if (fromMast == null) {
            return fromLog;
        }
        if (fromLog == null) {
            return fromMast;
        }
        return fromMast.before(fromLog) ? fromMast : fromLog;
    }
 
    @Override
    public int finishedInboundPalletCountByTrainNo(String trainNo) {
        if (Cools.isEmpty(trainNo)) {
            return 0;
        }
        Set<Integer> wrkNos = new HashSet<>();
        addPositiveWrkNos(baseMapper.listFinishedInboundWrkNosByTrainNo(trainNo), wrkNos);
        addPositiveWrkNos(wrkMastLogMapper.listFinishedInboundWrkNosByTrainNo(trainNo), wrkNos);
        return wrkNos.size();
    }
 
    private static void addPositivePlt(List<Integer> list, Set<Integer> target) {
        if (list == null) {
            return;
        }
        for (Integer p : list) {
            if (p != null && p > 0) {
                target.add(p);
            }
        }
    }
 
    private static void addPositiveWrkNos(List<Integer> list, Set<Integer> target) {
        if (list == null) {
            return;
        }
        for (Integer wrkNo : list) {
            if (wrkNo != null && wrkNo > 0) {
                target.add(wrkNo);
            }
        }
    }
 
    private void fillAreaId(WrkMast wrkMast) {
        if (wrkMast == null) {
            return;
        }
        LocMast locMast = resolveAreaLocMast(wrkMast);
        if (locMast != null) {
            wrkMast.setAreaId(locMast.getAreaId());
        }
    }
 
    private LocMast resolveAreaLocMast(WrkMast wrkMast) {
        boolean outbound = wrkMast.getIoType() != null && wrkMast.getIoType() >= 100;
        LocMast primary = outbound
                ? selectLocMast(wrkMast.getSourceLocNo())
                : selectLocMast(wrkMast.getLocNo());
        if (primary != null) {
            return primary;
        }
        return outbound
                ? selectLocMast(wrkMast.getLocNo())
                : selectLocMast(wrkMast.getSourceLocNo());
    }
 
    private LocMast selectLocMast(String locNo) {
        if (Cools.isEmpty(locNo)) {
            return null;
        }
        return locMastService.selectById(locNo);
    }
}