自动化立体仓库 - WMS系统
pjb
昨天 2ded9514aa9a93ee440af0b1437d788fb052028b
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
package com.zy.asrs.task;
 
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.WrkDetl;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.WrkDetlService;
import com.zy.asrs.service.WrkMastService;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * @author pang.jiabao
 * @description 米多泉州专用定时任务
 * @createDate 2024/7/10 9:20
 */
@Slf4j
@Component
public class MdqzScheduler {
 
    @Resource
    private ConfigService configService;
 
    @Resource
    private WrkMastService wrkMastService;
 
    @Resource
    private LocMastService locMastService;
 
    @Resource
    private WrkDetlService wrkDetlService;
 
    // 读补尾桶配置,给对应任务号补尾桶信号--替换为入库寻找库位时,发现前面类型不一样单着,自动补尾桶
    @Scheduled(cron = "0/5 * * * * ?")
    private void tailFillingBuckets() {
        Config config = configService.selectConfigByCode("tailFillingBuckets");
        if (config != null && config.getStatus() == 1 && !Cools.isEmpty(config.getValue())) {
            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", config.getValue()));
 
            if (wrkMast != null && wrkMast.getCtnType() == 0) {
                Integer wrkNo = wrkMast.getWrkNo();
                // 取新库位组的第一个库位
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("crn_no", 4).eq("loc_sts", "O"));
                List<LocMast> collect = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 9 || locMast1.getRow1() == 11).collect(Collectors.toList());
                List<LocMast> collect1 = locMasts.stream().filter(locMast1 -> locMast1.getRow1() == 10 || locMast1.getRow1() == 12).collect(Collectors.toList()); // 第一个先放这两排
                if (collect.size() <= 0 && collect1.size()  <= 0) {
                    log.error("站点:{},任务号{}:入库空桶库无空库位",1050,wrkNo);
                    return;
                }
                // 可用库位组
                List<LocMast> locMastList = new ArrayList<>();
                for(LocMast locMast1:collect) {
                    Optional<LocMast> first = collect1.stream().filter(locMast2 -> locMast1.getRow1() + 1 == locMast2.getRow1() && Objects.equals(locMast1.getLev1(), locMast2.getLev1())
                            && Objects.equals(locMast1.getBay1(), locMast2.getBay1())).findFirst();
                    first.ifPresent(locMastList::add);
                }
 
                if (locMastList.size() == 0) {
                    log.error("站点:{},任务号{}:入库空桶库无对应空空桶组",1050,wrkNo);
                    return;
                }
                WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
                if (wrkDetl.getModel().equals("208L") && locMastList.size() <= 40 * 2 * 2) { // 最上面一层只能放208L,库位剩余量不多时,如果是208L桶入库,则先从最顶层放
                    locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).reversed().thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList());
                } else {
                    locMastList = locMastList.stream().sorted(Comparator.comparing(LocMast::getLev1).thenComparing(LocMast::getBay1).thenComparing(LocMast::getRow1)).collect(Collectors.toList());
                }
                LocMast locMast = locMastList.get(0);
                wrkMast.setLocNo(locMast.getLocNo());
                wrkMast.setCtnType(1); // 尾托标识
                wrkMastService.updateById(wrkMast);
                if (locMast.getLocSts().equals("O")){
                    locMast.setLocSts("S"); // S.入库预约
                    locMast.setModiTime(new Date());
                    if (!locMastService.updateById(locMast)){
                        log.error("站点:{},任务号{}:改变库位{}状态{}失败",1050,wrkNo,locMast.getLocNo(),locMast.getLocSts());
                    }
                } else {
                    log.error("站点:{},任务号{}:目标库位:{}已被占用",1050,wrkNo,locMast.getLocNo());
                }
            }
        }
    }
 
}