|
|
@@ -4,14 +4,17 @@ import cn.hutool.core.date.DatePattern;
|
|
|
import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.kxs.common.core.exception.GlobalCustomerException;
|
|
|
import com.kxs.common.core.util.AssertUtil;
|
|
|
import com.kxs.common.core.util.R;
|
|
|
+import com.kxs.common.core.util.RetOps;
|
|
|
+import com.kxs.common.core.util.TotalDateUtil;
|
|
|
+import com.kxs.product.api.feign.RemoteKxsProductService;
|
|
|
import com.kxs.product.api.model.KxsBrand;
|
|
|
import com.kxs.stat.api.dto.statUser.GetActivityStatByIdAndTimeDTO;
|
|
|
import com.kxs.stat.api.vo.GetActivityStatByIdAndTimeVO;
|
|
|
import com.kxs.stat.api.vo.myUser.TrendVO;
|
|
|
import com.kxs.stat.api.vo.statUser.*;
|
|
|
-import com.kxs.stat.biz.constant.enums.TotalTypeEnum;
|
|
|
import com.kxs.stat.biz.mapper.KxsLkbActTradeMapper;
|
|
|
import com.kxs.stat.biz.mapper.KxsUserActTradeMapper;
|
|
|
import com.kxs.stat.api.model.KxsUserActTrade;
|
|
|
@@ -19,10 +22,10 @@ import com.kxs.stat.biz.service.KxsUserActTradeService;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -37,6 +40,10 @@ public class KxsUserActTradeServiceImpl extends ServiceImpl<KxsUserActTradeMappe
|
|
|
|
|
|
private final KxsLkbActTradeMapper lkbActTradeMapper;
|
|
|
|
|
|
+ private final RemoteKxsProductService remoteKxsProductService;
|
|
|
+
|
|
|
+ private Map<Integer, KxsBrand> brandsMap;
|
|
|
+
|
|
|
@Override
|
|
|
public List<GetActivityStatByIdAndTimeVO> getActivityStatByIdAndTime(List<GetActivityStatByIdAndTimeDTO> param) {
|
|
|
ArrayList<GetActivityStatByIdAndTimeVO> getActivityStatByIdAndTimeVOS = new ArrayList<>();
|
|
|
@@ -62,47 +69,18 @@ public class KxsUserActTradeServiceImpl extends ServiceImpl<KxsUserActTradeMappe
|
|
|
@Override
|
|
|
public R getActivateMerchantList(Integer totalType,Long userId,String month) {
|
|
|
LocalDate now = LocalDate.now();
|
|
|
- List<Integer> times = new ArrayList<>();
|
|
|
+ List<Integer> times;
|
|
|
int type;
|
|
|
- if (month.equals("0")){
|
|
|
+ if ("0".equals(month)){
|
|
|
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(Integer.valueOf(currentDateString));
|
|
|
- }
|
|
|
+ times = TotalDateUtil.getMonthList(now, 6);
|
|
|
}else {
|
|
|
type = 1;
|
|
|
- //校验时间格式是yyyyMM
|
|
|
- AssertUtil.isyyyyMM(month);
|
|
|
- //判断month是否是本月 否则获取月份中全部日日期
|
|
|
- int year = Integer.parseInt(month.substring(0, 4));
|
|
|
- int monthOfYear = Integer.parseInt(month.substring(4, 6));
|
|
|
- // 判断给定的月份字符串是否表示当前月份
|
|
|
- boolean isCurrentMonth = year == now.getYear() && monthOfYear == now.getMonthValue();
|
|
|
- // 如果是当前月份,则生成本月到今天的日期字符串
|
|
|
- if (isCurrentMonth) {
|
|
|
- LocalDate firstDayOfMonth = now.withDayOfMonth(1);
|
|
|
- for (LocalDate date = firstDayOfMonth; !date.isAfter(now); date = date.plusDays(1)) {
|
|
|
- times.add(Integer.valueOf(date.format(DateTimeFormatter.ofPattern("yyyyMMdd"))));
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 如果不是当前月份,则生成整个月的日期字符串
|
|
|
- LocalDate firstDayOfMonth = LocalDate.of(year, monthOfYear, 1);
|
|
|
- int daysInMonth = firstDayOfMonth.lengthOfMonth();
|
|
|
- for (int day = 1; day <= daysInMonth; day++) {
|
|
|
- LocalDate date = firstDayOfMonth.withDayOfMonth(day);
|
|
|
- times.add(Integer.valueOf(date.format(DateTimeFormatter.ofPattern("yyyyMMdd"))));
|
|
|
- }
|
|
|
- }
|
|
|
+ times = TotalDateUtil.getMonthDayList(month);
|
|
|
}
|
|
|
//获取全部激活并构造为TimeVo格式
|
|
|
- ArrayList<TimeVO> timeVOArrayList = getTimeVOArrayList(totalType,userId, times, type);
|
|
|
- return R.ok(timeVOArrayList);
|
|
|
+ ArrayList<MchActTimeTotalVO> mchActTimeTotalList = getTimeVOArrayList(totalType,userId, times, type);
|
|
|
+ return R.ok(mchActTimeTotalList);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -151,18 +129,18 @@ public class KxsUserActTradeServiceImpl extends ServiceImpl<KxsUserActTradeMappe
|
|
|
return trendVOList;
|
|
|
}
|
|
|
|
|
|
- private ArrayList<TimeVO> getTimeVOArrayList(Integer totalType,Long userId, List<Integer> times, int type) {
|
|
|
+ private ArrayList<MchActTimeTotalVO> getTimeVOArrayList(Integer totalType, Long userId, List<Integer> times, int type) {
|
|
|
//构造数据
|
|
|
//将全部激活量 或 品牌激活量 构造进入map key为品牌id 或 all 或来客吧码牌
|
|
|
- Map<Integer,List<ActivityAddVO>> timeActivityMap = new HashMap<>();
|
|
|
+ Map<Integer,List<MchActTimeAddVO>> timeActivityMap = new HashMap<>();
|
|
|
//查询来客吧码牌激活
|
|
|
List<TrendTimesVO> trendTimesVOLkbList = lkbActTradeMapper.getActivityStatByLkbList(userId, times, totalType);
|
|
|
//来客吧码牌不再品牌列表中 同all 需要做特殊处理
|
|
|
for (TrendTimesVO trendTimesVO : trendTimesVOLkbList) {
|
|
|
- ArrayList<ActivityAddVO> activityAddVOS = new ArrayList<>();
|
|
|
+ ArrayList<MchActTimeAddVO> activityAddVOS = new ArrayList<>();
|
|
|
Integer time = trendTimesVO.getTime();
|
|
|
Integer total = trendTimesVO.getTotal();
|
|
|
- ActivityAddVO activityAddVO = new ActivityAddVO();
|
|
|
+ MchActTimeAddVO activityAddVO = new MchActTimeAddVO();
|
|
|
activityAddVO.setName("来客吧码牌");
|
|
|
activityAddVO.setTotal(total);
|
|
|
activityAddVOS.add(activityAddVO);
|
|
|
@@ -176,26 +154,26 @@ public class KxsUserActTradeServiceImpl extends ServiceImpl<KxsUserActTradeMappe
|
|
|
//先查询map中是否包含有改时间日期的来客吧码牌激活数据
|
|
|
Integer total = trendTimesVO.getTotal();
|
|
|
Integer time = trendTimesVO.getTime();
|
|
|
- List<ActivityAddVO> activityAddVOList = timeActivityMap.get(time);
|
|
|
+ List<MchActTimeAddVO> activityAddVOList = timeActivityMap.get(time);
|
|
|
if (activityAddVOList == null){
|
|
|
//当前全部的时间点不存在码牌激活数据时,走正常逻辑构造map
|
|
|
//将全部激活集合全部构造成ActivityAddVO放入hashMap中,
|
|
|
- ArrayList<ActivityAddVO> activityAddVOS = new ArrayList<>();
|
|
|
- ActivityAddVO activityAddVO = new ActivityAddVO();
|
|
|
- activityAddVO.setName("all");
|
|
|
+ ArrayList<MchActTimeAddVO> activityAddVOS = new ArrayList<>();
|
|
|
+ MchActTimeAddVO activityAddVO = new MchActTimeAddVO();
|
|
|
+ activityAddVO.setName("总激活");
|
|
|
activityAddVO.setTotal(total);
|
|
|
activityAddVOS.add(activityAddVO);
|
|
|
//key为时间,值为其ActivityAddVO本身
|
|
|
timeActivityMap.put(time,activityAddVOS);
|
|
|
}else {
|
|
|
//存在数据时,我们需要将码牌数量添加到总激活中
|
|
|
- for (ActivityAddVO activityAddVO : activityAddVOList) {
|
|
|
+ for (MchActTimeAddVO activityAddVO : activityAddVOList) {
|
|
|
//激活总量加上码牌激活量
|
|
|
total += activityAddVO.getTotal();
|
|
|
}
|
|
|
//再将全部激活集合全部构造成ActivityAddVO放入hashMap中,
|
|
|
- ActivityAddVO activityAddVO = new ActivityAddVO();
|
|
|
- activityAddVO.setName("all");
|
|
|
+ MchActTimeAddVO activityAddVO = new MchActTimeAddVO();
|
|
|
+ activityAddVO.setName("总激活");
|
|
|
activityAddVO.setTotal(total);
|
|
|
//将构造的数据添加到我们从map中拿出的List中
|
|
|
activityAddVOList.add(activityAddVO);
|
|
|
@@ -206,12 +184,12 @@ public class KxsUserActTradeServiceImpl extends ServiceImpl<KxsUserActTradeMappe
|
|
|
//遍历品牌激活
|
|
|
for (TrendTimesVO trendTimesVO : trendTimesVOListBrand) {
|
|
|
//查找map获取当前品牌激活统计的时间点
|
|
|
- List<ActivityAddVO> activityAddVOList = timeActivityMap.get(trendTimesVO.getTime());
|
|
|
+ List<MchActTimeAddVO> activityAddVOList = timeActivityMap.get(trendTimesVO.getTime());
|
|
|
//在逻辑上,该activityAddVOList不可能为null,但添加校验防止脏数据导致报错
|
|
|
if (activityAddVOList != null){
|
|
|
//将当前品牌的激活数量构造成activityAddVO 添加入map中去
|
|
|
- ActivityAddVO activityAddVO = new ActivityAddVO();
|
|
|
- activityAddVO.setName(trendTimesVO.getBrandId().toString());
|
|
|
+ MchActTimeAddVO activityAddVO = new MchActTimeAddVO();
|
|
|
+ activityAddVO.setName(getBrandMap().get(trendTimesVO.getBrandId()).getName());
|
|
|
activityAddVO.setTotal(trendTimesVO.getTotal());
|
|
|
activityAddVOList.add(activityAddVO);
|
|
|
}
|
|
|
@@ -219,24 +197,24 @@ public class KxsUserActTradeServiceImpl extends ServiceImpl<KxsUserActTradeMappe
|
|
|
|
|
|
//此时我们的hashmap格式已为TimeVO类格式
|
|
|
//将map转换为返回实体类
|
|
|
- ArrayList<TimeVO> timeVOS = new ArrayList<>();
|
|
|
+ ArrayList<MchActTimeTotalVO> timeVOS = new ArrayList<>();
|
|
|
//根据我们传入的时间进行写入
|
|
|
for (Integer time : times) {
|
|
|
- List<ActivityAddVO> activityAddVOList = timeActivityMap.get(time);
|
|
|
+ List<MchActTimeAddVO> activityAddVOList = timeActivityMap.get(time);
|
|
|
//存在数据则开始构造TimeVO
|
|
|
if (activityAddVOList != null){
|
|
|
- TimeVO timeVO = new TimeVO();
|
|
|
+ MchActTimeTotalVO timeVO = new MchActTimeTotalVO();
|
|
|
timeVO.setDate(time);
|
|
|
timeVO.setActivityAdd(activityAddVOList);
|
|
|
timeVOS.add(timeVO);
|
|
|
}else {
|
|
|
//不存在则填充空数据
|
|
|
- ArrayList<ActivityAddVO> activityAddVOS = new ArrayList<>();
|
|
|
- ActivityAddVO activityAddVO = new ActivityAddVO();
|
|
|
+ ArrayList<MchActTimeAddVO> activityAddVOS = new ArrayList<>();
|
|
|
+ MchActTimeAddVO activityAddVO = new MchActTimeAddVO();
|
|
|
activityAddVO.setName("all");
|
|
|
activityAddVO.setTotal(0);
|
|
|
activityAddVOS.add(activityAddVO);
|
|
|
- TimeVO timeVO = new TimeVO();
|
|
|
+ MchActTimeTotalVO timeVO = new MchActTimeTotalVO();
|
|
|
timeVO.setDate(time);
|
|
|
timeVO.setActivityAdd(activityAddVOS);
|
|
|
timeVOS.add(timeVO);
|
|
|
@@ -244,5 +222,17 @@ public class KxsUserActTradeServiceImpl extends ServiceImpl<KxsUserActTradeMappe
|
|
|
}
|
|
|
return timeVOS;
|
|
|
}
|
|
|
+
|
|
|
+ private Map<Integer, KxsBrand> getBrandMap() {
|
|
|
+ if (brandsMap == null) {
|
|
|
+ R<List<KxsBrand>> brandRes = remoteKxsProductService.loadByAllBrand();
|
|
|
+ List<KxsBrand> brands = RetOps.of(brandRes)
|
|
|
+ .getData()
|
|
|
+ .orElseThrow(() -> new GlobalCustomerException("获取品牌列表为空"));
|
|
|
+ brandsMap = brands.stream().collect(Collectors.toMap(KxsBrand::getId, Function.identity()));
|
|
|
+ }
|
|
|
+ return brandsMap;
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
|