代理工资结算调整
This commit is contained in:
parent
61cfebbfe3
commit
06e905aa4a
@ -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));
|
||||||
|
|||||||
@ -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());
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user