longhu 4 долоо хоног өмнө
parent
commit
0805985427
23 өөрчлөгдсөн 339 нэмэгдсэн , 60 устгасан
  1. 1 1
      src/main/java/com/hr/controller/AggregateController.java
  2. 4 2
      src/main/java/com/hr/controller/IpAccountController.java
  3. 15 11
      src/main/java/com/hr/controller/IpInterfaceController.java
  4. 11 0
      src/main/java/com/hr/dto/GeetestConfigDTO.java
  5. 5 5
      src/main/java/com/hr/externelSystem/GeestService.java
  6. 1 1
      src/main/java/com/hr/externelSystem/ShujubaoMobileOwnerService.java
  7. 1 1
      src/main/java/com/hr/externelSystem/ShujubaoMobileStateService.java
  8. 73 0
      src/main/java/com/hr/externelSystem/ShujubaoThreeElementVerificationService.java
  9. 1 1
      src/main/java/com/hr/externelSystem/TencentOrcSignService.java
  10. 9 0
      src/main/java/com/hr/param/AccountInterfaceParam.java
  11. 12 0
      src/main/java/com/hr/param/InterfaceConfigParam.java
  12. 13 0
      src/main/java/com/hr/param/ShujubaoTEVParam.java
  13. 4 1
      src/main/java/com/hr/repository/domain/IpTokenInterfacePO.java
  14. 2 2
      src/main/java/com/hr/repository/domain/IpTokenPO.java
  15. 2 1
      src/main/java/com/hr/repository/jpa/IpAccountRepository.java
  16. 2 1
      src/main/java/com/hr/repository/jpa/IpInterfaceRepository.java
  17. 3 1
      src/main/java/com/hr/repository/jpa/IpTokenRepository.java
  18. 6 5
      src/main/java/com/hr/service/IpAccountService.java
  19. 6 2
      src/main/java/com/hr/service/IpTokenInterfaceService.java
  20. 27 10
      src/main/java/com/hr/service/impl/IpAccountServiceImpl.java
  21. 91 13
      src/main/java/com/hr/service/impl/IpTokenInterfaceServiceImpl.java
  22. 48 0
      src/main/java/com/hr/vo/AccountInterfaceVO.java
  23. 2 2
      src/main/java/com/hr/vo/IpAccountVO.java

+ 1 - 1
src/main/java/com/hr/controller/AggregateController.java

@@ -4,7 +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.service.IpTokenInterfaceService;
+import com.hr.service.IpTokenInterfaceService;
 import com.hr.service.IpAccountService;
 import com.hr.service.IpInterfaceService;
 import com.hr.vo.IpAccountVO;

+ 4 - 2
src/main/java/com/hr/controller/IpAccountController.java

@@ -62,7 +62,8 @@ public class IpAccountController{
     @Operation(summary = "通过主键删除数据")
     @DeleteMapping
     public BaseReturnDto<Boolean> deleteById(Long id){
-        return BaseReturnDto.success(ipAccountService.deleteById(id));
+        LoginUser user = TokenUtil.getUser();
+        return BaseReturnDto.success(ipAccountService.deleteById(id,user));
     }
 
     /**
@@ -74,6 +75,7 @@ public class IpAccountController{
     @Operation(summary = "修改状态")
     @PostMapping("/switchStatus")
     public BaseReturnDto<Boolean> switchStatus(@RequestBody SwitchStatusParam switchStatusParam){
-        return BaseReturnDto.success(ipAccountService.switchStatus(switchStatusParam));
+        LoginUser user = TokenUtil.getUser();
+        return BaseReturnDto.success(ipAccountService.switchStatus(switchStatusParam,user));
     }
 }

+ 15 - 11
src/main/java/com/hr/controller/IpInterfaceController.java

@@ -1,14 +1,12 @@
 package com.hr.controller;
 
+import com.hr.param.AccountInterfaceParam;
 import com.hr.param.InterfaceConfigParam;
 import com.hr.param.IpInterfaceParam;
 import com.hr.param.SwitchStatusParam;
-import com.hr.repository.service.IpTokenInterfaceService;
+import com.hr.service.IpTokenInterfaceService;
 import com.hr.service.IpInterfaceService;
-import com.hr.vo.IpAccountVO;
-import com.hr.vo.IpInterfaceVO;
-import com.hr.vo.NameValueVO;
-import com.hr.vo.SecretVO;
+import com.hr.vo.*;
 import com.yy.basedevelop.common.data.BasePageResult;
 import com.yy.basedevelop.common.data.BaseReturnDto;
 import com.yy.basedevelop.common.http.config.TokenUtil;
@@ -20,9 +18,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Random;
-import java.util.UUID;
-
 /**
  * 接口管理
  * @author : longhoo
@@ -126,14 +121,23 @@ public class IpInterfaceController {
 
 
    /**
-     * 删除配置
+     * 删除账号接口配置
      */
     @Operation(summary = "删除账号关联的接口")
     @DeleteMapping("/delAccountInterface/{id}")
     public BaseReturnDto delAccountInterface(@PathVariable Long id){
-        ipTokenInterfaceService.delAccountInterface(id);
+        LoginUser user = TokenUtil.getUser();
+        ipTokenInterfaceService.delAccountInterface(id,user);
         return BaseReturnDto.success();
     }
 
-
+    /**
+     * 查询账号下关联的接口列表
+     */
+    @Operation(summary = "查询账号下关联的接口列表")
+    @DeleteMapping("/account/ref/list")
+    public BasePageResult<AccountInterfaceVO> accountInterfaceList(@RequestBody AccountInterfaceParam pageParam){
+        Page<AccountInterfaceVO> result = ipTokenInterfaceService.accountInterfaceList(pageParam);
+        return BasePageResult.success(result.getContent(), result.getTotalElements(), pageParam.getPageNum(), pageParam.getPageSize());
+    }
 }

+ 11 - 0
src/main/java/com/hr/dto/GeetestConfigDTO.java

@@ -0,0 +1,11 @@
+package com.hr.dto;
+
+import lombok.Data;
+
+@Data
+public class GeetestConfigDTO {
+
+    private String appId;
+    private String appKey;
+    private String url;
+}

+ 5 - 5
src/main/java/com/hr/externelSystem/GeestService.java

@@ -1,7 +1,7 @@
 package com.hr.externelSystem;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
+import com.hr.dto.GeetestConfigDTO;
 import com.hr.dto.GeetestDTO;
 import com.hr.param.GeestParam;
 import com.hr.repository.domain.IpInterfacePO;
@@ -38,11 +38,11 @@ public class GeestService implements BizHandler<GeestParam, GeestVO> {
         String mobile = null;
         requestMap.put("process_id", geestParam.getProcessId());
         String interfaceConfig = ipInterfacePO.getInterfaceConfig();
-        JSONObject jsonObject = JSON.parseObject(interfaceConfig);
+        GeetestConfigDTO geetestConfigDTO = JSON.parseObject(interfaceConfig, GeetestConfigDTO.class);
 
-        String geestAppId = jsonObject.getString("appId");
-        String geestAppKey = jsonObject.getString("appKey");
-        String url = jsonObject.getString("url");
+        String geestAppId = geetestConfigDTO.getAppId();
+        String geestAppKey = geetestConfigDTO.getAppKey();
+        String url = geetestConfigDTO.getUrl();
 
         log.info("使用的geestAppId: {}, 使用的geestAppKey: {}", geestAppId, geestAppKey);
         String originText = geestAppId + "&&" + systemTimeMills;

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

@@ -27,7 +27,7 @@ public class ShujubaoMobileOwnerService implements BizHandler<ShujubaoMobileOwne
     private static final List<String> MOBILE_TOP_THREE_OPERATOR = Arrays.asList("移动","联通","电信");
     @Override
     public ServiceTypeVO getType() {
-        return new ServiceTypeVO("shujubaoMobileName","数据宝手机号姓名二要素");
+        return new ServiceTypeVO("shujubaoMobileOwner","数据宝手机号归属地");
     }
 
     @Override

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

@@ -24,7 +24,7 @@ import java.util.Map;
 public class ShujubaoMobileStateService implements BizHandler<ShujubaoMobileOwnerParam,Boolean>{
     @Override
     public ServiceTypeVO getType() {
-        return new ServiceTypeVO("shujubaoMobileName","数据宝手机号姓名二要素");
+        return new ServiceTypeVO("shujubaoMobileState","数据宝手机号空号检测");
     }
 
     @Override

+ 73 - 0
src/main/java/com/hr/externelSystem/ShujubaoThreeElementVerificationService.java

@@ -0,0 +1,73 @@
+package com.hr.externelSystem;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.hr.dto.ShujubaoMobileNameDto;
+import com.hr.param.ShujubaoMobileOwnerParam;
+import com.hr.param.ShujubaoTEVParam;
+import com.hr.repository.domain.IpInterfacePO;
+import com.hr.vo.ServiceTypeVO;
+import com.hr.vo.ShujubaoMobileOwnerVO;
+import com.yy.basedevelop.common.util.HttpClientUtils;
+import com.yy.basedevelop.common.util.tiangua.aliyunoss.DateUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 数据宝手机号归属地服务
+ */
+@Service
+@Slf4j
+public class ShujubaoThreeElementVerificationService implements BizHandler<ShujubaoTEVParam,Boolean>{
+
+
+    @Override
+    public ServiceTypeVO getType() {
+        return new ServiceTypeVO("shujubaoTEV","数据宝三要素校验");
+    }
+
+    @Override
+    public Boolean handle(ShujubaoTEVParam shujubaoTEVParam, IpInterfacePO ipInterfacePO) {
+
+        String interfaceConfig = ipInterfacePO.getInterfaceConfig();
+        ShujubaoMobileNameDto paramDto = JSON.parseObject(interfaceConfig, ShujubaoMobileNameDto.class);
+
+
+        try {
+            Map<String, String> requestMap = new HashMap<>();
+            requestMap.put("key", paramDto.getKey());
+            requestMap.put("name", shujubaoTEVParam.getName());
+            requestMap.put("idcard", shujubaoTEVParam.getIdCardNo());
+            requestMap.put("mobile", shujubaoTEVParam.getMobile());
+
+            // 调用数据宝接口验证用户三要素是否一致
+            String response = HttpClientUtils.post(paramDto.getUrl(), requestMap);
+            log.info("调用【数据宝】三要素校验接口的结果为: {}", response);
+
+            JSONObject respJson = JSONObject.parseObject(response);
+            if(null != respJson && Objects.equals(respJson.getString("code"), "10000")){
+                JSONObject dataJson = JSONObject.parseObject(respJson.getString("data"));
+                if(null != dataJson && dataJson.getInteger("state") != 3){
+                    switch (dataJson.getInteger("state")){
+                        case 1:
+                           return true;
+                        case 2:
+                            return false;
+                        default:
+                            return false;
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.info("三要素校验接口调用失败, 失败原因: {},", e.getMessage(), e);
+        }
+        return false;
+    }
+
+    @Override
+    public Class<ShujubaoTEVParam> getRequestClass() {
+        return ShujubaoTEVParam.class;
+    }
+}

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

@@ -41,7 +41,7 @@ public class TencentOrcSignService implements BizHandler<TencentOcrSignParam, Oc
 
     @Override
     public ServiceTypeVO getType() {
-        return new ServiceTypeVO("tencentOcrSign", "腾讯OCR");
+        return new ServiceTypeVO("tencentOcrSign", "腾讯OCR签名");
     }
 
     @Override

+ 9 - 0
src/main/java/com/hr/param/AccountInterfaceParam.java

@@ -0,0 +1,9 @@
+package com.hr.param;
+
+import lombok.Data;
+
+@Data
+public class AccountInterfaceParam extends PageParam{
+
+    private Long id;
+}

+ 12 - 0
src/main/java/com/hr/param/InterfaceConfigParam.java

@@ -1,5 +1,6 @@
 package com.hr.param;
 
+import com.alibaba.fastjson2.JSON;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -35,4 +36,15 @@ public class InterfaceConfigParam {
 
     @Schema(description = "备注")
     private String remark;
+
+    static void main() {
+        InterfaceConfigParam param = new InterfaceConfigParam();
+        param.setAccountId(450206229784128L);
+        param.setInterfaceId(450291268687936L);
+        param.setSecret("3d6e9d3037ebea66ac90c20e67066b130b88a918212ba4a437f957f6d2e3aefb");
+        param.setStatus("normal");
+        param.setRemark("数据宝手机号姓名二要素");
+        System.out.println(JSON.toJSON( param));
+
+    }
 }

+ 13 - 0
src/main/java/com/hr/param/ShujubaoTEVParam.java

@@ -0,0 +1,13 @@
+package com.hr.param;
+
+import lombok.Data;
+
+@Data
+public class ShujubaoTEVParam {
+
+    private String mobile;
+
+    private String name;
+
+    private String idCardNo;
+}

+ 4 - 1
src/main/java/com/hr/repository/domain/IpTokenInterfacePO.java

@@ -1,5 +1,6 @@
 package com.hr.repository.domain;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.persistence.Column;
 import jakarta.persistence.Entity;
 import jakarta.persistence.Id;
@@ -39,7 +40,7 @@ public class IpTokenInterfacePO implements Serializable,Cloneable{
     private String callbackUrl ;
     /** 回调次数,尝试回调的次数,超过次数则不再回调,; */
     @Column(name = "callback_num")
-    private int callbackNum ;
+    private Integer callbackNum ;
     /** 创建时间,; */
     @Column(name = "add_time")
     private LocalDateTime addTime ;
@@ -58,4 +59,6 @@ public class IpTokenInterfacePO implements Serializable,Cloneable{
     /** 更新人姓名,; */
     @Column(name = "update_user_name")
     private String updateUserName ;
+     @Schema(description = "状态,normal 有效,disable 禁用,delete 删除")
+    private String status;
 }

+ 2 - 2
src/main/java/com/hr/repository/domain/IpTokenPO.java

@@ -34,8 +34,8 @@ public class IpTokenPO implements Serializable,Cloneable{
     @Column(name = "remark")
     private String remark ;
     /** 状态,normal 有效,disable 禁用,delete 删除,; */
-    @Column(name = "token_status")
-    private String tokenStatus ;
+    @Column(name = "status")
+    private String  status ;
     /** 创建时间,; */
     @Column(name = "add_time")
     private LocalDateTime addTime ;

+ 2 - 1
src/main/java/com/hr/repository/jpa/IpAccountRepository.java

@@ -4,6 +4,7 @@ import com.hr.param.IpAccountParam;
 import com.hr.repository.domain.IpAccountPO;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 import java.util.List;
 
@@ -13,7 +14,7 @@ import java.util.List;
  * @date : 2025-10-10
  */
 
-public interface IpAccountRepository extends JpaRepository<IpAccountPO, Long> {
+public interface IpAccountRepository extends JpaRepository<IpAccountPO, Long> , JpaSpecificationExecutor<IpAccountPO> {
 
     IpAccountPO queryById(Long aid);
 

+ 2 - 1
src/main/java/com/hr/repository/jpa/IpInterfaceRepository.java

@@ -2,6 +2,7 @@ package com.hr.repository.jpa;
 
 import com.hr.repository.domain.IpInterfacePO;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 import java.util.List;
 
@@ -10,7 +11,7 @@ import java.util.List;
  * @author : Longhoo
  * @date : 2025-10-10
  */
-public interface IpInterfaceRepository extends JpaRepository<IpInterfacePO,Long> {
+public interface IpInterfaceRepository extends JpaRepository<IpInterfacePO,Long>, JpaSpecificationExecutor<IpInterfacePO> {
 
 //    IpInterfacePO findById(Long id);
 

+ 3 - 1
src/main/java/com/hr/repository/jpa/IpTokenRepository.java

@@ -1,7 +1,9 @@
 package com.hr.repository.jpa;
 
+import com.hr.repository.domain.IpAccountPO;
 import com.hr.repository.domain.IpTokenPO;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 import java.util.List;
 
@@ -10,7 +12,7 @@ import java.util.List;
  * @author : Longhoo
  * @date : 2025-10-10
  */
-public interface IpTokenRepository extends JpaRepository<IpTokenPO,Long> {
+public interface IpTokenRepository extends JpaRepository<IpTokenPO,Long> ,JpaSpecificationExecutor<IpTokenPO> {
 
     IpTokenPO queryById(Long id);
 

+ 6 - 5
src/main/java/com/hr/service/IpAccountService.java

@@ -1,11 +1,11 @@
 package com.hr.service;
 
 
-import com.github.pagehelper.PageInfo;
 import com.hr.param.IpAccountParam;
 import com.hr.param.SwitchStatusParam;
 import com.hr.repository.domain.IpAccountPO;
 import com.hr.vo.IpAccountVO;
+import com.yy.basedevelop.dto.LoginUser;
 import org.springframework.data.domain.Page;
 
 /**
@@ -46,17 +46,18 @@ public interface IpAccountService{
      * @return 实例对象
      */
     void update(IpAccountPO IpAccountPO);
-    /** 
+    /**
      * 通过主键删除数据
      *
-     * @param aid 主键
+     * @param aid  主键
+     * @param user
      * @return 是否成功
      */
-    boolean deleteById(Long aid);
+    boolean deleteById(Long aid, LoginUser user);
 
     void saveOrUpdate(IpAccountParam accountParam, String userName, Long userId);
 
-    Boolean switchStatus(SwitchStatusParam switchStatusParam);
+    Boolean switchStatus(SwitchStatusParam switchStatusParam,LoginUser user);
 
     IpAccountVO queryByAccountNo(String accountNo);
 }

+ 6 - 2
src/main/java/com/hr/repository/service/IpTokenInterfaceService.java → src/main/java/com/hr/service/IpTokenInterfaceService.java

@@ -1,8 +1,10 @@
-package com.hr.repository.service;
+package com.hr.service;
 
 import com.hr.dto.AggregateQueryDTO;
+import com.hr.param.AccountInterfaceParam;
 import com.hr.param.InterfaceConfigParam;
 import com.hr.repository.domain.IpTokenInterfacePO;
+import com.hr.vo.AccountInterfaceVO;
 import com.hr.vo.IpTokenInterfaceVO;
 import com.yy.basedevelop.dto.LoginUser;
 import org.springframework.data.domain.Page;
@@ -55,7 +57,9 @@ public interface IpTokenInterfaceService{
 
     void interfaceConfig(InterfaceConfigParam param, LoginUser user);
 
-    void delAccountInterface(Long id);
+    void delAccountInterface(Long id, LoginUser user);
 
     AggregateQueryDTO queryConfigByInterfaceCodeAndAccountNo(Long  accoutId, Long interfaceId);
+
+    Page<AccountInterfaceVO> accountInterfaceList(AccountInterfaceParam pageParam);
 }

+ 27 - 10
src/main/java/com/hr/service/impl/IpAccountServiceImpl.java

@@ -4,15 +4,16 @@ package com.hr.service.impl;
 import com.hr.param.IpAccountParam;
 import com.hr.param.SwitchStatusParam;
 import com.hr.repository.domain.IpAccountPO;
-import com.hr.repository.domain.IpInterfacePO;
 import com.hr.repository.jpa.IpAccountRepository;
 import com.hr.service.IpAccountService;
 import com.hr.util.SnowflakeIdWorker;
 import com.hr.vo.IpAccountVO;
+import com.yy.basedevelop.dto.LoginUser;
+import jakarta.persistence.criteria.Predicate;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
 import org.springframework.data.domain.*;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
@@ -50,12 +51,18 @@ public class IpAccountServiceImpl implements IpAccountService {
     public Page<IpAccountVO> paginQuery(IpAccountParam ipAccountParam, Integer current, Integer size) {
         IpAccountPO ipAccountPO = new IpAccountPO();
         BeanUtils.copyProperties(ipAccountParam, ipAccountPO);
-        ExampleMatcher matcher = ExampleMatcher.matchingAll()
-                .withIgnoreNullValues()                              // 忽略 null 字段
-                .withIgnoreCase();
         Pageable pageAble = PageRequest.of(current, size);
-        Example<IpAccountPO> example = Example.of(ipAccountPO, matcher);
-        Page<IpAccountPO> page = ipAccountRepository.findAll(example, pageAble);
+        Specification<IpAccountPO> spec = (root, query, cb) -> {
+
+            List<Predicate> predicates = new ArrayList<>();
+            if (ipAccountParam.getAccNo() != null) {
+                predicates.add(cb.like(root.get("accNo"), "%" + ipAccountParam.getAccNo() + "%"));
+            }
+            predicates.add(cb.notEqual(root.get("status"), "delete"));
+            return cb.and(predicates.toArray(new Predicate[0]));
+        };
+
+        Page<IpAccountPO> page = ipAccountRepository.findAll(spec, pageAble);
         List<IpAccountVO> resultList = new ArrayList<>();
 
         page.getContent().forEach(item -> {
@@ -88,6 +95,7 @@ public class IpAccountServiceImpl implements IpAccountService {
         ipAccountRepository.save(IpAccountPO);
     }
 
+
     @Override
     public IpAccountVO queryByAccountNo(String accountNo) {
         IpAccountVO vo = new IpAccountVO();
@@ -97,12 +105,15 @@ public class IpAccountServiceImpl implements IpAccountService {
     }
 
     @Override
-    public Boolean switchStatus(SwitchStatusParam switchStatusParam) {
+    public Boolean switchStatus(SwitchStatusParam switchStatusParam,LoginUser user) {
         Optional<IpAccountPO> optional = ipAccountRepository.findById(switchStatusParam.getId());
         if(!optional.isPresent()){
             throw new RuntimeException("接口不存在");
         }
         IpAccountPO ipAccountPO = optional.get();
+        ipAccountPO.setUpdateTime(LocalDateTime.now());
+        ipAccountPO.setUpdateUserId(user.getUserid());
+        ipAccountPO.setUpdateUserName(user.getUsername());
         ipAccountPO.setStatus(switchStatusParam.getStatus());
         ipAccountRepository.save(ipAccountPO);
         return true;
@@ -135,11 +146,17 @@ public class IpAccountServiceImpl implements IpAccountService {
     /**
      * 通过主键删除数据
      *
-     * @param id 主键
+     * @param id   主键
+     * @param user
      * @return 是否成功
      */
-    public boolean deleteById(Long id){
+    public boolean deleteById(Long id, LoginUser user){
         ipAccountRepository.deleteById(id);
+        IpAccountPO ipAccountPO = ipAccountRepository.findById(id).get();
+        ipAccountPO.setUpdateTime(LocalDateTime.now());
+        ipAccountPO.setUpdateUserId(user.getUserid());
+        ipAccountPO.setUpdateUserName(user.getUsername());
+        ipAccountRepository.save(ipAccountPO);
         return true;
     }
 }

+ 91 - 13
src/main/java/com/hr/repository/service/impl/IpTokenInterfaceServiceImpl.java → src/main/java/com/hr/service/impl/IpTokenInterfaceServiceImpl.java

@@ -1,24 +1,31 @@
-package com.hr.repository.service.impl;
+package com.hr.service.impl;
 
 import com.hr.dto.AggregateQueryDTO;
+import com.hr.param.AccountInterfaceParam;
 import com.hr.param.InterfaceConfigParam;
+import com.hr.repository.domain.IpAccountPO;
+import com.hr.repository.domain.IpInterfacePO;
 import com.hr.repository.domain.IpTokenInterfacePO;
 import com.hr.repository.domain.IpTokenPO;
+import com.hr.repository.jpa.IpInterfaceRepository;
 import com.hr.repository.jpa.IpTokenInterfaceRepository;
 import com.hr.repository.jpa.IpTokenRepository;
-import com.hr.repository.service.IpTokenInterfaceService;
+import com.hr.service.IpTokenInterfaceService;
 import com.hr.util.SnowflakeIdWorker;
+import com.hr.vo.AccountInterfaceVO;
+import com.hr.vo.IpAccountVO;
 import com.hr.vo.IpTokenInterfaceVO;
 import com.yy.basedevelop.dto.LoginUser;
-import org.springdoc.core.converters.FileSupportConverter;
+import jakarta.persistence.criteria.Predicate;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.*;
+import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * token与接口关系表;(ip_token_interface)表服务接口实现类
@@ -32,9 +39,7 @@ public class IpTokenInterfaceServiceImpl implements IpTokenInterfaceService {
     @Autowired
     private IpTokenRepository ipTokenRepository;
     @Autowired
-    private IpTokenInterfaceService ipTokenInterfaceService;
-    @Autowired
-    private FileSupportConverter fileSupportConverter;
+    private IpInterfaceRepository ipInterfaceRepository;
 
     /** 
      * 通过ID查询单条数据 
@@ -84,6 +89,66 @@ public class IpTokenInterfaceServiceImpl implements IpTokenInterfaceService {
          return result;
      }
 
+    @Override
+    public Page<AccountInterfaceVO> accountInterfaceList(AccountInterfaceParam pageParam) {
+        ExampleMatcher matcher = ExampleMatcher.matchingAll()
+                .withIgnoreNullValues()                              // 忽略 null 字段
+                .withMatcher("aid", ExampleMatcher.GenericPropertyMatchers.exact())
+                .withMatcher("status", ExampleMatcher.GenericPropertyMatchers.exact())
+                .withIgnoreCase();
+        IpTokenInterfacePO po = new IpTokenInterfacePO();
+        po.setStatus("normal");
+        Pageable pageAble = PageRequest.of(pageParam.getPageNum(), pageParam.getPageSize());
+        Example<IpTokenInterfacePO> example = Example.of(po, matcher);
+        Page<IpTokenInterfacePO> result = ipTokenInterfaceRepository.findAll(example, pageAble);
+        List<IpTokenInterfacePO> content = result.getContent();
+
+        List<Long> tokenIdList = new ArrayList<>();
+        List<Long> interfaceIdList = new ArrayList<>();
+        for (IpTokenInterfacePO interfacePO : content) {
+            tokenIdList.add(interfacePO.getTid());
+            interfaceIdList.add(interfacePO.getIid());
+        }
+        Map<Long, IpTokenPO> tokenMap = new HashMap<>();
+        Map<Long, IpInterfacePO> interfaceMap = new HashMap<>();
+        if(!tokenIdList.isEmpty()){
+            Specification<IpTokenPO> spec = (root, query, cb) -> {
+                return root.get("id").in(tokenIdList);
+            };
+            List<IpTokenPO> ipTokenList = ipTokenRepository.findAll(spec);
+            for (IpTokenPO ipTokenPO : ipTokenList) {
+                tokenMap.put(ipTokenPO.getId(), ipTokenPO);
+            }
+        }
+
+
+        if(!interfaceIdList.isEmpty()){
+            Specification<IpInterfacePO> spec = (root, query, cb) -> {
+                return root.get("id").in(interfaceIdList);
+            };
+            List<IpInterfacePO> ipInterfacePOList = ipInterfaceRepository.findAll(spec);
+            for (IpInterfacePO interfacePO : ipInterfacePOList) {
+                interfaceMap.put(interfacePO.getId(), interfacePO);
+            }
+        }
+        List<AccountInterfaceVO> resultList = content.stream().map(item -> {
+            AccountInterfaceVO vo = new AccountInterfaceVO();
+            BeanUtils.copyProperties(item, vo);
+            IpTokenPO ipTokenPO = tokenMap.get(item.getTid());
+            vo.setSecret(ipTokenPO.getSecret());
+            vo.setRemark(ipTokenPO.getRemark());
+            IpInterfacePO ipInterfacePO = interfaceMap.get(item.getIid());
+            vo.setInterfaceCode(ipInterfacePO.getInterfaceNo());
+            vo.setInterfaceName(ipInterfacePO.getInterfaceName());
+            vo.setManufacturer(ipInterfacePO.getManufacturer());
+            return vo;
+        }).collect(Collectors.toList());
+        Page<AccountInterfaceVO> resultPage = new PageImpl(resultList);
+        BeanUtils.copyProperties(result, resultPage);
+        return resultPage;
+
+    }
+
     @Override
     public AggregateQueryDTO queryConfigByInterfaceCodeAndAccountNo(Long accountId, Long interfaceId) {
         AggregateQueryDTO resultDTO = new AggregateQueryDTO();
@@ -108,15 +173,26 @@ public class IpTokenInterfaceServiceImpl implements IpTokenInterfaceService {
     }
 
     @Override
-    public void delAccountInterface(Long id) {
+    public void delAccountInterface(Long id, LoginUser user) {
         Optional<IpTokenInterfacePO> ipTokenInterfacePOOptional = ipTokenInterfaceRepository.findById(id);
         if(!ipTokenInterfacePOOptional.isPresent()){
             throw new RuntimeException("参数异常");
         }
         IpTokenInterfacePO ipTokenInterfacePO = ipTokenInterfacePOOptional.get();
         Long tid = ipTokenInterfacePO.getTid();
-        ipTokenInterfaceRepository.deleteById(id);
-        ipTokenRepository.deleteById(tid);
+        IpTokenPO ipTokenPO = ipTokenRepository.findById(tid).get();
+        ipTokenPO.setUpdateUserId(user.getUserid());
+        ipTokenPO.setUpdateUserName(user.getUsername());
+        ipTokenPO.setUpdateTime(LocalDateTime.now());
+        ipTokenPO.setStatus("delete");
+        ipTokenRepository.save(ipTokenPO);
+
+        ipTokenInterfacePO.setUpdateUserId(user.getUserid());
+        ipTokenInterfacePO.setUpdateUserName(user.getUsername());
+        ipTokenInterfacePO.setUpdateTime(LocalDateTime.now());
+        ipTokenInterfacePO.setStatus("delete");
+        ipTokenInterfaceRepository.save(ipTokenInterfacePO);
+
     }
 
     @Override
@@ -142,6 +218,7 @@ public class IpTokenInterfaceServiceImpl implements IpTokenInterfaceService {
             ipTokenInterfacePO.setAid(param.getAccountId());
             ipTokenInterfacePO.setIid(param.getInterfaceId());
             ipTokenInterfacePO.setAddTime(now);
+            ipTokenInterfacePO.setStatus("normal");
             ipTokenInterfacePO.setAddUserId(user.getUserid());
             ipTokenInterfacePO.setAddUserName(user.getUsername());
             ipTokenInterfacePO.setId(SnowflakeIdWorker.nextId());
@@ -152,15 +229,16 @@ public class IpTokenInterfaceServiceImpl implements IpTokenInterfaceService {
             ipTokenInterfacePO.setTid(ipTokenPO.getId());
         }
         ipTokenPO.setToken(token);
+        ipTokenPO.setSecret(param.getSecret());
         ipTokenPO.setUpdateTime(now);
-        ipTokenPO.setTokenStatus(param.getStatus());
+        ipTokenPO.setStatus(param.getStatus());
         ipTokenPO.setUpdateUserName(user.getUsername());
         ipTokenPO.setUpdateUserId(user.getUserid());
         ipTokenRepository.save(ipTokenPO);
         ipTokenInterfacePO.setUpdateTime(now);
         ipTokenInterfacePO.setUpdateUserName(user.getUsername());
         ipTokenInterfacePO.setUpdateUserId(user.getUserid());
-        ipTokenInterfacePO.setCallbackNum(param.getCallbackNum());
+        ipTokenInterfacePO.setCallbackNum(param.getCallbackNum() == null ? 0 : param.getCallbackNum());
         ipTokenInterfacePO.setIsCallback(param.getCallback());
         ipTokenInterfacePO.setCallbackUrl(param.getCallbackUrl());
         ipTokenInterfaceRepository.save(ipTokenInterfacePO);

+ 48 - 0
src/main/java/com/hr/vo/AccountInterfaceVO.java

@@ -0,0 +1,48 @@
+package com.hr.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+public class AccountInterfaceVO implements Serializable {
+
+    @Schema(description = "id")
+    private Long id;
+
+    @Schema(description = "接口名称")
+    private String interfaceName;
+
+    @Schema(description = "接口编码")
+    private String interfaceCode;
+
+    @Schema(description = "厂商")
+    private String manufacturer;
+
+    @Schema(description = "状态")
+    private String status;
+
+    @Schema(description = "备注")
+    private String remark;
+
+    @Schema(description = "是否回调")
+    private Boolean callback;
+    @Schema(description = "回调地址")
+    private String callbackUrl;
+    @Schema(description = "回调次数")
+    private Integer callbackNum;
+
+    @Schema(description = "secret")
+    private String secret;
+
+    @Schema(description = "创建人")
+    private String addUserName;
+
+    @Schema(description = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime addTime;
+
+}

+ 2 - 2
src/main/java/com/hr/vo/IpAccountVO.java

@@ -31,9 +31,9 @@ public class IpAccountVO implements Serializable,Cloneable{
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime updateTime ;
     /** 创建人id,; */
-    private String addUserId ;
+    private Long addUserId ;
     /** 更新人id,; */
-    private String updateUserId ;
+    private Long updateUserId ;
     /** 创建人姓名,; */
     private String addUserName ;
     /** 更新人姓名,; */