## 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.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.ext.CuMemberAchieveExt;
|
||||
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,
|
||||
@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;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.hzs.bonus.achieve.service.ICuMemberAchieveService;
|
||||
import com.hzs.bonus.achieve.service.ICuMemberSettlePeriodService;
|
||||
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.enums.EOrderType;
|
||||
import com.hzs.common.core.enums.EPlaceDept;
|
||||
import com.hzs.common.core.utils.DateUtils;
|
||||
import com.hzs.common.domain.member.achieve.CuMemberAchieve;
|
||||
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;
|
||||
baseMapper.chargeBackSaOrder(targetTable, sourceTable, period, cuMemberAchieve);
|
||||
// baseMapper.compensationBalanceAmount(targetTable, sourceTable, period, cuMemberAchieve);
|
||||
processBalance(targetTable, sourceTable, period, saOrder, cuMemberAchieve);
|
||||
}
|
||||
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}
|
||||
</foreach>
|
||||
</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>
|
||||
|
|
Loading…
Reference in New Issue