supervision-edh/src/main/java/com/supervision/edh/controller/SupervisionEdhServerControl...

153 lines
5.7 KiB
Java
Raw Normal View History

2025-06-25 10:11:08 +08:00
package com.supervision.edh.controller;
import com.alibaba.fastjson.JSON;
import com.supervision.edh.common.AjaxResult;
import com.supervision.edh.domain.EdhReceiveDataLog;
import com.supervision.edh.enums.BuzStatusEnum;
import com.supervision.edh.enums.EventTypeEnum;
import com.supervision.edh.enums.SubTypeEnum;
import com.supervision.edh.service.IEdhReceiveDataLogService;
import com.supervision.edh.service.IEventProcessingService;
import com.supervision.edh.service.impl.EventProcessingServiceImpl;
import com.supervision.edh.utils.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
2025-06-25 18:01:56 +08:00
import org.springframework.util.StringUtils;
2025-06-25 10:11:08 +08:00
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
2025-06-25 18:01:56 +08:00
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
2025-06-25 10:11:08 +08:00
import java.util.Map;
/**
* @ClassName SupervisionEdhServerController
* @Desc 省局对接示例代码 服务端 接收端
* @Author houduo.wk
* @Date 2020/3/13
**/
@RestController
@RequestMapping("/supervision/edh")
public class SupervisionEdhServerController {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private CertManager certManager;
@Autowired
private IEdhReceiveDataLogService receiveDataLogService;
@Autowired
private EventProcessingServiceImpl processingService;
@RequestMapping("/receive")
public @ResponseBody
String receive(HttpServletRequest request) throws IOException {
RequestWrapper requestWrapper = new RequestWrapper(request);
String body = requestWrapper.getBodyString();
System.out.println(body);
Map<String, Object> paramsTemp = JSON.parseObject(body);
System.out.println(paramsTemp);
Map<String, Object> params = JSON.parseObject(paramsTemp.get("req").toString());
2025-06-25 18:01:56 +08:00
logger.info("接收到请求参数:{}", params);
// 检查参数,并获取校验结果
String checkResult = checkRequestParam(params);
if (!ResponseBuilder.reqPass().equals(checkResult)) {
return checkResult; // 如果校验失败,直接返回错误信息
}
2025-06-25 10:11:08 +08:00
try {
2025-06-25 18:01:56 +08:00
//传输流水号
2025-06-25 10:11:08 +08:00
String processId = String.valueOf(params.get("process_id"));
//事件编号
String eventId = String.valueOf(params.get("event_id"));
//主数据类型
String eventType = String.valueOf(params.get("event_type"));
//主数据 包含子类型sub_type和数据data
String event = String.valueOf(params.get("event"));
//时间戳 YYMMddHHmmssSSS
String timeStamp = String.valueOf(params.get("timestamp"));
//版本号
String ver = String.valueOf(params.get("ver"));
//企业统一社会信用代码
String tyshxydm = String.valueOf(params.get("tyshxydm"));
2025-06-25 18:01:56 +08:00
/* logger.info("processId:{}|eventId:{}|eventType:{}|event:{}|timeStamp:{}|ver:{}"
, processId, eventId, eventType, event, timeStamp, ver);*/
2025-06-25 10:11:08 +08:00
EventPojo eventPojo = JSON.parseObject(event, EventPojo.class);
//获取私钥
String privateKey = certManager.getPrivateKey();
logger.info("privateKey:{}", privateKey);
String de = certManager.keyDecrypt(privateKey, eventPojo.getData());
String data = StreamUtil.getUnStreamContent(de);
logger.info("解密之后的文件内容:{}", data);
//保存数据日志
EdhReceiveDataLog dataLog = new EdhReceiveDataLog();
dataLog.setEventId(eventId);
dataLog.setTyshxydm(tyshxydm);
dataLog.setProcessId(processId);
dataLog.setEventType(eventType);
dataLog.setEventTypeName(EventTypeEnum.getNameByType(eventType));
dataLog.setSubType(eventPojo.getSubType());
dataLog.setSubTypeName(SubTypeEnum.getNameByType(eventPojo.getSubType()));
dataLog.setData(eventPojo.getData());
dataLog.setVer(ver);
receiveDataLogService.save(dataLog);
//解析并处理数据
processingService.asyncProcessEvent(eventPojo, data, eventId);
return ResponseBuilder.success();
} catch (Exception e) {
2025-06-25 18:01:56 +08:00
logger.error("出错了,错误信息:{}", e.getMessage());
//return ResponseBuilder.fail(BuzStatusEnum.SYS_ERR);
return ResponseBuilder.failMsg(e.getMessage());
}
}
/**
* 检测校验接收参数
* @param params
*/
private String checkRequestParam(Map<String, Object> params) {
if (params == null || params.isEmpty()) {
return ResponseBuilder.failMsg("请求参数不能为空");
}
// 必填参数列表
List<String> requiredParams = Arrays.asList("process_id","event_id","tyshxydm","event_type","event","timestamp","ver");
// 统一校验必填参数
for (String paramName : requiredParams) {
Object value = params.get(paramName);
if (value == null) {
return ResponseBuilder.failMsg("参数'" + paramName + "'不能为null");
}
if (value instanceof String && StringUtils.isEmpty(value)) {
return ResponseBuilder.failMsg("参数'" + paramName + "'不能为空字符串");
}
// 可以添加其他类型检查,如集合是否为空等
if (value instanceof Collection && ((Collection<?>) value).isEmpty()) {
return ResponseBuilder.failMsg("参数'" + paramName + "'集合不能为空");
}
2025-06-25 10:11:08 +08:00
}
2025-06-25 18:01:56 +08:00
return ResponseBuilder.reqPass();
2025-06-25 10:11:08 +08:00
}
}