Browse Source

商户交易统计表按月分表功能

mac 2 years ago
parent
commit
0455705789

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

@@ -48,7 +48,7 @@ public class MybatisAutoConfiguration implements WebMvcConfigurer {
 		//动态分表
 		DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
 		dynamicTableNameInnerInterceptor.setTableNameHandler(
-				new MonthTableNameHandler("kxs_user_amount_log", "kxs_user_trade", "kxs_user_trade_before", "kxs_user_trade_after")
+				new MonthTableNameHandler("kxs_user_amount_log", "kxs_user_trade", "kxs_user_trade_before", "kxs_user_trade_after", "kxs_merchant_trade")
 		);
 		interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
 		return interceptor;

+ 1 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsMerchantTradeMapper.java

@@ -13,5 +13,6 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface KxsMerchantTradeMapper extends BaseMapper<KxsMerchantTrade> {
 
+    void automaticTableCreationTasks(String tableName);
 }
 

+ 4 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/task/KxsStatTaskJob.java

@@ -3,6 +3,7 @@ package com.kxs.stat.biz.task;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import com.kxs.common.security.annotation.Inner;
+import com.kxs.stat.biz.mapper.KxsMerchantTradeMapper;
 import com.kxs.stat.biz.mapper.KxsUserTradeAfterMapper;
 import com.kxs.stat.biz.mapper.KxsUserTradeBeforeMapper;
 import com.kxs.stat.biz.mapper.KxsUserTradeMapper;
@@ -35,6 +36,7 @@ public class KxsStatTaskJob {
     private final KxsUserTradeAfterMapper kxsUserTradeAfterMapper;
 
     private final KxsUserTradeService kxsUserTradeService;
+    private final KxsMerchantTradeMapper kxsMerchantTradeMapper;
 
     private final static String PREFIX_TABLE_NAME = "kxs_user_trade_";
 
@@ -59,6 +61,8 @@ public class KxsStatTaskJob {
         kxsUserTradeMapper.automaticTableCreationTasks(PREFIX_TABLE_NAME + thisMoth);
         kxsUserTradeBeforeMapper.automaticTableCreationTasks(PREFIX_TABLE_NAME + "before_" + thisMoth);
         kxsUserTradeAfterMapper.automaticTableCreationTasks(PREFIX_TABLE_NAME + "after_" + thisMoth);
+        //新建商户交易统计表
+        kxsMerchantTradeMapper.automaticTableCreationTasks("kxs_merchant_trade_" + thisMoth);
     }
 
 

+ 3 - 0
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsMerchantTradeMapper.xml

@@ -15,5 +15,8 @@
         <result column="brand_id" property="brandId" />
 
     </resultMap>
+    <update id="automaticTableCreationTasks">
+        CREATE TABLE IF NOT EXISTS `${tableName}` LIKE kxs_merchant_trade;
+    </update>
 
 </mapper>

+ 11 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/service/stat/KxsMerchantTradeService.java

@@ -3,6 +3,7 @@ package com.kxs.transfer.api.service.stat;
 import com.aliyun.dts.subscribe.clients.record.OperationType;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.mybatis.handler.MonthTableNameHandler;
 import com.kxs.stat.api.model.KxsMerchantTrade;
 import com.kxs.stat.api.model.KxsUserActTrade;
 import com.kxs.transfer.api.mapper.stat.KxsMerchantTradeMapper;
@@ -34,6 +35,14 @@ public class KxsMerchantTradeService extends ServiceImpl<KxsMerchantTradeMapper,
         int id = Integer.parseInt(dmlData.getId());
 
         KxsMerchantTrade merchantTrade = new KxsMerchantTrade();
+        String tradeMonth;
+        if (fieldDataMap.get("TradeMonth") != null && fieldDataMap.get("TradeMonth").getValue() != null) {
+            tradeMonth = fieldDataMap.get("TradeMonth").getValue().toString();
+        } else {
+            tradeMonth = MonthTableNameHandler.getThisMoth();
+        }
+        //每个请求线程维护一个month数据,避免多线程数据冲突
+        MonthTableNameHandler.setData(tradeMonth);
 
         OperationType operation = dmlData.getOperation();
 
@@ -68,6 +77,8 @@ public class KxsMerchantTradeService extends ServiceImpl<KxsMerchantTradeMapper,
             merchantTrade.setId(kxsUserActTrade.getId());
             baseMapper.updateById(merchantTrade);
         }
+        //删除线程,避免线程污染
+        MonthTableNameHandler.removeData();
     }
 }