|
|
@@ -8,16 +8,18 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.kxs.common.core.constant.CommonConstants;
|
|
|
import com.kxs.common.core.constant.SecurityConstants;
|
|
|
+import com.kxs.common.core.util.R;
|
|
|
+import com.kxs.stat.api.dto.statUser.StatUserGetMyTradeDTO;
|
|
|
+import com.kxs.stat.api.dto.statUser.StatUserGetUserStatByDayOrMonthDTO;
|
|
|
import com.kxs.stat.api.model.KxsLkbTrade;
|
|
|
import com.kxs.stat.api.model.KxsUserActTrade;
|
|
|
import com.kxs.stat.api.model.KxsUserLogoutTrade;
|
|
|
import com.kxs.stat.api.model.KxsUserTrade;
|
|
|
import com.kxs.stat.api.vo.ShdTradeAmtVO;
|
|
|
+import com.kxs.stat.api.vo.TotalTradeAmtVO;
|
|
|
+import com.kxs.stat.api.vo.statUser.*;
|
|
|
import com.kxs.stat.biz.constant.enums.TotalTypeEnum;
|
|
|
-import com.kxs.stat.biz.mapper.KxsLkbTradeMapper;
|
|
|
-import com.kxs.stat.biz.mapper.KxsUserActTradeMapper;
|
|
|
-import com.kxs.stat.biz.mapper.KxsUserLogoutTradeMapper;
|
|
|
-import com.kxs.stat.biz.mapper.KxsUserTradeMapper;
|
|
|
+import com.kxs.stat.biz.mapper.*;
|
|
|
import com.kxs.stat.biz.service.KxsUserTradeService;
|
|
|
import com.kxs.user.api.dto.kxsapp.IntegralStatDTO;
|
|
|
import com.kxs.user.api.feign.RemoteKxsUserService;
|
|
|
@@ -30,10 +32,10 @@ import org.springframework.transaction.PlatformTransactionManager;
|
|
|
import org.springframework.transaction.support.TransactionTemplate;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* 个人交易统计总表(KxsUserTrade)表服务实现类
|
|
|
@@ -55,9 +57,12 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
|
|
|
private final KxsUserLogoutTradeMapper kxsUserLogoutTradeMapper;
|
|
|
|
|
|
+ private final KxsUserNewTradeMapper kxsUserNewTradeMapper;
|
|
|
+
|
|
|
+ private final KxsZlbTradeMapper kxsZlbTradeMapper;
|
|
|
private final static String PREFIX_TABLE_NAME = "kxs_user_trade_";
|
|
|
private final static String PREFIX_TABLE_NAME_TEMP = "kxs_user_trade_temp_";
|
|
|
-
|
|
|
+ private final KxsUserGdTradeMapper kxsUserGdTradeMapper;
|
|
|
|
|
|
@Override
|
|
|
@Async
|
|
|
@@ -65,16 +70,16 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
//拼接表名
|
|
|
String thisMoth;
|
|
|
//如果定时任务传了参数就使用定时任务的参数
|
|
|
- if(StrUtil.isNotBlank(para)){
|
|
|
+ if (StrUtil.isNotBlank(para)) {
|
|
|
thisMoth = para;
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
thisMoth = LocalDateTimeUtil.format(LocalDate.now(), DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
}
|
|
|
|
|
|
String version = LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.PURE_DATETIME_FORMATTER);
|
|
|
//计算增量的pos交易
|
|
|
- String tableName = PREFIX_TABLE_NAME + "after_" + thisMoth;
|
|
|
-// String tableName = PREFIX_TABLE_NAME + thisMoth;
|
|
|
+// String tableName = PREFIX_TABLE_NAME + "after_" + thisMoth;
|
|
|
+ String tableName = PREFIX_TABLE_NAME + thisMoth;
|
|
|
String tempTableName = PREFIX_TABLE_NAME_TEMP + thisMoth;
|
|
|
|
|
|
int batchSize = 20;
|
|
|
@@ -87,13 +92,13 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
Cursor<ShdTradeAmtVO> kxsUserTrades = baseMapper.getUserTradeList(tableName);
|
|
|
for (ShdTradeAmtVO kxsUserTrade : kxsUserTrades) {
|
|
|
ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(tempTableName, kxsUserTrade.getUserId());
|
|
|
- if(shdTradeAmtVO == null){
|
|
|
+ if (shdTradeAmtVO == null) {
|
|
|
shdTradeAmtVO = new ShdTradeAmtVO();
|
|
|
shdTradeAmtVO.setUserId(kxsUserTrade.getUserId());
|
|
|
shdTradeAmtVO.setPosAmt(kxsUserTrade.getPosAmt());
|
|
|
baseMapper.insertTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
- }else{
|
|
|
- shdTradeAmtVO.setPosAmt(kxsUserTrade.getPosAmt());
|
|
|
+ } else {
|
|
|
+ shdTradeAmtVO.setPosAmt(shdTradeAmtVO.getPosAmt());
|
|
|
baseMapper.updateTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
}
|
|
|
|
|
|
@@ -102,19 +107,19 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
Cursor<KxsLkbTrade> lkbTrades = kxsLkbTradeMapper.getUserTradeMonthList(thisMoth);
|
|
|
for (KxsLkbTrade lkbTrade : lkbTrades) {
|
|
|
ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(tempTableName, lkbTrade.getUserId());
|
|
|
- if(shdTradeAmtVO == null){
|
|
|
+ if (shdTradeAmtVO == null) {
|
|
|
shdTradeAmtVO = new ShdTradeAmtVO();
|
|
|
shdTradeAmtVO.setUserId(lkbTrade.getUserId());
|
|
|
shdTradeAmtVO.setLkbAmt(lkbTrade.getTradeAmt());
|
|
|
//活动交易 * 4加入
|
|
|
- if(lkbTrade.getActTradeAmt() != null){
|
|
|
+ if (lkbTrade.getActTradeAmt() != null) {
|
|
|
shdTradeAmtVO.setLkbActAmt(lkbTrade.getActTradeAmt().multiply(BigDecimal.valueOf(4)));
|
|
|
}
|
|
|
baseMapper.insertTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
shdTradeAmtVO.setLkbAmt(lkbTrade.getTradeAmt());
|
|
|
//活动交易 * 4加入
|
|
|
- if(lkbTrade.getActTradeAmt() != null){
|
|
|
+ if (lkbTrade.getActTradeAmt() != null) {
|
|
|
shdTradeAmtVO.setLkbActAmt(lkbTrade.getActTradeAmt().multiply(BigDecimal.valueOf(4)));
|
|
|
}
|
|
|
baseMapper.updateTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
@@ -130,17 +135,17 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
.eq(KxsUserLogoutTrade::getUserId, kxsUserActTrade.getUserId())
|
|
|
.eq(KxsUserLogoutTrade::getTotalType, TotalTypeEnum.TEAM.getType()).last("limit 1"));
|
|
|
//总激活数 减去注销的卡 = 实际激活总数
|
|
|
- if(kxsUserLogoutTrade != null){
|
|
|
+ if (kxsUserLogoutTrade != null) {
|
|
|
actNum = actNum - kxsUserLogoutTrade.getLogoutNum();
|
|
|
}
|
|
|
ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(tempTableName, kxsUserActTrade.getUserId());
|
|
|
- if(shdTradeAmtVO == null){
|
|
|
+ if (shdTradeAmtVO == null) {
|
|
|
shdTradeAmtVO = new ShdTradeAmtVO();
|
|
|
shdTradeAmtVO.setUserId(kxsUserActTrade.getUserId());
|
|
|
//广电卡 * 10000加入
|
|
|
shdTradeAmtVO.setGdAmt(NumberUtil.mul(actNum, CommonConstants.GD_CARDINAL_NUMBER));
|
|
|
baseMapper.insertTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
- }else{
|
|
|
+ } else {
|
|
|
//广电卡 * 10000加入
|
|
|
shdTradeAmtVO.setGdAmt(NumberUtil.mul(actNum, CommonConstants.GD_CARDINAL_NUMBER));
|
|
|
baseMapper.updateTempShdTableData(tempTableName, shdTradeAmtVO);
|
|
|
@@ -152,19 +157,19 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
for (ShdTradeAmtVO kxsUserTrade : shdTradeAmtVOList) {
|
|
|
//pos交易额 + 来客吧非活动交易额
|
|
|
BigDecimal totalAmount = BigDecimal.ZERO;
|
|
|
- if(kxsUserTrade.getPosAmt() != null){
|
|
|
+ if (kxsUserTrade.getPosAmt() != null) {
|
|
|
totalAmount = totalAmount.add(kxsUserTrade.getPosAmt());
|
|
|
}
|
|
|
- if(kxsUserTrade.getLkbAmt() != null){
|
|
|
+ if (kxsUserTrade.getLkbAmt() != null) {
|
|
|
totalAmount = totalAmount.add(kxsUserTrade.getLkbAmt());
|
|
|
}
|
|
|
- if(kxsUserTrade.getGdAmt() != null){
|
|
|
+ if (kxsUserTrade.getGdAmt() != null) {
|
|
|
totalAmount = totalAmount.add(kxsUserTrade.getGdAmt());
|
|
|
}
|
|
|
- if(kxsUserTrade.getLkbActAmt() != null){
|
|
|
+ if (kxsUserTrade.getLkbActAmt() != null) {
|
|
|
totalAmount = totalAmount.add(kxsUserTrade.getLkbActAmt());
|
|
|
}
|
|
|
- if(totalAmount.compareTo(CommonConstants.MAX_TOTAL_AMT) >= 0){
|
|
|
+ if (totalAmount.compareTo(CommonConstants.MAX_TOTAL_AMT) >= 0) {
|
|
|
IntegralStatDTO integralStatDTO = new IntegralStatDTO();
|
|
|
integralStatDTO.setTradeMonth(thisMoth);
|
|
|
integralStatDTO.setUserId(Long.valueOf(kxsUserTrade.getUserId()));
|
|
|
@@ -195,5 +200,295 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
return baseMapper.getStatAmount(tableName);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R getUserStatByDayOrMonth(StatUserGetUserStatByDayOrMonthDTO param) {
|
|
|
+ Long userId = param.getUserId();
|
|
|
+ Integer type = param.getType();
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ List<String> times = new ArrayList<>();
|
|
|
+ List<String> lastMonthTimes = null;
|
|
|
+ if (type == 1) {
|
|
|
+ //获取今日月份 用以校验是否跨越月份
|
|
|
+ int toDayMonth = now.getMonthValue();
|
|
|
+ //近七日
|
|
|
+ for (int i = 0; i < 7; i++) {
|
|
|
+ // 计算每一天的日期
|
|
|
+ LocalDate currentDay = now.minusDays(i);
|
|
|
+ // 将LocalDate转换为字符串 yyyyMMdd 获取到所需查询日期
|
|
|
+ String currentDateString = LocalDateTimeUtil.format(currentDay, DatePattern.PURE_DATE_PATTERN);
|
|
|
+ //获取当前日的月份值
|
|
|
+ int monthValue = now.getMonthValue();//判断今日月份值与当前查询日月份是否一致
|
|
|
+ if (toDayMonth == monthValue){
|
|
|
+ //一致加入正常查询序列
|
|
|
+ times.add(currentDateString);
|
|
|
+ }else {
|
|
|
+ //不一致构造加入二次查询序列
|
|
|
+ lastMonthTimes = new ArrayList<>();
|
|
|
+ lastMonthTimes.add(currentDateString);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = getStatUserGetUserStatByDayOrMonthVO(userId, now, times, lastMonthTimes,type);
|
|
|
+ return R.ok(statUserGetUserStatByDayOrMonthVO);
|
|
|
+ } else if (type == 2) {
|
|
|
+ //近半年
|
|
|
+ for (int i = 0; i < 6; i++) {
|
|
|
+ // 计算过去半年每月月份
|
|
|
+ LocalDate currentDay = now.minusMonths(i);
|
|
|
+ // 将LocalDate转换为字符串
|
|
|
+ String currentDateString = LocalDateTimeUtil.format(currentDay, DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
+ times.add(currentDateString);
|
|
|
+ }
|
|
|
+ StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = getStatUserGetUserStatByDayOrMonthVO(userId, now, times, lastMonthTimes,type);
|
|
|
+ return R.ok(statUserGetUserStatByDayOrMonthVO);
|
|
|
+ } else {
|
|
|
+ return R.failed("类型错误");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R getHomeAmout(Long userId) {
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ String month = LocalDateTimeUtil.format(now, DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
+ String today = LocalDateTimeUtil.format(now, DatePattern.PURE_DATE_PATTERN);
|
|
|
+ //拼接表名
|
|
|
+ String tableName = PREFIX_TABLE_NAME + month;
|
|
|
+// StatUserGetHomeAmoutVO statUserGetHomeAmoutVO1 = baseMapper.getHomeAmout(userId,tableName,date,month);
|
|
|
+ //今日交易额
|
|
|
+ StatUserGetHomeAmoutVO statUserGetHomeAmoutVO = new StatUserGetHomeAmoutVO();
|
|
|
+
|
|
|
+ //获取团队日总交易额
|
|
|
+ BigDecimal amountToDay = statUserGetHomeAmoutVO.getAmountToDay();
|
|
|
+ amountToDay = getAmountToDayOrMonth(userId, today, tableName, amountToDay, 1);
|
|
|
+ statUserGetHomeAmoutVO.setAmountToDay(amountToDay);
|
|
|
+
|
|
|
+ //获取团队月总交易额
|
|
|
+ BigDecimal amountMonth = statUserGetHomeAmoutVO.getAmountMonth();
|
|
|
+ amountMonth = getAmountToDayOrMonth(userId, month, tableName, amountMonth, 2);
|
|
|
+ statUserGetHomeAmoutVO.setAmountMonth(amountMonth);
|
|
|
+
|
|
|
+ //获取今日新增用户
|
|
|
+ Integer userAddToDay = statUserGetHomeAmoutVO.getUserAddToDay();
|
|
|
+ List<String> todayList = Arrays.asList(today);
|
|
|
+ List<TrendTimesVO> userAddTrendToday = kxsUserNewTradeMapper.getUserAddTrend(userId, todayList, 1);
|
|
|
+ for (TrendTimesVO trendTimesVO : userAddTrendToday) {
|
|
|
+ userAddToDay += trendTimesVO.getTotal();
|
|
|
+ }
|
|
|
+ statUserGetHomeAmoutVO.setUserAddToDay(userAddToDay);
|
|
|
+
|
|
|
+ //获取本月新增用户
|
|
|
+ Integer userAddMonth = statUserGetHomeAmoutVO.getUserAddMonth();
|
|
|
+ List<String> monthList = Arrays.asList(month);
|
|
|
+ List<TrendTimesVO> userAddTrendMonth = kxsUserNewTradeMapper.getUserAddTrend(userId, monthList, 2);
|
|
|
+ for (TrendTimesVO trendTimesVO : userAddTrendMonth) {
|
|
|
+ userAddMonth += trendTimesVO.getTotal();
|
|
|
+ }
|
|
|
+ statUserGetHomeAmoutVO.setUserAddMonth(userAddMonth);
|
|
|
+
|
|
|
+ //获取今日新增商户
|
|
|
+ Integer merchantAddToDay = statUserGetHomeAmoutVO.getMerchantAddToDay();
|
|
|
+ List<TrendTimesVO> userActListByDay = kxsUserActTradeMapper.getUserActListByDayOrMonth(monthList, userId, null, 1);
|
|
|
+ for (TrendTimesVO trendTimesVO : userActListByDay) {
|
|
|
+ merchantAddToDay += trendTimesVO.getTotal();
|
|
|
+ }
|
|
|
+ statUserGetHomeAmoutVO.setMerchantAddToDay(merchantAddToDay);
|
|
|
+
|
|
|
+ //获取本月新增商户
|
|
|
+ Integer merchantAddMonth = statUserGetHomeAmoutVO.getMerchantAddMonth();
|
|
|
+ List<TrendTimesVO> userActListByMonth = kxsUserActTradeMapper.getUserActListByDayOrMonth(monthList, userId, null, 2);
|
|
|
+ for (TrendTimesVO trendTimesVO : userActListByMonth) {
|
|
|
+ merchantAddMonth += trendTimesVO.getTotal();
|
|
|
+ }
|
|
|
+ statUserGetHomeAmoutVO.setMerchantAddMonth(merchantAddMonth);
|
|
|
+ return R.ok(statUserGetHomeAmoutVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R getMyTrade(StatUserGetMyTradeDTO param) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private BigDecimal getAmountToDayOrMonth(Long userId, String date, String tableName, BigDecimal amount, int type) {
|
|
|
+ //pos交易
|
|
|
+ TotalTradeAmtVO totalTradeAmtVO = baseMapper.getPosTrade(userId, tableName, date, type);
|
|
|
+ if (totalTradeAmtVO!= null){
|
|
|
+ amount = amount.add(totalTradeAmtVO.getPosAmt());
|
|
|
+ }
|
|
|
+ //来客吧交易额
|
|
|
+ totalTradeAmtVO = kxsLkbTradeMapper.getLkbTrade(userId, date, type);
|
|
|
+ if (totalTradeAmtVO!= null) {
|
|
|
+ amount = amount.add(totalTradeAmtVO.getLkbAmt());
|
|
|
+ amount = amount.add(totalTradeAmtVO.getLkbActAmt());
|
|
|
+ }
|
|
|
+ //助力宝交易额
|
|
|
+ totalTradeAmtVO = kxsZlbTradeMapper.getZlbTrade(userId, date, type);
|
|
|
+ if (totalTradeAmtVO != null) {
|
|
|
+ amount = amount.add(totalTradeAmtVO.getZlbAmt());
|
|
|
+ }
|
|
|
+ //广电交易额
|
|
|
+ totalTradeAmtVO = kxsUserGdTradeMapper.getGdActCount(userId, date, type);
|
|
|
+ if (totalTradeAmtVO != null){
|
|
|
+ Integer gdCount = totalTradeAmtVO.getGdCount();
|
|
|
+ //广电激活量 * 10000
|
|
|
+ amount = amount.add(new BigDecimal(gdCount * 10000));
|
|
|
+ }
|
|
|
+ //广电话费
|
|
|
+ totalTradeAmtVO = kxsUserGdTradeMapper.getGdTrade(userId, date, type);
|
|
|
+ if (totalTradeAmtVO != null){
|
|
|
+ amount = amount.add(totalTradeAmtVO.getGdAmount());
|
|
|
+ }
|
|
|
+ return amount;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private StatUserGetUserStatByDayOrMonthVO getStatUserGetUserStatByDayOrMonthVO(Long userId, LocalDate now, List<String> times, List<String> lastMonthTimes, Integer type) {
|
|
|
+ StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = new StatUserGetUserStatByDayOrMonthVO();
|
|
|
+ /* ------ 交易趋势图 ------ */
|
|
|
+ setTreadeTrend(userId, now, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
|
|
|
+ /* ------ 交易百分比及总额 ------ */
|
|
|
+ setTreadeTotalAndPercent(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
|
|
|
+ /* ------ 激活百分比及总额 ------ */
|
|
|
+ setActTotalAndPercent(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
|
|
|
+ /* ------ 激活趋势图 ------ */
|
|
|
+ setActTrend(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
|
|
|
+ /* ------ 新增用户趋势图 ------ */
|
|
|
+ setUserAddTrend(userId, times, type, statUserGetUserStatByDayOrMonthVO);
|
|
|
+ return statUserGetUserStatByDayOrMonthVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setUserAddTrend(Long userId, List<String> times, Integer type, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO) {
|
|
|
+ TrendVO trendVO = new TrendVO();
|
|
|
+ List<TrendTimesVO> trendTimesVOS = kxsUserNewTradeMapper.getUserAddTrend(userId, times, type);
|
|
|
+ trendVO.setName("all");
|
|
|
+ trendVO.setTimes(trendTimesVOS);
|
|
|
+ statUserGetUserStatByDayOrMonthVO.setUserAddTrend(trendVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setActTrend(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type) {
|
|
|
+ //查询用户全部激活根据日期分组
|
|
|
+ List<TrendTimesVO> trendTimesActVOS = kxsUserActTradeMapper.getUserActListByDayOrMonth(times, userId,null,type);
|
|
|
+ //判断是否二次查询
|
|
|
+ if (lastMonthTimes != null){
|
|
|
+ List<TrendTimesVO> trendTimesActVOSLast = kxsUserActTradeMapper.getUserActListByDayOrMonth(lastMonthTimes, userId,null,type);
|
|
|
+ trendTimesActVOS.addAll(trendTimesActVOSLast);
|
|
|
+ }
|
|
|
+ //查询用户全部激活量根据 日期以及品牌 分组
|
|
|
+ List<TrendTimesVO> trendTimesActBrandVOS = kxsUserActTradeMapper.getUserActListByDayOrMonth(times, userId,1,type);
|
|
|
+ //判断是否二次查询
|
|
|
+ if (lastMonthTimes != null){
|
|
|
+ List<TrendTimesVO> trendTimesActBrandVOSLast = kxsUserActTradeMapper.getUserActListByDayOrMonth(lastMonthTimes, userId,1,type);
|
|
|
+ trendTimesActBrandVOS.addAll(trendTimesActBrandVOSLast);
|
|
|
+ }
|
|
|
+ //构造数据
|
|
|
+ ArrayList<TrendVO> trendVOSBrand = getTrendVOS(trendTimesActVOS, trendTimesActBrandVOS);
|
|
|
+ statUserGetUserStatByDayOrMonthVO.setActMerchantTrend(trendVOSBrand);//激活趋势图
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setActTotalAndPercent(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO, Integer type) {
|
|
|
+ //获取传入日期激活商户数根据品牌分组
|
|
|
+ List<PercentVO> percentVOSAct = kxsUserActTradeMapper.getUserTradeTotal(times, userId,type);
|
|
|
+ //判断是否二次查询
|
|
|
+ if (lastMonthTimes != null){
|
|
|
+ List<PercentVO> percentVOSActLast = kxsUserActTradeMapper.getUserTradeTotal(lastMonthTimes, userId,type);
|
|
|
+ percentVOSAct.addAll(percentVOSActLast);
|
|
|
+ }
|
|
|
+ //总激活数
|
|
|
+ Integer actTotalCount = 0;
|
|
|
+ for (PercentVO percentVO : percentVOSAct) {
|
|
|
+ actTotalCount += percentVO.getTotal();
|
|
|
+ }
|
|
|
+ //计算百分比
|
|
|
+ for (PercentVO percentVO : percentVOSAct) {
|
|
|
+ percentVO.setPercent(BigDecimal.valueOf(percentVO.getTotal()).divide(BigDecimal.valueOf(actTotalCount),6, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ statUserGetUserStatByDayOrMonthVO.setActMerchantPercent(percentVOSAct);//激活百分比
|
|
|
+ statUserGetUserStatByDayOrMonthVO.setActMerchantTotal(actTotalCount);//激活总数
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setTreadeTotalAndPercent(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type) {
|
|
|
+ String thisMoth = LocalDateTimeUtil.format(LocalDateTime.now(), DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
+ String tableName = PREFIX_TABLE_NAME + thisMoth;
|
|
|
+ //获取全部品牌总交易额
|
|
|
+ List<PercentVO> percentVOS = baseMapper.getUserTradeTotal(tableName,userId, times,type);
|
|
|
+ //判断是否二次查询
|
|
|
+ if (lastMonthTimes != null){
|
|
|
+ List<PercentVO> percentVOSLast = baseMapper.getUserTradeTotal(tableName,userId, lastMonthTimes,type);
|
|
|
+ percentVOS.addAll(percentVOSLast);
|
|
|
+ }
|
|
|
+ BigDecimal totalAmout = BigDecimal.ZERO;
|
|
|
+ //计算总金额
|
|
|
+ for (PercentVO percentVO : percentVOS) {
|
|
|
+ totalAmout = totalAmout.add(percentVO.getAmount());
|
|
|
+ }
|
|
|
+ //计算百分比
|
|
|
+ for (PercentVO percentVO : percentVOS) {
|
|
|
+ percentVO.setPercent(percentVO.getAmount().divide(totalAmout,6, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ statUserGetUserStatByDayOrMonthVO.setTreadePercent(percentVOS);//交易百分比
|
|
|
+ statUserGetUserStatByDayOrMonthVO.setTreadeTotal(totalAmout);//交易总额
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setTreadeTrend(Long userId, LocalDate now, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type) {
|
|
|
+ String thisMoth = LocalDateTimeUtil.format(now, DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
+ String tableName = PREFIX_TABLE_NAME + thisMoth;
|
|
|
+ List<TrendTimesVO> trendTimesVOS = new ArrayList<>();
|
|
|
+ if (type == 1){
|
|
|
+ //查询用户全部交易额根据日期分组
|
|
|
+ trendTimesVOS = baseMapper.getUserTradeListByDayOrMonth(tableName, times, userId,null,type);
|
|
|
+ //判断是否需要二次查询
|
|
|
+ if (lastMonthTimes != null){
|
|
|
+ List<TrendTimesVO> trendTimesVOSByLastMonthTimes = baseMapper.getUserTradeListByDayOrMonth(tableName, lastMonthTimes, userId,null,type);
|
|
|
+ trendTimesVOS.addAll(trendTimesVOSByLastMonthTimes);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ for (String month : times) {
|
|
|
+ //拼接表名
|
|
|
+ String newTableName = PREFIX_TABLE_NAME + month;
|
|
|
+ try{
|
|
|
+ List<TrendTimesVO> userTradeListByDayOrMonth = baseMapper.getUserTradeListByDayOrMonth(newTableName, times, userId, null, type);
|
|
|
+ trendTimesVOS.addAll(userTradeListByDayOrMonth);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.info(e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //查询用户全部交易额根据 日期以及品牌 分组
|
|
|
+ List<TrendTimesVO> trendTimesVOListBrand = baseMapper.getUserTradeListByDayOrMonth(tableName, times, userId,1,type);
|
|
|
+ //判断是否需要二次查询
|
|
|
+ if (lastMonthTimes != null){
|
|
|
+ List<TrendTimesVO> trendTimesVOListBrandLast = baseMapper.getUserTradeListByDayOrMonth(tableName, lastMonthTimes, userId,1,type);
|
|
|
+ trendTimesVOListBrand.addAll(trendTimesVOListBrandLast);
|
|
|
+ }
|
|
|
+ //构造数据
|
|
|
+ ArrayList<TrendVO> trendVOS = getTrendVOS(trendTimesVOS, trendTimesVOListBrand);
|
|
|
+ statUserGetUserStatByDayOrMonthVO.setTreadeTrend(trendVOS);//交易趋势
|
|
|
+ }
|
|
|
+
|
|
|
+ private static ArrayList<TrendVO> getTrendVOS(List<TrendTimesVO> trendTimesVOS, List<TrendTimesVO> trendTimesVOListBrand) {
|
|
|
+ //将全部交易额以及品牌交易额构造进入map key为品牌id 或 all
|
|
|
+ Map<String,List<TrendTimesVO>> treadTrend = new HashMap<>();
|
|
|
+ treadTrend.put("all", trendTimesVOS);
|
|
|
+ for (TrendTimesVO trendTimesVO : trendTimesVOListBrand) {
|
|
|
+ List<TrendTimesVO> trendTimesVOSBrand = treadTrend.get(trendTimesVO.getBrandId().toString());
|
|
|
+ if (trendTimesVOSBrand == null){
|
|
|
+ //未查询到则构造map key为品牌id
|
|
|
+ trendTimesVOSBrand = new ArrayList<>();
|
|
|
+ trendTimesVOSBrand.add(trendTimesVO);
|
|
|
+ treadTrend.put(trendTimesVO.getBrandId().toString(),trendTimesVOSBrand);
|
|
|
+ }else {
|
|
|
+ trendTimesVOSBrand.add(trendTimesVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //将map转换为返回实体类
|
|
|
+ ArrayList<TrendVO> trendVOS = new ArrayList<>();
|
|
|
+ for (Map.Entry<String, List<TrendTimesVO>> entry : treadTrend.entrySet()) {
|
|
|
+ TrendVO trendVO = new TrendVO();
|
|
|
+ trendVO.setName(entry.getKey());
|
|
|
+ trendVO.setTimes(entry.getValue());
|
|
|
+ trendVOS.add(trendVO);
|
|
|
+ }
|
|
|
+ return trendVOS;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|