import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.red.circle.OtherServiceApplication; import com.red.circle.common.business.core.enums.SysOriginPlatformEnum; 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; import com.red.circle.other.infra.database.mongo.entity.team.team.TeamProfile; import com.red.circle.other.infra.database.mongo.entity.user.region.SysRegionConfig; import com.red.circle.other.infra.database.mongo.service.team.TeamBillCycleUtils; import com.red.circle.other.infra.database.mongo.service.team.team.TeamBillCycleService; import com.red.circle.other.infra.database.mongo.service.team.team.TeamMemberTargetService; 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.team.team.impl.TeamBillCycleServiceImpl; 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; import org.springframework.boot.test.context.SpringBootTest; 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.Arrays; import java.util.List; @SpringBootTest(classes = OtherServiceApplication.class) @RunWith(SpringRunner.class) public class TeamMonthBillTest { @Autowired private TeamBillTask teamBillTask; @Autowired private TeamBillSettleListener teamBillSettleListener; @Autowired private WeeklyRewardsSentManager weeklyRewardsSentManager; @Autowired private TeamBillCycleService teamBillCycleService; @Autowired private TeamBillCycleServiceImpl teamBillCycleServiceImpl; @Autowired private TeamPolicyManagerService teamPolicyManagerService; @Autowired private SysRegionConfigService sysRegionConfigService; @Autowired private TeamProfileService teamProfileService; @Autowired private TeamMemberTargetService teamMemberTargetService; @Test public void testBill() { teamBillCycleServiceImpl.billStatusPayOutTest(); } /** * 更新账单 然很发布消息 */ @Test public void processTeamBill() { teamBillTask.processTeamMonthBillTest(); } /** * 批量团队结算 */ @Test public void processTeamBillSettle() { String json = "['1989278352807731201']"; List teamList = JSON.parseArray(json, String.class); for (String teamId : teamList) { Long id = Long.parseLong(teamId); teamBillSettleListener.processBillTest(id); } } @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 teamMemberTargets = getTeamMemberTargets(teamBillCycle); List 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 List getTeamMemberTargets(TeamBillCycle teamBillCycle) { Integer billBelong = teamBillCycle.getBillBelong(); Integer batchNumber = TeamBillCycleUtils.extractBatch(billBelong); List teamMemberTargets; if (batchNumber != null && batchNumber == 2) { teamMemberTargets = teamMemberTargetService.listByMonthlyBillBelong( teamBillCycle.getTeamId(), TeamBillCycleUtils.extractMonth(billBelong) ); } else { // 上半月结算:直接查询当前批次数据 teamMemberTargets = teamMemberTargetService.listByBillBelong( teamBillCycle.getTeamId(), billBelong ); } return teamMemberTargets; } 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 public void weeklyRewardsSent() { weeklyRewardsSentManager.sendLastWeekStarV1(SysOriginPlatformEnum.LIKEI); } @Test public void weeklyKingQueenSent() { weeklyRewardsSentManager.sendLastWeekKingQueen(SysOriginPlatformEnum.LIKEI); } }