forked from angelo/java-retail-app
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
5a49a43f1f
|
@ -2,9 +2,11 @@ package com.hzs.member.achieve.mapper;
|
|||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
/**
|
||||
* 会员结算期间 Mapper 接口
|
||||
*/
|
||||
public interface CuMemberSettlePeriodMapper extends BaseMapper<CuMemberSettlePeriod> {
|
||||
CuMemberSettlePeriod getLastDayCuMemberSettlePeriod(@Param("date") String date);
|
||||
}
|
||||
|
|
|
@ -22,4 +22,8 @@ public interface ICuMemberSettlePeriodService extends IService<CuMemberSettlePer
|
|||
*/
|
||||
List<CuMemberSettlePeriod> queryCuMemberSettlePeriod();
|
||||
|
||||
/**
|
||||
* 获取指定年月最后一天的期间配置
|
||||
*/
|
||||
CuMemberSettlePeriod getLastDayCuMemberSettlePeriod(String date);
|
||||
}
|
||||
|
|
|
@ -165,4 +165,9 @@ public class CuMemberSettlePeriodServiceImpl extends ServiceImpl<CuMemberSettleP
|
|||
return baseMapper.selectList(queryWrapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CuMemberSettlePeriod getLastDayCuMemberSettlePeriod(String date) {
|
||||
return baseMapper.getLastDayCuMemberSettlePeriod(date);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import com.hzs.common.core.web.domain.AjaxResult;
|
|||
import com.hzs.common.core.web.page.TableDataInfo;
|
||||
import com.hzs.common.security.utils.SecurityUtils;
|
||||
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.vo.CuMemberRetailAchieveVO;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
|
||||
|
@ -174,4 +175,12 @@ public class ApiRetailHomePageController extends BaseController {
|
|||
public AjaxResult getMarketDynamics(@RequestBody MarketDynamicsQueryDateParam param) {
|
||||
return AjaxResult.success(retailAchieveService.getMarketDynamics(param));
|
||||
}
|
||||
|
||||
/**
|
||||
* 业绩列表
|
||||
*/
|
||||
@PostMapping("/performance-List")
|
||||
public TableDataInfo performanceList(@RequestBody PerformanceQueryParam param) {
|
||||
return getDataTable(retailAchieveService.getPerformanceList(param));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,8 +6,10 @@ 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 com.hzs.retail.member.vo.PerformanceVO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -121,4 +123,20 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
|
|||
*/
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -3,10 +3,12 @@ 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.param.PerformanceQueryParam;
|
||||
import com.hzs.retail.member.utils.PageResult;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailAchieveVO;
|
||||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
|
||||
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
|
||||
import com.hzs.retail.member.vo.PerformanceVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -99,5 +101,5 @@ public interface ICuMemberRetailAchieveService extends IService<CuMemberRetailRa
|
|||
PageResult<MarketDynamicsDetailVO> getMarketDynamics(MarketDynamicsQueryDateParam param);
|
||||
|
||||
|
||||
|
||||
List<PerformanceVO> getPerformanceList(PerformanceQueryParam param);
|
||||
}
|
||||
|
|
|
@ -5,25 +5,30 @@ import cn.hutool.core.util.ObjectUtil;
|
|||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
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.utils.DateUtils;
|
||||
import com.hzs.common.core.utils.PageUtils;
|
||||
import com.hzs.common.domain.member.achieve.CuMemberRetailRange;
|
||||
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
|
||||
import com.hzs.common.domain.member.base.CuMember;
|
||||
import com.hzs.common.security.utils.SecurityUtils;
|
||||
import com.hzs.member.account.service.ICuMemberBaseService;
|
||||
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.impl.CuMemberServiceImpl;
|
||||
import com.hzs.retail.member.mapper.CuMemberRetailRangeMapper;
|
||||
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.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;
|
||||
import com.hzs.retail.member.vo.MarketDynamicsDetailVO;
|
||||
import com.hzs.retail.member.vo.*;
|
||||
import com.hzs.system.config.IGradeServiceApi;
|
||||
import com.hzs.system.config.dto.GradeDTO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
@ -47,6 +52,14 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
|
|||
private ICuMemberBaseService iCuMemberBaseService;
|
||||
@Autowired
|
||||
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
|
||||
@Autowired
|
||||
private ICuMemberTreeService memberTreeService;
|
||||
@Autowired
|
||||
private CuMemberServiceImpl cuMemberService;
|
||||
|
||||
|
||||
@DubboReference
|
||||
private IGradeServiceApi gradeServiceApi;
|
||||
|
||||
@Override
|
||||
public CuMemberRetailAchieveVO selectMemberAchieve(Long pkMember, Integer pkCountry, Integer systemType) {
|
||||
|
@ -457,6 +470,91 @@ public class CuMemberRetailAchieveServiceImpl extends ServiceImpl<CuMemberRetail
|
|||
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) {
|
||||
CuMemberSettlePeriod cuMemberSettlePeriod = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate);
|
||||
if (ObjectUtil.isEmpty(cuMemberSettlePeriod)) {
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -712,4 +712,65 @@
|
|||
</where>
|
||||
order by totalBoxNum desc, todayPv desc, cu.CREATION_TIME desc, cu.pk_id asc
|
||||
</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>
|
||||
|
|
|
@ -22,5 +22,14 @@
|
|||
<result column="IS_RETRY" property="isRetry"/>
|
||||
<result column="PK_COUNTRY" property="pkCountry"/>
|
||||
</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>
|
||||
|
|
|
@ -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.page.TableDataInfo;
|
||||
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.vo.ApiAdvertBannerVO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -31,7 +32,7 @@ public class ApiBdAdvertBannerController extends BaseController {
|
|||
**/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo list(BdAdvertBanner banner) {
|
||||
List<BdAdvertBanner> list = iBdAdvertBannerService.listData(banner);
|
||||
List<BdAdvertBanner> list = iBdAdvertBannerService.listData(banner, SecurityUtils.getUserId());
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
|
@ -45,7 +46,7 @@ public class ApiBdAdvertBannerController extends BaseController {
|
|||
// 返回结果
|
||||
List<ApiAdvertBannerVO> resultList = new ArrayList<>();
|
||||
|
||||
List<BdAdvertBanner> list = iBdAdvertBannerService.listData(null);
|
||||
List<BdAdvertBanner> list = iBdAdvertBannerService.listData(null, SecurityUtils.getUserId());
|
||||
if (CollectionUtil.isNotEmpty(list)) {
|
||||
resultList = BeanUtil.copyToList(list, ApiAdvertBannerVO.class);
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.hzs.system.config.service;
|
|||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.hzs.common.domain.system.config.BdAdvertBanner;
|
||||
import com.hzs.common.domain.system.config.ext.BdAdvertBannerExt;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
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.extension.service.impl.ServiceImpl;
|
||||
import com.hzs.common.core.constant.CountryConstants;
|
||||
|
|
Loading…
Reference in New Issue