3
0
Fork 0

Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
cabbage 2025-06-13 18:18:42 +08:00
commit 634f657163
11 changed files with 168 additions and 22 deletions

View File

@ -181,7 +181,6 @@ public class ApiRetailHomePageController extends BaseController {
*/ */
@PostMapping("/market-dynamics") @PostMapping("/market-dynamics")
public AjaxResult getMarketDynamics(@RequestBody MarketDynamicsQueryDateParam param) { public AjaxResult getMarketDynamics(@RequestBody MarketDynamicsQueryDateParam param) {
retailAchieveService.getMarketDynamics(param); return AjaxResult.success(retailAchieveService.getMarketDynamics(param));
return AjaxResult.success();
} }
} }

View File

@ -2,8 +2,10 @@ package com.hzs.retail.member.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.achieve.CuMemberRetailRange; 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.CuMemberRetailAchieveVO;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -174,6 +176,8 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
*/ */
List<CuMemberRetailDataStatisticsDetailVO> getRetailDataStatisticsDetail(CuMemberRetailAchieveVO cuMemberAchieveVO); List<CuMemberRetailDataStatisticsDetailVO> getRetailDataStatisticsDetail(CuMemberRetailAchieveVO cuMemberAchieveVO);
List<MarketDynamicsDetailVO> getMarketDynamicsDetail(@Param("param") MarketDynamicsQueryDateParam param);
/** /**
* 查询当天自己新增盒数 * 查询当天自己新增盒数
* *

View File

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@ -17,6 +18,7 @@ import java.io.Serializable;
public class MarketDynamicsQueryDateParam implements Serializable { public class MarketDynamicsQueryDateParam implements Serializable {
private Long pkId; private Long pkId;
private String nowDate; private String nowDate;
private String yesterdayDate;
private String lastMonthDate; private String lastMonthDate;
/** /**
@ -28,6 +30,8 @@ public class MarketDynamicsQueryDateParam implements Serializable {
*/ */
private String lastMonthTableName; private String lastMonthTableName;
private String currentDayTableName; private String currentDayTableName;
private List<Long> pkIdList;
/** /**
* 查询条件 (会员编号/会员姓名) * 查询条件 (会员编号/会员姓名)
*/ */

View File

@ -3,6 +3,7 @@ package com.hzs.retail.member.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.member.achieve.CuMemberRetailRange; import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam; 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.CuMemberRetailAchieveVO;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO; 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); CuMemberRetailDataStatisticsResultVO getRetailDataStatisticsDetail(Long pkMember, Integer pkCountry, Integer systemType);
List<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param); PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param);
} }

View File

@ -19,6 +19,7 @@ import com.hzs.retail.member.mapper.CuMemberRetailRangeMapper;
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam; import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
import com.hzs.retail.member.service.ICuMemberRetailAchieveService; import com.hzs.retail.member.service.ICuMemberRetailAchieveService;
import com.hzs.retail.member.utils.DataStatisticsUtil; 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.CuMemberRetailAchieveVO;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
@ -307,18 +308,20 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
*/ */
private String getTableName() { private String getTableName() {
String localDate = LocalDate.now().minus(1, ChronoUnit.DAYS).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String localDate = LocalDate.now().minus(1, ChronoUnit.DAYS).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId(); CuMemberSettlePeriod cuMemberSettlePeriod =iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
if(ObjectUtil.isEmpty(period)){ if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
return null; return null;
} }
int period = cuMemberSettlePeriod.getPkId();
return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period; return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period;
} }
private String getDayTableName() { private String getDayTableName() {
String localDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String localDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId(); CuMemberSettlePeriod cuMemberSettlePeriod =iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
if(ObjectUtil.isEmpty(period)){ if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
return null; return null;
} }
int period = cuMemberSettlePeriod.getPkId();
return TableNameConstants.CU_MEMBER_RETAIL_S + period; return TableNameConstants.CU_MEMBER_RETAIL_S + period;
} }
@ -586,19 +589,26 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
} }
@Override @Override
public List<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param) { public PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param) {
Long pkMember = SecurityUtils.getUserId();
Integer systemType = SecurityUtils.getSystemType();
DataStatisticsUtil.setQueryDateParam(param); DataStatisticsUtil.setQueryDateParam(param);
param.setCurrentDayTableName(getDayTableName()); param.setCurrentDayTableName(getDayTableName());
param.setCurrentMonthTableName(getDayTableName(param.getNowDate())); param.setCurrentMonthTableName(getDayTableName(param.getYesterdayDate()));
param.setCurrentDayTableName(getDayTableName(param.getLastMonthDate())); param.setLastMonthTableName(getDayTableName(param.getLastMonthDate()));
log.info("MarketDynamicsQueryDateParam : {}", JSONUtil.toJsonStr(param)); 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) { private String getDayTableName(String localDate) {
CuMemberSettlePeriod cuMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate); CuMemberSettlePeriod cuMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){ if(ObjectUtil.isEmpty(cuMemberSettlePeriod)){
return null; return TableNameConstants.CU_MEMBER_RETAIL_RANGE;
} }
int period = cuMemberSettlePeriod.getPkId(); int period = cuMemberSettlePeriod.getPkId();
return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period; return TableNameConstants.CU_MEMBER_RETAIL_RANGE + period;

View File

@ -1,11 +1,13 @@
package com.hzs.retail.member.utils; package com.hzs.retail.member.utils;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.hzs.common.core.enums.EYesNo; import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.domain.member.base.CuMember; import com.hzs.common.domain.member.base.CuMember;
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam; import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
@ -17,6 +19,7 @@ import java.util.ArrayList;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* 用户统计数据工具 * 用户统计数据工具
@ -49,7 +52,8 @@ public class DataStatisticsUtil {
calcDetailVOTotalField(detailVOList, pkId); calcDetailVOTotalField(detailVOList, pkId);
addVirtualBranch(detailVOList, pkId); addVirtualBranch(detailVOList, pkId);
CuMemberRetailDataStatisticsDetailVO total = getDetailVOByPKID(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()){ if(EYesNo.NO.getIntValue() == cuMember.getIsActivate()){
// 昨日非激活 排除昨日日结表数据 // 昨日非激活 排除昨日日结表数据
excludeDailySettlementData(detailVOList); excludeDailySettlementData(detailVOList);
@ -57,19 +61,19 @@ public class DataStatisticsUtil {
// 排除注水数据 // 排除注水数据
excludeWaterInjectionData(detailVOList, pkId); excludeWaterInjectionData(detailVOList, pkId);
} }
Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRange.getTotalBoxNum(); Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRangeBox.getTotalBoxNum();
if(smallRangeTotalBoxNum < 0){ if(smallRangeTotalBoxNum < 0){
smallRangeTotalBoxNum = 0; smallRangeTotalBoxNum = 0;
} }
BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRange.getTotalPv()); BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRangePv.getTotalPv());
if(smallRangeTotalPv.compareTo(BigDecimal.ZERO) < 0){ if(smallRangeTotalPv.compareTo(BigDecimal.ZERO) < 0){
smallRangeTotalPv = BigDecimal.ZERO; smallRangeTotalPv = BigDecimal.ZERO;
} }
return CuMemberRetailDataStatisticsResultVO.builder() return CuMemberRetailDataStatisticsResultVO.builder()
.totalBoxNum(total.getTotalBoxNum()) .totalBoxNum(total.getTotalBoxNum())
.totalPv(formatPV(total.getTotalPv())) .totalPv(formatPV(total.getTotalPv()))
.bigRangeTotalBoxNum(bigRange.getTotalBoxNum()) .bigRangeTotalBoxNum(bigRangeBox.getTotalBoxNum())
.bigRangeTotalPv(formatPV(bigRange.getTotalPv())) .bigRangeTotalPv(formatPV(bigRangePv.getTotalPv()))
.smallRangeTotalBoxNum(smallRangeTotalBoxNum) .smallRangeTotalBoxNum(smallRangeTotalBoxNum)
.smallRangeTotalPv(formatPV(smallRangeTotalPv)) .smallRangeTotalPv(formatPV(smallRangeTotalPv))
.build(); .build();
@ -219,6 +223,23 @@ public class DataStatisticsUtil {
return detailVOList.parallelStream().filter(o -> o.getPkId().equals(pkId)).findFirst().orElse(null); 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) { private static Integer getMaxTotalBoxNum(List<CuMemberRetailDataStatisticsDetailVO> detailVOList) {
return detailVOList.parallelStream() return detailVOList.parallelStream()
.map(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum) .map(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum)
@ -226,12 +247,18 @@ public class DataStatisticsUtil {
.max(Integer::compare) .max(Integer::compare)
.orElse(null); .orElse(null);
} }
private static CuMemberRetailDataStatisticsDetailVO getBigRangeDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){ private static CuMemberRetailDataStatisticsDetailVO getBigRangeBoxDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
return detailVOList.parallelStream() return detailVOList.stream()
.filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId)) .filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId))
.max(Comparator.comparingInt(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum)) .max(Comparator.comparingInt(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum))
.orElse(null); .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){ public static BigDecimal formatPV(BigDecimal pv){
return pv.divide( return pv.divide(
new BigDecimal("10000"), new BigDecimal("10000"),
@ -242,9 +269,11 @@ public class DataStatisticsUtil {
public static void setQueryDateParam(MarketDynamicsQueryDateParam param){ public static void setQueryDateParam(MarketDynamicsQueryDateParam param){
LocalDate.now(ZoneId.of("Asia/Shanghai")); LocalDate.now(ZoneId.of("Asia/Shanghai"));
LocalDate currentDate = LocalDate.now(); LocalDate currentDate = LocalDate.now();
LocalDate yesterdayDate = currentDate.minusDays(1);
LocalDate previousMonthDate = currentDate.minusMonths(1); LocalDate previousMonthDate = currentDate.minusMonths(1);
LocalDate lastDayOfPreviousMonth = previousMonthDate.with(TemporalAdjusters.lastDayOfMonth()); LocalDate lastDayOfPreviousMonth = previousMonthDate.with(TemporalAdjusters.lastDayOfMonth());
param.setNowDate(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); 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"))); param.setLastMonthDate(lastDayOfPreviousMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
// System.out.println("当前日期: " + currentDate.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"))); // System.out.println("上一个月最后一天: " + lastDayOfPreviousMonth.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

View File

@ -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);
}
}

View File

@ -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 省略
}

View File

@ -105,5 +105,13 @@ public class CuMemberRetailDataStatisticsDetailVO implements Serializable {
*/ */
private Integer smallBoxNum; private Integer smallBoxNum;
@Override
public CuMemberRetailDataStatisticsDetailVO clone() {
try {
return (CuMemberRetailDataStatisticsDetailVO) super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
}
} }

View File

@ -17,6 +17,10 @@ import java.math.BigDecimal;
* 市场动态列表对象 * 市场动态列表对象
*/ */
public class MarketDynamicsDetailVO implements Serializable { 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 lastMonthBoxNum;
/**
* 累计消费盒数
*/
private Integer totalBoxNum;
} }

View File

@ -872,4 +872,40 @@
</if> </if>
</where> </where>
</select> </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> </mapper>