代理工资结算调整
This commit is contained in:
parent
61cfebbfe3
commit
06e905aa4a
@ -152,12 +152,12 @@ public class TeamBillSettleListener implements MessageListener {
|
||||
teamBillCycle.getBillBelong());
|
||||
log.warn("团队账单结算teamMemberTargets."+teamMemberTargets);
|
||||
|
||||
teamMemberTargets.forEach(teamMemberTarget -> {
|
||||
TeamMember teamMember = teamMemberService.getByMemberId(teamMemberTarget.getUserId());
|
||||
if (Objects.nonNull(teamMember) && TeamMemberRole.OWN.eq(teamMember.getRole())) {
|
||||
teamMemberTarget.setIsOwn(true);
|
||||
}
|
||||
});
|
||||
// teamMemberTargets.forEach(teamMemberTarget -> {
|
||||
// TeamMember teamMember = teamMemberService.getByMemberId(teamMemberTarget.getUserId());
|
||||
// if (Objects.nonNull(teamMember) && TeamMemberRole.OWN.eq(teamMember.getRole())) {
|
||||
// teamMemberTarget.setIsOwn(true);
|
||||
// }
|
||||
// });
|
||||
|
||||
// 获得区域配置细信息
|
||||
SysRegionConfig regionConfig = sysRegionConfigService.getById(teamProfile.getRegion());
|
||||
@ -167,14 +167,14 @@ public class TeamBillSettleListener implements MessageListener {
|
||||
}
|
||||
|
||||
List<TeamBillMemberTarget> teamBillMemberTargets =
|
||||
TeamBillCycleUtils.calculatorPolicyTargetNew(teamMemberTargets, regionPolicyManager, regionConfig);
|
||||
TeamBillCycleUtils.calculatorPolicyTarget(teamMemberTargets, regionPolicyManager);
|
||||
log.warn("团队账单结算teamBillMemberTargets."+teamBillMemberTargets);
|
||||
|
||||
// 结算账单.
|
||||
TeamBillSettleResult settleResult = new TeamBillSettleResult()
|
||||
.setPolicy(regionPolicyManager)
|
||||
.setWorkMembers(countWorkMembers(teamMemberTargets))
|
||||
.setFinishMembers(teamBillMemberTargets.size())
|
||||
.setFinishMembers(teamBillMemberTargets.stream().filter(TeamBillMemberTarget::getSatisfyLevel).toList().size())
|
||||
.setMemberSalary(sumMemberSalary(teamBillMemberTargets))
|
||||
.setOwnSalary(ownSalary(teamBillMemberTargets))
|
||||
.setTotalSalary(ownTotalSalary(teamBillMemberTargets));
|
||||
|
||||
@ -137,97 +137,6 @@ public final class TeamBillCycleUtils {
|
||||
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分钟算作有效一天
|
||||
@ -305,24 +214,27 @@ public final class TeamBillCycleUtils {
|
||||
for (TeamPolicy teamPolicy : teamPolicies) {
|
||||
Long policyOnlineTimeHours = NumUtils.isNullDefaultZero(teamPolicy.getOnlineTime());
|
||||
Long policyGiftValue = NumUtils.isNullDefaultZero(teamPolicy.getTarget());
|
||||
// 20240918 政策新增有效天字段,大于1小时(60分钟)即可获取当天有效天
|
||||
|
||||
// 礼物流水不满足条件
|
||||
if (acceptGiftValue < policyGiftValue) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 完全满足条件:在线时长、礼物流水、有效天数都达标
|
||||
Integer policyEffectiveDay = NumUtils.isNullDefaultZero(teamPolicy.getEffectiveDay());
|
||||
if (targetTimeHours >= policyOnlineTimeHours && acceptGiftValue >= policyGiftValue && effectiveDay >= policyEffectiveDay) {
|
||||
if (targetTimeHours >= policyOnlineTimeHours && 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;
|
||||
} else {
|
||||
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());
|
||||
|
||||
@ -30,6 +30,7 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@SpringBootTest(classes = OtherServiceApplication.class)
|
||||
@ -61,56 +62,86 @@ public class TeamMonthBillTest {
|
||||
teamBillTask.processTeamMonthBillTest();
|
||||
}
|
||||
|
||||
/**
|
||||
* listener直接处理团队账单
|
||||
*/
|
||||
@Test
|
||||
public void testListener() {
|
||||
Long teamId = 1969441508127473665L;
|
||||
|
||||
// 获取团队信息
|
||||
TeamProfile teamProfile = teamProfileService.getById(teamId);
|
||||
|
||||
TeamBillCycle teamBillCycle = new TeamBillCycle();
|
||||
teamBillCycle.setSysOrigin("LIKEI");
|
||||
teamBillCycle.setRegion(teamProfile.getRegion());
|
||||
teamBillCycle.setBillBelong(20251016);
|
||||
teamBillCycle.setTeamId(teamId);
|
||||
|
||||
|
||||
// 获取团队区域政策
|
||||
TeamPolicyManager regionPolicyManager = teamPolicyManagerService.getReleaseByRegionAndType(
|
||||
teamBillCycle.getSysOrigin(),
|
||||
teamBillCycle.getRegion()
|
||||
);
|
||||
SysRegionConfig regionConfig = sysRegionConfigService.getById(teamProfile.getRegion());
|
||||
List<TeamMemberTarget> teamMemberTargets = teamMemberTargetService.listByBillBelong(
|
||||
teamBillCycle.getTeamId(),
|
||||
teamBillCycle.getBillBelong());
|
||||
|
||||
List<TeamBillMemberTarget> teamBillMemberTargets =
|
||||
TeamBillCycleUtils.calculatorPolicyTargetNew(teamMemberTargets, regionPolicyManager, regionConfig);
|
||||
|
||||
// 结算账单.
|
||||
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("=======================================");
|
||||
/**
|
||||
* 批量团队结算
|
||||
*/
|
||||
@Test
|
||||
public void processTeamBillSettle() {
|
||||
String json = " [\n" +
|
||||
"\"1970912960966479874\",\n" +
|
||||
"\"1965724731682754561\",\n" +
|
||||
"\"1982985325435207682\",\n" +
|
||||
"\"1978213327176196097\",\n" +
|
||||
"\"1981316214519701506\",\n" +
|
||||
"\"1980616977268658178\",\n" +
|
||||
"\"1982190084063019010\",\n" +
|
||||
"\"1982431621845925889\",\n" +
|
||||
"\"1982372655623356418\",\n" +
|
||||
"\"1980617113277353986\",\n" +
|
||||
"\"1978447372520308737\"\n" +
|
||||
" ]";
|
||||
List<String> teamList = JSON.parseArray(json, String.class);
|
||||
for (String teamId : teamList) {
|
||||
Long id = Long.parseLong(teamId);
|
||||
teamBillSettleListener.processBillTest(id);
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user