自动化立体仓库 - WCS系统
#
pang.jiabao
2024-10-14 db3cf3601913415454b77e4e1fd8603172248d13
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
package com.zy.common.task;
 
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.thread.SiemensDevpThread;
import com.zy.entity.BasDevp;
import com.zy.entity.WrkDetl;
import com.zy.entity.WrkMast;
import com.zy.enums.AgvApi;
import com.zy.service.BasDevpService;
import com.zy.service.WrkDetlService;
import com.zy.service.WrkMastService;
import com.zy.utils.HttpHandler;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
 
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
 
/**
 * @author pang.jiabao
 * @description 冠鸿龙南专用定时任务
 * @createDate 2024/7/10 9:20
 */
@Slf4j
@Component
public class GhlnWcsScheduler {
 
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private WrkMastService wrkMastService;
 
    @Resource
    private WrkDetlService wrkDetlService;
 
    /**
     * wcs开门完成,通知agv取货放货
     */
    @Scheduled(cron = "0/5 * * * * ?")
    private void wcsOpenComplete() {
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol staProtocol305 = devpThread.getStation().get(305);
        if (staProtocol305!= null && staProtocol305.getIfOpenDoor()) {
            BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 305));
            if (basDevp.getWrkNo() != 0) {
                WrkMast wrkMast = wrkMastService.selectById(basDevp.getWrkNo());
                if (wrkMast == null || wrkMast.getWhsType() == null || wrkMast.getWhsType() == 3){
                    return;
                }
                if (wrkMast.getWhsType() == 4) {
                    return;
                }
                WrkDetl wrkDetl = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                // 判断开门完成,则通知agv可以放货
                // 调用结果
                boolean success = false;
                // 构造请求头
                Map<String, Object> headers = new HashMap<>();
                headers.put("Content-Type", "application/json;charset=UTF-8");
                // 构造请求体
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("matnr",wrkDetl.getMatnr());
                jsonObject.put("batch",wrkDetl.getBatch());
                jsonObject.put("flag",wrkMast.getIoType() > 100 ? "0" : "1");
                String body = jsonObject.toJSONString();
                String response = "";
                try {
                    response = new HttpHandler.Builder()
                            .setUri(AgvApi.OPEN_COMPLETE_PUSH.getURI())
                            .setPath(AgvApi.OPEN_COMPLETE_PUSH.getPath())
                            .setHeaders(headers)
                            .setJson(body)
                            .build()
                            .doPost();
                    if (!Cools.isEmpty(response)) {
                        JSONObject jsonObject1 = JSONObject.parseObject(response);
                        if ((Integer) jsonObject1.get("code") == 200) {
                            success = true;
                            wrkMast.setWhsType(3);
                            wrkMastService.updateById(wrkMast);
                        }
                    } else {
                        log.error("wcs开门完成通知agv接口异常接口失败!!!url:{};request:{};response:{}", "", body, response);
                    }
                } catch (Exception e) {
                    log.error("wcs开门完成通知agv接口异常:{}", e.getMessage());
                } finally {
                    log.error("wcs开门完成通知agv接口:{}", success);
                }
            }
        }
        }
 
    /**
     * 读已关门
     */
    @Scheduled(cron = "0/5 * * * * ?")
    private void wcsCloseComplete() {
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1);
        StaProtocol staProtocol = devpThread.getStation().get(305);
        if (staProtocol == null) {
            return;
        } else {
            staProtocol = staProtocol.clone();
        }
            BasDevp basDevp = basDevpService.selectOne(new EntityWrapper<BasDevp>().eq("dev_no", 305));
            if (basDevp.getWrkNo() != 0 && basDevp.getWrkNo() != 9999) {
                WrkMast wrkMast = wrkMastService.selectById(basDevp.getWrkNo());
                if (wrkMast == null ||  wrkMast.getWhsType() == null ||wrkMast.getWhsType() != 4) {
                    return;
                }
                if (wrkMast.getIoType() == 1 && wrkMast.getWrkSts() == 1) {
                    staProtocol.setWorkNo(wrkMast.getWrkNo());
                    staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                    if(!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))){
                        log.error("入库关门完成失败");
                    }
                    wrkMast.setWrkSts(2L);
                    wrkMastService.updateById(wrkMast);
                    basDevp.setWrkNo(staProtocol.getWorkNo());
                    basDevpService.updateById(basDevp);
                } else if (wrkMast.getIoType() == 101) {
                    staProtocol.setWorkNo(9999);
                    staProtocol.setStaNo(wrkMast.getSourceStaNo().shortValue());
                    if(!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))){
                        log.error("出库关门完成失败");
                    }
                    basDevp.setWrkNo(staProtocol.getWorkNo());
                    basDevpService.updateById(basDevp);
                }
            }
    }
}