pang.jiabao
昨天 be322af3013501b822e4dab60ca348cc3db8bcbc
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
package com.zy.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.core.DevpThread;
import com.zy.core.cache.MessageQueue;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.DevpSlave;
import com.zy.core.model.Task;
import com.zy.core.model.protocol.StaProtocol;
import com.zy.core.properties.SlaveProperties;
import com.zy.entity.RcsReporterTask;
import com.zy.entity.RcsReturn;
import com.zy.entity.WrkDetl;
import com.zy.entity.WrkMast;
import com.zy.enums.RcsRetMethodEnum;
import com.zy.service.ApiLogService;
import com.zy.service.RcsService;
import com.zy.service.WrkDetlService;
import com.zy.service.WrkMastService;
import com.zy.utils.HttpHandler;
import com.zy.utils.News;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
 
@Slf4j
@Service
public class RcsServiceImpl implements RcsService {
 
    @Value("${dj.url}")
    public String DJ_URL;
 
    @Resource
    private WrkMastService wrkMastService;
 
    @Resource
    private WrkDetlService wrkDetlService;
 
    @Resource
    private SlaveProperties slaveProperties;
 
    @Resource
    private ApiLogService apiLogService;
    /**
     * 2.2.1任务执行回馈
     * 厂家:海量、华晓
     *
     * @param rcsReporterTask
     * @return
     */
    public RcsReturn reporterTask(RcsReporterTask rcsReporterTask) {
 
        RcsReturn rcsReturn = new RcsReturn();
 
        String robotTaskCode = rcsReporterTask.getRobotTaskCode();
        String singleRobotCode = rcsReporterTask.getSingleRobotCode();
        JSONObject values = rcsReporterTask.getExtra().getJSONObject("values");
        String method = values.getString("method");
        Date now = new Date();
 
        try {
            if (singleRobotCode.equals("14") || singleRobotCode.equals("15")) { // 两台CTU库机器人编号
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("task_no", robotTaskCode));
                if (wrkMast != null) {
                    Integer ioType = wrkMast.getIoType();
                    if (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method)) == RcsRetMethodEnum.TASK_END) {
                        if ((ioType == 101 || ioType == 110 || ioType == 103) && wrkMast.getWrkSts() == 12) {
                            // 给输送线下发命令
                            for (DevpSlave devp : slaveProperties.getDevp()) {
                                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                                Map<Integer, StaProtocol> station = devpThread.getStation();
                                StaProtocol staProtocol = station.get(wrkMast.getSourceStaNo());
                                if (staProtocol == null) {
                                    continue;
                                } else {
                                    staProtocol = staProtocol.clone();
                                }
                                staProtocol.setWorkNo(wrkMast.getWrkNo());
                                staProtocol.setStaNo(wrkMast.getStaNo().shortValue());
                                boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                if (result) {
                                    News.info("RCS给WCS反馈end,输送线命令下发成功:{}", wrkMast.getWrkNo());
                                } else {
                                    rcsReturn.setCode("Err_Internal");
                                    rcsReturn.setMessage("RCS给WCS反馈end,输送线命令下发失败");
                                    JSONObject data = new JSONObject();
                                    data.put("robotTaskCode", robotTaskCode);
                                    rcsReturn.setData(data);
                                    return rcsReturn;
                                }
                            }
                            wrkMast.setWrkSts(14L);
                            wrkMast.setCrnEndTime(now);
                            wrkMast.setModiTime(now);
                            wrkMastService.updateById(wrkMast);
                            // 给TMS反馈出库货物信息
                            List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()));
                            if (!wrkDetls.isEmpty()) {
                                WrkDetl wrkDetl = wrkDetls.get(0);
                                String orderNo = wrkDetl.getOrderNo();
                                if (!Cools.isEmpty(orderNo)) {
                                    // 构造请求参数
                                    JSONObject jsonObject = new JSONObject();
                                    jsonObject.put("billType",wrkDetl.getThreeCode());
                                    jsonObject.put("orderNo", wrkDetl.getOrderNo());
                                    jsonObject.put("createTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(now));
                                    JSONArray jsonArray = new JSONArray();
                                    for (WrkDetl detl : wrkDetls) {
                                        JSONObject object = new JSONObject();
                                        object.put("itemNo", detl.getMatnr());
                                        object.put("anfme", detl.getAnfme());
                                        jsonArray.add(object);
                                    }
                                    jsonObject.put("details", jsonArray);
                                    String url = DJ_URL + "api/OutboundOrder/WmsOutFinish";
                                    String request = jsonObject.toJSONString();
                                    String response = "";
                                    boolean success = false;
                                    try {
                                        response = new HttpHandler.Builder()
                                                .setUri(DJ_URL)
                                                .setPath("api/OutboundOrder/WmsOutFinish")
                                                .setJson(request)
                                                .build()
                                                .doPost();
                                        JSONObject responseJson = JSON.parseObject(response);
                                        if (responseJson.getString("Success").equals("1")) {
                                            success = true;
                                            log.info("CTU出库反馈end,上报TMS成功,工作号:{},明细:{}", wrkMast.getWrkNo(), request);
                                        } else {
                                            log.error("CTU出库反馈end,上报TMS失败!,工作号:{},明细:{}", wrkMast.getWrkNo(), request);
                                            log.error("出库完成上报TMS失败!url:{};request:{};response:{}", url, request, response);
                                        }
                                    } catch (Exception e) {
                                        log.error("出库完成上报TMS异常,request:{}",request);
                                        e.printStackTrace();
                                    } finally {
                                        try {
                                            // 保存接口日志
                                            apiLogService.save(
                                                    "出库完成上报TMS",
                                                    url,
                                                    null,
                                                    "127.0.0.1",
                                                    request,
                                                    response,
                                                    success
                                            );
                                        } catch (Exception e) {
                                            log.error("入库保存接口日志异常", e);
                                        }
                                    }
                                }
                            }
                        } else {
                            log.error("{}ioType{}不在end反馈处理中", wrkMast.getWrkNo(), ioType);
                        }
                    }
                }
            }
            // 返回RCS
            rcsReturn.setCode("SUCCESS");
            rcsReturn.setMessage("");
            JSONObject data = new JSONObject();
            data.put("robotTaskCode", robotTaskCode);
            rcsReturn.setData(data);
        } catch (Exception e) {
            log.error("RCS反馈任务进度处理异常 - {}", rcsReporterTask, e);
            rcsReturn.setCode("Err_Internal");
            rcsReturn.setMessage("内部处理异常");
            JSONObject data = new JSONObject();
            data.put("robotTaskCode", robotTaskCode);
            rcsReturn.setData(data);
        }
 
        return rcsReturn;
    }
 
}