|
|
@@ -26,6 +26,7 @@ import org.springframework.transaction.support.TransactionTemplate;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
|
|
|
@@ -48,6 +49,7 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
private final KxsLkbTradeMapper kxsLkbTradeMapper;
|
|
|
|
|
|
private final static String PREFIX_TABLE_NAME = "kxs_user_trade_";
|
|
|
+ private final static String PREFIX_TABLE_NAME_TEMP = "kxs_user_trade_temp_";
|
|
|
|
|
|
@Override
|
|
|
@Async
|
|
|
@@ -61,33 +63,36 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
thisMoth = LocalDateTimeUtil.format(LocalDate.now(), DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
}
|
|
|
|
|
|
+ String version = LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_FORMATTER);
|
|
|
+
|
|
|
String tableName = PREFIX_TABLE_NAME + thisMoth;
|
|
|
+ String tempTableName = PREFIX_TABLE_NAME_TEMP + thisMoth;
|
|
|
|
|
|
int batchSize = 100;
|
|
|
TransactionTemplate template = new TransactionTemplate(platformTransactionManager);
|
|
|
template.execute(status -> {
|
|
|
//创建临时表
|
|
|
- baseMapper.createTemporaryShdTable();
|
|
|
+ baseMapper.createTemporaryShdTable(tempTableName);
|
|
|
|
|
|
//查询pos交易
|
|
|
Cursor<ShdTradeAmtVO> kxsUserTrades = baseMapper.getUserTradeList(tableName);
|
|
|
for (ShdTradeAmtVO kxsUserTrade : kxsUserTrades) {
|
|
|
- ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(kxsUserTrade.getUserId());
|
|
|
+ ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(tempTableName, kxsUserTrade.getUserId());
|
|
|
if(shdTradeAmtVO == null){
|
|
|
shdTradeAmtVO = new ShdTradeAmtVO();
|
|
|
shdTradeAmtVO.setUserId(kxsUserTrade.getUserId());
|
|
|
shdTradeAmtVO.setPosAmt(kxsUserTrade.getPosAmt());
|
|
|
- baseMapper.insertTempShdTableData(shdTradeAmtVO);
|
|
|
+ baseMapper.insertTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
}else{
|
|
|
shdTradeAmtVO.setPosAmt(shdTradeAmtVO.getPosAmt());
|
|
|
- baseMapper.updateTempShdTableData(shdTradeAmtVO);
|
|
|
+ baseMapper.updateTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//查询lkb交易
|
|
|
Cursor<KxsLkbTrade> lkbTrades = kxsLkbTradeMapper.getUserTradeMonthList(thisMoth);
|
|
|
for (KxsLkbTrade lkbTrade : lkbTrades) {
|
|
|
- ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(lkbTrade.getUserId());
|
|
|
+ ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(tempTableName, lkbTrade.getUserId());
|
|
|
if(shdTradeAmtVO == null){
|
|
|
shdTradeAmtVO = new ShdTradeAmtVO();
|
|
|
shdTradeAmtVO.setUserId(lkbTrade.getUserId());
|
|
|
@@ -96,45 +101,67 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
if(lkbTrade.getActTradeAmt() != null){
|
|
|
shdTradeAmtVO.setLkbActAmt(lkbTrade.getActTradeAmt().multiply(BigDecimal.valueOf(4)));
|
|
|
}
|
|
|
- baseMapper.insertTempShdTableData(shdTradeAmtVO);
|
|
|
+ baseMapper.insertTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
}else{
|
|
|
shdTradeAmtVO.setLkbAmt(lkbTrade.getTradeAmt());
|
|
|
//活动交易 * 4加入
|
|
|
if(lkbTrade.getActTradeAmt() != null){
|
|
|
shdTradeAmtVO.setLkbActAmt(lkbTrade.getActTradeAmt().multiply(BigDecimal.valueOf(4)));
|
|
|
}
|
|
|
- baseMapper.updateTempShdTableData(shdTradeAmtVO);
|
|
|
+ baseMapper.updateTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
}
|
|
|
}
|
|
|
//查询广电交易数据
|
|
|
Cursor<KxsUserActTrade> kxsUserActTrades = kxsUserActTradeMapper.getUserTradeMonthList(thisMoth);
|
|
|
for (KxsUserActTrade kxsUserActTrade : kxsUserActTrades) {
|
|
|
- ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(kxsUserActTrade.getUserId());
|
|
|
+ ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(tempTableName, 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);
|
|
|
+ baseMapper.insertTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
}else{
|
|
|
//广电卡 * 10000加入
|
|
|
shdTradeAmtVO.setGdAmt(NumberUtil.mul(kxsUserActTrade.getActNum(), BigDecimal.valueOf(10000)));
|
|
|
- baseMapper.updateTempShdTableData(shdTradeAmtVO);
|
|
|
+ baseMapper.updateTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- Cursor<ShdTradeAmtVO> shdTradeAmtVOList = baseMapper.getTempShdTableList();
|
|
|
- List<ShdTradeAmtVO> batch = new ArrayList<>();
|
|
|
+ Cursor<ShdTradeAmtVO> shdTradeAmtVOList = baseMapper.getTempShdTableList(tempTableName);
|
|
|
+ List<IntegralStatDTO> batch = new ArrayList<>();
|
|
|
for (ShdTradeAmtVO kxsUserTrade : shdTradeAmtVOList) {
|
|
|
- batch.add(kxsUserTrade);
|
|
|
+ //pos交易额 + 来客吧非活动交易额
|
|
|
+ BigDecimal totalAmount = BigDecimal.ZERO;
|
|
|
+ if(kxsUserTrade.getPosAmt() != null){
|
|
|
+ totalAmount = totalAmount.add(kxsUserTrade.getPosAmt());
|
|
|
+ }
|
|
|
+ if(kxsUserTrade.getLkbAmt() != null){
|
|
|
+ totalAmount = totalAmount.add(kxsUserTrade.getLkbAmt());
|
|
|
+ }
|
|
|
+ if(kxsUserTrade.getGdAmt() != null){
|
|
|
+ totalAmount = totalAmount.add(kxsUserTrade.getGdAmt());
|
|
|
+ }
|
|
|
+ if(kxsUserTrade.getLkbActAmt() != null){
|
|
|
+ totalAmount = totalAmount.add(kxsUserTrade.getLkbActAmt());
|
|
|
+ }
|
|
|
+ if(totalAmount.compareTo(BigDecimal.valueOf(3000000)) >= 0){
|
|
|
+ IntegralStatDTO integralStatDTO = new IntegralStatDTO();
|
|
|
+ integralStatDTO.setTradeMonth(thisMoth);
|
|
|
+ integralStatDTO.setUserId(Long.valueOf(kxsUserTrade.getUserId()));
|
|
|
+ integralStatDTO.setTotalAmount(totalAmount);
|
|
|
+ integralStatDTO.setVersion(Long.valueOf(version));
|
|
|
+ batch.add(integralStatDTO);
|
|
|
+ log.info("用户{}交易额达标:{}", kxsUserTrade.getUserId(), totalAmount);
|
|
|
+ }
|
|
|
if (batch.size() >= batchSize) {
|
|
|
- remoteUserShdStat(batch, thisMoth);
|
|
|
+ remoteKxsUserService.integralStat(batch, SecurityConstants.FROM_IN);
|
|
|
batch.clear();
|
|
|
}
|
|
|
}
|
|
|
// 处理最后一批数据
|
|
|
if (!batch.isEmpty()) {
|
|
|
- remoteUserShdStat(batch, thisMoth);
|
|
|
+ remoteKxsUserService.integralStat(batch, SecurityConstants.FROM_IN);
|
|
|
}
|
|
|
return null;
|
|
|
});
|
|
|
@@ -147,38 +174,5 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
return baseMapper.getStatAmount(tableName);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- public void remoteUserShdStat(List<ShdTradeAmtVO> userTradeList, String month) {
|
|
|
- List<IntegralStatDTO> params = new ArrayList<>();
|
|
|
- for (ShdTradeAmtVO datum : userTradeList) {
|
|
|
-
|
|
|
-
|
|
|
- Integer userId = datum.getUserId();
|
|
|
-
|
|
|
- //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)).tradeMonth(month).totalAmount(totalAmount).build());
|
|
|
- log.info("用户{}交易额达标:{}", userId, totalAmount);
|
|
|
- }
|
|
|
- }
|
|
|
- remoteKxsUserService.integralStat(params, SecurityConstants.FROM_IN);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|