自动化立体仓库 - WMS系统
野心家
2024-12-31 dcb21dfbb8399aadfb5b2df9ba5caa0a065ea7ee
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
package com.zy.asrs.task;
 
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.BasDevp;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.entity.StaDesc;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.BasDevpService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.StaDescService;
import com.zy.asrs.service.WrkMastService;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import java.util.Date;
import java.util.List;
 
@Component
public class EmptyOutWing {
 
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private StaDescService staDescService;
    @Autowired
    private CommonService commonService;
    @Autowired
    ConfigService configService;
    @Autowired
    private BasDevpService basDevpService;
 
    /**
     * 自动出空板
     */
    @Scheduled(cron = "0/3 * * * * ? ")
    private void execute() {
        Config config = configService.selectConfigByCode("AutoEmpty");
        if (config.getStatus() == 0) {
            return;
        }
        BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 100));
        if (Cools.isEmpty(basDevp.getLoading())||basDevp.getLoading().equals("N")) {
            List<LocMast> locMastss = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").orderBy("bay1"));
            if (Cools.isEmpty(locMastss)) {
                return;
            }
            for (LocMast locMasta : locMastss) {
                // 获取工作号
                int workNo = commonService.getWorkNo(WorkNoType.PAKOUT.type);
                // 获取库位
                LocMast locMast = locMastService.selectById(locMasta.getLocNo());
                if (Cools.isEmpty(locMast)) {
                    throw new CoolException(locMasta.getLocNo() + "库位不存在");
                }
                if (!locMast.getLocSts().equals("D")) {
                    throw new CoolException("所选库位存在状态不为D的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$());
                }
                boolean res1 = true;
 
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                        .eq("lev1", locMast.getLev1())
                        .orderBy("bay1", res1));
                for (LocMast locMast1 : locMasts) {
                    if (locMast1.getLocNo().equals(locMast.getLocNo())) {
                        break;
                    }
                    if (locMast1.getLocSts().equals("D") || locMast1.getLocSts().equals("F")) {
                        throw new CoolException(locMasta.getLocNo() + "库位堵塞,禁止出库");
                    }else if(!locMast1.getLocSts().equals("O")){
                        return;
                    }
                }
                // 获取源站
                Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
                        .eq("type_no", 110)
                        .eq("stn_no", 100)
                        .eq("crn_no", locMast.getCrnNo());
                StaDesc staDesc = staDescService.selectOne(wrapper);
                Integer sourceStaNo = staDesc.getCrnStn();
                if (Cools.isEmpty(sourceStaNo)) {
                    throw new CoolException("检索源站失败");
                }
                Date now = new Date();
                // 保存工作档
                WrkMast wrkMast = new WrkMast();
                wrkMast.setWrkNo(workNo);
                wrkMast.setIoTime(now);
                wrkMast.setWrkSts(0L); // 工作状态:0.待发送
                wrkMast.setIoType(110); // 入出库状态: 110.空板出库
                wrkMast.setIoPri(13D); //优先级排序 15.出库>14.入库>13.空板出库>12.空板入库>11.移库
                wrkMast.setSourceStaNo(sourceStaNo); // 源站
                wrkMast.setStaNo(100); // 目标站
                wrkMast.setCrnNo(locMast.getCrnNo());
                wrkMast.setSourceLocNo(locMasta.getLocNo()); // 源库位
                wrkMast.setFullPlt("N"); // 满板:Y
                wrkMast.setPicking("N"); // 拣料
                wrkMast.setExitMk("N"); // 退出
                wrkMast.setEmptyMk("Y"); // 空板
                wrkMast.setLinkMis("N");
                wrkMast.setAppeUser(9998L);
                wrkMast.setAppeTime(now);
                wrkMast.setModiUser(9998L);
                wrkMast.setModiTime(now);
                boolean res = wrkMastService.insert(wrkMast);
                if (!res) {
                    throw new CoolException("保存工作档失败");
                }
                // 更新库位状态 D.空板 -> R.出库预约
                if (locMast.getLocSts().equals("D")) {
                    locMast.setLocSts("R");
                    locMast.setModiUser(9998L);
                    locMast.setModiTime(now);
                    if (!locMastService.updateById(locMast)) {
                        throw new CoolException("更新库位状态失败");
                    }
                    break;
                }
            }
        }
    }
}