|
|
@@ -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);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
}
|
|
|
|