forked from angelo/java-retail-app
Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
3cc33fe23f
|
@ -137,4 +137,6 @@ public interface CuMemberBonusMapper extends BaseMapper<CuMemberBonus> {
|
|||
* @param: null null
|
||||
**/
|
||||
List<CuMemberBonus> queryWeekMemberBonus(@Param("startPeriod") int startPeriod, @Param("endPeriod") int endPeriod);
|
||||
|
||||
void recalculateTeamNewBoxNum(@Param("pkId") Long pkId, @Param("retailsTableName") String retailsTableName);
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package com.hzs.bonus.bonus.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.hzs.bonus.bonus.param.BonusParam;
|
||||
import com.hzs.bonus.bonus.vo.MemberBonusVO;
|
||||
import com.hzs.common.core.web.page.TableDataInfo;
|
||||
import com.hzs.common.domain.member.bonus.CuMemberBonus;
|
||||
import com.hzs.common.domain.member.ext.CuMemberBonusExt;
|
||||
import com.hzs.bonus.bonus.param.BonusParam;
|
||||
import com.hzs.bonus.bonus.vo.MemberBonusVO;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
@ -165,4 +165,12 @@ public interface ICuMemberBonusService extends IService<CuMemberBonus> {
|
|||
void calculateBonusTotal(CuMemberBonusExt cuMemberBonusExt, CuMemberBonusExt memberBonusExt);
|
||||
|
||||
CuMemberBonusExt initCuMemberBonus();
|
||||
|
||||
/**
|
||||
* 用户激活后会抛出MQ
|
||||
* 在此需要补偿该用户的当日秒结的团队新增
|
||||
*
|
||||
* @param pkIdList
|
||||
*/
|
||||
void recalculateTeamNewBoxNum(List<Long> pkIdList);
|
||||
}
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
package com.hzs.bonus.bonus.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
|
||||
import com.hzs.bonus.achieve.service.ICuMemberTreeService;
|
||||
import com.hzs.bonus.achieve.service.impl.CuMemberBonusSettle;
|
||||
import com.hzs.bonus.bonus.mapper.*;
|
||||
|
@ -35,6 +37,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
@ -52,6 +56,9 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
|
|||
ICurrencyServiceApi iCurrencyServiceApi;
|
||||
@DubboReference
|
||||
IBonusItemsServiceApi iBonusItemsServiceApi;
|
||||
@Autowired
|
||||
private ICuMemberSettlePeriodService iCuMemberSettlePeriodService;
|
||||
|
||||
|
||||
private CuMemberBonusDetailMapper cuMemberBonusDetailMapper;
|
||||
|
||||
|
@ -690,4 +697,18 @@ public class CuMemberBonusServiceImpl extends ServiceImpl<CuMemberBonusMapper, C
|
|||
cuMemberBonusList.forEach(cuMemberBonus -> cuMemberBonusMap.put(cuMemberBonus.getPkMember(), cuMemberBonus));
|
||||
return cuMemberBonusMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void recalculateTeamNewBoxNum(List<Long> pkIdList) {
|
||||
String retailsTableName = getDayTableName();
|
||||
log.info("recalculateTeamNewBoxNum: pkIdList: {}, tableName: {}", JSONUtil.toJsonStr(pkIdList), retailsTableName);
|
||||
for (Long pkId : pkIdList) {
|
||||
baseMapper.recalculateTeamNewBoxNum(pkId, retailsTableName);
|
||||
}
|
||||
}
|
||||
private String getDayTableName() {
|
||||
String localDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
||||
int period = iCuMemberSettlePeriodService.getCuMemberSettlePeriodByDate(localDate).getPkId();
|
||||
return TableNameConstants.CU_MEMBER_RETAIL_S + period;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
package com.hzs.bonus.listener;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.hzs.bonus.bonus.service.IBonusSettleService;
|
||||
import com.hzs.bonus.bonus.service.ICuMemberBonusService;
|
||||
import com.hzs.bonus.bonus.service.ICuMemberRetailLogService;
|
||||
import com.hzs.common.core.constant.CountryConstants;
|
||||
import com.hzs.common.core.constant.MagicNumberConstants;
|
||||
import com.hzs.common.core.constant.RabbitMqConstants;
|
||||
import com.hzs.common.core.enums.EYesNo;
|
||||
import com.hzs.common.domain.member.bonus.CuMemberRetailLog;
|
||||
import com.hzs.common.domain.sale.ext.SaOrderExt;
|
||||
import com.rabbitmq.client.Channel;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.amqp.rabbit.annotation.*;
|
||||
import org.springframework.amqp.support.AmqpHeaders;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.messaging.Message;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 订单秒接
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class SaOrderSecondActivateCompensationListener {
|
||||
@Autowired
|
||||
private ICuMemberBonusService memberBonusService;
|
||||
|
||||
@RabbitListener(bindings = @QueueBinding(
|
||||
exchange = @Exchange(value = RabbitMqConstants.ORDER_SECOND_ACTIVATE_COMPENSATION_EXCHANGE, type = "topic"),
|
||||
value = @Queue(value = RabbitMqConstants.ORDER_SECOND_ACTIVATE_COMPENSATION_QUEUE, durable = "true", autoDelete = "false"),
|
||||
key = RabbitMqConstants.ORDER_SECOND_ACTIVATE_COMPENSATION_KEY))
|
||||
@RabbitHandler
|
||||
public void onMessage(Message<List<Long>> message, Channel channel) throws Exception {
|
||||
List<Long> activateCompensationIdList = message.getPayload();
|
||||
log.info("秒结开始消费,接收到的参数:{}", JSONUtil.toJsonStr(activateCompensationIdList));
|
||||
|
||||
Long deliveryTag = (Long) message.getHeaders().get(AmqpHeaders.DELIVERY_TAG);
|
||||
channel.basicAck(deliveryTag, false);
|
||||
|
||||
memberBonusService.recalculateTeamNewBoxNum(activateCompensationIdList);
|
||||
}
|
||||
}
|
|
@ -574,4 +574,23 @@
|
|||
group by cb.pk_member
|
||||
</select>
|
||||
|
||||
<update id="recalculateTeamNewBoxNum">
|
||||
UPDATE ${retailsTableName}
|
||||
SET TEAM_NEW_BOX_NUM = (
|
||||
SELECT SUM(boxNum)
|
||||
FROM (
|
||||
SELECT b.PK_ID, NVL(s.NEW_BOX_NUM, 0) AS boxNum
|
||||
FROM ${retailsTableName} s
|
||||
RIGHT JOIN (
|
||||
SELECT cm.PK_ID
|
||||
FROM cu_member cm
|
||||
WHERE cm.PK_ID != #{pkId}
|
||||
START WITH cm.PK_ID = #{pkId}
|
||||
CONNECT BY PRIOR cm.pk_id = cm.pk_parent
|
||||
ORDER BY LEVEL
|
||||
) b ON s.PK_MEMBER = b.PK_ID
|
||||
) c
|
||||
)
|
||||
WHERE PK_MEMBER = #{pkId}
|
||||
</update>
|
||||
</mapper>
|
||||
|
|
|
@ -7,11 +7,12 @@ import cn.hutool.core.lang.tree.TreeNodeConfig;
|
|||
import cn.hutool.core.lang.tree.TreeUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.hzs.bonus.settle.IMemberSettleBonusApi;
|
||||
import com.hzs.common.core.annotation.RepeatSubmitSimple;
|
||||
import com.hzs.common.core.config.BdConfig;
|
||||
import com.hzs.common.core.constant.SysConstants;
|
||||
import com.hzs.common.core.constant.msg.AreaConstants;
|
||||
import com.hzs.common.core.enums.*;
|
||||
import com.hzs.common.core.enums.EGrade;
|
||||
import com.hzs.common.core.enums.ENoticeWebsiteType;
|
||||
import com.hzs.common.core.enums.EYesNo;
|
||||
import com.hzs.common.core.utils.PageUtils;
|
||||
import com.hzs.common.core.web.controller.BaseController;
|
||||
import com.hzs.common.core.web.domain.AjaxResult;
|
||||
|
@ -37,7 +38,6 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
@ -60,11 +60,6 @@ public class RetailMemberController extends BaseController {
|
|||
|
||||
@DubboReference
|
||||
IAreaServiceApi iAreaServiceApi;
|
||||
@DubboReference
|
||||
IMemberSettleBonusApi iMemberSettleBonusApi;
|
||||
|
||||
// 2025年6月11日 判断可选择收益区域的伞下+自身业绩阈值 (30万)
|
||||
private static final BigDecimal REGIONAL_PERFORMANCE_THRESHOLD = new BigDecimal("300000");
|
||||
/**
|
||||
* 获取登录会员信息
|
||||
*
|
||||
|
@ -117,7 +112,7 @@ public class RetailMemberController extends BaseController {
|
|||
if(EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsActivate()){
|
||||
CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType);
|
||||
log.info("retailAchieve : {}", JSONUtil.toJsonStr(retailAchieve));
|
||||
if(retailAchieve.getArealPv().compareTo(REGIONAL_PERFORMANCE_THRESHOLD) >= 0){
|
||||
if(retailAchieve.getArealPv().compareTo(SysConstants.TOTAL_AREA_PV) >= 0){
|
||||
return AjaxResult.success(RetailMemberRegionVO.builder()
|
||||
.regionStatus(EYesNo.YES.getIntValue())
|
||||
.build());
|
||||
|
@ -175,7 +170,7 @@ public class RetailMemberController extends BaseController {
|
|||
}
|
||||
if(EYesNo.YES.getIntValue() == cuMemberRetailRegionExt.getIsActivate()){
|
||||
CuMemberRetailAchieveVO retailAchieve = iCuMemberRetailAchieveService.selectMemberSumAchieve(userId, pkCountry, systemType);
|
||||
if(retailAchieve.getArealPv().compareTo(REGIONAL_PERFORMANCE_THRESHOLD) >= 0){
|
||||
if(retailAchieve.getArealPv().compareTo(SysConstants.TOTAL_AREA_PV) >= 0){
|
||||
canSet = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,10 @@ import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsDetailVO;
|
|||
import com.hzs.retail.member.vo.CuMemberRetailDataStatisticsResultVO;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 用户统计数据工具
|
||||
|
@ -22,42 +25,65 @@ public class DataStatisticsUtil {
|
|||
private static final String SMALL_RANGE_VIRTUAL_NAME = "注水小区虚拟分支";
|
||||
|
||||
public static CuMemberRetailDataStatisticsResultVO getCalcMap(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
|
||||
calcDetailVOTotalField(detailVOList);
|
||||
calcDetailVOTotalField(detailVOList, pkId);
|
||||
addVirtualBranch(detailVOList, pkId);
|
||||
CuMemberRetailDataStatisticsDetailVO total = getDetailVOByPKID(detailVOList, pkId);
|
||||
CuMemberRetailDataStatisticsDetailVO bigRange = getBigRangeDetailVO(detailVOList, pkId);
|
||||
Integer smallRangeTotalBoxNum = total.getTotalBoxNum() - bigRange.getTotalBoxNum();
|
||||
if(smallRangeTotalBoxNum < 0){
|
||||
smallRangeTotalBoxNum = 0;
|
||||
}
|
||||
BigDecimal smallRangeTotalPv = total.getTotalPv().subtract(bigRange.getTotalPv());
|
||||
if(smallRangeTotalPv.compareTo(BigDecimal.ZERO) < 0){
|
||||
smallRangeTotalPv = BigDecimal.ZERO;
|
||||
}
|
||||
return CuMemberRetailDataStatisticsResultVO.builder()
|
||||
.totalBoxNum(total.getTotalBoxNum())
|
||||
.totalPv(total.getTotalPv())
|
||||
.bigRangeTotalBoxNum(bigRange.getTotalBoxNum())
|
||||
.bigRangeTotalPv(bigRange.getTotalPv())
|
||||
.smallRangeTotalBoxNum(total.getTotalBoxNum() - bigRange.getTotalBoxNum())
|
||||
.smallRangeTotalPv(total.getTotalPv().subtract(bigRange.getTotalPv()))
|
||||
.smallRangeTotalBoxNum(smallRangeTotalBoxNum)
|
||||
.smallRangeTotalPv(smallRangeTotalPv)
|
||||
.build();
|
||||
}
|
||||
/**
|
||||
* 计算集合内数据总数
|
||||
* @param detailVOList
|
||||
*/
|
||||
public static void calcDetailVOTotalField(List<CuMemberRetailDataStatisticsDetailVO> detailVOList){
|
||||
public static void calcDetailVOTotalField(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
|
||||
detailVOList.parallelStream().forEach(detailVO -> {
|
||||
detailVO.setTotalBoxNum(
|
||||
detailVO.getConsumeBoxNum() // 个人累计消费盒数(日结)
|
||||
+ detailVO.getNewBoxNum() // 个人新增盒数(日结)
|
||||
// + detailVO.getNewBoxNum() // 个人新增盒数(日结)
|
||||
+ detailVO.getTeamBoxNum() // 团队累计消费盒数(日结)
|
||||
+ detailVO.getTeamNewBoxNum() // 团队新增盒数(日结)
|
||||
// + detailVO.getTeamNewBoxNum() // 团队新增盒数(日结)
|
||||
+ detailVO.getSNewBoxNum() // 个人新增消费盒数(秒结)
|
||||
+ detailVO.getSTeamNewBoxNum() // 团队新增盒数(秒结)
|
||||
// - detailVO.getBigBoxNum() // 个人注水大区盒数(日结)
|
||||
// - detailVO.getSmallBoxNum() // 个人注水小区盒数(日结)
|
||||
);
|
||||
detailVO.setTotalPv(detailVO.getConsumePv()
|
||||
.add(detailVO.getNewConsumePv())
|
||||
// .add(detailVO.getNewConsumePv())
|
||||
.add(detailVO.getTeamConsumePv())
|
||||
.add(detailVO.getTeamNewPv())
|
||||
// .add(detailVO.getTeamNewPv())
|
||||
.add(detailVO.getSNewConsumePv())
|
||||
.add(detailVO.getSTeamNewPv())
|
||||
);
|
||||
// self增加当日伞下
|
||||
// if(detailVO.getPkId().equals(pkId)){
|
||||
// List<CuMemberRetailDataStatisticsDetailVO> subList = detailVOList.parallelStream().filter(o -> !o.getPkId().equals(pkId)).collect(Collectors.toList());
|
||||
// int subSTotalNewBoxNum = subList.parallelStream()
|
||||
// .map(CuMemberRetailDataStatisticsDetailVO::getSNewBoxNum)
|
||||
// .filter(Objects::nonNull)
|
||||
// .mapToInt(Integer::intValue)
|
||||
// .sum();
|
||||
// BigDecimal subSTotalNewPv = subList.parallelStream()
|
||||
// .map(CuMemberRetailDataStatisticsDetailVO::getSNewConsumePv)
|
||||
// .filter(Objects::nonNull)
|
||||
// .reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
// detailVO.setTotalBoxNum(detailVO.getTotalBoxNum() + subSTotalNewBoxNum);
|
||||
// detailVO.setTotalPv(detailVO.getTotalPv().add(subSTotalNewPv));
|
||||
// }
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -137,18 +163,18 @@ public class DataStatisticsUtil {
|
|||
* @return
|
||||
*/
|
||||
public static CuMemberRetailDataStatisticsDetailVO getDetailVOByPKID(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
|
||||
return detailVOList.stream().filter(o -> o.getPkId().equals(pkId)).findFirst().orElse(null);
|
||||
return detailVOList.parallelStream().filter(o -> o.getPkId().equals(pkId)).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
private static Integer getMaxTotalBoxNum(List<CuMemberRetailDataStatisticsDetailVO> detailVOList) {
|
||||
return detailVOList.stream()
|
||||
return detailVOList.parallelStream()
|
||||
.map(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum)
|
||||
.filter(Objects::nonNull)
|
||||
.max(Integer::compare)
|
||||
.orElse(null);
|
||||
}
|
||||
private static CuMemberRetailDataStatisticsDetailVO getBigRangeDetailVO(List<CuMemberRetailDataStatisticsDetailVO> detailVOList, Long pkId){
|
||||
return detailVOList.stream()
|
||||
return detailVOList.parallelStream()
|
||||
.filter(vo -> vo.getTotalBoxNum() != null && !vo.getPkId().equals(pkId))
|
||||
.max(Comparator.comparingInt(CuMemberRetailDataStatisticsDetailVO::getTotalBoxNum))
|
||||
.orElse(null);
|
||||
|
|
Loading…
Reference in New Issue