## Opt - 重写左右区结余逻辑
This commit is contained in:
parent
0d398365c8
commit
024e8ced1b
|
@ -2,6 +2,7 @@ package com.hzs.bonus.achieve.mapper;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import com.hzs.bonus.achieve.param.MemberAchieveParam;
|
import com.hzs.bonus.achieve.param.MemberAchieveParam;
|
||||||
|
import com.hzs.bonus.achieve.vo.CuMemberSettleVO;
|
||||||
import com.hzs.common.domain.member.achieve.CuMemberAchieve;
|
import com.hzs.common.domain.member.achieve.CuMemberAchieve;
|
||||||
import com.hzs.common.domain.member.achieve.ext.CuMemberAchieveExt;
|
import com.hzs.common.domain.member.achieve.ext.CuMemberAchieveExt;
|
||||||
import com.hzs.bonus.achieve.param.MonthAchieveParam;
|
import com.hzs.bonus.achieve.param.MonthAchieveParam;
|
||||||
|
@ -166,6 +167,16 @@ public interface CuMemberAchieveMapper extends BaseMapper<CuMemberAchieve> {
|
||||||
void compensationBalanceAmount(@Param("targetTable") String targetTable, @Param("sourceTable") String sourceTable,
|
void compensationBalanceAmount(@Param("targetTable") String targetTable, @Param("sourceTable") String sourceTable,
|
||||||
@Param("period") Integer period, @Param("achieve") MemberAchieveParam memberAchieveParam);
|
@Param("period") Integer period, @Param("achieve") MemberAchieveParam memberAchieveParam);
|
||||||
|
|
||||||
|
List<CuMemberSettleVO> getParentMemberList(@Param("targetTable") String targetTable, @Param("sourceTable") String sourceTable,
|
||||||
|
@Param("period") Integer period, @Param("pkMember") Long pkMember);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量更新会员结算表的余额信息
|
||||||
|
* @param targetTable 目标表名
|
||||||
|
* @param settleList 结算对象列表
|
||||||
|
* @return 更新的记录数
|
||||||
|
*/
|
||||||
|
int batchUpdateBalance(@Param("targetTable") String targetTable, @Param("settleList") List<CuMemberSettleVO> settleList);
|
||||||
/**
|
/**
|
||||||
* 根据每日日业绩开始更新会员业绩 新增业绩、累计业绩、新増金额、累计金额
|
* 根据每日日业绩开始更新会员业绩 新增业绩、累计业绩、新増金额、累计金额
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
package com.hzs.bonus.achieve.service.impl;
|
package com.hzs.bonus.achieve.service.impl;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.hzs.bonus.achieve.service.ICuMemberAchieveService;
|
import com.hzs.bonus.achieve.service.ICuMemberAchieveService;
|
||||||
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
|
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
|
||||||
import com.hzs.bonus.achieve.service.ICuMemberTreeService;
|
import com.hzs.bonus.achieve.service.ICuMemberTreeService;
|
||||||
|
import com.hzs.bonus.achieve.vo.CuMemberSettleVO;
|
||||||
import com.hzs.common.core.constant.*;
|
import com.hzs.common.core.constant.*;
|
||||||
import com.hzs.common.core.enums.EOrderType;
|
import com.hzs.common.core.enums.EOrderType;
|
||||||
|
import com.hzs.common.core.enums.EPlaceDept;
|
||||||
import com.hzs.common.core.utils.DateUtils;
|
import com.hzs.common.core.utils.DateUtils;
|
||||||
import com.hzs.common.domain.member.achieve.CuMemberAchieve;
|
import com.hzs.common.domain.member.achieve.CuMemberAchieve;
|
||||||
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
|
import com.hzs.common.domain.member.achieve.CuMemberSettlePeriod;
|
||||||
|
@ -189,9 +193,62 @@ public class CuMemberAchieveServiceImpl extends ServiceImpl<CuMemberAchieveMappe
|
||||||
String targetTable = TableNameConstants.CU_MEMBER_SETTLE + settlePeriod;
|
String targetTable = TableNameConstants.CU_MEMBER_SETTLE + settlePeriod;
|
||||||
baseMapper.chargeBackSaOrder(targetTable, sourceTable, period, cuMemberAchieve);
|
baseMapper.chargeBackSaOrder(targetTable, sourceTable, period, cuMemberAchieve);
|
||||||
// baseMapper.compensationBalanceAmount(targetTable, sourceTable, period, cuMemberAchieve);
|
// baseMapper.compensationBalanceAmount(targetTable, sourceTable, period, cuMemberAchieve);
|
||||||
|
processBalance(targetTable, sourceTable, period, saOrder, cuMemberAchieve);
|
||||||
}
|
}
|
||||||
return Boolean.TRUE;
|
return Boolean.TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void processBalance(String targetTable, String sourceTable, Integer period, SaOrder saOrder, MemberAchieveParam cuMemberAchieve){
|
||||||
|
// 1. 拿本人上网体(含)
|
||||||
|
List<CuMemberSettleVO> memberSettleVOList = baseMapper.getParentMemberList(targetTable, sourceTable, period, saOrder.getPkMember());
|
||||||
|
CuMemberSettleVO baseSettleVO = memberSettleVOList.stream().findFirst().orElse(null);
|
||||||
|
if(ObjectUtil.isEmpty(baseSettleVO)){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
BigDecimal pendingPV = cuMemberAchieve.getNewPv();
|
||||||
|
// 排除本人的上级网体修改列表
|
||||||
|
List<CuMemberSettleVO> updateMemberSettleVOList = new ArrayList<>();
|
||||||
|
for (int i1 = 1; i1 < memberSettleVOList.size(); i1++) {
|
||||||
|
CuMemberSettleVO nowSettleVO = memberSettleVOList.get(i1);
|
||||||
|
CuMemberSettleVO updateVO = CuMemberSettleVO.builder()
|
||||||
|
.pkMember(nowSettleVO.getPkMember())
|
||||||
|
.period(nowSettleVO.getPeriod())
|
||||||
|
.aBalance(BigDecimal.ZERO)
|
||||||
|
.bBalance(BigDecimal.ZERO)
|
||||||
|
.build();
|
||||||
|
updateMemberSettleVOList.add(updateVO);
|
||||||
|
assert baseSettleVO != null;
|
||||||
|
if(EPlaceDept.LEFT_DEPT.getValue() == baseSettleVO.getPlaceDep()){
|
||||||
|
BigDecimal aBalance = nowSettleVO.getABalance();
|
||||||
|
BigDecimal result = aBalance.subtract(pendingPV);
|
||||||
|
if (result.compareTo(BigDecimal.ZERO) >= 0) {
|
||||||
|
// 如果结果大于等于0,直接设置aBalance
|
||||||
|
updateVO.setABalance(result);
|
||||||
|
} else {
|
||||||
|
// 如果结果小于0,aBalance设为0,bBalance设为差额绝对值
|
||||||
|
updateVO.setABalance(BigDecimal.ZERO);
|
||||||
|
updateVO.setBBalance(result.abs());
|
||||||
|
}
|
||||||
|
// }else if(EPlaceDept.RIGHT_DEPT.getValue() == baseSettleVO.getPlaceDep()){
|
||||||
|
} else {
|
||||||
|
BigDecimal bBalance = nowSettleVO.getBBalance();
|
||||||
|
BigDecimal result = bBalance.subtract(pendingPV);
|
||||||
|
|
||||||
|
if (result.compareTo(BigDecimal.ZERO) >= 0) {
|
||||||
|
// 如果结果大于等于0,直接设置bBalance
|
||||||
|
updateVO.setBBalance(result);
|
||||||
|
} else {
|
||||||
|
// 如果结果小于0,bBalance设为0,aBalance设为差额绝对值
|
||||||
|
updateVO.setBBalance(BigDecimal.ZERO);
|
||||||
|
updateVO.setABalance(result.abs());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
baseSettleVO = nowSettleVO;
|
||||||
|
}
|
||||||
|
if(CollUtil.isNotEmpty(updateMemberSettleVOList)){
|
||||||
|
baseMapper.batchUpdateBalance(targetTable, updateMemberSettleVOList);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.hzs.bonus.achieve.vo;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class CuMemberSettleVO implements Serializable {
|
||||||
|
private Integer level;
|
||||||
|
private Long pkMember;
|
||||||
|
private Long pkParent;
|
||||||
|
private Integer placeDep;
|
||||||
|
private String memberCode;
|
||||||
|
private String memberName;
|
||||||
|
private Integer period;
|
||||||
|
private BigDecimal aBalance;
|
||||||
|
private BigDecimal bBalance;
|
||||||
|
}
|
|
@ -1322,5 +1322,35 @@
|
||||||
#{item.pkSourceMember}
|
#{item.pkSourceMember}
|
||||||
</foreach>
|
</foreach>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getParentMemberList" resultType="com.hzs.bonus.achieve.vo.CuMemberSettleVO">
|
||||||
|
SELECT
|
||||||
|
*
|
||||||
|
FROM
|
||||||
|
(
|
||||||
|
SELECT LEVEL
|
||||||
|
,
|
||||||
|
cm.*
|
||||||
|
FROM
|
||||||
|
${targetTable} cm START WITH cm.pk_member = #{pkMember} CONNECT BY cm.PK_MEMBER = PRIOR cm.PK_PARENT
|
||||||
|
ORDER BY
|
||||||
|
LEVEL
|
||||||
|
)
|
||||||
|
</select>
|
||||||
|
<update id="batchUpdateBalance">
|
||||||
|
MERGE INTO ${targetTable} t
|
||||||
|
USING (
|
||||||
|
SELECT
|
||||||
|
<foreach collection="settleList" item="vo" separator="UNION ALL SELECT" open="" close="">
|
||||||
|
#{vo.pkMember} as pk_member,
|
||||||
|
#{vo.period} as period,
|
||||||
|
#{vo.aBalance} as a_balance,
|
||||||
|
#{vo.bBalance} as b_balance
|
||||||
|
</foreach>
|
||||||
|
) s
|
||||||
|
ON (t.pk_member = s.pk_member AND t.period = s.period)
|
||||||
|
WHEN MATCHED THEN
|
||||||
|
UPDATE SET
|
||||||
|
t.a_balance = s.a_balance,
|
||||||
|
t.b_balance = s.b_balance
|
||||||
|
</update>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
Loading…
Reference in New Issue