111 lines
4.1 KiB
Java
111 lines
4.1 KiB
Java
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;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import java.io.IOException;
|
|
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());
|
|
logger.info("ProvTestController.receive.in.params:{}", params);
|
|
try {
|
|
//传输流水号0
|
|
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"));
|
|
|
|
logger.info("processId:{}|eventId:{}|eventType:{}|event:{}|timeStamp:{}|ver:{}"
|
|
, processId, eventId, eventType, event, timeStamp, ver);
|
|
|
|
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) {
|
|
logger.error("数据解析错误,错误信息:{}", e.getMessage());
|
|
return ResponseBuilder.fail(BuzStatusEnum.SYS_ERR);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|