结算天数问题修复

This commit is contained in:
tianfeng 2025-11-01 01:32:39 +08:00
parent 03a75e40b2
commit 50631033ae
2 changed files with 48 additions and 7 deletions

View File

@ -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++;
}
}

View File

@ -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<TeamBillMemberTarget> 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<TeamMemberTarget> teamMemberTargets) {
return CollectionUtils.isNotEmpty(teamMemberTargets) ? teamMemberTargets.size() : 0;
}
private BigDecimal sumMemberSalary(List<TeamBillMemberTarget> teamBillMemberTargets) {
return teamBillMemberTargets.stream().map(TeamBillMemberTarget::getMemberSalary)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(2, RoundingMode.DOWN);
}
private BigDecimal ownSalary(List<TeamBillMemberTarget> teamBillMemberTargets) {
return teamBillMemberTargets.stream().map(TeamBillMemberTarget::getOwnSalary)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(2, RoundingMode.DOWN);
}
private BigDecimal ownTotalSalary(List<TeamBillMemberTarget> teamBillMemberTargets) {
return teamBillMemberTargets.stream().map(TeamBillMemberTarget::getTotalSalary)
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(2, RoundingMode.DOWN);
}
@Test