优化修改

This commit is contained in:
huzhengkao 2025-06-26 13:50:38 +08:00
parent 5670717996
commit 7f1f76de3d
12 changed files with 76 additions and 53 deletions

View File

@ -23,10 +23,7 @@ import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.*;
/**
* 请求客户端

View File

@ -1,6 +1,7 @@
package com.supervision.edh.controller;
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.supervision.edh.common.AjaxResult;
import com.supervision.edh.domain.EdhReceiveDataLog;
import com.supervision.edh.enums.BuzStatusEnum;
@ -13,16 +14,24 @@ import com.supervision.edh.utils.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.crypto.BadPaddingException;
import javax.crypto.IllegalBlockSizeException;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
/**
* @ClassName SupervisionEdhServerController
@ -45,16 +54,15 @@ public class SupervisionEdhServerController {
@Autowired
private EventProcessingServiceImpl processingService;
@RequestMapping("/receive")
public @ResponseBody
String receive(HttpServletRequest request) throws IOException {
@PostMapping("/receive")
public 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("接收到请求参数:{}", params);
// logger.info("接收到请求参数:{}", params);
// 检查参数并获取校验结果
String checkResult = checkRequestParam(params);
if (!ResponseBuilder.reqPass().equals(checkResult)) {
@ -102,15 +110,37 @@ public class SupervisionEdhServerController {
dataLog.setSubTypeName(SubTypeEnum.getNameByType(eventPojo.getSubType()));
dataLog.setData(eventPojo.getData());
dataLog.setVer(ver);
SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmmssSSS");
dataLog.setEventTime(sdf.parse(timeStamp));//事件上报时间
receiveDataLogService.save(dataLog);
//解析并处理数据
processingService.asyncProcessEvent(eventPojo, data, eventId);
//processingService.asyncProcessEvent(eventPojo, data, eventId);
CompletableFuture<Void> future = processingService.asyncProcessEvent(eventPojo, data, eventId);
future.get(); // 阻塞等待任务完成如果任务抛出异常会抛出 ExecutionException
return ResponseBuilder.success();
} catch (BadPaddingException e) {
// RSA 解密失败可能是密钥不匹配或数据被篡改
logger.error("解密失败:密钥不匹配或数据无效,错误信息:{}", e.getMessage());
return ResponseBuilder.failMsg("解密失败:请检查加密公钥是否匹配或数据是否被篡改");
} catch (IllegalBlockSizeException e) {
// 数据块大小错误 RSA 加密数据长度超限
logger.error("解密失败:数据块大小错误,错误信息:{}", e.getMessage());
return ResponseBuilder.failMsg("解密失败:数据格式错误");
} catch (InvalidKeyException e) {
// 无效的私钥
logger.error("解密失败:提供的私钥无效,错误信息:{}", e.getMessage());
return ResponseBuilder.failMsg("解密失败:私钥无效");
} catch (JsonProcessingException e) {
logger.error("数据解析异常:上报数据格式有误,错误信息:{}", e.getMessage());
return ResponseBuilder.failMsg("数据解析异常:上报数据格式有误");
} catch (ExecutionException e) {
// 捕获异步任务抛出的异常
Throwable cause = e.getCause();
logger.error("异步任务执行失败 - event_id={},错误信息={}",params.get("event_id"),cause.getMessage());
return ResponseBuilder.failMsg("异步任务失败: " + cause.getMessage());
} catch (Exception e) {
logger.error("出错了,错误信息:{}", e.getMessage());
//return ResponseBuilder.fail(BuzStatusEnum.SYS_ERR);
return ResponseBuilder.failMsg(e.getMessage());
}
@ -130,6 +160,9 @@ public class SupervisionEdhServerController {
// 统一校验必填参数
for (String paramName : requiredParams) {
if (!params.containsKey(paramName)) {
return ResponseBuilder.failMsg("缺少必填参数: " + paramName);
}
Object value = params.get(paramName);
if (value == null) {

View File

@ -39,7 +39,7 @@ public class EdhReceiveDataLog {
private Date createTime;
private Date updateTime;
private Date eventTime;
private Date isDeleted;

View File

@ -1,12 +1,8 @@
package com.supervision.edh.service.handle.core;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.edh.domain.EdhDrugOperatorsBaseInfo;
import com.supervision.edh.domain.vo.EdhDrugOperatorsBaseInfoVO;
import com.supervision.edh.service.IEdhDrugOperatorsBaseInfoService;
import com.supervision.edh.service.IEdhReceiveDataLogService;
import com.supervision.edh.service.handle.AbstractEventDataHandler;
import com.supervision.edh.service.handle.EventSubType;
import com.supervision.edh.utils.JsonUtils;
@ -14,12 +10,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -30,8 +24,8 @@ import java.util.stream.Collectors;
* @date 2025年06月18日 11:14:43
*/
@Service
@EventSubType("1014")
public class SubType1014Handler extends AbstractEventDataHandler<EdhDrugOperatorsBaseInfoVO> {
@EventSubType("1011")
public class SubType1011Handler extends AbstractEventDataHandler<EdhDrugOperatorsBaseInfoVO> {
protected final Logger log = LoggerFactory.getLogger(getClass());
@Autowired

View File

@ -1,12 +1,8 @@
package com.supervision.edh.service.handle.core;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.supervision.edh.domain.EdhDrugOperateLicenseBaseInfo;
import com.supervision.edh.domain.EdhDrugOperatorsBaseInfo;
import com.supervision.edh.domain.vo.EdhDrugOperateLicenseBaseInfoVO;
import com.supervision.edh.domain.vo.EdhDrugOperatorsBaseInfoVO;
import com.supervision.edh.service.IEdhDrugOperateLicenseBaseInfoService;
import com.supervision.edh.service.IEdhDrugOperatorsBaseInfoService;
import com.supervision.edh.service.handle.AbstractEventDataHandler;
import com.supervision.edh.service.handle.EventSubType;
import com.supervision.edh.utils.JsonUtils;
@ -28,8 +24,8 @@ import java.util.stream.Collectors;
* @date 2025年06月19日 10:14:43
*/
@Service
@EventSubType("1015")
public class SubType1015Handler extends AbstractEventDataHandler<EdhDrugOperateLicenseBaseInfoVO> {
@EventSubType("1012")
public class SubType1012Handler extends AbstractEventDataHandler<EdhDrugOperateLicenseBaseInfoVO> {
protected final Logger log = LoggerFactory.getLogger(getClass());
@Autowired

View File

@ -1,10 +1,7 @@
package com.supervision.edh.service.handle.core;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.supervision.edh.domain.vo.EdhDomesticDrugBaseInfoVO;
import com.supervision.edh.domain.vo.EdhDrugOperateLicenseBaseInfoVO;
import com.supervision.edh.service.IEdhDomesticDrugBaseInfoService;
import com.supervision.edh.service.IEdhDrugOperateLicenseBaseInfoService;
import com.supervision.edh.service.handle.AbstractEventDataHandler;
import com.supervision.edh.service.handle.EventSubType;
import com.supervision.edh.utils.JsonUtils;
@ -21,8 +18,8 @@ import org.springframework.util.CollectionUtils;
* @date 2025年06月20日 10:14:43
*/
@Service
@EventSubType("1018")
public class SubType1018Handler extends AbstractEventDataHandler<EdhDomesticDrugBaseInfoVO> {
@EventSubType("1013")
public class SubType1013Handler extends AbstractEventDataHandler<EdhDomesticDrugBaseInfoVO> {
protected final Logger log = LoggerFactory.getLogger(getClass());
@Autowired

View File

@ -1,7 +1,5 @@
package com.supervision.edh.service.handle.core;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.supervision.edh.domain.EdhDrugInvoiceApplyInfo;
import com.supervision.edh.domain.vo.EdhDrugInvoiceApplyInfoVO;
import com.supervision.edh.domain.vo.InstanceVO;
@ -9,7 +7,6 @@ import com.supervision.edh.domain.vo.DrugVO;
import com.supervision.edh.service.IEdhDrugInvoiceApplyInfoService;
import com.supervision.edh.service.handle.AbstractEventDataHandler;
import com.supervision.edh.service.handle.EventSubType;
import com.supervision.edh.utils.DateUtils;
import com.supervision.edh.utils.JsonUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -28,8 +25,8 @@ import java.util.stream.Collectors;
* @date 2025年06月20日 10:14:43
*/
@Service
@EventSubType("2015")
public class SubType2015Handler extends AbstractEventDataHandler<EdhDrugInvoiceApplyInfoVO> {
@EventSubType("2011")
public class SubType2011Handler extends AbstractEventDataHandler<EdhDrugInvoiceApplyInfoVO> {
protected final Logger log = LoggerFactory.getLogger(getClass());
@Autowired

View File

@ -1,6 +1,5 @@
package com.supervision.edh.service.handle.core;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.supervision.edh.domain.EdhDrugDeliveryNoteApplyInfo;
import com.supervision.edh.domain.vo.DrugVO;
import com.supervision.edh.domain.vo.EdhDrugDeliveryNoteApplyInfoVO;
@ -26,8 +25,8 @@ import java.util.stream.Collectors;
* @date 2025年06月21日 10:14:43
*/
@Service
@EventSubType("2016")
public class SubType2016Handler extends AbstractEventDataHandler<EdhDrugDeliveryNoteApplyInfoVO> {
@EventSubType("2012")
public class SubType2012Handler extends AbstractEventDataHandler<EdhDrugDeliveryNoteApplyInfoVO> {
protected final Logger log = LoggerFactory.getLogger(getClass());
@Autowired

View File

@ -1,12 +1,8 @@
package com.supervision.edh.service.handle.core;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.supervision.edh.domain.EdhDrugDeliveryNoteApplyInfo;
import com.supervision.edh.domain.EdhDrugInvoiceApplyInfo;
import com.supervision.edh.domain.EdhWarehouseStockApplyInfo;
import com.supervision.edh.domain.vo.*;
import com.supervision.edh.service.IEdhWarehouseStockApplyInfoService;
import com.supervision.edh.service.IEdhWhTempHumidityApplyInfoService;
import com.supervision.edh.service.handle.AbstractEventDataHandler;
import com.supervision.edh.service.handle.EventSubType;
import com.supervision.edh.utils.JsonUtils;
@ -27,8 +23,8 @@ import java.util.stream.Collectors;
* @date 2025年06月23日 11:22:43
*/
@Service
@EventSubType("2019")
public class SubType2019Handler extends AbstractEventDataHandler<EdhWarehouseStockApplyInfoVO> {
@EventSubType("2013")
public class SubType2013Handler extends AbstractEventDataHandler<EdhWarehouseStockApplyInfoVO> {
protected final Logger log = LoggerFactory.getLogger(getClass());
@Autowired

View File

@ -1,6 +1,5 @@
package com.supervision.edh.service.handle.core;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.supervision.edh.domain.vo.EdhWhTempHumidityApplyInfoVO;
import com.supervision.edh.service.IEdhWhTempHumidityApplyInfoService;
import com.supervision.edh.service.handle.AbstractEventDataHandler;
@ -19,8 +18,8 @@ import org.springframework.util.CollectionUtils;
* @date 2025年06月21日 16:14:43
*/
@Service
@EventSubType("2052")
public class SubType2052Handler extends AbstractEventDataHandler<EdhWhTempHumidityApplyInfoVO> {
@EventSubType("2014")
public class SubType2014Handler extends AbstractEventDataHandler<EdhWhTempHumidityApplyInfoVO> {
protected final Logger log = LoggerFactory.getLogger(getClass());
@Autowired

View File

@ -7,9 +7,12 @@ import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.AsyncResult;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Future;
/**
* @author Jason
@ -22,10 +25,22 @@ public class EventProcessingServiceImpl{
private static final Logger logger = LoggerFactory.getLogger(EventProcessingServiceImpl.class);
private final EventHandlerFactory handlerFactory;
@Async
public void asyncProcessEvent(EventPojo eventPojo, String data,String eventId) {
EventDataHandler handler = handlerFactory.getHandler(eventPojo.getSubType());
handler.handleData(data,eventId);
// @Async
// public void asyncProcessEvent(EventPojo eventPojo, String data,String eventId) {
// EventDataHandler handler = handlerFactory.getHandler(eventPojo.getSubType());
// handler.handleData(data,eventId);
// }
@Async
public CompletableFuture<Void> asyncProcessEvent(EventPojo eventPojo, String data,String eventId) {
CompletableFuture<Void> future = new CompletableFuture<>();
try {
// 业务逻辑...
EventDataHandler handler = handlerFactory.getHandler(eventPojo.getSubType());
handler.handleData(data,eventId);
} catch (Exception e) {
future.completeExceptionally(e); // 传递异常
}
return future;
}
}

View File

@ -21,7 +21,7 @@ public class JsonUtils {
return mapper.readValue(json, clazz);
} catch (JsonProcessingException e) {
log.error("数据解析错误:"+e.getMessage());
throw new RuntimeException(e);
throw new RuntimeException("数据解析错误: " + e.getMessage()); // 自定义业务异常
}
}