فهرست منبع

1. 使用永诚提供地省市区 地址身份证号 获取省市区

wks 2 سال پیش
والد
کامیت
76d2064a73

+ 5 - 0
pom.xml

@@ -541,6 +541,11 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-thymeleaf</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>transmittable-thread-local</artifactId>
+            <version>2.14.3</version>
+        </dependency>
 
     </dependencies>
 

+ 38 - 0
src/main/java/com/ydtech/aop/DynamicNameAspect.java

@@ -0,0 +1,38 @@
+package com.ydtech.aop;
+
+import com.ydtech.aop.annotations.DynamicName;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.util.StringUtils;
+
+
+/**
+ * @description: 使用切面获取表名
+ * @author: wenks
+ * @date: 2023/12/1 16:28
+ **/
+@Aspect
+@Slf4j
+public class DynamicNameAspect {
+
+    @Around("@annotation(dynamicName)")
+    public Object around(ProceedingJoinPoint joinPoint, DynamicName dynamicName) throws Throwable {
+        try {
+            String tableName = dynamicName.tableName();
+            if (!StringUtils.hasText(tableName)) {
+                return joinPoint.proceed();
+            }
+
+            DynamicTableNameHelper.set(tableName);
+            return joinPoint.proceed();
+        } finally {
+            // 释放缓存内容
+            DynamicTableNameHelper.remove();
+        }
+    }
+
+
+}
+

+ 24 - 0
src/main/java/com/ydtech/aop/DynamicTableNameHandler.java

@@ -0,0 +1,24 @@
+package com.ydtech.aop;
+
+import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
+import org.springframework.util.StringUtils;
+
+/**
+ * @description: 动态表名处理器
+ * @author: wenks
+ * @date: 2023/12/1 16:29
+ **/
+public class DynamicTableNameHandler implements TableNameHandler {
+
+    @Override
+    public String dynamicTableName(String sql, String tableName) {
+        String tableNameSuffix = DynamicTableNameHelper.get();
+
+        if (StringUtils.hasText(tableNameSuffix)) {
+            return tableNameSuffix;
+        }
+
+        return tableName;
+    }
+
+}

+ 32 - 0
src/main/java/com/ydtech/aop/DynamicTableNameHelper.java

@@ -0,0 +1,32 @@
+package com.ydtech.aop;
+
+import com.alibaba.ttl.TransmittableThreadLocal;
+
+/**
+ * @description: 表名 ThreadLocal
+ * @author: wenks
+ * @date: 2023/12/1 16:28
+ **/
+
+public class DynamicTableNameHelper {
+
+    private static final ThreadLocal<String> TABLE_NAMES = new TransmittableThreadLocal<>();
+
+    private DynamicTableNameHelper() {
+    }
+
+
+    public static void set(String stationNo) {
+        TABLE_NAMES.set(stationNo);
+    }
+
+    public static void remove() {
+        TABLE_NAMES.remove();
+    }
+
+    public static String get() {
+        return TABLE_NAMES.get();
+    }
+
+
+}

+ 19 - 0
src/main/java/com/ydtech/aop/annotations/DynamicName.java

@@ -0,0 +1,19 @@
+package com.ydtech.aop.annotations;
+
+import java.lang.annotation.*;
+
+/**
+ * @description: 表名注解
+ * @author: wenks
+ * @date: 2023/12/1 16:29
+ **/
+@Target({ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DynamicName {
+
+    /**
+     * spel 表达式
+     */
+    String tableName();
+}

+ 11 - 4
src/main/java/com/ydtech/config/MvcConfig.java

@@ -9,7 +9,10 @@ import cn.dev33.satoken.stp.StpUtil;
 import cn.dev33.satoken.util.SaResult;
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.ydtech.aop.DynamicNameAspect;
+import com.ydtech.aop.DynamicTableNameHandler;
 import com.ydtech.aop.RequestStringParamHandlerMethodArgumentResolver;
 import com.ydtech.components.CorsInterceptor;
 import com.ydtech.components.TokenInterceptor;
@@ -127,13 +130,17 @@ public class MvcConfig implements WebMvcConfigurer {
     }
 
     @Bean
-    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+    public DynamicNameAspect dynamicNameAspect() {
+        return new DynamicNameAspect();
+    }
 
-        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
-        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
-        return mybatisPlusInterceptor;
+    @Bean
+    public TableNameHandler dynamicTableNameHandler() {
+        return new DynamicTableNameHandler();
     }
 
+
+
     /**
      * 获取单个参数
      *

+ 20 - 0
src/main/java/com/ydtech/config/MybatisPlusConfig.java

@@ -1,13 +1,33 @@
 package com.ydtech.config;
 
+import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
+import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import com.ydtech.handler.CreateAndUpdateMetaObjectHandler;
+import lombok.RequiredArgsConstructor;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
 @Configuration
+@RequiredArgsConstructor
 public class MybatisPlusConfig {
 
+    private  final TableNameHandler tableNameHandler;
+
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
+        // 需要放到第一位,切记不要放错,不然会导致动态表名切换失效
+        dynamicTableNameInnerInterceptor.setTableNameHandler(tableNameHandler);
+        interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        return interceptor;
+    }
+
     /**
      * 元对象字段填充控制器
      */

+ 1 - 0
src/main/java/com/ydtech/modules/admin/controller/SysAreaController.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.admin.controller;
 
 import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.admin.model.vo.PersonAreaVo;
 import com.ydtech.modules.admin.model.vo.SysAreaVo;
 import com.ydtech.modules.admin.service.SysAreaService;
 import io.swagger.annotations.Api;

+ 2 - 0
src/main/java/com/ydtech/modules/admin/dao/SysAreaMapper.java

@@ -3,6 +3,8 @@ package com.ydtech.modules.admin.dao;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ydtech.modules.admin.model.SysArea;
 
+import java.util.List;
+
 /**
 * @author Administrator
 * @description 针对表【sys_area(省市县代码)】的数据库操作Mapper

+ 17 - 1
src/main/java/com/ydtech/modules/admin/service/SysAreaService.java

@@ -1,6 +1,7 @@
 package com.ydtech.modules.admin.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydtech.aop.annotations.DynamicName;
 import com.ydtech.modules.admin.model.SysArea;
 import com.ydtech.modules.admin.model.vo.PersonAreaVo;
 import com.ydtech.modules.admin.model.vo.SysAreaVo;
@@ -26,6 +27,7 @@ public interface SysAreaService extends IService<SysArea> {
 
     /**
      * 获取所有上级数据
+     *
      * @param sysArea
      * @return
      */
@@ -33,9 +35,23 @@ public interface SysAreaService extends IService<SysArea> {
 
     /**
      * 通过地址身份证号 获取省市区
-     * @param address
+     *
+     * @param address 地址
      * @return
      */
     PersonAreaVo queryByAddress(String address, String idcard);
 
+    /**
+     * 使用永诚提供地省市区 地址身份证号 获取省市区
+     *
+     * @param address 地址
+     * @param idcard  身份证
+     * @return 省市区实体
+     */
+    @DynamicName(tableName = "ins_yongcheng_area")
+    default PersonAreaVo queryByAddressYc(String address, String idcard) {
+        return queryByAddress(address, idcard);
+    }
+
+
 }

+ 1 - 0
src/main/java/com/ydtech/modules/admin/service/impl/SysAreaServiceImpl.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.admin.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydtech.aop.annotations.DynamicName;
 import com.ydtech.modules.admin.dao.SysAreaMapper;
 import com.ydtech.modules.admin.model.SysArea;
 import com.ydtech.modules.admin.model.vo.PersonAreaVo;

+ 4 - 4
src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java

@@ -582,7 +582,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         Audit m = Audit.buildAuditParam(ownerInfo, insureInfo, applyInfo, ycConfigureParameters, iac);
 
         //投保人地区信息
-        PersonAreaVo personAreaVo = sysAreaService.queryByAddress(insureInfo.getAddr(), insureInfo.getIdentifyNumber());
+        PersonAreaVo personAreaVo = sysAreaService.queryByAddressYc(insureInfo.getAddr(), insureInfo.getIdentifyNumber());
 
         //构造被保人地区
         m.getRequestLabel().getCondition().getCustomer().setCProvince(personAreaVo.getProvinceCode().toString());
@@ -1415,7 +1415,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         }
 
         //车主地区信息
-        PersonAreaVo ownerPersonAreaVo = sysAreaService.queryByAddress(owner.getAddr(), owner.getIdentifyNumber());
+        PersonAreaVo ownerPersonAreaVo = sysAreaService.queryByAddressYc(owner.getAddr(), owner.getIdentifyNumber());
         PersonAreaVo insuredPersonAreaVo;
         PersonAreaVo applicantPersonAreaVo;
 
@@ -1424,7 +1424,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
             insuredPersonAreaVo = ownerPersonAreaVo;
         } else {
             //投保人地区信息
-            insuredPersonAreaVo = sysAreaService.queryByAddress(insured.getAddr(), insured.getIdentifyNumber());
+            insuredPersonAreaVo = sysAreaService.queryByAddressYc(insured.getAddr(), insured.getIdentifyNumber());
         }
 
         //车主是否与被保人相同
@@ -1434,7 +1434,7 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
             if (insured.getIdentifyNumber().equals(applicant.getIdentifyNumber())) {
                 applicantPersonAreaVo = insuredPersonAreaVo;
             } else {
-                applicantPersonAreaVo = sysAreaService.queryByAddress(applicant.getAddr(),
+                applicantPersonAreaVo = sysAreaService.queryByAddressYc(applicant.getAddr(),
                         applicant.getIdentifyNumber());
             }