194 lines
7.6 KiB
Java
194 lines
7.6 KiB
Java
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<String> 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<TeamMemberTarget> teamMemberTargets = getTeamMemberTargets(teamBillCycle);
|
|
|
|
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 List<TeamMemberTarget> getTeamMemberTargets(TeamBillCycle teamBillCycle) {
|
|
Integer billBelong = teamBillCycle.getBillBelong();
|
|
Integer batchNumber = TeamBillCycleUtils.extractBatch(billBelong);
|
|
List<TeamMemberTarget> 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<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
|
|
public void weeklyRewardsSent() {
|
|
weeklyRewardsSentManager.sendLastWeekStarV1(SysOriginPlatformEnum.LIKEI);
|
|
}
|
|
|
|
@Test
|
|
public void weeklyKingQueenSent() {
|
|
weeklyRewardsSentManager.sendLastWeekKingQueen(SysOriginPlatformEnum.LIKEI);
|
|
}
|
|
|
|
}
|