mac 2 лет назад
Родитель
Сommit
90a9cf6e94

+ 12 - 11
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/controller/KxsStatController.java

@@ -4,10 +4,11 @@ package com.kxs.stat.biz.controller;
 import com.kxs.common.core.util.R;
 import com.kxs.common.security.annotation.Inner;
 import com.kxs.stat.biz.service.KxsUserTradeService;
-import com.kxs.user.api.dto.kxsapp.app.ForgetPwdDTO;
-import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * 用户表(KxsSecurityUser)表控制层
@@ -24,20 +25,20 @@ public class KxsStatController {
      * 获取本月全部统计数据
      *
      */
-    @Inner(value = false)
-    @GetMapping("/getUserTradeList")
-    public R getUserTradeList(@RequestParam("month") String month) {
-
-        return R.ok(kxsUserTradeService.getUserTradeList(month));
-    }
+//    @Inner(value = false)
+//    @GetMapping("/getUserTradeList")
+//    public R getUserTradeList(@RequestParam("month") String month) {
+//
+//        return R.ok(kxsUserTradeService.getUserTradeList(month));
+//    }
 
     /**
      * 真实职级计算
      */
-//    @Inner
+    @Inner(value = false)
     @GetMapping("/userRealLevel")
     public void userRealLevel() {
-        kxsUserTradeService.userRealLevel();
+        kxsUserTradeService.getUserTradeList();
     }
 }
 

+ 2 - 1
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeMapper.java

@@ -3,6 +3,7 @@ package com.kxs.stat.biz.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.kxs.stat.api.model.KxsUserTrade;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.cursor.Cursor;
 
 import java.util.List;
 
@@ -15,6 +16,6 @@ import java.util.List;
 @Mapper
 public interface KxsUserTradeMapper extends BaseMapper<KxsUserTrade> {
 
-    List<KxsUserTrade> getUserTradeList(String tableName);
+    Cursor<KxsUserTrade> getUserTradeList(String tableName);
 }
 

+ 2 - 2
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserTradeService.java

@@ -13,8 +13,8 @@ import java.util.List;
  */
 public interface KxsUserTradeService extends IService<KxsUserTrade> {
 
-    List<KxsUserTrade> getUserTradeList(String month);
+    void getUserTradeList();
 
-    void userRealLevel();
+//    void userRealLevel();
 }
 

+ 62 - 33
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeServiceImpl.java

@@ -1,23 +1,23 @@
 package com.kxs.stat.biz.service.impl;
 
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.kxs.common.core.constant.SecurityConstants;
-import com.kxs.common.core.util.R;
-import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.stat.biz.mapper.KxsUserTradeMapper;
 import com.kxs.stat.api.model.KxsUserTrade;
 import com.kxs.stat.biz.service.KxsUserTradeService;
-import com.kxs.user.api.emun.UserLevel;
 import com.kxs.user.api.feign.RemoteKxsUserService;
-import com.kxs.user.api.model.KxsUser;
-import com.kxs.user.api.model.KxsUserRealLevel;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.cursor.Cursor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.support.TransactionTemplate;
 
+import java.io.IOException;
 import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
+import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -28,25 +28,48 @@ import java.util.List;
  */
 @Service("kxsUserTradeService")
 @RequiredArgsConstructor
+@Slf4j
 public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, KxsUserTrade> implements KxsUserTradeService {
     private final RemoteKxsUserService remoteKxsUserService;
 
+    private final PlatformTransactionManager platformTransactionManager;
+
+    private final static String PREFIX_TABLE_NAME = "kxs_user_trade_";
+
     @Override
-    public List<KxsUserTrade> getUserTradeList(String month) {
+    public void getUserTradeList() {
         //拼接表名
-        String[] split = month.split("-");
-        String tableName = "kxs_user_trade_" + split[0] + split[1];
-        return baseMapper.getUserTradeList(tableName);
+        String thisMoth = LocalDateTimeUtil.format(LocalDate.now(), DatePattern.SIMPLE_MONTH_PATTERN);
+        String tableName = PREFIX_TABLE_NAME + thisMoth;
+
+        int batchSize = 1000;
+
+        TransactionTemplate template = new TransactionTemplate(platformTransactionManager);
+        template.execute(status -> {
+            try (Cursor<KxsUserTrade> kxsUserTrades = baseMapper.getUserTradeList(tableName)) {
+                List<KxsUserTrade> batch = new ArrayList<>();
+                for (KxsUserTrade kxsUserTrade : kxsUserTrades) {
+                    batch.add(kxsUserTrade);
+                    if (batch.size() >= batchSize) {
+                        userRealLevel(batch);
+                        batch.clear();
+                    }
+                }
+                // 处理最后一批数据
+                if (!batch.isEmpty()) {
+                    userRealLevel(batch);
+                }
+
+            } catch (IOException e) {
+                log.error("查询用户交易额失败", e);
+            }
+            return null;
+        });
     }
 
 
-    @Override
-    public void userRealLevel() {
-        //构造月份
-        LocalDateTime now = LocalDateTime.now();
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM");
-        String month = now.format(formatter);
-        List<KxsUserTrade> userTradeList = getUserTradeList(month);
+    public void userRealLevel(List<KxsUserTrade> userTradeList) {
+        log.info("收到{}条数据", userTradeList.size());
         for (KxsUserTrade datum : userTradeList) {
             Integer userId = datum.getUserId();
             BigDecimal helpDirectTradeAmt = datum.getHelpDirectTradeAmt();//扶持期贷记卡交易额
@@ -57,23 +80,29 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
             BigDecimal proADebitTradeAmt = datum.getProADebitTradeAmt();//稳定期A借记卡
             BigDecimal proBDebitTradeAmt = datum.getProBDebitTradeAmt();//稳定期B借记卡
             BigDecimal proBDirectTradeAmt = datum.getProBDirectTradeAmt();//稳定期B贷记卡
+            //pos交易额
             BigDecimal totalAmount = helpDirectTradeAmt.add(helpDebitTradeAmt).add(proDirectTradeAmt).add(proDebitTradeAmt).add(proADirectTradeAmt).add(proADebitTradeAmt).add(proBDebitTradeAmt).add(proBDirectTradeAmt);
-            KxsUserRealLevel kxsUserRealLevel = new KxsUserRealLevel();
-            kxsUserRealLevel.setCreateTime(now);
-            kxsUserRealLevel.setDelFlag("0");
-            kxsUserRealLevel.setMonth(month);
-            for (UserLevel userLevel : UserLevel.values()) {
-                if (totalAmount.compareTo(userLevel.getTransactions()) >= 0) {
-                    kxsUserRealLevel.setLevel(userLevel.getLevel());
-                } else if (totalAmount.compareTo(BigDecimal.ZERO) <= 0) {
-                    kxsUserRealLevel.setLevel("0");
-                }
-            }
-            kxsUserRealLevel.setUserId(Long.valueOf(userId));
-            remoteKxsUserService.updateUserRealLevel(kxsUserRealLevel, SecurityConstants.FROM_IN);
+
+            //广电卡交易额
+            log.info("用户{}交易额{}", userId, totalAmount);
         }
 
+
+        //        KxsUserRealLevel kxsUserRealLevel = new KxsUserRealLevel();
+//        kxsUserRealLevel.setCreateTime(now);
+//        kxsUserRealLevel.setDelFlag("0");
+//        kxsUserRealLevel.setMonth(month);
+//        for (UserLevel userLevel : UserLevel.values()) {
+//            if (totalAmount.compareTo(userLevel.getTransactions()) >= 0) {
+//                kxsUserRealLevel.setLevel(userLevel.getLevel());
+//            } else if (totalAmount.compareTo(BigDecimal.ZERO) <= 0) {
+//                kxsUserRealLevel.setLevel("0");
+//            }
+//        }
+//        kxsUserRealLevel.setUserId(Long.valueOf(userId));
+//        remoteKxsUserService.updateUserRealLevel(kxsUserRealLevel, SecurityConstants.FROM_IN);
     }
 
+
 }
 

+ 1 - 1
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeMapper.xml

@@ -32,7 +32,7 @@
         <result column="pro_b_debit_cap_num" property="proBDebitCapNum" />
 
     </resultMap>
-    <select id="getUserTradeList" resultType="com.kxs.stat.api.model.KxsUserTrade">
+    <select id="getUserTradeList" resultType="com.kxs.stat.api.model.KxsUserTrade" fetchSize="1000" >
         select
             sum(pro_b_direct_trade_amt) as proBDirectTradeAmt,
             sum(pro_b_debit_trade_amt) as proBDebitTradeAmt,