自动化立体仓库 - WMS系统
#
LSH
2023-05-16 2bf65500161ae37c120d0d9af8f6d8dd7afdec75
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
package com.zy.asrs.task.handler;
 
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.PostMesDataUtils;
import com.zy.common.constant.MesConstant;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
 
/**
 * Created by vincent on 2020/7/6
 */
@Service
@Slf4j
public class StandingHandler extends AbstractHandler<String> {
 
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private ApiLogService apiLogService;
    @Autowired
    private CommonService commonService;
    @Autowired
    private WrkDetlService wrkDetlService;
 
    @Value("${mes.url}")
    private String mesUrl;
 
    @Value("${mes.inPath}")
    private String inpath;
 
    @Transactional
    public ReturnT<String> start() {
        try {
            Date now = new Date();
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("fire_status", 0)
                    .eq("loc_sts", "F")
                    .eq("loc_type1",(short)2)
                    .eq("pack_status", 6));
            Integer ioType = 101;   //入出库类型
            //静置完成出库站104
            for(LocMast locMast : locMasts){
                LocDetl locDetl=locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no",locMast.getLocNo()));
                if (Cools.isEmpty(locDetl)){
                    log.error("库位:"+locMast.getLocNo()+"没有明细");
                } else if (Cools.isEmpty(locDetl.getDeadWarn())){
                    log.error("库位:"+locMast.getLocNo()+"没有静置时间");
                } else if (Cools.isEmpty(locMast.getModiTime())){
                    log.error("库位:"+locMast.getLocNo()+"modiTime为空");
                } else if (Cools.isEmpty(locMast.getBarcode())){
                    log.error("库位:"+locMast.getLocNo()+"Pack码为空");
                } else if (now.getTime()-locMast.getModiTime().getTime() >= locDetl.getDeadWarn()*60*1000){
                    // 生成工作号
                    int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType));
                    // 生成工作档
                    WrkMast wrkMast = new WrkMast();
                    wrkMast.setWrkNo(workNo);
                    wrkMast.setIoTime(now);
                    wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
                    wrkMast.setIoType(ioType); // 入出库状态
                    wrkMast.setIoPri(13D); // 优先级:13
                    wrkMast.setCrnNo(locMast.getCrnNo());
                    if (wrkMast.getCrnNo()==1){
                        wrkMast.setSourceStaNo(203); // 源站
                    }else {
                        wrkMast.setSourceStaNo(210); // 源站
                    }
                    wrkMast.setStaNo(104); // 目标站
                    wrkMast.setSourceLocNo(locMast.getLocNo()); // 源库位
                    wrkMast.setFullPlt("Y"); // 满板:Y
                    wrkMast.setPicking("N"); // 拣料
                    wrkMast.setExitMk("N"); // 退出
                    wrkMast.setEmptyMk("N"); // 空板
                    wrkMast.setLinkMis("N");
                    wrkMast.setBarcode(locMast.getBarcode());
                    wrkMast.setAppeTime(now);
                    wrkMast.setModiTime(now);
                    if (!wrkMastService.insert(wrkMast)) {
                        throw new CoolException("保存工作档失败,出库库位号:"+locMast.getLocNo());
                    }
                    // 生成工作档明细
                    WrkDetl wrkDetl = new WrkDetl();
                    wrkDetl.sync(locDetl);
                    wrkDetl.setWrkNo(workNo);
                    wrkDetl.setIoTime(now);
                    wrkDetl.setAnfme(1.0); // 数量
                    wrkDetl.setAppeTime(now);
                    wrkDetl.setModiTime(now);
                    if (!wrkDetlService.insert(wrkDetl)) {
                        throw new CoolException("保存工作档明细失败");
                    }
                    // 修改库位状态:   F.在库 ====>>> R.出库预约
                    if (locMast.getLocSts().equals("F")) {
                        locMast.setLocSts("R");
                        locMast.setModiTime(now);
                        locMast.setPackStatus(6); //6:静置完成
 
                        CombParam combParam = new CombParam();
                        combParam.setPackNo(locMast.getBarcode());
                        combParam.setLocNo(locMast.getLocNo());
                        combParam.setPackSts(6);
                        combParam.setRequestTime(DateUtils.convert(new Date()));
                        new PostMesDataUtils().postMesData("MES系统",mesUrl,inpath,combParam);
 
                        if (!locMastService.updateById(locMast)) {
                            throw new CoolException("预约库位状态失败,库位号:"+locMast.getLocNo());
                        }
                    } else {
                        throw new CoolException(locMast.getLocNo() + "库位不是在库状态");
                    }
                } else {
 
                }
            }
 
        } catch (Exception e) {
            e.printStackTrace();
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return FAIL.setMsg(e.getMessage());
        }
        return SUCCESS;
    }
 
}