longhu 4 долоо хоног өмнө
parent
commit
db9dc4dab3
21 өөрчлөгдсөн 246 нэмэгдсэн , 59 устгасан
  1. 23 0
      src/main/java/com/hr/config/aiwen/AiwenAlertConfig.java
  2. 5 0
      src/main/java/com/hr/controller/AggregateController.java
  3. 5 3
      src/main/java/com/hr/dto/AggregateQueryDTO.java
  4. 17 0
      src/main/java/com/hr/dto/ApiLogDto.java
  5. 18 18
      src/main/java/com/hr/externelSystem/AiwenIpService.java
  6. 2 1
      src/main/java/com/hr/externelSystem/BizHandler.java
  7. 60 3
      src/main/java/com/hr/externelSystem/BizHandlerFactory.java
  8. 6 1
      src/main/java/com/hr/externelSystem/GeestService.java
  9. 6 1
      src/main/java/com/hr/externelSystem/ShujubaoMobileNameService.java
  10. 6 1
      src/main/java/com/hr/externelSystem/ShujubaoMobileOwnerService.java
  11. 6 1
      src/main/java/com/hr/externelSystem/ShujubaoMobileStateService.java
  12. 6 2
      src/main/java/com/hr/externelSystem/ShujubaoThreeElementVerificationService.java
  13. 7 1
      src/main/java/com/hr/externelSystem/TencentFaceService.java
  14. 2 1
      src/main/java/com/hr/externelSystem/TencentOrcSignService.java
  15. 2 0
      src/main/java/com/hr/param/AggregateRequest.java
  16. 1 0
      src/main/java/com/hr/param/ShujubaoMobileNameParam.java
  17. 3 1
      src/main/java/com/hr/repository/domain/IpLogPO.java
  18. 20 4
      src/main/java/com/hr/service/impl/IpAccountServiceImpl.java
  19. 18 3
      src/main/java/com/hr/service/impl/IpInterfaceServiceImpl.java
  20. 32 18
      src/main/java/com/hr/service/impl/IpTokenInterfaceServiceImpl.java
  21. 1 0
      src/main/java/com/hr/vo/IpInterfaceVO.java

+ 23 - 0
src/main/java/com/hr/config/aiwen/AiwenAlertConfig.java

@@ -0,0 +1,23 @@
+package com.hr.config.aiwen;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@Data
+@ConfigurationProperties(prefix = "ip.pare")
+public class AiwenAlertConfig {
+    //ip调用次数限制
+    private Long ipmaxcallstart;
+    //在已经超量的情况下,直到大于这个数,还可以继续发送飞书超量消息
+    ;
+    //每xx次调用后,就要发一次预警消息
+    private Long ipstepcount;
+    //在已经超量的情况下,每增加xx次调用就发送一次异常消息,这个是通过在yml配置的配置项来控制
+    private Long ipstepcountexp;
+
+    private Long aiwenoverlimitstep;
+
+    private Long aiwennetworklimitstep;
+}

+ 5 - 0
src/main/java/com/hr/controller/AggregateController.java

@@ -4,6 +4,7 @@ import com.hr.dto.AggregateQueryDTO;
 import com.hr.externelSystem.BizHandlerFactory;
 import com.hr.param.AggregateRequest;
 import com.hr.repository.domain.IpInterfacePO;
+import com.hr.repository.domain.IpTokenPO;
 import com.hr.service.IpTokenInterfaceService;
 import com.hr.service.IpAccountService;
 import com.hr.service.IpInterfaceService;
@@ -56,6 +57,10 @@ public class AggregateController {
             return BaseReturnDto.error("接口已禁用");
         }
         AggregateQueryDTO dto = ipTokenInterfaceService.queryConfigByInterfaceCodeAndAccountNo(ipAccount.getId(), ipInterfaceVO.getId());
+        IpTokenPO ipTokenPO = dto.getIpTokenPO();
+        if(!ipTokenPO.getToken().equals(req.getToken())){
+            return BaseReturnDto.error("token错误");
+        }
         IpInterfacePO ipInterfacePO = new IpInterfacePO();
         BeanUtils.copyProperties(ipInterfaceVO, ipInterfacePO);
         dto.setIpInterfacePO(ipInterfacePO);

+ 5 - 3
src/main/java/com/hr/dto/AggregateQueryDTO.java

@@ -1,14 +1,16 @@
 package com.hr.dto;
 
 import com.hr.repository.domain.IpInterfacePO;
+import com.hr.repository.domain.IpTokenInterfacePO;
+import com.hr.repository.domain.IpTokenPO;
 import lombok.Data;
 
 @Data
 public class AggregateQueryDTO {
 
-    private String token;
+    private IpInterfacePO ipInterfacePO;
 
-    private String secret;
+    private IpTokenPO ipTokenPO;
 
-    private IpInterfacePO ipInterfacePO;
+    private IpTokenInterfacePO ipTokenInterfacePO;
 }

+ 17 - 0
src/main/java/com/hr/dto/ApiLogDto.java

@@ -0,0 +1,17 @@
+package com.hr.dto;
+
+import lombok.Data;
+
+@Data
+public class ApiLogDto {
+
+    private String responseParam;
+
+    private String errorMessage;
+
+    private String httpStatus;
+
+    private String url;
+
+    private String requestParam;
+}

+ 18 - 18
src/main/java/com/hr/externelSystem/AiwenIpService.java

@@ -2,7 +2,9 @@ package com.hr.externelSystem;
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson2.JSON;
+import com.hr.config.aiwen.AiwenAlertConfig;
 import com.hr.dto.AiwenDto;
+import com.hr.dto.ApiLogDto;
 import com.hr.param.AiwenParam;
 import com.hr.repository.domain.IpInterfacePO;
 import com.hr.service.FeishuMsgSendService;
@@ -15,6 +17,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.stereotype.Service;
 
@@ -34,6 +37,9 @@ public class AiwenIpService implements BizHandler<AiwenParam,AiwenParseIpInfoVO>
     @Autowired
     private RedisService redisService;
 
+    @Autowired
+    private AiwenAlertConfig aiwenAlertConfig;
+
     private Long callExceptionCount=0L;
 
     @Autowired
@@ -44,18 +50,7 @@ public class AiwenIpService implements BizHandler<AiwenParam,AiwenParseIpInfoVO>
     private Boolean cansendmsg=true;
     private Boolean cansendmaxmsg=true;
 
-    //ip调用次数限制
-    private Long ipmaxcallstart;
-    //在已经超量的情况下,直到大于这个数,还可以继续发送飞书超量消息
-    ;
-    //每xx次调用后,就要发一次预警消息
-    private Long ipstepcount;
-    //在已经超量的情况下,每增加xx次调用就发送一次异常消息,这个是通过在yml配置的配置项来控制
-    private Long ipstepcountexp;
 
-    private Long aiwenoverlimitstep;
-
-    private Long aiwennetworklimitstep;
 
     private Long callIpEmptyExceptionCount=0L;
 
@@ -71,7 +66,7 @@ public class AiwenIpService implements BizHandler<AiwenParam,AiwenParseIpInfoVO>
     }
 
     @Override
-    public AiwenParseIpInfoVO handle(AiwenParam aiwenIpParam, IpInterfacePO ipInterfacePO) {
+    public AiwenParseIpInfoVO handle(AiwenParam aiwenIpParam, IpInterfacePO ipInterfacePO, ApiLogDto logDto) {
         {
             String interfaceConfig = ipInterfacePO.getInterfaceConfig();
             AiwenDto aiwenDto = JSON.parseObject(interfaceConfig, AiwenDto.class);
@@ -159,17 +154,20 @@ public class AiwenIpService implements BizHandler<AiwenParam,AiwenParseIpInfoVO>
                 //原子加
                 Long count = valueOps.increment(curCallIpKey, 1L);
 
-                if(count<=ipmaxcallstart  ){
-                    if(count%ipstepcount==0) {
+                if(count<=aiwenAlertConfig.getIpmaxcallstart()  ){
+                    if(count%aiwenAlertConfig.getIpstepcount()==0) {
                         //触发消息
                         feishuMsgSendService.dealFeishuMsgSendIpGroup("[预警]," + curday + "埃文IP已调用[" + count.toString() + "]次," + formattedTime);
                     }
                 }
 
+                String url = aiwenDto.getUrl() + "/?key=" + aiwenDto.getKey() + "&ip=" + aiwenIpParam.getIp() + "&coordsys=WGS84";
+                logDto.setUrl(url);
                 // 调用接口解析ip地址信息
-                String response = HttpClientUtils.get(aiwenDto.getUrl() + "/?key="+aiwenDto.getKey()+"&ip=" + aiwenIpParam.getIp()+"&coordsys=WGS84", new HashMap());
+                String response = HttpClientUtils.get(url, new HashMap());
+                logDto.setResponseParam(response);
                 JSONObject ipParseJson = JSONObject.parseObject(response);
-
+                logDto.setHttpStatus(ipParseJson.getString("code"));
                 // 解析ip地址解析后的数据
                 if ("Success".equals(ipParseJson.getString("code"))) {
                     JSONObject data = ipParseJson.getJSONObject("data");
@@ -197,9 +195,10 @@ public class AiwenIpService implements BizHandler<AiwenParam,AiwenParseIpInfoVO>
                 }else{
                     if ("DailyLimited".equals(ipParseJson.getString("code")) ){
                         log.error("埃文科技解析ip调用超量了");
+                        logDto.setErrorMessage("埃文科技解析ip调用超量了");
                         if (null != redisUtil) {
                             limitFlag=1;
-                            if(count%aiwenoverlimitstep==1){
+                            if(count%aiwenAlertConfig.getAiwenoverlimitstep()==1){
                                 feishuMsgSendService.dealFeishuMsgSendIpGroup("[异常]" + curday + ",埃文IP调用返回值为已超量,现已达到了redis值["+count.toString()+"]次,"+formattedTime);
                             }
                         }
@@ -208,8 +207,9 @@ public class AiwenIpService implements BizHandler<AiwenParam,AiwenParseIpInfoVO>
                 }
             } catch (Exception e) {
                 log.info("埃文ip地址解析异常, {}", e.getMessage());
+                logDto.setErrorMessage("埃文ip地址解析异常");
                 Long counterr = redisService.redisTemplate.opsForValue().increment(curnetkey, 1L);
-                if(counterr%aiwennetworklimitstep==1) {
+                if(counterr%aiwenAlertConfig.getAiwennetworklimitstep()==1) {
                     feishuMsgSendService.dealFeishuMsgSendIpGroup("[异常]" + curday + ",埃文IP调用异常["+counterr+"]次,请检查服务是否正常");
                 }
                 callExceptionCount++;

+ 2 - 1
src/main/java/com/hr/externelSystem/BizHandler.java

@@ -1,12 +1,13 @@
 package com.hr.externelSystem;
 
 
+import com.hr.dto.ApiLogDto;
 import com.hr.repository.domain.IpInterfacePO;
 import com.hr.vo.ServiceTypeVO;
 
 public interface BizHandler<T,R> {
 
     ServiceTypeVO getType();
-    R handle(T t, IpInterfacePO ipInterfacePO);
+    R handle(T t, IpInterfacePO ipInterfacePO,ApiLogDto logDto);
     Class<T> getRequestClass();
 }

+ 60 - 3
src/main/java/com/hr/externelSystem/BizHandlerFactory.java

@@ -2,17 +2,23 @@ package com.hr.externelSystem;
 
 import com.alibaba.fastjson2.JSON;
 import com.hr.dto.AggregateQueryDTO;
+import com.hr.dto.ApiLogDto;
 import com.hr.param.AggregateRequest;
-import com.hr.repository.domain.IpInterfacePO;
+import com.hr.repository.domain.*;
+import com.hr.repository.jpa.IpLogRepository;
+import com.hr.repository.jpa.IpOrderRepository;
+import com.hr.util.SnowflakeIdWorker;
 import com.timevale.esign.paas.tech.util.AesUtil;
 import com.yy.basedevelop.common.data.BaseReturnDto;
 import com.yy.basedevelop.common.util.ruoyi.exception.ServiceException;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpStatus;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDateTime;
 import java.util.List;
 
 @Component
@@ -21,6 +27,10 @@ public class BizHandlerFactory {
 
     @Autowired
     private List<BizHandler> handlers;
+    @Autowired
+    private IpOrderRepository ipOrderRepository;
+    @Autowired
+    private IpLogRepository ipLogRepository;
 
     public BizHandler getHandler(String interfaceCode){
         for (BizHandler handler : handlers) {
@@ -40,12 +50,39 @@ public class BizHandlerFactory {
     public BaseReturnDto<T> dispatch(AggregateRequest req, AggregateQueryDTO dto) {
         IpInterfacePO ipInterfacePO = dto.getIpInterfacePO();
         BizHandler handler = getHandler(ipInterfacePO.getInterfaceNo());
+        IpOrderPO ipOrderPO = new IpOrderPO();
+        IpLogPO ipLogPO = new IpLogPO();
         String data = req.getData();
         try {
-            String decrypt = AesUtil.decrypt(data, dto.getSecret());
+            ApiLogDto logDto = new ApiLogDto();
+            IpTokenPO ipTokenPO = dto.getIpTokenPO();
+            String decrypt = AesUtil.decrypt(data, ipTokenPO.getSecret());
             Class requestClass = handler.getRequestClass();
             Object o = JSON.parseObject(decrypt, requestClass);
-            Object handle = handler.handle(o, ipInterfacePO);
+            wrapOrder(req, dto, ipOrderPO, ipInterfacePO,ipLogPO);
+            ipOrderPO.setOrderStatus("handle");
+            ipOrderRepository.save(ipOrderPO);
+            ipLogRepository.save(ipLogPO);
+            Object handle = handler.handle(o, ipInterfacePO,logDto);
+            ipLogPO.setSystemResponse(JSON.toJSONString(handle));
+            String errorMessage = logDto.getErrorMessage();
+            if(StringUtils.isEmpty(errorMessage)){
+                ipOrderPO.setOrderStatus("success");
+                ipLogPO.setStatus("success");
+
+            }else{
+                ipOrderPO.setOrderStatus("fail");
+                ipLogPO.setStatus("fail");
+            }
+            ipOrderPO.setUpdateTime(LocalDateTime.now());
+            ipLogPO.setUrl(logDto.getUrl());
+            ipLogPO.setRequestParam(logDto.getRequestParam());
+            ipLogPO.setUpdateTime(LocalDateTime.now());
+            ipLogPO.setResponseResult(logDto.getResponseParam());
+            ipLogPO.setHttpStatus(logDto.getHttpStatus());
+            ipLogPO.setMsg(logDto.getErrorMessage());
+            ipOrderRepository.save(ipOrderPO);
+            ipLogRepository.save(ipLogPO);
             return BaseReturnDto.success(handle);
         } catch (Exception e) {
             log.error("数据解密失败",JSON.toJSONString(req),e);
@@ -53,4 +90,24 @@ public class BizHandlerFactory {
         return BaseReturnDto.error(HttpStatus.SC_INTERNAL_SERVER_ERROR, "数据处理失败");
     }
 
+    private void wrapOrder(AggregateRequest req, AggregateQueryDTO dto, IpOrderPO ipOrderPO, IpInterfacePO ipInterfacePO, IpLogPO ipLogPO) {
+        IpTokenInterfacePO ipTokenInterfacePO = dto.getIpTokenInterfacePO();
+
+        ipOrderPO.setId(SnowflakeIdWorker.nextId());
+        ipOrderPO.setInterfaceName(ipInterfacePO.getInterfaceName());
+        ipOrderPO.setAccNo(req.getAccountNo());
+        ipOrderPO.setToken(req.getToken());
+        ipOrderPO.setCallbackNum(ipTokenInterfacePO.getCallbackNum());
+        ipOrderPO.setCallbackUrl(ipTokenInterfacePO.getCallbackUrl());
+        ipOrderPO.setCallbackNum(ipTokenInterfacePO.getCallbackNum());
+        ipOrderPO.setAddTime(LocalDateTime.now());
+
+
+        ipLogPO.setId(SnowflakeIdWorker.nextId());
+        ipLogPO.setOid(ipOrderPO.getId());
+        ipLogPO.setAddTime(LocalDateTime.now());
+        ipLogPO.setExecuteType("request");
+        ipLogPO.setStatus("handle");
+    }
+
 }

+ 6 - 1
src/main/java/com/hr/externelSystem/GeestService.java

@@ -1,6 +1,7 @@
 package com.hr.externelSystem;
 
 import com.alibaba.fastjson.JSON;
+import com.hr.dto.ApiLogDto;
 import com.hr.dto.GeetestConfigDTO;
 import com.hr.dto.GeetestDTO;
 import com.hr.param.GeestParam;
@@ -30,7 +31,7 @@ public class GeestService implements BizHandler<GeestParam, GeestVO> {
     }
 
     @Override
-    public GeestVO handle(GeestParam geestParam, IpInterfacePO ipInterfacePO) {
+    public GeestVO handle(GeestParam geestParam, IpInterfacePO ipInterfacePO, ApiLogDto logDto) {
         GeestVO vo = new GeestVO();
         vo.setCode(500);
         Map<String, Object> requestMap = new HashMap<>();
@@ -56,10 +57,14 @@ public class GeestService implements BizHandler<GeestParam, GeestVO> {
             head.put("Content-Type", "application/json");
             String json = JSON.toJSONString(requestMap);
             log.info("极验请求参数:{}",json);
+            logDto.setUrl(url);
+            logDto.setRequestParam(json);
             HttpResponse httpResponse = HttpUtils.doPost(url, null, null, head, null,json);
             String responseStr = EntityUtils.toString(httpResponse.getEntity());
+            logDto.setResponseParam(responseStr);
             log.info("极验验证结果:{}",responseStr);
             GeetestDTO dto = JSON.parseObject(responseStr, GeetestDTO.class);
+            logDto.setHttpStatus(dto.getStatus().toString());
             if(dto.getStatus() == 200){
                 mobile = dto.getResult();
                 vo.setCode(200);

+ 6 - 1
src/main/java/com/hr/externelSystem/ShujubaoMobileNameService.java

@@ -2,6 +2,7 @@ package com.hr.externelSystem;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.hr.dto.ApiLogDto;
 import com.hr.dto.ShujubaoMobileNameDto;
 import com.hr.param.ShujubaoMobileNameParam;
 import com.hr.repository.domain.IpInterfacePO;
@@ -25,7 +26,7 @@ public class ShujubaoMobileNameService implements BizHandler<ShujubaoMobileNameP
     }
 
     @Override
-    public Boolean handle(ShujubaoMobileNameParam shujubaoMobileNameParam, IpInterfacePO ipInterfacePO) {
+    public Boolean handle(ShujubaoMobileNameParam shujubaoMobileNameParam, IpInterfacePO ipInterfacePO, ApiLogDto logDto) {
         String interfaceConfig = ipInterfacePO.getInterfaceConfig();
         ShujubaoMobileNameDto paramDto = JSON.parseObject(interfaceConfig, ShujubaoMobileNameDto.class);
         Map<String, String> requestMap = new HashMap<>();
@@ -34,8 +35,12 @@ public class ShujubaoMobileNameService implements BizHandler<ShujubaoMobileNameP
         requestMap.put("mobile", shujubaoMobileNameParam.getMobile());
         Boolean result = true;
         try {
+            logDto.setUrl(paramDto.getUrl());
+            logDto.setRequestParam(JSON.toJSONString(requestMap));
             String checkResult = HttpClientUtils.post(paramDto.getUrl(), requestMap);
             JSONObject resultObj = JSON.parseObject(checkResult);
+            logDto.setResponseParam(checkResult);
+            logDto.setHttpStatus(resultObj.getString("code"));
             if (null != resultObj && "10000".equals(resultObj.getString("code")) && null != resultObj.getJSONObject("data") && "2".equals(resultObj.getJSONObject("data").getString("state"))){
                 return false;
             }

+ 6 - 1
src/main/java/com/hr/externelSystem/ShujubaoMobileOwnerService.java

@@ -2,6 +2,7 @@ package com.hr.externelSystem;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.hr.dto.ApiLogDto;
 import com.hr.dto.ShujubaoMobileNameDto;
 import com.hr.param.ShujubaoMobileNameParam;
 import com.hr.param.ShujubaoMobileOwnerParam;
@@ -31,7 +32,7 @@ public class ShujubaoMobileOwnerService implements BizHandler<ShujubaoMobileOwne
     }
 
     @Override
-    public ShujubaoMobileOwnerVO handle(ShujubaoMobileOwnerParam shujubaoMobileNameParam, IpInterfacePO ipInterfacePO) {
+    public ShujubaoMobileOwnerVO handle(ShujubaoMobileOwnerParam shujubaoMobileNameParam, IpInterfacePO ipInterfacePO, ApiLogDto logDto) {
 
         String interfaceConfig = ipInterfacePO.getInterfaceConfig();
         ShujubaoMobileNameDto paramDto = JSON.parseObject(interfaceConfig, ShujubaoMobileNameDto.class);
@@ -42,12 +43,16 @@ public class ShujubaoMobileOwnerService implements BizHandler<ShujubaoMobileOwne
         requestMap.put("mobile", shujubaoMobileNameParam.getMobile());
 
         try {
+            logDto.setUrl(paramDto.getUrl());
+            logDto.setRequestParam(JSON.toJSONString(requestMap));
             // 第三方接口调用
             String checkResult = HttpClientUtils.post(paramDto.getUrl(), requestMap);
             log.info("第三方接口解析手机号归属地返回信息: {}", checkResult);
 
             // 解析数据
             JSONObject resultObj = JSON.parseObject(checkResult);
+            logDto.setResponseParam(checkResult);
+            logDto.setHttpStatus(resultObj.getString("code"));
             if (null != resultObj && "10000".equals(resultObj.getString("code")) && null != resultObj.getJSONObject("data")){
                 JSONObject dataJson = resultObj.getJSONObject("data");
                 ShujubaoMobileOwnerVO result = JSON.toJavaObject(dataJson, ShujubaoMobileOwnerVO.class);

+ 6 - 1
src/main/java/com/hr/externelSystem/ShujubaoMobileStateService.java

@@ -3,6 +3,7 @@ package com.hr.externelSystem;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.api.naming.pojo.healthcheck.impl.Http;
+import com.hr.dto.ApiLogDto;
 import com.hr.dto.ShujubaoMobileNameDto;
 import com.hr.param.ShujubaoMobileNameParam;
 import com.hr.param.ShujubaoMobileOwnerParam;
@@ -28,7 +29,7 @@ public class ShujubaoMobileStateService implements BizHandler<ShujubaoMobileOwne
     }
 
     @Override
-    public Boolean handle(ShujubaoMobileOwnerParam shujubaoMobileNameParam, IpInterfacePO ipInterfacePO) {
+    public Boolean handle(ShujubaoMobileOwnerParam shujubaoMobileNameParam, IpInterfacePO ipInterfacePO, ApiLogDto logDto) {
         String interfaceConfig = ipInterfacePO.getInterfaceConfig();
         ShujubaoMobileNameDto paramDto = JSON.parseObject(interfaceConfig, ShujubaoMobileNameDto.class);
         Map<String, String> requestMap = new HashMap<>();
@@ -36,8 +37,12 @@ public class ShujubaoMobileStateService implements BizHandler<ShujubaoMobileOwne
         requestMap.put("mobile", shujubaoMobileNameParam.getMobile());
         Boolean result = true;
         try {
+            logDto.setUrl(paramDto.getUrl());
+            logDto.setRequestParam(JSON.toJSONString(requestMap));
             String checkResult = HttpClientUtils.post(paramDto.getUrl(), requestMap);
             JSONObject resultObj = JSON.parseObject(checkResult);
+            logDto.setResponseParam(checkResult);
+            logDto.setHttpStatus(resultObj.getString("code"));
             if (null != resultObj && "10000".equals(resultObj.getString("code")) && null != resultObj.getJSONObject("data")){
                 String state = resultObj.getJSONObject("data").getString("state");
                 if (StringUtils.isNotBlank(state) && ("2".equals(state) || "4".equals(state) || "5".equals(state))) {

+ 6 - 2
src/main/java/com/hr/externelSystem/ShujubaoThreeElementVerificationService.java

@@ -2,6 +2,7 @@ package com.hr.externelSystem;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.hr.dto.ApiLogDto;
 import com.hr.dto.ShujubaoMobileNameDto;
 import com.hr.param.ShujubaoMobileOwnerParam;
 import com.hr.param.ShujubaoTEVParam;
@@ -29,7 +30,7 @@ public class ShujubaoThreeElementVerificationService implements BizHandler<Shuju
     }
 
     @Override
-    public Boolean handle(ShujubaoTEVParam shujubaoTEVParam, IpInterfacePO ipInterfacePO) {
+    public Boolean handle(ShujubaoTEVParam shujubaoTEVParam, IpInterfacePO ipInterfacePO, ApiLogDto logDto) {
 
         String interfaceConfig = ipInterfacePO.getInterfaceConfig();
         ShujubaoMobileNameDto paramDto = JSON.parseObject(interfaceConfig, ShujubaoMobileNameDto.class);
@@ -41,12 +42,15 @@ public class ShujubaoThreeElementVerificationService implements BizHandler<Shuju
             requestMap.put("name", shujubaoTEVParam.getName());
             requestMap.put("idcard", shujubaoTEVParam.getIdCardNo());
             requestMap.put("mobile", shujubaoTEVParam.getMobile());
-
+            logDto.setUrl(paramDto.getUrl());
+            logDto.setRequestParam(JSON.toJSONString(requestMap));
             // 调用数据宝接口验证用户三要素是否一致
             String response = HttpClientUtils.post(paramDto.getUrl(), requestMap);
             log.info("调用【数据宝】三要素校验接口的结果为: {}", response);
 
             JSONObject respJson = JSONObject.parseObject(response);
+            logDto.setResponseParam(response);
+            logDto.setHttpStatus(respJson.getString("code"));
             if(null != respJson && Objects.equals(respJson.getString("code"), "10000")){
                 JSONObject dataJson = JSONObject.parseObject(respJson.getString("data"));
                 if(null != dataJson && dataJson.getInteger("state") != 3){

+ 7 - 1
src/main/java/com/hr/externelSystem/TencentFaceService.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
+import com.hr.dto.ApiLogDto;
 import com.hr.dto.TencentFaceDto;
 import com.hr.param.TencentFaceParam;
 import com.hr.repository.domain.IpInterfacePO;
@@ -45,7 +46,7 @@ public class TencentFaceService implements BizHandler<TencentFaceParam, OcrParam
     }
 
     @Override
-    public OcrParamVO handle(TencentFaceParam tencentFaceParam, IpInterfacePO ipInterfacePO) {
+    public OcrParamVO handle(TencentFaceParam tencentFaceParam, IpInterfacePO ipInterfacePO, ApiLogDto logDto) {
         {
             OcrParamVO ocrParamVO = new OcrParamVO();
             try {
@@ -74,8 +75,13 @@ public class TencentFaceService implements BizHandler<TencentFaceParam, OcrParam
                 String nonce_sign = SignatureUtil.generateSign2(tencentFaceDto.getAppId(), String.valueOf(tencentFaceParam.getUserId()), nonce, tencentFaceDto.getVersion(), NONCE_ticket);
                 jsonObject.put("sign",long_sign);
                 jsonObject.put("nonce", nonce);
+                logDto.setUrl(tencentFaceDto.getTicketUrl());
+                logDto.setRequestParam(JSON.toJSONString(jsonObject));
                 String post = HttpClientUtils.post(tencentFaceDto.getTicketUrl(), jsonObject.toJSONString());
+
                 JSONObject resultJson = JSON.parseObject(post);
+                logDto.setResponseParam(post);
+                logDto.setHttpStatus(resultJson.getString("code"));
                 if (resultJson.getString("code").equals(CODE)) {
                     ocrParamVO.setFaceId(String.valueOf(resultJson.getJSONObject("result").get("faceId")));
                     ocrParamVO.setAgreementNo(orderNo);

+ 2 - 1
src/main/java/com/hr/externelSystem/TencentOrcSignService.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
+import com.hr.dto.ApiLogDto;
 import com.hr.dto.TencentFaceDto;
 import com.hr.param.TencentFaceParam;
 import com.hr.param.TencentOcrSignParam;
@@ -45,7 +46,7 @@ public class TencentOrcSignService implements BizHandler<TencentOcrSignParam, Oc
     }
 
     @Override
-    public OcrParamVO handle(TencentOcrSignParam tencentFaceParam, IpInterfacePO ipInterfacePO) {
+    public OcrParamVO handle(TencentOcrSignParam tencentFaceParam, IpInterfacePO ipInterfacePO, ApiLogDto logDto) {
 
         String interfaceConfig = ipInterfacePO.getInterfaceConfig();
         TencentFaceDto tencentFaceDto = JSON.parseObject(interfaceConfig, TencentFaceDto.class);

+ 2 - 0
src/main/java/com/hr/param/AggregateRequest.java

@@ -11,6 +11,8 @@ public class AggregateRequest {
 
         private String accountNo;
 
+        private String token;
+
         private String interfaceCode;
 
         private String data;

+ 1 - 0
src/main/java/com/hr/param/ShujubaoMobileNameParam.java

@@ -1,5 +1,6 @@
 package com.hr.param;
 
+import com.timevale.esign.paas.tech.util.AesUtil;
 import lombok.Data;
 
 @Data

+ 3 - 1
src/main/java/com/hr/repository/domain/IpLogPO.java

@@ -22,7 +22,7 @@ public class IpLogPO implements Serializable,Cloneable{
     private Long id ;
     @Column(name="oid")
     /** 调用记录表主键,; */
-    private String oid ;
+    private Long oid ;
     /** 调用编号(业务编号),唯一,格式为年月日时分秒毫秒加6位随机数
 20250918010256001000001,; */
     @Column(name="order_no")
@@ -48,6 +48,8 @@ public class IpLogPO implements Serializable,Cloneable{
     /** 异常信息,存储调用时的各种程序异常信息,; */
     @Column(name="msg")
     private String msg ;
+    @Column(name="system_response")
+    private String systemResponse;
     /** 创建时间,; */
     @Column(name="add_time")
     private LocalDateTime addTime ;

+ 20 - 4
src/main/java/com/hr/service/impl/IpAccountServiceImpl.java

@@ -1,6 +1,9 @@
 package com.hr.service.impl;
 
 
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import com.hr.dto.AggregateQueryDTO;
 import com.hr.param.IpAccountParam;
 import com.hr.param.SwitchStatusParam;
 import com.hr.repository.domain.IpAccountPO;
@@ -20,6 +23,7 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.concurrent.TimeUnit;
 
 /**
  * 账户表;(ip_account)表服务接口实现类
@@ -31,6 +35,10 @@ public class IpAccountServiceImpl implements IpAccountService {
     @Autowired
     private IpAccountRepository ipAccountRepository;
 
+    private static final Cache<String, IpAccountVO> QUERY_CACHE = CacheBuilder.newBuilder()
+            .expireAfterWrite(100, TimeUnit.SECONDS)
+            .build();
+
     /** 
      * 通过ID查询单条数据 
      *
@@ -98,10 +106,18 @@ public class IpAccountServiceImpl implements IpAccountService {
 
     @Override
     public IpAccountVO queryByAccountNo(String accountNo) {
-        IpAccountVO vo = new IpAccountVO();
-        IpAccountPO accountPO = ipAccountRepository.findByAccNo(accountNo);
-        BeanUtils.copyProperties(accountPO,vo);
-        return vo;
+        String key = "queryByAccountNo";
+        IpAccountVO cacheValue = QUERY_CACHE.getIfPresent(key);
+        if(cacheValue != null){
+            return cacheValue;
+        }else{
+            IpAccountVO vo = new IpAccountVO();
+            IpAccountPO accountPO = ipAccountRepository.findByAccNo(accountNo);
+            BeanUtils.copyProperties(accountPO,vo);
+            QUERY_CACHE.put(key, vo);
+            return vo;
+        }
+
     }
 
     @Override

+ 18 - 3
src/main/java/com/hr/service/impl/IpInterfaceServiceImpl.java

@@ -1,5 +1,7 @@
 package com.hr.service.impl;
 
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
 import com.hr.param.InterfaceConfigParam;
 import com.hr.param.IpInterfaceParam;
 import com.hr.param.SwitchStatusParam;
@@ -7,6 +9,7 @@ import com.hr.repository.domain.IpInterfacePO;
 import com.hr.repository.jpa.IpInterfaceRepository;
 import com.hr.service.IpInterfaceService;
 import com.hr.util.SnowflakeIdWorker;
+import com.hr.vo.IpAccountVO;
 import com.hr.vo.IpInterfaceVO;
 import com.hr.vo.NameValueVO;
 import org.springframework.beans.BeanUtils;
@@ -18,6 +21,7 @@ import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -29,6 +33,10 @@ import java.util.stream.Collectors;
 public class IpInterfaceServiceImpl implements IpInterfaceService {
     @Autowired
     private IpInterfaceRepository ipInterfaceRepository;
+
+    private static final Cache<String, IpInterfaceVO> QUERY_CACHE = CacheBuilder.newBuilder()
+            .expireAfterWrite(100, TimeUnit.SECONDS)
+            .build();
     
     /** 
      * 通过ID查询单条数据 
@@ -94,9 +102,16 @@ public class IpInterfaceServiceImpl implements IpInterfaceService {
 
     @Override
     public IpInterfaceVO queryByInterfaceCode(String interfaceCode) {
-        IpInterfaceVO vo = new IpInterfaceVO();
-        IpInterfacePO interfaceNo = ipInterfaceRepository.findByInterfaceNo(interfaceCode);
-        BeanUtils.copyProperties(interfaceNo,vo);
+        String key = "queryByInterfaceCode";
+        IpInterfaceVO vo = QUERY_CACHE.getIfPresent(key);
+        if(vo != null){
+            return vo;
+        }else{
+            vo = new IpInterfaceVO();
+            IpInterfacePO interfaceNo = ipInterfaceRepository.findByInterfaceNo(interfaceCode);
+            BeanUtils.copyProperties(interfaceNo,vo);
+            QUERY_CACHE.put(key, vo);
+        }
         return vo;
     }
 

+ 32 - 18
src/main/java/com/hr/service/impl/IpTokenInterfaceServiceImpl.java

@@ -1,5 +1,7 @@
 package com.hr.service.impl;
 
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
 import com.hr.dto.AggregateQueryDTO;
 import com.hr.param.AccountInterfaceParam;
 import com.hr.param.InterfaceConfigParam;
@@ -25,6 +27,7 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -41,6 +44,10 @@ public class IpTokenInterfaceServiceImpl implements IpTokenInterfaceService {
     @Autowired
     private IpInterfaceRepository ipInterfaceRepository;
 
+    private static final Cache<String, AggregateQueryDTO> QUERY_CACHE = CacheBuilder.newBuilder()
+            .expireAfterWrite(100, TimeUnit.SECONDS)
+            .build();
+
     /** 
      * 通过ID查询单条数据 
      *
@@ -151,25 +158,32 @@ public class IpTokenInterfaceServiceImpl implements IpTokenInterfaceService {
 
     @Override
     public AggregateQueryDTO queryConfigByInterfaceCodeAndAccountNo(Long accountId, Long interfaceId) {
-        AggregateQueryDTO resultDTO = new AggregateQueryDTO();
-        ExampleMatcher matcher = ExampleMatcher.matchingAll()
-                .withIgnoreNullValues()                              // 忽略 null 字段
-                .withMatcher("aid", ExampleMatcher.GenericPropertyMatchers.exact())
-                .withMatcher("iid", ExampleMatcher.GenericPropertyMatchers.exact())
-                .withIgnoreCase();
-        IpTokenInterfacePO po = new IpTokenInterfacePO();
-        po.setAid(accountId);
-        po.setIid(interfaceId);
-        Example<IpTokenInterfacePO> example = Example.of(po, matcher);
-        List<IpTokenInterfacePO> interfacePOList = ipTokenInterfaceRepository.findAll(example);
-        if(!interfacePOList.isEmpty()){
-            IpTokenInterfacePO first = interfacePOList.getFirst();
-            Long tid = first.getTid();
-            IpTokenPO ipTokenPO = ipTokenRepository.findById(tid).get();
-            resultDTO.setToken(ipTokenPO.getToken());
-            resultDTO.setSecret(ipTokenPO.getSecret());
+        String key = "queryConfigByInterfaceCodeAndAccountNo";
+        AggregateQueryDTO aggregateQueryDTO = QUERY_CACHE.getIfPresent(key);
+        if(aggregateQueryDTO != null){
+            return aggregateQueryDTO;
+        }else{
+            AggregateQueryDTO resultDTO = new AggregateQueryDTO();
+            ExampleMatcher matcher = ExampleMatcher.matchingAll()
+                    .withIgnoreNullValues()                              // 忽略 null 字段
+                    .withMatcher("aid", ExampleMatcher.GenericPropertyMatchers.exact())
+                    .withMatcher("iid", ExampleMatcher.GenericPropertyMatchers.exact())
+                    .withIgnoreCase();
+            IpTokenInterfacePO po = new IpTokenInterfacePO();
+            po.setAid(accountId);
+            po.setIid(interfaceId);
+            Example<IpTokenInterfacePO> example = Example.of(po, matcher);
+            List<IpTokenInterfacePO> interfacePOList = ipTokenInterfaceRepository.findAll(example);
+            if(!interfacePOList.isEmpty()){
+                IpTokenInterfacePO first = interfacePOList.getFirst();
+                Long tid = first.getTid();
+                IpTokenPO ipTokenPO = ipTokenRepository.findById(tid).get();
+                resultDTO.setIpTokenPO(ipTokenPO);
+                resultDTO.setIpTokenInterfacePO(first);
+            }
+            QUERY_CACHE.put(key, resultDTO);
+            return resultDTO;
         }
-        return resultDTO;
     }
 
     @Override

+ 1 - 0
src/main/java/com/hr/vo/IpInterfaceVO.java

@@ -18,6 +18,7 @@ public class IpInterfaceVO implements Serializable,Cloneable{
     private Long id ;
     /** 接口名称,名称唯一,; */
     private String interfaceName ;
+    private String interfaceNo;
     /** 接口厂商,; */
     private String manufacturer ;
     /** 备注,; */