|
|
@@ -2,19 +2,27 @@ package com.kxs.stat.biz.service.impl;
|
|
|
|
|
|
import cn.hutool.core.date.DatePattern;
|
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
+import cn.hutool.core.util.NumberUtil;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.kxs.stat.biz.mapper.KxsUserTradeMapper;
|
|
|
+import com.kxs.common.core.constant.SecurityConstants;
|
|
|
+import com.kxs.stat.api.model.KxsLkbTrade;
|
|
|
+import com.kxs.stat.api.model.KxsUserActTrade;
|
|
|
import com.kxs.stat.api.model.KxsUserTrade;
|
|
|
+import com.kxs.stat.api.vo.ShdTradeAmtVO;
|
|
|
+import com.kxs.stat.biz.mapper.KxsLkbTradeMapper;
|
|
|
+import com.kxs.stat.biz.mapper.KxsUserActTradeMapper;
|
|
|
+import com.kxs.stat.biz.mapper.KxsUserTradeMapper;
|
|
|
import com.kxs.stat.biz.service.KxsUserTradeService;
|
|
|
+import com.kxs.user.api.dto.kxsapp.IntegralStatDTO;
|
|
|
import com.kxs.user.api.feign.RemoteKxsUserService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.ibatis.cursor.Cursor;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
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.LocalDate;
|
|
|
import java.util.ArrayList;
|
|
|
@@ -34,74 +42,127 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
|
|
|
private final PlatformTransactionManager platformTransactionManager;
|
|
|
|
|
|
+ private final KxsUserActTradeMapper kxsUserActTradeMapper;
|
|
|
+
|
|
|
+ private final KxsLkbTradeMapper kxsLkbTradeMapper;
|
|
|
+
|
|
|
private final static String PREFIX_TABLE_NAME = "kxs_user_trade_";
|
|
|
|
|
|
@Override
|
|
|
+ @Async
|
|
|
public void getUserTradeList() {
|
|
|
//拼接表名
|
|
|
String thisMoth = LocalDateTimeUtil.format(LocalDate.now(), DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
String tableName = PREFIX_TABLE_NAME + thisMoth;
|
|
|
|
|
|
- int batchSize = 1000;
|
|
|
-
|
|
|
+ int batchSize = 100;
|
|
|
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();
|
|
|
+ //创建临时表
|
|
|
+ baseMapper.createTemporaryShdTable();
|
|
|
+
|
|
|
+ //查询pos交易
|
|
|
+ Cursor<ShdTradeAmtVO> kxsUserTrades = baseMapper.getUserTradeList(tableName);
|
|
|
+ for (ShdTradeAmtVO kxsUserTrade : kxsUserTrades) {
|
|
|
+ ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(kxsUserTrade.getUserId());
|
|
|
+ if(shdTradeAmtVO == null){
|
|
|
+ shdTradeAmtVO = new ShdTradeAmtVO();
|
|
|
+ shdTradeAmtVO.setUserId(kxsUserTrade.getUserId());
|
|
|
+ shdTradeAmtVO.setPosAmt(kxsUserTrade.getPosAmt());
|
|
|
+ baseMapper.insertTempShdTableData(shdTradeAmtVO);
|
|
|
+ }else{
|
|
|
+ shdTradeAmtVO.setPosAmt(shdTradeAmtVO.getPosAmt());
|
|
|
+ baseMapper.updateTempShdTableData(shdTradeAmtVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ //查询lkb交易
|
|
|
+ Cursor<KxsLkbTrade> lkbTrades = kxsLkbTradeMapper.getUserTradeMonthList(thisMoth);
|
|
|
+ for (KxsLkbTrade lkbTrade : lkbTrades) {
|
|
|
+ ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(lkbTrade.getUserId());
|
|
|
+ if(shdTradeAmtVO == null){
|
|
|
+ shdTradeAmtVO = new ShdTradeAmtVO();
|
|
|
+ shdTradeAmtVO.setUserId(lkbTrade.getUserId());
|
|
|
+ shdTradeAmtVO.setLkbAmt(lkbTrade.getTradeAmt());
|
|
|
+ //活动交易 * 4加入
|
|
|
+ if(lkbTrade.getActTradeAmt() != null){
|
|
|
+ shdTradeAmtVO.setLkbActAmt(lkbTrade.getActTradeAmt().multiply(BigDecimal.valueOf(4)));
|
|
|
+ }
|
|
|
+ baseMapper.insertTempShdTableData(shdTradeAmtVO);
|
|
|
+ }else{
|
|
|
+ shdTradeAmtVO.setLkbAmt(lkbTrade.getTradeAmt());
|
|
|
+ //活动交易 * 4加入
|
|
|
+ if(lkbTrade.getActTradeAmt() != null){
|
|
|
+ shdTradeAmtVO.setLkbActAmt(lkbTrade.getActTradeAmt().multiply(BigDecimal.valueOf(4)));
|
|
|
}
|
|
|
+ baseMapper.updateTempShdTableData(shdTradeAmtVO);
|
|
|
}
|
|
|
- // 处理最后一批数据
|
|
|
- if (!batch.isEmpty()) {
|
|
|
- userRealLevel(batch);
|
|
|
+ }
|
|
|
+ //查询广电交易数据
|
|
|
+ Cursor<KxsUserActTrade> kxsUserActTrades = kxsUserActTradeMapper.getUserTradeMonthList(thisMoth);
|
|
|
+ for (KxsUserActTrade kxsUserActTrade : kxsUserActTrades) {
|
|
|
+ ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(kxsUserActTrade.getUserId());
|
|
|
+ if(shdTradeAmtVO == null){
|
|
|
+ shdTradeAmtVO = new ShdTradeAmtVO();
|
|
|
+ shdTradeAmtVO.setUserId(kxsUserActTrade.getUserId());
|
|
|
+ //广电卡 * 10000加入
|
|
|
+ shdTradeAmtVO.setGdAmt(NumberUtil.mul(kxsUserActTrade.getActNum(), BigDecimal.valueOf(10000)));
|
|
|
+ baseMapper.insertTempShdTableData(shdTradeAmtVO);
|
|
|
+ }else{
|
|
|
+ //广电卡 * 10000加入
|
|
|
+ shdTradeAmtVO.setGdAmt(NumberUtil.mul(kxsUserActTrade.getActNum(), BigDecimal.valueOf(10000)));
|
|
|
+ baseMapper.updateTempShdTableData(shdTradeAmtVO);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
- } catch (IOException e) {
|
|
|
- log.error("查询用户交易额失败", e);
|
|
|
+ Cursor<ShdTradeAmtVO> shdTradeAmtVOList = baseMapper.getTempShdTableList();
|
|
|
+ List<ShdTradeAmtVO> batch = new ArrayList<>();
|
|
|
+ for (ShdTradeAmtVO kxsUserTrade : shdTradeAmtVOList) {
|
|
|
+ batch.add(kxsUserTrade);
|
|
|
+ if (batch.size() >= batchSize) {
|
|
|
+ remoteUserShdStat(batch);
|
|
|
+ batch.clear();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 处理最后一批数据
|
|
|
+ if (!batch.isEmpty()) {
|
|
|
+ remoteUserShdStat(batch);
|
|
|
}
|
|
|
return null;
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
- public void userRealLevel(List<KxsUserTrade> userTradeList) {
|
|
|
- log.info("收到{}条数据", userTradeList.size());
|
|
|
- for (KxsUserTrade datum : userTradeList) {
|
|
|
+ public void remoteUserShdStat(List<ShdTradeAmtVO> userTradeList) {
|
|
|
+ List<IntegralStatDTO> params = new ArrayList<>();
|
|
|
+ for (ShdTradeAmtVO datum : userTradeList) {
|
|
|
+
|
|
|
+
|
|
|
Integer userId = datum.getUserId();
|
|
|
- BigDecimal helpDirectTradeAmt = datum.getHelpDirectTradeAmt();//扶持期贷记卡交易额
|
|
|
- BigDecimal helpDebitTradeAmt = datum.getHelpDebitTradeAmt();//扶持期借记卡
|
|
|
- BigDecimal proDirectTradeAmt = datum.getProDirectTradeAmt();//稳定期贷记卡
|
|
|
- BigDecimal proDebitTradeAmt = datum.getProDebitTradeAmt();//稳定期借记卡
|
|
|
- BigDecimal proADirectTradeAmt = datum.getProADirectTradeAmt();//稳定期A贷记卡
|
|
|
- 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);
|
|
|
-
|
|
|
- //广电卡交易额
|
|
|
- log.info("用户{}交易额{}", userId, totalAmount);
|
|
|
+
|
|
|
+ //pos交易额 + 来客吧非活动交易额
|
|
|
+ BigDecimal totalAmount = BigDecimal.ZERO;
|
|
|
+ if(datum.getPosAmt() != null){
|
|
|
+ totalAmount = totalAmount.add(datum.getPosAmt());
|
|
|
+ }
|
|
|
+ if(datum.getLkbAmt() != null){
|
|
|
+ totalAmount = totalAmount.add(datum.getLkbAmt());
|
|
|
+ }
|
|
|
+ if(datum.getGdAmt() != null){
|
|
|
+ totalAmount = totalAmount.add(datum.getGdAmt());
|
|
|
+ }
|
|
|
+ if(datum.getLkbActAmt() != null){
|
|
|
+ totalAmount = totalAmount.add(datum.getLkbActAmt());
|
|
|
+ }
|
|
|
+ if(totalAmount.compareTo(BigDecimal.valueOf(3000000)) >= 0){
|
|
|
+ params.add(IntegralStatDTO.builder().userId(Long.valueOf(userId)).totalAmount(totalAmount).build());
|
|
|
+ log.info("用户{}交易额达标:{}", userId, totalAmount);
|
|
|
+ }
|
|
|
}
|
|
|
+ remoteKxsUserService.integralStat(params, SecurityConstants.FROM_IN);
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- // 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);
|
|
|
- }
|
|
|
|
|
|
|
|
|
}
|