3
0
Fork 0

## Opt - 业绩列表

This commit is contained in:
sangelxiu1 2025-09-03 13:42:16 +08:00
parent b3bc43162d
commit 4cf10bae38
14 changed files with 282 additions and 7 deletions

View File

@ -2,9 +2,11 @@ package com.hzs.member.achieve.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod; import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
import org.apache.ibatis.annotations.Param;
/** /**
* 会员结算期间 Mapper 接口 * 会员结算期间 Mapper 接口
*/ */
public interface CuMemberSettlePeriodMapper extends BaseMapper<CuMemberSettlePeriod> { public interface CuMemberSettlePeriodMapper extends BaseMapper<CuMemberSettlePeriod> {
CuMemberSettlePeriod getLastDayCuMemberSettlePeriod(@Param("date") String date);
} }

View File

@ -22,4 +22,8 @@ public interface ICuMemberSettlePeriodService extends IService<CuMemberSettlePer
*/ */
List<CuMemberSettlePeriod> queryCuMemberSettlePeriod(); List<CuMemberSettlePeriod> queryCuMemberSettlePeriod();
/**
* 获取指定年月最后一天的期间配置
*/
CuMemberSettlePeriod getLastDayCuMemberSettlePeriod(String date);
} }

View File

@ -165,4 +165,9 @@ public class CuMemberSettlePeriodServiceImpl extends ServiceImpl<CuMemberSettleP
return baseMapper.selectList(queryWrapper); return baseMapper.selectList(queryWrapper);
} }
@Override
public CuMemberSettlePeriod getLastDayCuMemberSettlePeriod(String date) {
return baseMapper.getLastDayCuMemberSettlePeriod(date);
}
} }

View File

@ -6,6 +6,7 @@ import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.core.web.page.TableDataInfo; import com.hzs.common.core.web.page.TableDataInfo;
import com.hzs.common.security.utils.SecurityUtils; import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.retail.member.param.MarketDynamicsQueryDateParam; import com.hzs.retail.member.param.MarketDynamicsQueryDateParam;
import com.hzs.retail.member.param.PerformanceQueryParam;
import com.hzs.retail.member.service.ICuMemberRetailAchieveService; import com.hzs.retail.member.service.ICuMemberRetailAchieveService;
import com.hzs.retail.member.vo.CuMemberRetailAchieveVO; import com.hzs.retail.member.vo.CuMemberRetailAchieveVO;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
@ -174,4 +175,12 @@ public class ApiRetailHomePageController extends BaseController {
public AjaxResult getMarketDynamics(@RequestBody MarketDynamicsQueryDateParam param) { public AjaxResult getMarketDynamics(@RequestBody MarketDynamicsQueryDateParam param) {
return AjaxResult.success(retailAchieveService.getMarketDynamics(param)); return AjaxResult.success(retailAchieveService.getMarketDynamics(param));
} }
/**
* 业绩列表
*/
@PostMapping("/performance-List")
public TableDataInfo performanceList(@RequestBody PerformanceQueryParam param) {
return getDataTable(retailAchieveService.getPerformanceList(param));
}
} }

View File

@ -6,8 +6,10 @@ 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 com.hzs.retail.member.vo.MarketDynamicsDetailVO;
import com.hzs.retail.member.vo.PerformanceVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -121,4 +123,20 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
*/ */
List<CuMemberRetailAchieveVO> selectMemberSmallBoxList(CuMemberRetailAchieveVO param); List<CuMemberRetailAchieveVO> selectMemberSmallBoxList(CuMemberRetailAchieveVO param);
/**
* 按等级值获取伞下会员id
* @param userId
* @param gradeValueList
* @return
*/
List<Long> getUmbrellaMemberListWithGradeValue(@Param("userId") Long userId, @Param("gradeValueList") List<Integer> gradeValueList);
/**
* 业绩列表
* @param memberIdList
* @param targetDayStart
* @param targetDayEnd
* @return
*/
List<PerformanceVO> getPerformanceList(@Param("tableName") String tableName, @Param("memberIdList") List<Long> memberIdList, @Param("targetDayStart") Date targetDayStart, @Param("targetDayEnd") Date targetDayEnd);
} }

View File

@ -0,0 +1,19 @@
package com.hzs.retail.member.param;
import lombok.*;
import java.io.Serializable;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class PerformanceQueryParam implements Serializable {
private String year;
private String month;
private Integer pageNum = 1;
private Integer pageSize = 10;
}

View File

@ -3,10 +3,12 @@ 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.param.PerformanceQueryParam;
import com.hzs.retail.member.utils.PageResult; 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.CuMemberRetailDataStatisticsResultVO; import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
import com.hzs.retail.member.vo.MarketDynamicsDetailVO; import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
import com.hzs.retail.member.vo.PerformanceVO;
import java.util.List; import java.util.List;
@ -99,5 +101,5 @@ public interface ICuMemberRetailAchieveService extends IService<CuMemberRetailRa
PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param); PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param);
List<PerformanceVO> getPerformanceList(PerformanceQueryParam param);
} }

View File

@ -5,25 +5,30 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.core.constant.TableNameConstants; import com.hzs.common.core.constant.TableNameConstants;
import com.hzs.common.core.enums.EGrade;
import com.hzs.common.core.enums.EYesNo; import com.hzs.common.core.enums.EYesNo;
import com.hzs.common.core.utils.DateUtils; import com.hzs.common.core.utils.DateUtils;
import com.hzs.common.core.utils.PageUtils;
import com.hzs.common.domain.member.achieve.CuMemberRetailRange; import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod; import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
import com.hzs.common.domain.member.base.CuMember; import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.security.utils.SecurityUtils; import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.member.account.service.ICuMemberBaseService; import com.hzs.member.account.service.ICuMemberBaseService;
import com.hzs.member.achieve.service.ICuMemberSettlePeriodService; import com.hzs.member.achieve.service.ICuMemberSettlePeriodService;
import com.hzs.member.achieve.service.ICuMemberTreeService;
import com.hzs.member.base.service.ICuMemberService; import com.hzs.member.base.service.ICuMemberService;
import com.hzs.member.base.service.impl.CuMemberServiceImpl;
import com.hzs.retail.member.mapper.CuMemberRetailRangeMapper; 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.param.PerformanceQueryParam;
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.utils.PageResult;
import com.hzs.retail.member.vo.CuMemberRetailAchieveVO; import com.hzs.retail.member.vo.*;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO; import com.hzs.system.config.IGradeServiceApi;
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO; import com.hzs.system.config.dto.GradeDTO;
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -47,6 +52,14 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
private ICuMemberBaseService iCuMemberBaseService; private ICuMemberBaseService iCuMemberBaseService;
@Autowired @Autowired
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService; private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
@Autowired
private ICuMemberTreeService memberTreeService;
@Autowired
private CuMemberServiceImpl cuMemberService;
@DubboReference
private IGradeServiceApi gradeServiceApi;
@Override @Override
public CuMemberRetailAchieveVO selectMemberAchieve(Long pkMember, Integer pkCountry, Integer systemType) { public CuMemberRetailAchieveVO selectMemberAchieve(Long pkMember, Integer pkCountry, Integer systemType) {
@ -457,6 +470,91 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
return DataStatisticsUtil.getMarketDynamicsAssemblyData(detailVOList, param); return DataStatisticsUtil.getMarketDynamicsAssemblyData(detailVOList, param);
} }
@Override
public List<PerformanceVO> getPerformanceList(PerformanceQueryParam param) {
// 1.拼年月
Date targetDate = null;
Date targetDayStart = null;
Date targetDayEnd = null;
CuMemberSettlePeriod settlePeriod = null;
if(isCurrentMonth(param.getYear(), param.getMonth())) {
targetDate = DateUtils.beforeDate(1, ChronoUnit.DAYS, DateUtils.currentDate());
targetDayStart = DateUtils.getFirstDayOfMonth(targetDate);
targetDayEnd = DateUtils.getLastDayOfMonth(targetDate);
settlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, targetDate));
}else{
settlePeriod = iCuMemberSettlePeriodService.getLastDayCuMemberSettlePeriod(param.getYear() + "-" + param.getMonth());
targetDayStart = DateUtils.getFirstDayOfMonth(settlePeriod.getSettleDate());
targetDayEnd = DateUtils.getLastDayOfMonth(settlePeriod.getSettleDate());
}
if(ObjectUtil.isEmpty(settlePeriod)){
return Collections.emptyList();
}
String settleTable = TableNameConstants.CU_MEMBER_RETAIL_RANGE + settlePeriod.getPkId();
Integer num = memberTreeService.queryExistOracleTable(settleTable);
if (ObjectUtil.isEmpty(num) || num <= 0) {
return Collections.emptyList();
}
/**
* 获取当前用户的等级
* 总公司 -> 查看自己 + 伞下代理店主以业绩大排序会员姓名会员等级销售业绩销售盒数复购业绩复购盒数
* 代理 -> 查看自己 + 伞下代理店主
* 店主 -> 查看自己 + 直推
*/
CuMember member = cuMemberService.getMember(SecurityUtils.getUserId());
GradeDTO gradeDTO = gradeServiceApi.getGrade(member.getPkSettleGrade()).getData();
List<Long> pkMemberList = null;
List<Integer> gradeValueList = null;
if(
EGrade.COMPANY.getValue() == gradeDTO.getGradeValue() // 总公司
||
(EGrade.DIRECTOR.getValue() == gradeDTO.getGradeValue()
|| EGrade.REGION.getValue() == gradeDTO.getGradeValue()) // 代理
){
gradeValueList = Arrays.asList(EGrade.DIRECTOR.getValue(), EGrade.REGION.getValue(), EGrade.S_VIP.getValue(), EGrade.VIP.getValue());
pkMemberList = baseMapper.getUmbrellaMemberListWithGradeValue(member.getPkId(), gradeValueList);
}else if (
EGrade.S_VIP.getValue() == gradeDTO.getGradeValue()
|| EGrade.VIP.getValue() == gradeDTO.getGradeValue()
){
pkMemberList = baseMapper.selectDirectPushByPkMember(member.getPkId(), SecurityUtils.getSystemType());
}
List<PerformanceVO> meList = baseMapper.getPerformanceList(settleTable, Collections.singletonList(member.getPkId()), targetDayStart, targetDayEnd);
PageUtils.startPage(param.getPageNum(), param.getPageSize());
List<PerformanceVO> otherList = new ArrayList<>();
if(CollUtil.isNotEmpty(pkMemberList)){
otherList = baseMapper.getPerformanceList(settleTable, pkMemberList, targetDayStart, targetDayEnd);
}
PageUtils.clearPage();
if(param.getPageNum() == 1){
meList.addAll(otherList);
return meList;
}else{
return otherList;
}
}
public static boolean isCurrentMonth(String yearStr, String monthStr) {
if (yearStr == null || monthStr == null || yearStr.trim().isEmpty() || monthStr.trim().isEmpty()) {
throw new IllegalArgumentException("年份和月份不能为空");
}
int year;
int month;
try {
year = Integer.parseInt(yearStr.trim());
month = Integer.parseInt(monthStr.trim());
} catch (NumberFormatException e) {
throw new IllegalArgumentException("年份和月份必须是有效的数字字符串", e);
}
if (year < 0 || month < 1 || month > 12) {
throw new IllegalArgumentException("年份不能为负数月份必须在1-12之间");
}
LocalDate currentDate = LocalDate.now();
int currentYear = currentDate.getYear();
int currentMonth = currentDate.getMonthValue();
return (year == currentYear && month == currentMonth);
}
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)) {

View File

@ -0,0 +1,45 @@
package com.hzs.retail.member.vo;
import com.hzs.common.core.annotation.BigDecimalFormat;
import lombok.*;
import java.io.Serializable;
import java.math.BigDecimal;
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class PerformanceVO implements Serializable {
/**
* 用户id
*/
private Long id;
/**
* 用户名称
*/
private String memberName;
/**
* 用户等级
*/
private String memberLevel;
/**
* 当月业绩
*/
@BigDecimalFormat
private BigDecimal currentMonthPv;
/**
* 当月盒数
*/
private Integer currentMonthBoxNum;
/**
* 复购业绩
*/
@BigDecimalFormat
private BigDecimal repurchasePv;
/**
* 复购盒数
*/
private Integer repurchaseBox;
}

View File

@ -712,4 +712,65 @@
</where> </where>
order by totalBoxNum desc, todayPv desc, cu.CREATION_TIME desc, cu.pk_id asc order by totalBoxNum desc, todayPv desc, cu.CREATION_TIME desc, cu.pk_id asc
</select> </select>
<select id="getUmbrellaMemberListWithGradeValue" resultType="java.lang.Long">
SELECT
r.pk_id
<!--
r.MEMBER_CODE,
r.PK_SETTLE_GRADE,
bg.GRADE_name
-->
FROM
( SELECT * FROM cu_member cm START WITH cm.pk_id = #{userId} CONNECT BY PRIOR cm.pk_id = cm.pk_parent ORDER BY LEVEL ) r
RIGHT JOIN BD_GRADE bg ON bg.PK_ID = r.PK_SETTLE_GRADE
where
r.DEL_FLAG = 0
and r.CATEGORY = 0
and r.pk_id != #{userId}
and bg.GRADE_VALUE in
<foreach collection="gradeValueList" item="gradeValue" separator="," open="(" close=")">
#{gradeValue}
</foreach>
</select>
<select id="getPerformanceList" resultType="com.hzs.retail.member.vo.PerformanceVO">
SELECT
cu.pk_id as id,
cu.MEMBER_CODE,
cu.MEMBER_NAME,
cu.PK_SETTLE_GRADE,
grade.GRADE_NAME as memberLevel,
cu.PK_AWARDS,
awards.AWARDS_NAME,
currentMonth.ENABLE_STATUS,
NVL( currentMonth.MONTH_CONSUME_PV + currentMonth.TEAM_MONTH_PV, 0 ) currentMonthPv,
NVL( currentMonth.MONTH_BOX_NUM + currentMonth.TEAM_MONTH_BOX_NUM, 0 ) currentMonthBoxNum,
NVL( repurchasePv, 0 ) repurchasePv,
NVL( repurchaseBox, 0 ) repurchaseBox
FROM
cu_member cu
LEFT JOIN ${tableName} currentMonth ON cu.PK_ID = currentMonth.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
LEFT JOIN (
SELECT
PK_MEMBER,
sum( ORDER_ACHIEVE ) repurchasePv,
sum( BOX_NUM ) repurchaseBox
FROM
sa_order
WHERE
ORDER_TYPE = 43
AND DEL_FLAG = 0
AND ORDER_STATUS = 1
AND PAY_TIME BETWEEN #{targetDayStart} and #{targetDayEnd}
GROUP BY
PK_MEMBER
) fg ON fg.pk_member = cu.pk_id
WHERE cu.pk_id in
<foreach collection="memberIdList" item="memberId" separator="," open="(" close=")">
#{memberId}
</foreach>
order by currentMonthPv desc
</select>
</mapper> </mapper>

View File

@ -22,5 +22,14 @@
<result column="IS_RETRY" property="isRetry"/> <result column="IS_RETRY" property="isRetry"/>
<result column="PK_COUNTRY" property="pkCountry"/> <result column="PK_COUNTRY" property="pkCountry"/>
</resultMap> </resultMap>
<select id="getLastDayCuMemberSettlePeriod"
resultType="com.hzs.common.domain.member.achieve.CuMemberSettlePeriod">
SELECT
*
FROM
( SELECT * FROM CU_MEMBER_SETTLE_PERIOD WHERE to_char( SETTLE_DATE, 'yyyy-mm-dd' ) LIKE #{date} || '%' ORDER BY SETTLE_DATE DESC )
WHERE
ROWNUM = 1
</select>
</mapper> </mapper>

View File

@ -6,6 +6,7 @@ import com.hzs.common.core.web.controller.BaseController;
import com.hzs.common.core.web.domain.AjaxResult; import com.hzs.common.core.web.domain.AjaxResult;
import com.hzs.common.core.web.page.TableDataInfo; import com.hzs.common.core.web.page.TableDataInfo;
import com.hzs.common.domain.system.config.BdAdvertBanner; import com.hzs.common.domain.system.config.BdAdvertBanner;
import com.hzs.common.security.utils.SecurityUtils;
import com.hzs.system.config.service.IBdAdvertBannerService; import com.hzs.system.config.service.IBdAdvertBannerService;
import com.hzs.system.config.vo.ApiAdvertBannerVO; import com.hzs.system.config.vo.ApiAdvertBannerVO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -31,7 +32,7 @@ public class ApiBdAdvertBannerController extends BaseController {
**/ **/
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(BdAdvertBanner banner) { public TableDataInfo list(BdAdvertBanner banner) {
List<BdAdvertBanner> list = iBdAdvertBannerService.listData(banner); List<BdAdvertBanner> list = iBdAdvertBannerService.listData(banner, SecurityUtils.getUserId());
return getDataTable(list); return getDataTable(list);
} }
@ -45,7 +46,7 @@ public class ApiBdAdvertBannerController extends BaseController {
// 返回结果 // 返回结果
List<ApiAdvertBannerVO> resultList = new ArrayList<>(); List<ApiAdvertBannerVO> resultList = new ArrayList<>();
List<BdAdvertBanner> list = iBdAdvertBannerService.listData(null); List<BdAdvertBanner> list = iBdAdvertBannerService.listData(null, SecurityUtils.getUserId());
if (CollectionUtil.isNotEmpty(list)) { if (CollectionUtil.isNotEmpty(list)) {
resultList = BeanUtil.copyToList(list, ApiAdvertBannerVO.class); resultList = BeanUtil.copyToList(list, ApiAdvertBannerVO.class);
} }

View File

@ -2,6 +2,7 @@ package com.hzs.system.config.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.domain.system.config.BdAdvertBanner; import com.hzs.common.domain.system.config.BdAdvertBanner;
import com.hzs.common.domain.system.config.ext.BdAdvertBannerExt;
import java.util.List; import java.util.List;

View File

@ -1,5 +1,6 @@
package com.hzs.system.config.service.impl; package com.hzs.system.config.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hzs.common.core.constant.CountryConstants; import com.hzs.common.core.constant.CountryConstants;