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));
|
// }
|
|
|
}
|