diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/TeamBillCycleUtils.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/TeamBillCycleUtils.java index 5456e1df..2d3794a0 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/TeamBillCycleUtils.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/mongo/service/team/TeamBillCycleUtils.java @@ -157,7 +157,7 @@ public final class TeamBillCycleUtils { long targetTimeHours = target.sumAllTargetTime() / 60; Long acceptGiftValue = target.sumAcceptGiftValue(); - // 计算有效天数:统计每日在线时长 >= 60分钟的天数 + // 计算有效天数:统计每日在线时长 >= 120分钟的天数 Integer effectiveDay = calculateEffectiveDay(target); TeamBillMemberTarget resultTarget = new TeamBillMemberTarget() @@ -230,7 +230,7 @@ public final class TeamBillCycleUtils { /** * 计算有效天数 - * 规则:每日在线时长 >= 60分钟算作有效一天 + * 规则:每日在线时长 >= 120分钟算作有效一天 * * @param target 成员目标数据 * @return 有效天数 @@ -240,12 +240,12 @@ public final class TeamBillCycleUtils { return 0; } - // 统计每日在线时长 >= 60分钟的天数 + // 统计每日在线时长 >= 120分钟的天数 int effectiveDayCount = 0; for (Object dailyData : target.getDailyTargets()) { // 假设dailyData是包含ownOnlineTime和otherOnlineTime的对象 Long dailyOnlineTime = getDailyTotalOnlineTime(dailyData); - if (dailyOnlineTime != null && dailyOnlineTime >= 60) { + if (dailyOnlineTime != null && dailyOnlineTime >= 120) { effectiveDayCount++; } } diff --git a/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java b/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java index ed02f404..50a89914 100644 --- a/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java +++ b/rc-service/rc-service-other/other-start/src/test/java/TeamMonthBillTest.java @@ -1,3 +1,4 @@ +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.red.circle.OtherServiceApplication; @@ -6,6 +7,7 @@ import com.red.circle.other.app.listener.team.TeamBillSettleListener; import com.red.circle.other.app.manager.activity.award.WeeklyRewardsSentManager; import com.red.circle.other.app.scheduler.TeamBillTask; import com.red.circle.other.infra.database.mongo.dto.team.TeamBillMemberTarget; +import com.red.circle.other.infra.database.mongo.dto.team.TeamBillSettleResult; import com.red.circle.other.infra.database.mongo.entity.team.team.TeamBillCycle; import com.red.circle.other.infra.database.mongo.entity.team.team.TeamMemberTarget; import com.red.circle.other.infra.database.mongo.entity.team.team.TeamPolicyManager; @@ -17,6 +19,7 @@ import com.red.circle.other.infra.database.mongo.service.team.team.TeamMemberTar import com.red.circle.other.infra.database.mongo.service.team.team.TeamPolicyManagerService; import com.red.circle.other.infra.database.mongo.service.team.team.TeamProfileService; import com.red.circle.other.infra.database.mongo.service.user.region.SysRegionConfigService; +import com.red.circle.tool.core.collection.CollectionUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -25,6 +28,8 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.List; @SpringBootTest(classes = OtherServiceApplication.class) @@ -61,7 +66,7 @@ public class TeamMonthBillTest { */ @Test public void testListener() { - Long teamId = 1978293732420083713L; + Long teamId = 1969441508127473665L; // 获取团队信息 TeamProfile teamProfile = teamProfileService.getById(teamId); @@ -86,9 +91,45 @@ public class TeamMonthBillTest { List teamBillMemberTargets = TeamBillCycleUtils.calculatorPolicyTargetNew(teamMemberTargets, regionPolicyManager, regionConfig); - System.out.println(teamBillMemberTargets); + // 结算账单. + TeamBillSettleResult settleResult = new TeamBillSettleResult() + .setPolicy(regionPolicyManager) + .setWorkMembers(countWorkMembers(teamMemberTargets)) + .setFinishMembers(teamBillMemberTargets.size()) + .setMemberSalary(sumMemberSalary(teamBillMemberTargets)) + .setOwnSalary(ownSalary(teamBillMemberTargets)) + .setTotalSalary(ownTotalSalary(teamBillMemberTargets)); -// teamBillSettleListener.processBillTest(1984239048869130242L); + 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 teamMemberTargets) { + return CollectionUtils.isNotEmpty(teamMemberTargets) ? teamMemberTargets.size() : 0; + } + + private BigDecimal sumMemberSalary(List teamBillMemberTargets) { + return teamBillMemberTargets.stream().map(TeamBillMemberTarget::getMemberSalary) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .setScale(2, RoundingMode.DOWN); + } + + private BigDecimal ownSalary(List teamBillMemberTargets) { + return teamBillMemberTargets.stream().map(TeamBillMemberTarget::getOwnSalary) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .setScale(2, RoundingMode.DOWN); + } + + private BigDecimal ownTotalSalary(List teamBillMemberTargets) { + return teamBillMemberTargets.stream().map(TeamBillMemberTarget::getTotalSalary) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .setScale(2, RoundingMode.DOWN); } @Test