|
|
@@ -12,6 +12,7 @@ import com.kxs.common.core.util.R;
|
|
|
import com.kxs.common.security.util.SecurityUtils;
|
|
|
import com.kxs.stat.api.dto.statUser.StatUserGetMyTradeDTO;
|
|
|
import com.kxs.stat.api.dto.statUser.StatUserGetUserStatByDayOrMonthDTO;
|
|
|
+import com.kxs.stat.api.dto.statUser.StatUserGetUserTradeListDTO;
|
|
|
import com.kxs.stat.api.model.KxsLkbTrade;
|
|
|
import com.kxs.stat.api.model.KxsUserActTrade;
|
|
|
import com.kxs.stat.api.model.KxsUserLogoutTrade;
|
|
|
@@ -26,6 +27,7 @@ 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.annotations.Param;
|
|
|
import org.apache.ibatis.cursor.Cursor;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
@@ -206,6 +208,7 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
public R getUserStatByDayOrMonth(StatUserGetUserStatByDayOrMonthDTO param) {
|
|
|
Long userId = param.getUserId();
|
|
|
Integer type = param.getType();
|
|
|
+ Integer totalType = param.getTotalType();
|
|
|
LocalDate now = LocalDate.now();
|
|
|
List<String> times = new ArrayList<>();
|
|
|
List<String> lastMonthTimes = null;
|
|
|
@@ -229,7 +232,7 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
lastMonthTimes.add(currentDateString);
|
|
|
}
|
|
|
}
|
|
|
- StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = getStatUserGetUserStatByDayOrMonthVO(userId, now, times, lastMonthTimes,type);
|
|
|
+ StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = getStatUserGetUserStatByDayOrMonthVO(userId, now, times, lastMonthTimes,type,totalType);
|
|
|
return R.ok(statUserGetUserStatByDayOrMonthVO);
|
|
|
} else if (type == 2) {
|
|
|
//近半年
|
|
|
@@ -240,7 +243,7 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
String currentDateString = LocalDateTimeUtil.format(currentDay, DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
times.add(currentDateString);
|
|
|
}
|
|
|
- StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = getStatUserGetUserStatByDayOrMonthVO(userId, now, times, lastMonthTimes,type);
|
|
|
+ StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = getStatUserGetUserStatByDayOrMonthVO(userId, now, times, lastMonthTimes,type,totalType);
|
|
|
return R.ok(statUserGetUserStatByDayOrMonthVO);
|
|
|
} else {
|
|
|
return R.failed("类型错误");
|
|
|
@@ -424,6 +427,20 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
return R.ok(statUserGetMyTradeVO);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R getUserTradeStatList(StatUserGetUserTradeListDTO param) {
|
|
|
+// String month = param.getMonth();
|
|
|
+// Integer totalType = param.getTotalType();
|
|
|
+// Integer getType = param.getGetType();
|
|
|
+// Integer tradeType = param.getTradeType();
|
|
|
+// if (tradeType.equals(3)){
|
|
|
+// //获取全部
|
|
|
+//
|
|
|
+// }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
private BigDecimal getAmountToDayOrMonth(Long userId, String date, String tableName, BigDecimal amount, int type) {
|
|
|
//pos交易
|
|
|
TotalTradeAmtVO totalTradeAmtVO = baseMapper.getPosTrade(userId, tableName, date, type);
|
|
|
@@ -457,55 +474,62 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
}
|
|
|
|
|
|
|
|
|
- private StatUserGetUserStatByDayOrMonthVO getStatUserGetUserStatByDayOrMonthVO(Long userId, LocalDate now, List<String> times, List<String> lastMonthTimes, Integer type) {
|
|
|
+ private StatUserGetUserStatByDayOrMonthVO getStatUserGetUserStatByDayOrMonthVO(Long userId, LocalDate now, List<String> times, List<String> lastMonthTimes, Integer type,Integer totalType) {
|
|
|
StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO = new StatUserGetUserStatByDayOrMonthVO();
|
|
|
/* ------ 交易趋势图 ------ */
|
|
|
- setTreadeTrend(userId, now, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
|
|
|
+ setTreadeTrend(userId, now, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type,totalType);
|
|
|
/* ------ 交易百分比及总额 ------ */
|
|
|
- setTreadeTotalAndPercent(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
|
|
|
+ setTreadeTotalAndPercent(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type,totalType);
|
|
|
/* ------ 激活百分比及总额 ------ */
|
|
|
- setActTotalAndPercent(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
|
|
|
+ setActTotalAndPercent(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type,totalType);
|
|
|
/* ------ 激活趋势图 ------ */
|
|
|
- setActTrend(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type);
|
|
|
+ setActTrend(userId, times, lastMonthTimes, statUserGetUserStatByDayOrMonthVO,type,totalType);
|
|
|
/* ------ 新增用户趋势图 ------ */
|
|
|
- setUserAddTrend(userId, times, type, statUserGetUserStatByDayOrMonthVO);
|
|
|
+ setUserAddTrend(userId, times, type, statUserGetUserStatByDayOrMonthVO,totalType);
|
|
|
return statUserGetUserStatByDayOrMonthVO;
|
|
|
}
|
|
|
|
|
|
- private void setUserAddTrend(Long userId, List<String> times, Integer type, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO) {
|
|
|
+ private void setUserAddTrend(Long userId, List<String> times, Integer type, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO, Integer totalType) {
|
|
|
TrendVO trendVO = new TrendVO();
|
|
|
- List<TrendTimesVO> trendTimesVOS = kxsUserNewTradeMapper.getUserAddTrend(userId, times, type,1);
|
|
|
+ List<TrendTimesVO> trendTimesVOS = kxsUserNewTradeMapper.getUserAddTrend(userId, times, type,totalType);
|
|
|
+ repZero(times,trendTimesVOS);
|
|
|
trendVO.setName("all");
|
|
|
trendVO.setTimes(trendTimesVOS);
|
|
|
statUserGetUserStatByDayOrMonthVO.setUserAddTrend(trendVO);
|
|
|
}
|
|
|
|
|
|
- private void setActTrend(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type) {
|
|
|
+ private void setActTrend(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type, Integer totalType) {
|
|
|
+
|
|
|
+
|
|
|
//查询用户全部激活根据日期分组
|
|
|
- List<TrendTimesVO> trendTimesActVOS = kxsUserActTradeMapper.getUserActListByDayOrMonth(times, userId,null,type,1);
|
|
|
+ List<TrendTimesVO> trendTimesActVOS = kxsUserActTradeMapper.getUserActListByDayOrMonth(times, userId,null,type,totalType);
|
|
|
//判断是否二次查询
|
|
|
if (lastMonthTimes != null){
|
|
|
- List<TrendTimesVO> trendTimesActVOSLast = kxsUserActTradeMapper.getUserActListByDayOrMonth(lastMonthTimes, userId,null,type,1);
|
|
|
+ List<TrendTimesVO> trendTimesActVOSLast = kxsUserActTradeMapper.getUserActListByDayOrMonth(lastMonthTimes, userId,null,type,totalType);
|
|
|
trendTimesActVOS.addAll(trendTimesActVOSLast);
|
|
|
}
|
|
|
+ repZero(times,trendTimesActVOS);
|
|
|
+
|
|
|
+
|
|
|
//查询用户全部激活量根据 日期以及品牌 分组
|
|
|
- List<TrendTimesVO> trendTimesActBrandVOS = kxsUserActTradeMapper.getUserActListByDayOrMonth(times, userId,1,type,1);
|
|
|
+ List<TrendTimesVO> trendTimesActBrandVOS = kxsUserActTradeMapper.getUserActListByDayOrMonth(times, userId,1,type,totalType);
|
|
|
//判断是否二次查询
|
|
|
if (lastMonthTimes != null){
|
|
|
- List<TrendTimesVO> trendTimesActBrandVOSLast = kxsUserActTradeMapper.getUserActListByDayOrMonth(lastMonthTimes, userId,1,type,1);
|
|
|
+ List<TrendTimesVO> trendTimesActBrandVOSLast = kxsUserActTradeMapper.getUserActListByDayOrMonth(lastMonthTimes, userId,1,type,totalType);
|
|
|
trendTimesActBrandVOS.addAll(trendTimesActBrandVOSLast);
|
|
|
}
|
|
|
+ repZero(times,trendTimesActBrandVOS);
|
|
|
//构造数据
|
|
|
ArrayList<TrendVO> trendVOSBrand = getTrendVOS(trendTimesActVOS, trendTimesActBrandVOS);
|
|
|
statUserGetUserStatByDayOrMonthVO.setActMerchantTrend(trendVOSBrand);//激活趋势图
|
|
|
}
|
|
|
|
|
|
- private void setActTotalAndPercent(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO, Integer type) {
|
|
|
+ private void setActTotalAndPercent(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO, Integer type,Integer totalType) {
|
|
|
//获取传入日期激活商户数根据品牌分组
|
|
|
- List<PercentVO> percentVOSAct = kxsUserActTradeMapper.getUserTradeTotal(times, userId,type);
|
|
|
+ List<PercentVO> percentVOSAct = kxsUserActTradeMapper.getUserTradeTotal(times, userId,type,totalType);
|
|
|
//判断是否二次查询
|
|
|
if (lastMonthTimes != null){
|
|
|
- List<PercentVO> percentVOSActLast = kxsUserActTradeMapper.getUserTradeTotal(lastMonthTimes, userId,type);
|
|
|
+ List<PercentVO> percentVOSActLast = kxsUserActTradeMapper.getUserTradeTotal(lastMonthTimes, userId,type,totalType);
|
|
|
percentVOSAct.addAll(percentVOSActLast);
|
|
|
}
|
|
|
//总激活数
|
|
|
@@ -521,14 +545,18 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
statUserGetUserStatByDayOrMonthVO.setActMerchantTotal(actTotalCount);//激活总数
|
|
|
}
|
|
|
|
|
|
- private void setTreadeTotalAndPercent(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type) {
|
|
|
+ private void setTreadeTotalAndPercent(Long userId, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type,Integer totalType) {
|
|
|
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);
|
|
|
+ List<PercentVO> percentVOS = baseMapper.getUserTradeTotal(tableName,userId, times,type,totalType);
|
|
|
//判断是否二次查询
|
|
|
if (lastMonthTimes != null){
|
|
|
- List<PercentVO> percentVOSLast = baseMapper.getUserTradeTotal(tableName,userId, lastMonthTimes,type);
|
|
|
+ //需要构造上月表名
|
|
|
+ LocalDate date = LocalDate.now().minusMonths(1);//月份减一
|
|
|
+ String lastMoth = LocalDateTimeUtil.format(date, DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
+ String lastTableName = PREFIX_TABLE_NAME + lastMoth;
|
|
|
+ List<PercentVO> percentVOSLast = baseMapper.getUserTradeTotal(lastTableName,userId, lastMonthTimes,type,totalType);
|
|
|
percentVOS.addAll(percentVOSLast);
|
|
|
}
|
|
|
BigDecimal totalAmout = BigDecimal.ZERO;
|
|
|
@@ -544,35 +572,53 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
statUserGetUserStatByDayOrMonthVO.setTreadeTotal(totalAmout);//交易总额
|
|
|
}
|
|
|
|
|
|
- private void setTreadeTrend(Long userId, LocalDate now, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type) {
|
|
|
+ private void setTreadeTrend(Long userId, LocalDate now, List<String> times, List<String> lastMonthTimes, StatUserGetUserStatByDayOrMonthVO statUserGetUserStatByDayOrMonthVO,Integer type,Integer totalType) {
|
|
|
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);
|
|
|
+ trendTimesVOS = baseMapper.getUserTradeListByDayOrMonth(tableName, times, userId,null,type,totalType);
|
|
|
//判断是否需要二次查询
|
|
|
if (lastMonthTimes != null){
|
|
|
- List<TrendTimesVO> trendTimesVOSByLastMonthTimes = baseMapper.getUserTradeListByDayOrMonth(tableName, lastMonthTimes, userId,null,type);
|
|
|
- trendTimesVOS.addAll(trendTimesVOSByLastMonthTimes);
|
|
|
+ //需要构造上月表名
|
|
|
+ LocalDate date = now.minusMonths(1);//月份减一
|
|
|
+ String lastMoth = LocalDateTimeUtil.format(date, DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
+ String lastTableName = PREFIX_TABLE_NAME + lastMoth;
|
|
|
+ try {
|
|
|
+ //因为这里可能存在查询的月份的表未创建的原因 使用try包裹跳过报错 视为该月无数据
|
|
|
+ List<TrendTimesVO> trendTimesVOSByLastMonthTimes = baseMapper.getUserTradeListByDayOrMonth(lastTableName, lastMonthTimes, userId,null,type,totalType);
|
|
|
+ trendTimesVOS.addAll(trendTimesVOSByLastMonthTimes);
|
|
|
+ }catch (Exception e){
|
|
|
+ log.info(e.getMessage());
|
|
|
+ }
|
|
|
}
|
|
|
+ //此处需要判断查询出的日期跟times比较,不存在的自动补0
|
|
|
+ repZero(times, trendTimesVOS);
|
|
|
}else {
|
|
|
for (String month : times) {
|
|
|
//拼接表名
|
|
|
String newTableName = PREFIX_TABLE_NAME + month;
|
|
|
+ //因为这里可能存在查询的月份的表未创建的原因 使用try包裹跳过报错 视为该月无数据
|
|
|
try{
|
|
|
- List<TrendTimesVO> userTradeListByDayOrMonth = baseMapper.getUserTradeListByDayOrMonth(newTableName, times, userId, null, type);
|
|
|
+ List<TrendTimesVO> userTradeListByDayOrMonth = baseMapper.getUserTradeListByDayOrMonth(newTableName, times, userId, null, type,totalType);
|
|
|
trendTimesVOS.addAll(userTradeListByDayOrMonth);
|
|
|
}catch (Exception e){
|
|
|
log.info(e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
+ //此处需要判断查询出的日期跟查询的times比较,不存在的自动补0
|
|
|
+ repZero(times, trendTimesVOS);
|
|
|
}
|
|
|
//查询用户全部交易额根据 日期以及品牌 分组
|
|
|
- List<TrendTimesVO> trendTimesVOListBrand = baseMapper.getUserTradeListByDayOrMonth(tableName, times, userId,1,type);
|
|
|
+ List<TrendTimesVO> trendTimesVOListBrand = baseMapper.getUserTradeListByDayOrMonth(tableName, times, userId,1,type,totalType);
|
|
|
//判断是否需要二次查询
|
|
|
if (lastMonthTimes != null){
|
|
|
- List<TrendTimesVO> trendTimesVOListBrandLast = baseMapper.getUserTradeListByDayOrMonth(tableName, lastMonthTimes, userId,1,type);
|
|
|
+ //需要构造上月表名
|
|
|
+ LocalDate date = now.minusMonths(1);//月份减一
|
|
|
+ String lastMoth = LocalDateTimeUtil.format(date, DatePattern.SIMPLE_MONTH_PATTERN);
|
|
|
+ String lastTableName = PREFIX_TABLE_NAME + lastMoth;
|
|
|
+ List<TrendTimesVO> trendTimesVOListBrandLast = baseMapper.getUserTradeListByDayOrMonth(lastTableName, lastMonthTimes, userId,1,type,totalType);
|
|
|
trendTimesVOListBrand.addAll(trendTimesVOListBrandLast);
|
|
|
}
|
|
|
//构造数据
|
|
|
@@ -580,12 +626,35 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
|
|
|
statUserGetUserStatByDayOrMonthVO.setTreadeTrend(trendVOS);//交易趋势
|
|
|
}
|
|
|
|
|
|
+ private static void repZero(List<String> times, List<TrendTimesVO> trendTimesVOS) {
|
|
|
+ for (String time : times) {
|
|
|
+ //补充标识
|
|
|
+ int repFlag = 0;
|
|
|
+ Integer brandId = null;
|
|
|
+ for (TrendTimesVO trendTimesVO : trendTimesVOS) {
|
|
|
+ brandId = trendTimesVO.getBrandId();
|
|
|
+ //如果存在则开启标识
|
|
|
+ if (time.equals(trendTimesVO.getTime())){
|
|
|
+ repFlag = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //当返回集合中不存在查询的时间则构造一条0数据加入trendTimesVOS集合
|
|
|
+ if (repFlag == 0){
|
|
|
+ TrendTimesVO trendTimesVO = new TrendTimesVO();
|
|
|
+ trendTimesVO.setTime(time);
|
|
|
+ trendTimesVO.setTotal(0);
|
|
|
+ trendTimesVO.setBrandId(brandId);
|
|
|
+ trendTimesVOS.add(trendTimesVO);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
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());
|
|
|
+ List<TrendTimesVO> trendTimesVOSBrand = treadTrend.get(trendTimesVO.getBrandId() == null ? null : trendTimesVO.getBrandId().toString());
|
|
|
if (trendTimesVOSBrand == null){
|
|
|
//未查询到则构造map key为品牌id
|
|
|
trendTimesVOSBrand = new ArrayList<>();
|