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 paramsTemp = JSON.parseObject(body); System.out.println(paramsTemp); Map 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); } } }