自动化立体仓库 - WMS系统
#
zwl
18 小时以前 8d15a90edbf860de951c7981ef8a5b22e4f95151
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
package com.zy.asrs.task.handler;
 
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.utils.HttpHandler;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
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 java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
 
@Slf4j
@Service
@Transactional
public class AutomaticallyIssueWCSTasksHandler extends AbstractHandler<String> {
    @Value("${wcs.switch}")
    private String switchValue;
    @Value("${wcs.address.URL}")
    private String urlValue;
    @Value("${wcs.address.createInTask}")
    private String createInTaskValue;
    @Value("${wcs.address.createOutTask}")
    private String createOutTaskValue;
    @Value("${wcs.address.createLocMoveTask}")
    private String createLocMoveTaskValue;
 
    public ReturnT<String> start(List<WrkMast> wrkMast) {
        try {
            if (!Boolean.parseBoolean(String.valueOf(switchValue))) {
                return SUCCESS;
            }
            if (wrkMast == null || wrkMast.isEmpty()) {
                return SUCCESS;
            }
            List<WrkMast> toSend = new ArrayList<>();
            for (WrkMast m : wrkMast) {
                if (m == null) { continue; }
                if (Objects.equals(m.getWrkSts(), 11L)) {
                    if (m.getUpdMk() != null && "WCS_SENT".equalsIgnoreCase(m.getUpdMk())) {
                        continue;
                    }
                    toSend.add(m);
                }
            }
            if (toSend.isEmpty()) {
                return SUCCESS;
            }
            List<Map<String, Object>> tasks = new ArrayList<>();
            for (WrkMast m : toSend) {
                Map<String, Object> t = new HashMap<>();
                t.put("taskNo", String.valueOf(m.getWrkNo()));
                t.put("staNo", String.valueOf(m.getStaNo()));
                t.put("locNo", m.getSourceLocNo());
                if (m.getIoPri() != null) {
                    t.put("taskPri", m.getIoPri().intValue());
                }
                t.put("seq",m.getPltType());
                t.put("orderId",m.getUserNo());
                tasks.add(t);
            }
            Map<String, Object> payload = new HashMap<>();
            payload.put("tasks", tasks);
 
            String response = new HttpHandler.Builder()
                    .setUri(urlValue)
                    .setPath(createOutTaskValue)
                    .setHttps(urlValue != null && urlValue.startsWith("https://"))
                    .setTimeout(10, TimeUnit.SECONDS)
                    .setJson(JSON.toJSONString(payload))
                    .build()
                    .doPost();
 
            JSONObject jsonObject = JSON.parseObject(response == null ? "{}" : response);
            Integer code = jsonObject.getInteger("code");
            if (code == null || !Objects.equals(code, 200)) {
                log.error("WCS下发出库任务失败, url:{}, path:{}, request:{}, response:{}",
                        urlValue, createOutTaskValue, JSON.toJSONString(payload), response);
                return FAIL.setMsg("WCS下发出库任务失败");
            }
 
            Date now = new Date();
            for (WrkMast m : toSend) {
                m.setUpdMk("WCS_SENT");
                m.setModiTime(now);
                m.setWrkSts(12L);
            }
            // 延迟注入,避免循环依赖
            WrkMastService wrkMastService = com.core.common.SpringUtils.getBean(WrkMastService.class);
            for (WrkMast m : toSend) {
                try {
                    wrkMastService.updateById(m);
                } catch (Exception ignore) {}
            }
        } catch (Exception e) {
            log.error("WCS出库任务下发异常", e);
            return FAIL.setMsg(e.getMessage());
        }
        return SUCCESS;
    }
}