自动化立体仓库 - WMS系统
zwl
昨天 b7380ff70bcc962494cd6640fcc3eac21aaab0a1
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
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;
            }
 
            Map<String, List<WrkMast>> groupByUserNo = new HashMap<>();
            for (WrkMast m : toSend) {
                String key = m.getUserNo();
                if (key == null || key.trim().isEmpty()) {
                    key = "_NO_USER_";
                }
                List<WrkMast> list = groupByUserNo.get(key);
                if (list == null) {
                    list = new ArrayList<>();
                    groupByUserNo.put(key, list);
                }
                list.add(m);
            }
 
            List<WrkMast> successList = new ArrayList<>();
            boolean hasError = false;
 
            for (Map.Entry<String, List<WrkMast>> entry : groupByUserNo.entrySet()) {
                List<Map<String, Object>> tasks = new ArrayList<>();
                for (WrkMast m : entry.getValue()) {
                    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("batchSeq", m.getPltType());
                    if (m.getUserNo() != null) {
                        t.put("batch", 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)) {
                    hasError = true;
                    log.error("WCS下发出库任务失败, url:{}, path:{}, userNo:{}, request:{}, response:{}",
                            urlValue, createOutTaskValue, entry.getKey(), JSON.toJSONString(payload), response);
                    continue;
                }
                successList.addAll(entry.getValue());
            }
 
            if (successList.isEmpty()) {
                return FAIL.setMsg("WCS下发出库任务失败");
            }
 
            Date now = new Date();
            for (WrkMast m : successList) {
                m.setUpdMk("WCS_SENT");
                m.setModiTime(now);
                m.setWrkSts(12L);
            }
            WrkMastService wrkMastService = com.core.common.SpringUtils.getBean(WrkMastService.class);
            for (WrkMast m : successList) {
                try {
                    wrkMastService.updateById(m);
                } catch (Exception ignore) {}
            }
        } catch (Exception e) {
            log.error("WCS出库任务下发异常", e);
            return FAIL.setMsg(e.getMessage());
        }
        return SUCCESS;
    }
}