Jelajahi Sumber

水平分表用户收支明细

mac 2 tahun lalu
induk
melakukan
7ad88472fd

+ 14 - 1
kxs-common/kxs-common-mybatis/src/main/java/com/kxs/common/mybatis/MybatisAutoConfiguration.java

@@ -2,7 +2,10 @@ package com.kxs.common.mybatis;
 
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
 import com.kxs.common.mybatis.config.MybatisPlusMetaObjectHandler;
+import com.kxs.common.mybatis.handler.MonthTableNameHandler;
 import com.kxs.common.mybatis.plugins.SkyPaginationInnerInterceptor;
 import com.kxs.common.mybatis.resolver.SqlFilterArgumentResolver;
 import org.springframework.context.annotation.Bean;
@@ -32,12 +35,22 @@ public class MybatisAutoConfiguration implements WebMvcConfigurer {
 	}
 
 	/**
-	 * 分页插件, 对于单一数据库类型来说,都建议配置该值,避免每次分页都去抓取数据库类型
+	 * 1.分页插件, 对于单一数据库类型来说,都建议配置该值,避免每次分页都去抓取数据库类型
+	 * 2.针对 update 和 delete 语句 作用: 阻止恶意的全表更新删除
+	 * 3.动态分表
 	 */
 	@Bean
 	public MybatisPlusInterceptor mybatisPlusInterceptor() {
 		MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
 		interceptor.addInnerInterceptor(new SkyPaginationInnerInterceptor());
+		//针对 update 和 delete 语句 作用: 阻止恶意的全表更新删除
+		interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
+		//动态分表
+		DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
+		dynamicTableNameInnerInterceptor.setTableNameHandler(
+				new MonthTableNameHandler("kxs_user_amount_log")
+		);
+		interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
 		return interceptor;
 	}
 

+ 0 - 40
kxs-common/kxs-common-mybatis/src/main/java/com/kxs/common/mybatis/config/MybatisPlusConfig.java

@@ -1,40 +0,0 @@
-package com.kxs.common.mybatis.config;
-
-import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
-import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
-import com.kxs.common.mybatis.handler.MonthTableNameHandler;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.Random;
-
-/**
- * mybatis plus 配置
- *
- * @author 没秃顶的码农
- * @date 2024-03-18
- */
-@Configuration
-public class MybatisPlusConfig {
-
-    /**
-     * @return {@link MybatisPlusInterceptor}
-     */
-    @Bean
-    public MybatisPlusInterceptor mybatisPlusInterceptor() {
-        //针对 update 和 delete 语句 作用: 阻止恶意的全表更新删除
-        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
-        interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());
-
-        //动态分表
-        DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
-        dynamicTableNameInnerInterceptor.setTableNameHandler(
-                new MonthTableNameHandler("kxs_user_amount_log")
-        );
-
-        interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
-        return interceptor;
-    }
-
-}

+ 8 - 2
kxs-common/kxs-common-mybatis/src/main/java/com/kxs/common/mybatis/handler/MonthTableNameHandler.java

@@ -1,7 +1,10 @@
 package com.kxs.common.mybatis.handler;
 
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
 import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
 
+import java.time.LocalDate;
 import java.util.Arrays;
 import java.util.List;
 
@@ -14,7 +17,7 @@ import java.util.List;
 public class MonthTableNameHandler implements TableNameHandler {
 
     //用于记录哪些表可以使用该月份动态表名处理器(即哪些表按月分表)
-    private List<String> tableNames;
+    private final List<String> tableNames;
     //构造函数,构造动态表名处理器的时候,传递tableNames参数
     public MonthTableNameHandler(String ...tableNames) {
         this.tableNames = Arrays.asList(tableNames);
@@ -31,11 +34,14 @@ public class MonthTableNameHandler implements TableNameHandler {
         MONTH_DATA.remove();
     }
 
+    public static String getThisMoth() {
+
+        return LocalDateTimeUtil.format(LocalDate.now(), DatePattern.SIMPLE_MONTH_PATTERN);
+    }
     //动态表名接口实现方法
     @Override
     public String dynamicTableName(String sql, String tableName) {
         // 删除当前id
-        removeData();
         if (this.tableNames.contains(tableName)){
             return tableName + "_" + MONTH_DATA.get();  //表名增加月份后缀
         }else{

+ 4 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/service/product/impl/KxsMachineRatioServiceImpl.java

@@ -37,6 +37,10 @@ public class KxsMachineRatioServiceImpl extends ServiceImpl<KxsMachineRatioMappe
         machineRatio.setId(id);
 
         OperationType operation = dmlData.getOperation();
+        if(operation.equals(OperationType.DELETE)){
+            baseMapper.deleteById(id);
+            return;
+        }
 
         for (String field : changeFieldList) {
 

+ 6 - 1
kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsUserAmountLogServiceImpl.java

@@ -6,6 +6,7 @@ import com.aliyun.dts.subscribe.clients.record.OperationType;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.common.core.constant.enums.AmountLogChangeTypesEnum;
 import com.kxs.common.core.constant.enums.KindTypeEnum;
+import com.kxs.common.mybatis.handler.MonthTableNameHandler;
 import com.kxs.transfer.api.mapper.user.KxsUserAmountLogMapper;
 import com.kxs.transfer.api.model.table.DMLData;
 import com.kxs.transfer.api.model.table.FieldData;
@@ -15,6 +16,7 @@ import com.kxs.user.api.model.KxsUserAmountLog;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
@@ -97,7 +99,8 @@ public class KxsUserAmountLogServiceImpl extends ServiceImpl<KxsUserAmountLogMap
                     break;
             }
         }
-
+        //分表月份
+        MonthTableNameHandler.setData(MonthTableNameHandler.getThisMoth());
         if (operation.equals(OperationType.UPDATE)) {
             // 更新数据
             baseMapper.updateById(userAmountLog);
@@ -111,6 +114,8 @@ public class KxsUserAmountLogServiceImpl extends ServiceImpl<KxsUserAmountLogMap
                 baseMapper.updateById(userAmountLog);
             }
         }
+        //删除线程,避免线程污染
+        MonthTableNameHandler.removeData();
     }
 }
 

+ 1 - 1
kxs-transfer/src/main/resources/import.txt

@@ -53,7 +53,7 @@ FROM UserCashRecord
 
 //用户余额记录日志表
 select a.Id as id, a.UserId as user_id,a.CreateDate as create_time, a.UpdateDate as update_time,
-a.ProductType as brand_id, a.ChangeType as variation_type, c.Kind as kind,
+a.ProductType as brand_id, a.ChangeType as variation_type, case c.Kind when 1 then 'add' ELSE 'sub' end kind,
 a.ChangeAmount as amount, a.BeforeTotalAmount as before_total_amount, a.AfterTotalAmount as after_total_amount, a.BeforeBalanceAmount as before_amount, a.AfterBalanceAmount as after_amount, a.Remark as remark
 FROM UserAccountRecord a left join ChangeTypes c on c.id = a.ChangeType