代理工资结算调整

This commit is contained in:
tianfeng 2025-11-03 16:14:36 +08:00
parent 61cfebbfe3
commit 06e905aa4a
3 changed files with 102 additions and 159 deletions

View File

@ -152,12 +152,12 @@ public class TeamBillSettleListener implements MessageListener {
teamBillCycle.getBillBelong()); teamBillCycle.getBillBelong());
log.warn("团队账单结算teamMemberTargets."+teamMemberTargets); log.warn("团队账单结算teamMemberTargets."+teamMemberTargets);
teamMemberTargets.forEach(teamMemberTarget -> { // teamMemberTargets.forEach(teamMemberTarget -> {
TeamMember teamMember = teamMemberService.getByMemberId(teamMemberTarget.getUserId()); // TeamMember teamMember = teamMemberService.getByMemberId(teamMemberTarget.getUserId());
if (Objects.nonNull(teamMember) && TeamMemberRole.OWN.eq(teamMember.getRole())) { // if (Objects.nonNull(teamMember) && TeamMemberRole.OWN.eq(teamMember.getRole())) {
teamMemberTarget.setIsOwn(true); // teamMemberTarget.setIsOwn(true);
} // }
}); // });
// 获得区域配置细信息 // 获得区域配置细信息
SysRegionConfig regionConfig = sysRegionConfigService.getById(teamProfile.getRegion()); SysRegionConfig regionConfig = sysRegionConfigService.getById(teamProfile.getRegion());
@ -167,14 +167,14 @@ public class TeamBillSettleListener implements MessageListener {
} }
List<TeamBillMemberTarget> teamBillMemberTargets = List<TeamBillMemberTarget> teamBillMemberTargets =
TeamBillCycleUtils.calculatorPolicyTargetNew(teamMemberTargets, regionPolicyManager, regionConfig); TeamBillCycleUtils.calculatorPolicyTarget(teamMemberTargets, regionPolicyManager);
log.warn("团队账单结算teamBillMemberTargets."+teamBillMemberTargets); log.warn("团队账单结算teamBillMemberTargets."+teamBillMemberTargets);
// 结算账单. // 结算账单.
TeamBillSettleResult settleResult = new TeamBillSettleResult() TeamBillSettleResult settleResult = new TeamBillSettleResult()
.setPolicy(regionPolicyManager) .setPolicy(regionPolicyManager)
.setWorkMembers(countWorkMembers(teamMemberTargets)) .setWorkMembers(countWorkMembers(teamMemberTargets))
.setFinishMembers(teamBillMemberTargets.size()) .setFinishMembers(teamBillMemberTargets.stream().filter(TeamBillMemberTarget::getSatisfyLevel).toList().size())
.setMemberSalary(sumMemberSalary(teamBillMemberTargets)) .setMemberSalary(sumMemberSalary(teamBillMemberTargets))
.setOwnSalary(ownSalary(teamBillMemberTargets)) .setOwnSalary(ownSalary(teamBillMemberTargets))
.setTotalSalary(ownTotalSalary(teamBillMemberTargets)); .setTotalSalary(ownTotalSalary(teamBillMemberTargets));

View File

@ -137,97 +137,6 @@ public final class TeamBillCycleUtils {
return calculatorPolicyTarget(List.of(target), policy).get(0); return calculatorPolicyTarget(List.of(target), policy).get(0);
} }
/**
* 计算成员工作情况.
*/
public static List<TeamBillMemberTarget> calculatorPolicyTargetNew(List<TeamMemberTarget> targets,
TeamPolicyManager policy, SysRegionConfig regionConfig) {
if (CollectionUtils.isEmpty(targets)) {
return Lists.newArrayList();
}
List<TeamPolicy> teamPolicies = Objects.nonNull(policy)
? policy.getPolicy().stream()
.sorted(Comparator.comparing(TeamPolicy::getLevel, Comparator.reverseOrder()))
.collect(Collectors.toList())
: Lists.newArrayList();
return targets.stream().map(target -> {
long targetTimeHours = target.sumAllTargetTime() / 60;
Long acceptGiftValue = target.sumAcceptGiftValue();
// 计算有效天数统计每日在线时长 >= 120分钟的天数
Integer effectiveDay = calculateEffectiveDay(target);
TeamBillMemberTarget resultTarget = new TeamBillMemberTarget()
.setTargetId(target.getTimeId())
.setSysOrigin(target.getSysOrigin())
.setUserId(target.getUserId())
.setAcceptGiftValue(target.sumAcceptGiftValue())
.setGiveGiftValue(target.sumGiveGiftValue())
.setRoomValue(target.sumRoomValue())
.setOnlineTime(target.sumAllTargetTime())
.setMemberSalary(BigDecimal.ZERO)
.setOwnSalary(BigDecimal.ZERO)
.setTotalSalary(BigDecimal.ZERO)
.setSatisfyLevel(Boolean.FALSE);
for (TeamPolicy teamPolicy : teamPolicies) {
Long policyOnlineTimeHours = NumUtils.isNullDefaultZero(teamPolicy.getOnlineTime());
Long policyGiftValue = NumUtils.isNullDefaultZero(teamPolicy.getTarget());
// 南亚区域特殊处理
if ("SA".equals(regionConfig.getRegionCode())) {
if (acceptGiftValue < policyGiftValue) {
continue;
}
Integer policyEffectiveDay = NumUtils.isNullDefaultZero(teamPolicy.getEffectiveDay());
if (targetTimeHours >= policyOnlineTimeHours && effectiveDay >= policyEffectiveDay) {
resultTarget.setMemberSalary(teamPolicy.getMemberSalary());
resultTarget.setOwnSalary(teamPolicy.getOwnSalary());
resultTarget.setTotalSalary(teamPolicy.getTotalSalary());
} else if (acceptGiftValue >= policyGiftValue && !Boolean.TRUE.equals(target.getIsOwn())){
resultTarget.setMemberSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
resultTarget.setTotalSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
}
resultTarget.setLevel(teamPolicy.getLevel());
resultTarget.setSatisfyLevel(Boolean.TRUE);
resultTarget.setPropsRewards(teamPolicy.getPropsRewards());
return resultTarget;
} else {
// 20240918 政策新增有效天字段大于1小时60分钟即可获取当天有效天
Integer policyEffectiveDay = NumUtils.isNullDefaultZero(teamPolicy.getEffectiveDay());
// 完全满足条件在线时长礼物价值有效天数都达标
if (targetTimeHours >= policyOnlineTimeHours && acceptGiftValue >= policyGiftValue && effectiveDay >= policyEffectiveDay) {
resultTarget.setMemberSalary(teamPolicy.getMemberSalary());
resultTarget.setOwnSalary(teamPolicy.getOwnSalary());
resultTarget.setTotalSalary(teamPolicy.getTotalSalary());
resultTarget.setLevel(teamPolicy.getLevel());
resultTarget.setSatisfyLevel(Boolean.TRUE);
resultTarget.setPropsRewards(teamPolicy.getPropsRewards());
return resultTarget;
}
// 部分满足条件礼物价值达标但不是主播本人
else if (acceptGiftValue >= policyGiftValue && !Boolean.TRUE.equals(target.getIsOwn())) {
resultTarget.setMemberSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
resultTarget.setTotalSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
resultTarget.setLevel(teamPolicy.getLevel());
resultTarget.setSatisfyLevel(Boolean.TRUE);
resultTarget.setPropsRewards(teamPolicy.getPropsRewards());
return resultTarget;
}
}
}
return resultTarget;
}).filter(Objects::nonNull).collect(Collectors.toList());
}
/** /**
* 计算有效天数 * 计算有效天数
* 规则每日在线时长 >= 120分钟算作有效一天 * 规则每日在线时长 >= 120分钟算作有效一天
@ -305,24 +214,27 @@ public final class TeamBillCycleUtils {
for (TeamPolicy teamPolicy : teamPolicies) { for (TeamPolicy teamPolicy : teamPolicies) {
Long policyOnlineTimeHours = NumUtils.isNullDefaultZero(teamPolicy.getOnlineTime()); Long policyOnlineTimeHours = NumUtils.isNullDefaultZero(teamPolicy.getOnlineTime());
Long policyGiftValue = NumUtils.isNullDefaultZero(teamPolicy.getTarget()); Long policyGiftValue = NumUtils.isNullDefaultZero(teamPolicy.getTarget());
// 20240918 政策新增有效天字段大于1小时60分钟即可获取当天有效天
// 礼物流水不满足条件
if (acceptGiftValue < policyGiftValue) {
continue;
}
// 完全满足条件在线时长礼物流水有效天数都达标
Integer policyEffectiveDay = NumUtils.isNullDefaultZero(teamPolicy.getEffectiveDay()); Integer policyEffectiveDay = NumUtils.isNullDefaultZero(teamPolicy.getEffectiveDay());
if (targetTimeHours >= policyOnlineTimeHours && acceptGiftValue >= policyGiftValue && effectiveDay >= policyEffectiveDay) { if (targetTimeHours >= policyOnlineTimeHours && effectiveDay >= policyEffectiveDay) {
resultTarget.setMemberSalary(teamPolicy.getMemberSalary()); resultTarget.setMemberSalary(teamPolicy.getMemberSalary());
resultTarget.setOwnSalary(teamPolicy.getOwnSalary()); resultTarget.setOwnSalary(teamPolicy.getOwnSalary());
resultTarget.setTotalSalary(teamPolicy.getTotalSalary()); resultTarget.setTotalSalary(teamPolicy.getTotalSalary());
resultTarget.setLevel(teamPolicy.getLevel()); } else {
resultTarget.setSatisfyLevel(Boolean.TRUE); resultTarget.setMemberSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
resultTarget.setPropsRewards(teamPolicy.getPropsRewards()); resultTarget.setTotalSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
return resultTarget;
} else if (acceptGiftValue >= policyGiftValue && !Boolean.TRUE.equals(target.getIsOwn())) {
resultTarget.setMemberSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
resultTarget.setTotalSalary(teamPolicy.getMemberSalary().multiply(new BigDecimal("0.9")).setScale(2, RoundingMode.DOWN));
resultTarget.setLevel(teamPolicy.getLevel());
resultTarget.setSatisfyLevel(Boolean.TRUE);
resultTarget.setPropsRewards(teamPolicy.getPropsRewards());
return resultTarget;
} }
resultTarget.setLevel(teamPolicy.getLevel());
resultTarget.setSatisfyLevel(Boolean.TRUE);
resultTarget.setPropsRewards(teamPolicy.getPropsRewards());
return resultTarget;
} }
return resultTarget; return resultTarget;
}).filter(Objects::nonNull).collect(Collectors.toList()); }).filter(Objects::nonNull).collect(Collectors.toList());

View File

@ -30,6 +30,7 @@ import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.util.Arrays;
import java.util.List; import java.util.List;
@SpringBootTest(classes = OtherServiceApplication.class) @SpringBootTest(classes = OtherServiceApplication.class)
@ -61,56 +62,86 @@ public class TeamMonthBillTest {
teamBillTask.processTeamMonthBillTest(); teamBillTask.processTeamMonthBillTest();
} }
/**
* listener直接处理团队账单
*/
@Test
public void testListener() {
Long teamId = 1969441508127473665L;
// 获取团队信息 /**
TeamProfile teamProfile = teamProfileService.getById(teamId); * 批量团队结算
*/
TeamBillCycle teamBillCycle = new TeamBillCycle(); @Test
teamBillCycle.setSysOrigin("LIKEI"); public void processTeamBillSettle() {
teamBillCycle.setRegion(teamProfile.getRegion()); String json = " [\n" +
teamBillCycle.setBillBelong(20251016); "\"1970912960966479874\",\n" +
teamBillCycle.setTeamId(teamId); "\"1965724731682754561\",\n" +
"\"1982985325435207682\",\n" +
"\"1978213327176196097\",\n" +
// 获取团队区域政策 "\"1981316214519701506\",\n" +
TeamPolicyManager regionPolicyManager = teamPolicyManagerService.getReleaseByRegionAndType( "\"1980616977268658178\",\n" +
teamBillCycle.getSysOrigin(), "\"1982190084063019010\",\n" +
teamBillCycle.getRegion() "\"1982431621845925889\",\n" +
); "\"1982372655623356418\",\n" +
SysRegionConfig regionConfig = sysRegionConfigService.getById(teamProfile.getRegion()); "\"1980617113277353986\",\n" +
List<TeamMemberTarget> teamMemberTargets = teamMemberTargetService.listByBillBelong( "\"1978447372520308737\"\n" +
teamBillCycle.getTeamId(), " ]";
teamBillCycle.getBillBelong()); List<String> teamList = JSON.parseArray(json, String.class);
for (String teamId : teamList) {
List<TeamBillMemberTarget> teamBillMemberTargets = Long id = Long.parseLong(teamId);
TeamBillCycleUtils.calculatorPolicyTargetNew(teamMemberTargets, regionPolicyManager, regionConfig); teamBillSettleListener.processBillTest(id);
}
// 结算账单.
TeamBillSettleResult settleResult = new TeamBillSettleResult()
.setPolicy(regionPolicyManager)
.setWorkMembers(countWorkMembers(teamMemberTargets))
.setFinishMembers(teamBillMemberTargets.size())
.setMemberSalary(sumMemberSalary(teamBillMemberTargets))
.setOwnSalary(ownSalary(teamBillMemberTargets))
.setTotalSalary(ownTotalSalary(teamBillMemberTargets));
System.out.println("============= 账单结算结果 =============");
System.out.printf("政策信息: %s%n", settleResult.getPolicy());
System.out.printf("工作人数: %d%n", settleResult.getWorkMembers());
System.out.printf("完成人数: %d%n", settleResult.getFinishMembers());
System.out.printf("成员工资: %s%n", settleResult.getMemberSalary());
System.out.printf("拥有者工资: %s%n", settleResult.getOwnSalary());
System.out.printf("工资合计: %s%n", settleResult.getTotalSalary());
System.out.println("=======================================");
} }
private int countWorkMembers(List<TeamMemberTarget> teamMemberTargets) { @Test
public void testListener() {
Long teamId = 1970912960966479874L;
queryTeamSalary(teamId, 2025016);
}
/**
* 查询团队工资
*/
private void queryTeamSalary(Long teamId, Integer billBelong) {
// 获取团队信息
TeamProfile teamProfile = teamProfileService.getById(teamId);
TeamBillCycle teamBillCycle = new TeamBillCycle();
teamBillCycle.setSysOrigin("LIKEI");
teamBillCycle.setRegion(teamProfile.getRegion());
teamBillCycle.setBillBelong(billBelong);
teamBillCycle.setTeamId(teamId);
// 获取团队区域政策
TeamPolicyManager regionPolicyManager = teamPolicyManagerService.getReleaseByRegionAndType(
teamBillCycle.getSysOrigin(),
teamBillCycle.getRegion()
);
List<TeamMemberTarget> teamMemberTargets = teamMemberTargetService.listByBillBelong(
teamBillCycle.getTeamId(),
teamBillCycle.getBillBelong());
List<TeamBillMemberTarget> teamBillMemberTargets =
TeamBillCycleUtils.calculatorPolicyTarget(teamMemberTargets, regionPolicyManager);
// 结算账单.
TeamBillSettleResult settleResult = new TeamBillSettleResult()
.setPolicy(regionPolicyManager)
.setWorkMembers(countWorkMembers(teamMemberTargets))
.setFinishMembers(teamBillMemberTargets.stream().filter(TeamBillMemberTarget::getSatisfyLevel).toList().size())
.setMemberSalary(sumMemberSalary(teamBillMemberTargets))
.setOwnSalary(ownSalary(teamBillMemberTargets))
.setTotalSalary(ownTotalSalary(teamBillMemberTargets));
System.out.println("============= 账单结算结果 =============");
System.out.printf("政策信息: %s%n", settleResult.getPolicy());
System.out.printf("工作人数: %d%n", settleResult.getWorkMembers());
System.out.printf("完成人数: %d%n", settleResult.getFinishMembers());
System.out.printf("成员工资: %s%n", settleResult.getMemberSalary());
System.out.printf("拥有者工资: %s%n", settleResult.getOwnSalary());
System.out.printf("工资合计: %s%n", settleResult.getTotalSalary());
System.out.println("=======================================");
}
private int countWorkMembers(List<TeamMemberTarget> teamMemberTargets) {
return CollectionUtils.isNotEmpty(teamMemberTargets) ? teamMemberTargets.size() : 0; return CollectionUtils.isNotEmpty(teamMemberTargets) ? teamMemberTargets.size() : 0;
} }