From 7f1f76de3d59a413bded292d5b07b8dddba4250b Mon Sep 17 00:00:00 2001 From: huzhengkao <562572218@qq.com> Date: Thu, 26 Jun 2025 13:50:38 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supervision/edh/SupervisionEdhClient.java | 5 +- .../SupervisionEdhServerController.java | 47 ++++++++++++++++--- .../edh/domain/EdhReceiveDataLog.java | 2 +- ...14Handler.java => SubType1011Handler.java} | 10 +--- ...15Handler.java => SubType1012Handler.java} | 8 +--- ...18Handler.java => SubType1013Handler.java} | 7 +-- ...15Handler.java => SubType2011Handler.java} | 7 +-- ...16Handler.java => SubType2012Handler.java} | 5 +- ...19Handler.java => SubType2013Handler.java} | 8 +--- ...52Handler.java => SubType2014Handler.java} | 5 +- .../impl/EventProcessingServiceImpl.java | 23 +++++++-- .../com/supervision/edh/utils/JsonUtils.java | 2 +- 12 files changed, 76 insertions(+), 53 deletions(-) rename src/main/java/com/supervision/edh/service/handle/core/{SubType1014Handler.java => SubType1011Handler.java} (89%) rename src/main/java/com/supervision/edh/service/handle/core/{SubType1015Handler.java => SubType1012Handler.java} (91%) rename src/main/java/com/supervision/edh/service/handle/core/{SubType1018Handler.java => SubType1013Handler.java} (84%) rename src/main/java/com/supervision/edh/service/handle/core/{SubType2015Handler.java => SubType2011Handler.java} (93%) rename src/main/java/com/supervision/edh/service/handle/core/{SubType2016Handler.java => SubType2012Handler.java} (96%) rename src/main/java/com/supervision/edh/service/handle/core/{SubType2019Handler.java => SubType2013Handler.java} (88%) rename src/main/java/com/supervision/edh/service/handle/core/{SubType2052Handler.java => SubType2014Handler.java} (91%) diff --git a/src/main/java/com/supervision/edh/SupervisionEdhClient.java b/src/main/java/com/supervision/edh/SupervisionEdhClient.java index c2cfd4f..7c9fc9c 100644 --- a/src/main/java/com/supervision/edh/SupervisionEdhClient.java +++ b/src/main/java/com/supervision/edh/SupervisionEdhClient.java @@ -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.*; /** * 请求客户端 diff --git a/src/main/java/com/supervision/edh/controller/SupervisionEdhServerController.java b/src/main/java/com/supervision/edh/controller/SupervisionEdhServerController.java index dc7efa3..8ac53df 100644 --- a/src/main/java/com/supervision/edh/controller/SupervisionEdhServerController.java +++ b/src/main/java/com/supervision/edh/controller/SupervisionEdhServerController.java @@ -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 paramsTemp = JSON.parseObject(body); System.out.println(paramsTemp); Map 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 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) { diff --git a/src/main/java/com/supervision/edh/domain/EdhReceiveDataLog.java b/src/main/java/com/supervision/edh/domain/EdhReceiveDataLog.java index c8e93b3..7f86c57 100644 --- a/src/main/java/com/supervision/edh/domain/EdhReceiveDataLog.java +++ b/src/main/java/com/supervision/edh/domain/EdhReceiveDataLog.java @@ -39,7 +39,7 @@ public class EdhReceiveDataLog { private Date createTime; - private Date updateTime; + private Date eventTime; private Date isDeleted; diff --git a/src/main/java/com/supervision/edh/service/handle/core/SubType1014Handler.java b/src/main/java/com/supervision/edh/service/handle/core/SubType1011Handler.java similarity index 89% rename from src/main/java/com/supervision/edh/service/handle/core/SubType1014Handler.java rename to src/main/java/com/supervision/edh/service/handle/core/SubType1011Handler.java index f4cfea5..8655456 100644 --- a/src/main/java/com/supervision/edh/service/handle/core/SubType1014Handler.java +++ b/src/main/java/com/supervision/edh/service/handle/core/SubType1011Handler.java @@ -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 { +@EventSubType("1011") +public class SubType1011Handler extends AbstractEventDataHandler { protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired diff --git a/src/main/java/com/supervision/edh/service/handle/core/SubType1015Handler.java b/src/main/java/com/supervision/edh/service/handle/core/SubType1012Handler.java similarity index 91% rename from src/main/java/com/supervision/edh/service/handle/core/SubType1015Handler.java rename to src/main/java/com/supervision/edh/service/handle/core/SubType1012Handler.java index 489cf00..762721a 100644 --- a/src/main/java/com/supervision/edh/service/handle/core/SubType1015Handler.java +++ b/src/main/java/com/supervision/edh/service/handle/core/SubType1012Handler.java @@ -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 { +@EventSubType("1012") +public class SubType1012Handler extends AbstractEventDataHandler { protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired diff --git a/src/main/java/com/supervision/edh/service/handle/core/SubType1018Handler.java b/src/main/java/com/supervision/edh/service/handle/core/SubType1013Handler.java similarity index 84% rename from src/main/java/com/supervision/edh/service/handle/core/SubType1018Handler.java rename to src/main/java/com/supervision/edh/service/handle/core/SubType1013Handler.java index 6291552..dddb3a8 100644 --- a/src/main/java/com/supervision/edh/service/handle/core/SubType1018Handler.java +++ b/src/main/java/com/supervision/edh/service/handle/core/SubType1013Handler.java @@ -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 { +@EventSubType("1013") +public class SubType1013Handler extends AbstractEventDataHandler { protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired diff --git a/src/main/java/com/supervision/edh/service/handle/core/SubType2015Handler.java b/src/main/java/com/supervision/edh/service/handle/core/SubType2011Handler.java similarity index 93% rename from src/main/java/com/supervision/edh/service/handle/core/SubType2015Handler.java rename to src/main/java/com/supervision/edh/service/handle/core/SubType2011Handler.java index b6840d4..a69b856 100644 --- a/src/main/java/com/supervision/edh/service/handle/core/SubType2015Handler.java +++ b/src/main/java/com/supervision/edh/service/handle/core/SubType2011Handler.java @@ -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 { +@EventSubType("2011") +public class SubType2011Handler extends AbstractEventDataHandler { protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired diff --git a/src/main/java/com/supervision/edh/service/handle/core/SubType2016Handler.java b/src/main/java/com/supervision/edh/service/handle/core/SubType2012Handler.java similarity index 96% rename from src/main/java/com/supervision/edh/service/handle/core/SubType2016Handler.java rename to src/main/java/com/supervision/edh/service/handle/core/SubType2012Handler.java index a3c6554..37ee630 100644 --- a/src/main/java/com/supervision/edh/service/handle/core/SubType2016Handler.java +++ b/src/main/java/com/supervision/edh/service/handle/core/SubType2012Handler.java @@ -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 { +@EventSubType("2012") +public class SubType2012Handler extends AbstractEventDataHandler { protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired diff --git a/src/main/java/com/supervision/edh/service/handle/core/SubType2019Handler.java b/src/main/java/com/supervision/edh/service/handle/core/SubType2013Handler.java similarity index 88% rename from src/main/java/com/supervision/edh/service/handle/core/SubType2019Handler.java rename to src/main/java/com/supervision/edh/service/handle/core/SubType2013Handler.java index 48455ef..3589df0 100644 --- a/src/main/java/com/supervision/edh/service/handle/core/SubType2019Handler.java +++ b/src/main/java/com/supervision/edh/service/handle/core/SubType2013Handler.java @@ -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 { +@EventSubType("2013") +public class SubType2013Handler extends AbstractEventDataHandler { protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired diff --git a/src/main/java/com/supervision/edh/service/handle/core/SubType2052Handler.java b/src/main/java/com/supervision/edh/service/handle/core/SubType2014Handler.java similarity index 91% rename from src/main/java/com/supervision/edh/service/handle/core/SubType2052Handler.java rename to src/main/java/com/supervision/edh/service/handle/core/SubType2014Handler.java index 7d55975..81fa663 100644 --- a/src/main/java/com/supervision/edh/service/handle/core/SubType2052Handler.java +++ b/src/main/java/com/supervision/edh/service/handle/core/SubType2014Handler.java @@ -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 { +@EventSubType("2014") +public class SubType2014Handler extends AbstractEventDataHandler { protected final Logger log = LoggerFactory.getLogger(getClass()); @Autowired diff --git a/src/main/java/com/supervision/edh/service/impl/EventProcessingServiceImpl.java b/src/main/java/com/supervision/edh/service/impl/EventProcessingServiceImpl.java index b960f5d..f3c8f5a 100644 --- a/src/main/java/com/supervision/edh/service/impl/EventProcessingServiceImpl.java +++ b/src/main/java/com/supervision/edh/service/impl/EventProcessingServiceImpl.java @@ -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 asyncProcessEvent(EventPojo eventPojo, String data,String eventId) { + CompletableFuture future = new CompletableFuture<>(); + try { + // 业务逻辑... + EventDataHandler handler = handlerFactory.getHandler(eventPojo.getSubType()); + handler.handleData(data,eventId); + } catch (Exception e) { + future.completeExceptionally(e); // 传递异常 + } + return future; } } diff --git a/src/main/java/com/supervision/edh/utils/JsonUtils.java b/src/main/java/com/supervision/edh/utils/JsonUtils.java index 891db8a..0bbbbf8 100644 --- a/src/main/java/com/supervision/edh/utils/JsonUtils.java +++ b/src/main/java/com/supervision/edh/utils/JsonUtils.java @@ -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()); // 自定义业务异常 } }