## Opt - 业绩独立大小区条件&市场动态列表接口
This commit is contained in:
parent
ca0321a43a
commit
0dccb9792f
|
@ -181,7 +181,6 @@ public class ApiRetailHomePageController extends BaseController {
|
|||
*/
|
||||
@PostMapping("/market-dynamics")
|
||||
public AjaxResult getMarketDynamics(@RequestBody MarketDynamicsQueryDateParam param) {
|
||||
retailAchieveService.getMarketDynamics(param);
|
||||
return AjaxResult.success();
|
||||
return AjaxResult.success(retailAchieveService.getMarketDynamics(param));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,10 @@ package com.hzs.retail.member.mapper;
|
|||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
|
||||
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailAchieveVO;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
|
||||
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -174,6 +176,8 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
|
|||
*/
|
||||
List<CuMemberRetailDataStatisticsDetailVO> getRetailDataStatisticsDetail(CuMemberRetailAchieveVO cuMemberAchieveVO);
|
||||
|
||||
List<MarketDynamicsDetailVO> getMarketDynamicsDetail(@Param("param") MarketDynamicsQueryDateParam param);
|
||||
|
||||
/**
|
||||
* 查询当天自己新增盒数
|
||||
*
|
||||
|
|
|
@ -6,6 +6,7 @@ import lombok.Data;
|
|||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
|
@ -17,6 +18,7 @@ import java.io.Serializable;
|
|||
public class MarketDynamicsQueryDateParam implements Serializable {
|
||||
private Long pkId;
|
||||
private String nowDate;
|
||||
private String yesterdayDate;
|
||||
private String lastMonthDate;
|
||||
|
||||
/**
|
||||
|
@ -28,6 +30,8 @@ public class MarketDynamicsQueryDateParam implements Serializable {
|
|||
*/
|
||||
private String lastMonthTableName;
|
||||
private String currentDayTableName;
|
||||
|
||||
private List<Long> pkIdList;
|
||||
/**
|
||||
* 查询条件 (会员编号/会员姓名)
|
||||
*/
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.hzs.retail.member.service;
|
|||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
|
||||
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
|
||||
import com.hzs.retail.member.utils.PageResult;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailAchieveVO;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
|
||||
|
@ -114,5 +115,5 @@ public interface ICuMemberRetailAchieveService extends IService<CuMemberRetailRa
|
|||
*/
|
||||
CuMemberRetailDataStatisticsResultVO getRetailDataStatisticsDetail(Long pkMember, Integer pkCountry, Integer systemType);
|
||||
|
||||
List<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param);
|
||||
PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param);
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ import com.hzs.retail.member.mapper.CuMemberRetailRangeMapper;
|
|||
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
|
||||
import com.hzs.retail.member.service.ICuMemberRetailAchieveService;
|
||||
import com.hzs.retail.member.utils.DataStatisticsUtil;
|
||||
import com.hzs.retail.member.utils.PageResult;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailAchieveVO;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
|
||||
|
@ -307,18 +308,20 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
|
|||
*/
|
||||
private String getTableName() {
|
||||
String localDate = LocalDate.now().minus(1, ChronoUnit.DAYS).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||
int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId();
|
||||
if(ObjectUtil.isEmpty(period)){
|
||||
CuMemberSettlePeriod cuMemberSettlePeriod =iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
|
||||
if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
|
||||
return null;
|
||||
}
|
||||
int period = cuMemberSettlePeriod.getPkId();
|
||||
return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period;
|
||||
}
|
||||
private String getDayTableName() {
|
||||
String localDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||
int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId();
|
||||
if(ObjectUtil.isEmpty(period)){
|
||||
CuMemberSettlePeriod cuMemberSettlePeriod =iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
|
||||
if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
|
||||
return null;
|
||||
}
|
||||
int period = cuMemberSettlePeriod.getPkId();
|
||||
return TableNameConstants.CU_MEMBER_RETAIL_S + period;
|
||||
}
|
||||
|
||||
|
@ -586,19 +589,26 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param) {
|
||||
public PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param) {
|
||||
Long pkMember = SecurityUtils.getUserId();
|
||||
Integer systemType = SecurityUtils.getSystemType();
|
||||
|
||||
DataStatisticsUtil.setQueryDateParam(param);
|
||||
param.setCurrentDayTableName(getDayTableName());
|
||||
param.setCurrentMonthTableName(getDayTableName(param.getNowDate()));
|
||||
param.setCurrentDayTableName(getDayTableName(param.getLastMonthDate()));
|
||||
param.setCurrentMonthTableName(getDayTableName(param.getYesterdayDate()));
|
||||
param.setLastMonthTableName(getDayTableName(param.getLastMonthDate()));
|
||||
log.info("MarketDynamicsQueryDateParam : {}", JSONUtil.toJsonStr(param));
|
||||
return Collections.emptyList();
|
||||
List<Long> pkMemberList = baseMapper.selectDirectPushByPkMember(pkMember, systemType);
|
||||
param.setPkIdList(pkMemberList);
|
||||
List<MarketDynamicsDetailVO> detailVOList = baseMapper.getMarketDynamicsDetail(param);
|
||||
log.info("detailVOList : {}", JSONUtil.toJsonStr(detailVOList));
|
||||
return DataStatisticsUtil.getMarketDynamicsAssemblyData(detailVOList, param);
|
||||
}
|
||||
|
||||
private String getDayTableName(String localDate) {
|
||||
CuMemberSettlePeriod cuMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
|
||||
if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
|
||||
return null;
|
||||
return TableNameConstants.CU_MEMBER_RETAIL_RANGE;
|
||||
}
|
||||
int period = cuMemberSettlePeriod.getPkId();
|
||||
return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period;
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
package com.hzs.retail.member.utils;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.hzs.common.core.enums.EYesNo;
|
||||
import com.hzs.common.domain.member.base.CuMember;
|
||||
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
|
||||
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
|
@ -17,6 +19,7 @@ import java.util.ArrayList;
|
|||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 用户统计数据工具
|
||||
|
@ -49,7 +52,8 @@ public class DataStatisticsUtil {
|
|||
calcDetailVOTotalField(detailVOList, pkId);
|
||||
addVirtualBranch(detailVOList, pkId);
|
||||
CuMemberRetailDataStatisticsDetailVO total = getDetailVOByPKID(detailVOList, pkId);
|
||||
CuMemberRetailDataStatisticsDetailVO bigRange = getBigRangeDetailVO(detailVOList, pkId);
|
||||
CuMemberRetailDataStatisticsDetailVO bigRangeBox = getBigRangeBoxDetailVO(detailVOList, pkId);
|
||||
CuMemberRetailDataStatisticsDetailVO bigRangePv = getBigRangePVDetailVO(detailVOList, pkId);
|
||||
if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){
|
||||
// 昨日非激活 排除昨日日结表数据
|
||||
excludeDailySettlementData(detailVOList);
|
||||
|
@ -57,19 +61,19 @@ public class DataStatisticsUtil {
|
|||
// 排除注水数据
|
||||
excludeWaterInjectionData(detailVOList, pkId);
|
||||
}
|
||||
Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRange.getTotalBoxNum();
|
||||
Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRangeBox.getTotalBoxNum();
|
||||
if(smallRangeTotalBoxNum < 0){
|
||||
smallRangeTotalBoxNum = 0;
|
||||
}
|
||||
BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRange.getTotalPv());
|
||||
BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRangePv.getTotalPv());
|
||||
if(smallRangeTotalPv.compareTo(BigDecimal.ZERO) < 0){
|
||||
smallRangeTotalPv = BigDecimal.ZERO;
|
||||
}
|
||||
return CuMemberRetailDataStatisticsResultVO.builder()
|
||||
.totalBoxNum(total.getTotalBoxNum())
|
||||
.totalPv(formatPV(total.getTotalPv()))
|
||||
.bigRangeTotalBoxNum(bigRange.getTotalBoxNum())
|
||||
.bigRangeTotalPv(formatPV(bigRange.getTotalPv()))
|
||||
.bigRangeTotalBoxNum(bigRangeBox.getTotalBoxNum())
|
||||
.bigRangeTotalPv(formatPV(bigRangePv.getTotalPv()))
|
||||
.smallRangeTotalBoxNum(smallRangeTotalBoxNum)
|
||||
.smallRangeTotalPv(formatPV(smallRangeTotalPv))
|
||||
.build();
|
||||
|
@ -219,6 +223,23 @@ public class DataStatisticsUtil {
|
|||
return detailVOList.parallelStream().filter(o -> o.getPkId().equals(pkId)).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 组装市场动态列表数据
|
||||
* @param detailVOList
|
||||
*/
|
||||
public static PageResult<MarketDynamicsDetailVO> getMarketDynamicsAssemblyData(List<MarketDynamicsDetailVO> detailVOList, MarketDynamicsQueryDateParam param){
|
||||
if(StrUtil.isNotEmpty(param.getKeyWords())){
|
||||
detailVOList = detailVOList.parallelStream().filter(o -> param.getKeyWords().contains(o.getMemberCode()) || param.getKeyWords().contains(o.getMemberName())).collect(Collectors.toList());
|
||||
}
|
||||
MarketDynamicsDetailVO bigRange = detailVOList.parallelStream()
|
||||
.max(Comparator.comparingInt(MarketDynamicsDetailVO::getTotalBoxNum))
|
||||
.orElse(null);
|
||||
detailVOList = detailVOList.parallelStream().filter(o -> !o.getPkId().equals(bigRange.getPkId())).collect(Collectors.toList());
|
||||
PageResult<MarketDynamicsDetailVO> result = MemoryPageUtils.paginate(detailVOList, param.getPageNum(), param.getPageSize());
|
||||
result.setBigRange(bigRange);
|
||||
return result;
|
||||
}
|
||||
|
||||
private static Integer getMaxTotalBoxNum(List<CuMemberRetailDataStatisticsDetailVO> detailVOList) {
|
||||
return detailVOList.parallelStream()
|
||||
.map(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum)
|
||||
|
@ -226,12 +247,18 @@ public class DataStatisticsUtil {
|
|||
.max(Integer::compare)
|
||||
.orElse(null);
|
||||
}
|
||||
private static CuMemberRetailDataStatisticsDetailVO getBigRangeDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
|
||||
return detailVOList.parallelStream()
|
||||
private static CuMemberRetailDataStatisticsDetailVO getBigRangeBoxDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
|
||||
return detailVOList.stream()
|
||||
.filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId))
|
||||
.max(Comparator.comparingInt(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum))
|
||||
.orElse(null);
|
||||
}
|
||||
private static CuMemberRetailDataStatisticsDetailVO getBigRangePVDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
|
||||
return detailVOList.stream()
|
||||
.filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId))
|
||||
.max(Comparator.comparing(CuMemberRetailDataStatisticsDetailVO::getTotalPv))
|
||||
.orElse(null);
|
||||
}
|
||||
public static BigDecimal formatPV(BigDecimal pv){
|
||||
return pv.divide(
|
||||
new BigDecimal("10000"),
|
||||
|
@ -242,9 +269,11 @@ public class DataStatisticsUtil {
|
|||
public static void setQueryDateParam(MarketDynamicsQueryDateParam param){
|
||||
LocalDate.now(ZoneId.of("Asia/Shanghai"));
|
||||
LocalDate currentDate = LocalDate.now();
|
||||
LocalDate yesterdayDate = currentDate.minusDays(1);
|
||||
LocalDate previousMonthDate = currentDate.minusMonths(1);
|
||||
LocalDate lastDayOfPreviousMonth = previousMonthDate.with(TemporalAdjusters.lastDayOfMonth());
|
||||
param.setNowDate(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||
param.setYesterdayDate(yesterdayDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||
param.setLastMonthDate(lastDayOfPreviousMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||
// System.out.println("当前日期: " + currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||
// System.out.println("上一个月最后一天: " + lastDayOfPreviousMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
package com.hzs.retail.member.utils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class MemoryPageUtils {
|
||||
public static <T> PageResult<T> paginate(List<T> dataList, int pageNum, int pageSize) {
|
||||
// 校验参数有效性
|
||||
if (pageNum <= 0) pageNum = 1;
|
||||
if (pageSize <= 0) pageSize = 10; // 默认每页10条
|
||||
|
||||
int total = dataList.size();
|
||||
int start = (pageNum - 1) * pageSize;
|
||||
if (start >= total) {
|
||||
return new PageResult<>(total, new ArrayList<>());
|
||||
}
|
||||
|
||||
// 计算结束索引(避免超出列表长度)
|
||||
int end = Math.min(start + pageSize, total);
|
||||
List<T> pageData = dataList.subList(start, end);
|
||||
|
||||
return new PageResult<>(total, pageData);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package com.hzs.retail.member.utils;
|
||||
|
||||
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class PageResult<T> {
|
||||
private long total;
|
||||
private List<T> rows;
|
||||
private MarketDynamicsDetailVO bigRange;
|
||||
|
||||
public PageResult(long total, List<T> rows) {
|
||||
this.total = total;
|
||||
this.rows = rows;
|
||||
}
|
||||
|
||||
// getter/setter 省略
|
||||
}
|
|
@ -105,5 +105,13 @@ public class CuMemberRetailDataStatisticsDetailVO implements Serializable {
|
|||
*/
|
||||
private Integer smallBoxNum;
|
||||
|
||||
@Override
|
||||
public CuMemberRetailDataStatisticsDetailVO clone() {
|
||||
try {
|
||||
return (CuMemberRetailDataStatisticsDetailVO) super.clone();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
throw new AssertionError();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,10 @@ import java.math.BigDecimal;
|
|||
* 市场动态列表对象
|
||||
*/
|
||||
public class MarketDynamicsDetailVO implements Serializable {
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
private Long pkId;
|
||||
/**
|
||||
* 用户编号
|
||||
*/
|
||||
|
@ -28,11 +32,13 @@ public class MarketDynamicsDetailVO implements Serializable {
|
|||
/**
|
||||
* 结算等级
|
||||
*/
|
||||
private String pkSettleGrade;
|
||||
private Integer pkSettleGrade;
|
||||
private String gradeName;
|
||||
/**
|
||||
* 真实奖衔
|
||||
*/
|
||||
private String pkAwards;
|
||||
private Integer pkAwards;
|
||||
private String awardsName;
|
||||
|
||||
/**
|
||||
* 今日业绩
|
||||
|
@ -71,4 +77,9 @@ public class MarketDynamicsDetailVO implements Serializable {
|
|||
* 上月盒数
|
||||
*/
|
||||
private Integer lastMonthBoxNum;
|
||||
|
||||
/**
|
||||
* 累计消费盒数
|
||||
*/
|
||||
private Integer totalBoxNum;
|
||||
}
|
||||
|
|
|
@ -872,4 +872,40 @@
|
|||
</if>
|
||||
</where>
|
||||
</select>
|
||||
<select id="getMarketDynamicsDetail" resultType="com.hzs.retail.member.vo.MarketDynamicsDetailVO">
|
||||
SELECT
|
||||
cu.pk_id,
|
||||
cu.MEMBER_CODE,
|
||||
cu.MEMBER_NAME,
|
||||
cu.PK_SETTLE_GRADE,
|
||||
grade.GRADE_NAME,
|
||||
cu.PK_AWARDS,
|
||||
awards.AWARDS_NAME,
|
||||
currentMonth.ENABLE_STATUS,
|
||||
NVL( currentDay.NEW_CONSUME_PV + currentDay.TEAM_NEW_PV, 0 ) todayPv,
|
||||
NVL( currentDay.NEW_BOX_NUM + currentDay.TEAM_NEW_BOX_NUM, 0 ) todayBoxNum,
|
||||
NVL( currentMonth.NEW_CONSUME_PV + currentMonth.TEAM_NEW_PV, 0 ) yesterdayPv,
|
||||
NVL( currentMonth.NEW_BOX_NUM + currentMonth.TEAM_NEW_BOX_NUM, 0 ) yesterdayBoxNum,
|
||||
NVL( currentMonth.MONTH_CONSUME_PV, 0 ) currentMonthPv,
|
||||
NVL( currentMonth.MONTH_BOX_NUM , 0 ) currentMonthBoxNum,
|
||||
NVL( lastMonth.MONTH_CONSUME_PV, 0 ) lastMonthPv,
|
||||
NVL( lastMonth.MONTH_BOX_NUM, 0 ) lastMonthBoxNum,
|
||||
NVL( currentMonth.CONSUME_BOX_NUM + currentDay.NEW_BOX_NUM + currentDay.TEAM_NEW_BOX_NUM, 0 ) totalBoxNum
|
||||
FROM
|
||||
cu_member cu
|
||||
LEFT JOIN ${param.currentDayTableName} currentDay ON cu.PK_ID = currentDay.PK_MEMBER
|
||||
LEFT JOIN ${param.currentMonthTableName} currentMonth ON cu.PK_ID = currentMonth.PK_MEMBER AND cu.CATEGORY = 0
|
||||
LEFT JOIN ${param.lastMonthTableName} lastMonth ON cu.PK_ID = lastMonth.PK_MEMBER AND cu.CATEGORY = 0
|
||||
LEFT JOIN BD_GRADE grade on grade.PK_ID = cu.PK_SETTLE_GRADE
|
||||
LEFT JOIN BD_AWARDS awards on awards.PK_ID = cu.PK_AWARDS
|
||||
<where>
|
||||
<if test="param.pkIdList != null and param.pkIdList.size > 0">
|
||||
cu.pk_id in
|
||||
<foreach collection="param.pkIdList" item="pkMember" separator="," open="(" close=")">
|
||||
#{pkMember}
|
||||
</foreach>
|
||||
</if>
|
||||
</where>
|
||||
order by totalBoxNum desc, todayPv desc, cu.CREATION_TIME desc, cu.pk_id asc
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
Loading…
Reference in New Issue