## 日结奖衔计算处理;

This commit is contained in:
cabbage 2025-09-28 15:51:45 +08:00
parent 3626b3f4cc
commit 290793236a
11 changed files with 79 additions and 118 deletions

View File

@ -8,8 +8,6 @@ import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
@ -68,11 +66,6 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
*/
List<CuMemberRetailRangeExt> queryCuMemberRetailRangeExtByParent(@Param("tableName") String tableName, @Param("pkParent") Long pkParent);
/**
* 查询推荐人伞下满足
*/
List<CuMemberRetailRangeExt> queryCuMemberRetailRangeEnoughAchieve(@Param("tableName") String tableName, @Param("pkParent") Long pkParent, @Param("achievePv") BigDecimal achievePv);
/**
* 根据会员查询会员上的所有网体, 按照pkParent作为key,查询极差秒接表
*/
@ -112,19 +105,11 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
/**
* 更新自己秒结
*
* @param tableName
* @param orderExt
* @param cuMember
*/
void updateMemberRetailSecondRangeSelf(@Param("tableName") String tableName, @Param("orderExt") SaOrderExt orderExt, @Param("cuMember") CuMember cuMember, @Param("updateType") Integer updateType, @Param("symbol") String symbol);
/**
* 更新上级秒结
*
* @param tableName
* @param orderExt
* @param memberList
*/
void updateMemberRetailSecondRangeParent(@Param("tableName") String tableName, @Param("orderExt") SaOrderExt orderExt, @Param("memberList") List<CuMemberExt> memberList, @Param("updateType") Integer updateType, @Param("symbol") String symbol);
@ -136,4 +121,11 @@ public interface CuMemberRetailRangeMapper extends BaseMapper<CuMemberRetailRang
List<CuMemberRetailRangeExt> listChildRetail(@Param("rangeTableName") String rangeTableName,
@Param("pkParentList") List<Long> pkParentList);
/**
* 查询会员血缘下达标奖衔会员
*/
List<Integer> listChildAwards(@Param("rangeTableName") String rangeTableName,
@Param("pkAwards") Integer pkAwards,
@Param("childMemberList") List<Long> childMemberList);
}

View File

@ -6,10 +6,8 @@ import com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.member.ext.CuMemberExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -38,11 +36,6 @@ public interface ICuMemberRetailRangeService extends IService<CuMemberRetailRang
*/
List<CuMemberRetailRangeExt> queryCuMemberRetailRangeExtByParent(String tableName, Long pkParent);
/**
* 查询推荐人伞下满足
*/
List<CuMemberRetailRangeExt> queryCuMemberRetailRangeEnoughAchieve(String tableName, Long pkParent, BigDecimal achievePv);
/**
* 根据会员查询会员上的所有网体, 按照pkParent作为key,查询极差秒接表
*/
@ -88,4 +81,10 @@ public interface ICuMemberRetailRangeService extends IService<CuMemberRetailRang
void updateMemberRetailSecondRangeParent(String settleTableName, SaOrderExt orderExt, List<CuMemberExt> pkMemberList, Integer updateType, String symbol);
void initMemberRetailSecondRange(String tableName, CuMemberExt member);
/**
* 查询会员血缘下达标奖衔会员
*/
List<Integer> listChildAwards(String rangeTableName, Integer pkAwards, List<Long> childMemberList);
}

View File

@ -71,11 +71,6 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
return baseMapper.queryCuMemberRetailRangeExtByParent(tableName, pkParent);
}
@Override
public List<CuMemberRetailRangeExt> queryCuMemberRetailRangeEnoughAchieve(String tableName, Long pkParent, BigDecimal achievePv) {
return baseMapper.queryCuMemberRetailRangeEnoughAchieve(tableName, pkParent, achievePv);
}
@Override
public List<CuMemberRetailRangeExt> queryCuMemberSecondRangeParent(String rangeTableName, String secondTableName, Long pkMember) {
// 查询伞上
@ -177,4 +172,18 @@ public class CuMemberRetailRangeServiceImpl extends ServiceImpl<CuMemberRetailRa
cuMemberTreeMap.forEach((key, value) -> cuMemberTreeList.add(value));
return cuMemberBonusSettle.handleCutList(cuMemberTreeList);
}
@Override
public List<Integer> listChildAwards(String rangeTableName, Integer pkAwards, List<Long> childMemberList) {
List<Integer> checkList = new ArrayList<>();
List<List<?>> queryList = cuMemberBonusSettle.handleCutList(childMemberList, MagicNumberConstants.BATCH_QUERY_NUM);
queryList.forEach(tmpList -> {
List<Integer> tmpCheckList = baseMapper.listChildAwards(rangeTableName, pkAwards, childMemberList);
if (tmpCheckList.size() > 0) {
checkList.addAll(tmpCheckList);
}
});
return checkList;
}
}

View File

@ -21,15 +21,6 @@ public interface CuMemberMapper extends BaseMapper<CuMember> {
*/
int updateCuMemberRetailAwardsByPeriod(@Param("period") Integer period, @Param("awardType") Integer awardType);
/**
* 更新会员最高奖衔
*
* @param period
* @param awardType
* @return
*/
int updateCuMemberMaxAwardsByPeriod(@Param("period") Integer period, @Param("awardType") Integer awardType);
/**
* 更新会员奖衔根据临时表
*

View File

@ -25,8 +25,6 @@ public class CuMemberServiceImpl extends ServiceImpl<CuMemberMapper, CuMember> i
@Override
public void updateCuMemberRetailRangeByPeriod(Integer period) {
baseMapper.updateCuMemberRetailAwardsByPeriod(period, EAwardsType.RANGE_TYPE.getValue());
// 更新会员最高奖衔
baseMapper.updateCuMemberMaxAwardsByPeriod(period, EAwardsType.RANGE_TYPE.getValue());
}
@Override

View File

@ -339,10 +339,10 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
sourceMember.setNewConsumeAmount(orderAmount);
sourceMember.setConsumeAmount(sourceMember.getConsumeAmount().add(orderAmount));
sourceMember.setMonthConsumeAmount(sourceMember.getMonthConsumeAmount().add(orderAmount));
// // 自己计算奖衔
// // 自己计算奖衔目前业绩都只往下传所以此处暂时不需要处理订单会员的奖衔
// this.calculateAwards(period, memberRangeExtMap, rangeTableName, saOrderExt, retailAwardsMap, cuMemberAwardsList, sourceMember);
// 累计团队业绩金额 + 计算奖衔
this.calculateParentAwards(period, memberRangeExtMap, rangeTableName, sourceMember, saOrderExt, retailAwardsMap);
cuMemberAwardsList.addAll(this.calculateParentAwards(period, memberRangeExtMap, rangeTableName, sourceMember, saOrderExt, retailAwardsMap));
if (EOrderType.RETAIL_REGISTER.getValue() == saOrderExt.getOrderType()
|| EOrderType.RETAIL_UPGRADE.getValue() == saOrderExt.getOrderType()) {
@ -833,6 +833,9 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
memberRangeExtMap, saOrderExt, settleDate, rangeTableName, rangeDetailTableName, EBonusStage.ONE,
sourceMember, newRetailDetail, returnRetailDetailList);
}
pointCount += newPointInt;
sourceMember.setPointCount(pointCount);
// 待激活点位
int waitPointCount = sourceMember.getWaitPointCount();
if (waitPointCount != 0) {
@ -867,7 +870,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
sourceMember.setWaitPointCount(waitPointCount);
}
sourceMember.setPointCount(sourceMember.getPointCount() + newPointInt);
return returnRetailDetailList;
}
@ -1092,8 +1094,6 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
CuMemberRetailRangeExt targetMember) {
// 校验大小区会员数据
List<CuMemberRetailRangeExt> cuMemberRangeExtList = null;
// 校验累计小部门会员数据
List<CuMemberRetailRangeExt> cuMemberRetailRangeExtList = null;
// 计算分红奖衔
while (true) {
// 当月奖衔值 + 5获取下一个奖衔值
@ -1122,39 +1122,22 @@ public class BonusSettleRangeHandle extends BonusSettleHandle {
}
}
// // 小区业绩 = 团队累计消费业绩 - 大区业绩
// BigDecimal smallAreaPv = ComputeUtil.computeSubtract(targetMember.getTeamConsumePv(), consumeBigPv);
// if (ComputeUtil.compareValue(smallAreaPv, bdAwards.getShareCommunityCheck())) {
// // 小区业绩 >= 小区考核业绩
// if (bdAwards.getPlaceDeptNum() > 0) {
// // 验证是否有多个区满足业绩
// if (null == cuMemberRetailRangeExtList) {
// // 昨日结算表查询订单会员直推数据
// cuMemberRetailRangeExtList = iCuMemberRetailRangeService.queryCuMemberRetailRangeEnoughAchieve(rangeTableName, targetMember.getPkMember(), bdAwards.getShareCommunityCheck());
// }
//
// int enoughNum = 0;
// if (ComputeUtil.compareValue(targetMember.getMonthConsumePv(), bdAwards.getShareCommunityCheck())) {
// enoughNum += 1;
// }
// for (CuMemberRetailRangeExt cuMemberRetailRangeExt : cuMemberRetailRangeExtList) {
// if (memberRangeExtMap.containsKey(cuMemberRetailRangeExt.getPkMember())) {
// cuMemberRetailRangeExt = memberRangeExtMap.get(cuMemberRetailRangeExt.getPkMember());
// }
// if (ComputeUtil.compareValue(ComputeUtil.computeAdd(cuMemberRetailRangeExt.getMonthConsumePv(), cuMemberRetailRangeExt.getAllTeamMonthPv()), bdAwards.getShareCommunityCheck())) {
// // 本人月消费业绩 + 团队月消费业绩 >= 小区考核业绩则满足条件小部门 +1
// enoughNum += 1;
// }
// }
// if (bdAwards.getPlaceDeptNum() > enoughNum) {
// break;
// }
// }
// cuMemberAwardsList.add(getCuMemberRetailAwards(targetMember, period, saOrderExt, bdAwards, EAwardsType.SHARE_TYPE.getValue(), targetMember.getPkShareAwards()));
// targetMember.setAwardsValue(bdAwards.getAwardsValue());
// targetMember.setPkAwards(bdAwards.getPkId());
// continue;
// }
// 小区业绩 = 团队累计消费业绩 - 大区业绩
BigDecimal smallAreaPv = ComputeUtil.computeSubtract(targetMember.getTeamConsumePv(), consumeBigPv);
if (ComputeUtil.compareValue(smallAreaPv, bdAwards.getCommunityCheck())) {
// 小区业绩 >= 小区考核业绩
if (bdAwards.getPlaceDeptNum() > 0) {
// 验证每条血缘下满足达标数量
List<Integer> checkList = iCuMemberRetailRangeService.listChildAwards(rangeTableName, bdAwards.getPkCheckAwardsLeft(),
cuMemberRangeExtList.stream().map(CuMemberRetailRangeExt::getPkMember).collect(Collectors.toList()));
if (CollectionUtil.isNotEmpty(checkList) && checkList.size() >= bdAwards.getPlaceDeptNum()) {
cuMemberAwardsList.add(getCuMemberRetailAwards(targetMember, period, saOrderExt, bdAwards, EAwardsType.RANGE_TYPE.getValue(), targetMember.getPkAwards()));
targetMember.setPkAwards(bdAwards.getPkId());
targetMember.setAwardsValue(bdAwards.getAwardsValue());
continue;
}
}
}
}
}
break;

View File

@ -59,6 +59,7 @@
<result column="AWARDS_VALUE" property="awardsValue"/>
<result column="AWARDS_NAME" property="awardsName"/>
<result column="RANGE_RATIO" property="rangeRatio"/>
<result column="SAME_LEVEL_RATIO" property="sameLevelRatio"/>
<result column="COACH_ALGEBRA" property="coachAlgebra"/>
<result column="COACH_RATIO" property="coachRatio"/>
</resultMap>
@ -552,6 +553,7 @@
, a.pk_share_awards = b.pk_range_awards
</if>
</update>
<update id="updateMemberRetailSecondRangeSelf">
UPDATE ${tableName}
SET
@ -570,6 +572,7 @@
WHERE
PK_MEMBER = #{cuMember.pkId}
</update>
<update id="updateMemberRetailSecondRangeParent">
UPDATE ${tableName}
SET
@ -589,6 +592,7 @@
#{member.pkId}
</foreach>
</update>
<insert id="initMemberRetailSecondRange">
INSERT INTO ${tableName} ("PK_MEMBER",
"PK_PARENT",
@ -827,6 +831,7 @@
bw.awards_value,
bw.awards_name,
bw.range_ratio,
bw.same_level_ratio,
bws.awards_value share_awards_value
from (
select *
@ -864,24 +869,6 @@
and cm.del_flag = 0
</select>
<select id="queryCuMemberRetailRangeEnoughAchieve" resultType="com.hzs.common.domain.member.achieve.ext.CuMemberRetailRangeExt">
select pk_member,
pk_parent,
new_consume_pv,
consume_pv,
month_consume_pv,
team_new_pv,
team_consume_pv,
team_month_pv,
team_new_amount,
team_consume_amount,
team_month_amount,
big_team_pv,
small_team_pv
from ${tableName}
where pk_parent = #{pkParent}
</select>
<select id="findParentMemberList" resultType="com.hzs.common.domain.member.ext.CuMemberExt">
select *
from (
@ -956,4 +943,18 @@
order by a.pk_parent, a.pay_time
</select>
<!-- 查询会员血缘下达标奖衔会员 -->
<select id="listChildAwards" resultType="int">
<foreach collection="childMemberList" item="item" close=" " open=" " separator="union">
select count(1)
from ${rangeTableName} cmr
where cmr.category = 0
and cmr.income_status = 0
and cmr.pk_awards >= #{pkAwards}
start with cmr.pk_member = #{item}
connect by prior cmr.pk_member = cmr.pk_parent
having count(1) > 0
</foreach>
</select>
</mapper>

View File

@ -106,23 +106,6 @@
a.modified_time = sysdate
</update>
<update id="updateCuMemberMaxAwardsByPeriod">
merge into cu_member a
using (select c1.*
from (select pk_member, max(new_level) pk_awards
from cu_member_awards
where period = #{period}
and award_type = #{awardType}
and del_flag = 0
group by pk_member) c1
inner join cu_member c2
on c1.pk_member = c2.pk_id
and c1.pk_awards > c2.pk_max_awards) b
on (a.pk_id = b.pk_member)
when matched then
update set a.pk_max_awards = b.pk_awards, a.modified_time = sysdate
</update>
<!-- 更新会员奖衔根据临时表 -->
<update id="updateBackCuMemberRetailRangeAward">
merge into cu_member a
@ -197,9 +180,12 @@
</if>
a.modified_time = sysdate
</update>
<select id="getByPkId" resultType="com.hzs.common.domain.member.base.CuMember"
parameterType="java.io.Serializable">
select * from cu_member where pk_id = ${pkId}
select *
from cu_member
where pk_id = ${pkId}
</select>
</mapper>

View File

@ -40,7 +40,7 @@ public class MagicNumberConstants {
/**
* 查询条数
*/
public static final Integer BATCH_QUERY_NUM = 300;
public static final Integer BATCH_QUERY_NUM = 450;
/**
* 系统管理员主键

View File

@ -36,9 +36,13 @@ public class CuMemberRetailRangeExt extends CuMemberRetailRange {
private String awardsName;
/**
* 福利级差比例
* 领导奖级差比例
*/
private BigDecimal rangeRatio;
/**
* 领导奖平级比例
*/
private BigDecimal sameLevelRatio;
/**
* 小区业绩

View File

@ -92,16 +92,14 @@ public class BdAwards extends BaseEntity {
private BigDecimal carAwardPoints;
/**
* 左区奖衔
* 考核奖衔
*/
@Transaction(transactionKey = EnumsPrefixConstants.KEY_AWARD)
@TableField(value = "PK_CHECK_AWARDS_LEFT", jdbcType = JdbcType.NUMERIC, updateStrategy = FieldStrategy.IGNORED)
private Integer pkCheckAwardsLeft;
/**
* 右区奖衔
*/
@Transaction(transactionKey = EnumsPrefixConstants.KEY_AWARD)
@TableField(value = "PK_CHECK_AWARDS_RIGHT", jdbcType = JdbcType.NUMERIC, updateStrategy = FieldStrategy.IGNORED)
private Integer pkCheckAwardsRight;
@ -159,7 +157,7 @@ public class BdAwards extends BaseEntity {
private Integer systemType;
/**
* 部门数量
* 考核部门数量
*/
@TableField("PLACE_DEPT_NUM")
private Integer placeDeptNum;