自动化立体仓库 - WMS系统
#
pang.jiabao
4 天以前 52b21b24130c75197c039ae0fd761e2ef5b43cb3
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
package com.zy.common.route;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zy.asrs.entity.AgvInfo;
import com.zy.asrs.entity.rcs.RcsReporterEqpt;
import com.zy.asrs.entity.rcs.RcsReporterTask;
import com.zy.asrs.entity.rcs.RcsReturn;
import com.zy.asrs.mapper.AgvInfoMapper;
import com.zy.asrs.service.RcsService;
import com.zy.asrs.service.impl.RcsServiceImpl;
import lombok.Value;
import lombok.extern.slf4j.Slf4j;
import org.apache.tika.utils.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
 
@Slf4j
@Component
public class RouteFilter implements HandlerInterceptor {
 
    private static final String[] WAREHOUSE_CODE = {"dj", "jg", "ljq", "hk"};
//    private static final String[] WAREHOUSE = {"刀具库", "加工库", "联结器装配库", "滑块库"};
//    @Value("${mes}")
    private static Integer CURRENT_WMS_ID = 4;  //滑块
 
    @Resource
    private RcsService rcsService;
    @Resource
    private AgvInfoMapper agvInfoMapper;
 
 
    // 请求前
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 
//        if (findIndex(request) != CURRENT_WMS_ID) {
//            // 转发
//            // 获取RequestDispatcher对象
//            RequestDispatcher dispatcher = request.getRequestDispatcher("/SecondServlet");
//
//            // 转发请求到SecondServlet
//            dispatcher.forward(request, response);
//
////            forward(request);
//        }
 
        forward(request, response);
 
//        long startTime = System.currentTimeMillis();
//        System.out.println("preHandle,In:" + startTime);
//        request.setAttribute("startTime", startTime);
        return true;
    }
 
    // TODO:请求转发与响应重定向  //TODO:HttpServletRequest读取一次后不能再使用,需重构下逻辑顺序
    private void forward(HttpServletRequest request, HttpServletResponse response) throws IOException {
 
        String url = request.getRequestURI();
        StringBuilder body = new StringBuilder();
 
        BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8));
        String line;
        while ((line = in.readLine()) != null) {
            body.append(line);
        }
        JSONObject bodyJson = JSONObject.parseObject(body.toString());
        String singleRobotCode = bodyJson.getString("singleRobotCode");
        if (!StringUtils.isBlank(singleRobotCode)) {    //任务回馈接口
            int index = findIndex(singleRobotCode);
            if (index != CURRENT_WMS_ID) {
                String wmsId = WAREHOUSE_CODE[index - 1];  //存储所有AGV所属库区
                url = url.replace(WAREHOUSE_CODE[CURRENT_WMS_ID - 1], wmsId);
 
                // 转发
                String returns = RcsServiceImpl.sendPost(url, body.toString());
                log.info("转发请求url:{},body:{},返回:{}", url, body, returns);
                response(response, returns);
            } else {
                // 内部逻辑处理
                RcsReporterTask param = JSONObject.toJavaObject(bodyJson, RcsReporterTask.class);
                RcsReturn rcsReturn = rcsService.reporterTask(param);
 
                response(response, rcsReturn.toString());
            }
        } else {    //请求外设(封锁区),封锁区由当前程序管理不转发
            RcsReporterEqpt param = JSONObject.toJavaObject(bodyJson, RcsReporterEqpt.class);
            RcsReturn rcsReturn = rcsService.reporterEqpt(param);
 
            response(response, rcsReturn.toString());
        }
    }
 
    private int findIndex(String agvNo) {
 
        AgvInfo agvInfo = agvInfoMapper.selectById(agvNo);
        if (agvInfo != null) {
            return Integer.parseInt(agvInfo.getBelongArea());
        }
        return -1;
    }
 
    public static void response(HttpServletResponse response, String baseRes){
        response.setCharacterEncoding("utf-8");
        response.setContentType("application/json; charset=utf-8");
        try (PrintWriter out = response.getWriter()) {
            out.print(JSON.toJSONString(baseRes));
            out.flush();
        } catch (Exception e) {
            log.error(e.getMessage(), e);
//            e.printStackTrace();
        }
    }
 
//    public static void response(HttpServletResponse response, String baseRes){
//        response.setCharacterEncoding("utf-8");
//        response.setContentType("application/json; charset=utf-8");
//        try (PrintWriter out = response.getWriter()) {
//            R r = R.parse(baseRes);
//            JSONObject jsonObject = new JSONObject();
//            jsonObject.put("total", "0");
//            jsonObject.put("record", "");
//            r.add(jsonObject);
//            out.print(JSON.toJSONString(r));
//            out.flush();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
 
//    /**
//     * 设置webflux模型响应
//     *
//     * @param response ServerHttpResponse
//     * @param contentType content-type
//     * @param status http状态码
//     * @param code 响应状态码
//     * @param value 响应内容
//     * @return Mono<Void>
//     */
//    public static Mono<Void> webFluxResponseWriter(ServerHttpResponse response, String contentType, HttpStatus status, Object value, int code)
//    {
//        response.setStatusCode(status);
//        response.getHeaders().add(HttpHeaders.CONTENT_TYPE, contentType);
//        RcsReturn<?> result = RcsReturn.fail(code, value.toString());
//        DataBuffer dataBuffer = response.bufferFactory().wrap(JSON.toJSONString(result).getBytes());
//        return response.writeWith(Mono.just(dataBuffer));
//    }
 
 
}