From 024e8ced1bf9ee415c9d945b6eaa5a92216bca81 Mon Sep 17 00:00:00 2001 From: sangelxiu1 <15781802@163.com> Date: Wed, 22 Oct 2025 14:09:35 +0800 Subject: [PATCH] =?UTF-8?q?##=20Opt=20-=20=E9=87=8D=E5=86=99=E5=B7=A6?= =?UTF-8?q?=E5=8F=B3=E5=8C=BA=E7=BB=93=E4=BD=99=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../achieve/mapper/CuMemberAchieveMapper.java | 11 ++++ .../impl/CuMemberAchieveServiceImpl.java | 57 +++++++++++++++++++ .../bonus/achieve/vo/CuMemberSettleVO.java | 25 ++++++++ .../member/achieve/CuMemberAchieveMapper.xml | 32 ++++++++++- 4 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/vo/CuMemberSettleVO.java diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberAchieveMapper.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberAchieveMapper.java index 925561d6..91bf42c9 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberAchieveMapper.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/mapper/CuMemberAchieveMapper.java @@ -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 { void compensationBalanceAmount(@Param("targetTable") String targetTable, @Param("sourceTable") String sourceTable, @Param("period") Integer period, @Param("achieve") MemberAchieveParam memberAchieveParam); + List 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 settleList); /** * 根据每日日业绩开始更新会员业绩 新增业绩、累计业绩、新増金额、累计金额 * diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberAchieveServiceImpl.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberAchieveServiceImpl.java index ca32c6fa..295df82d 100644 --- a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberAchieveServiceImpl.java +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/service/impl/CuMemberAchieveServiceImpl.java @@ -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 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 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); + } + } + } diff --git a/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/vo/CuMemberSettleVO.java b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/vo/CuMemberSettleVO.java new file mode 100644 index 00000000..cc5465a9 --- /dev/null +++ b/bd-business/bd-business-bonus/src/main/java/com/hzs/bonus/achieve/vo/CuMemberSettleVO.java @@ -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; +} diff --git a/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberAchieveMapper.xml b/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberAchieveMapper.xml index a3dccb76..7464d35a 100644 --- a/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberAchieveMapper.xml +++ b/bd-business/bd-business-bonus/src/main/resources/mapper/member/achieve/CuMemberAchieveMapper.xml @@ -1322,5 +1322,35 @@ #{item.pkSourceMember} - + + + MERGE INTO ${targetTable} t + USING ( + SELECT + + #{vo.pkMember} as pk_member, + #{vo.period} as period, + #{vo.aBalance} as a_balance, + #{vo.bBalance} as b_balance + + ) 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 +