fix: use bill policy for salary catch-up
This commit is contained in:
parent
e8975dca9d
commit
17e4cd69bb
@ -18,6 +18,7 @@ import com.red.circle.mq.business.model.event.team.TeamSalaryPaymentEvent;
|
|||||||
import com.red.circle.mq.rocket.business.streams.TeamSalaryPaymentSink;
|
import com.red.circle.mq.rocket.business.streams.TeamSalaryPaymentSink;
|
||||||
import com.red.circle.other.infra.common.props.PropsSendCommon;
|
import com.red.circle.other.infra.common.props.PropsSendCommon;
|
||||||
import com.red.circle.other.infra.database.mongo.dto.team.TeamBillMemberTarget;
|
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.dto.team.TeamPolicy;
|
import com.red.circle.other.infra.database.mongo.dto.team.TeamPolicy;
|
||||||
import com.red.circle.other.infra.database.mongo.dto.team.TeamSalaryPaymentDetails;
|
import com.red.circle.other.infra.database.mongo.dto.team.TeamSalaryPaymentDetails;
|
||||||
import com.red.circle.other.infra.database.mongo.entity.team.team.TeamBillCycle;
|
import com.red.circle.other.infra.database.mongo.entity.team.team.TeamBillCycle;
|
||||||
@ -150,9 +151,9 @@ public class TeamSalaryPaymentListener implements MessageListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, TeamPolicyManager> regionPolicyMap = teamPolicyManagerService.mapRegionReleaseWithCountry(Set.of(teamProfile.getRegion()));
|
Map<String, TeamPolicyManager> regionPolicyMap = getPaymentPolicyMap(teamProfile, billCycle, event);
|
||||||
if (MapUtil.isEmpty(regionPolicyMap)) {
|
if (MapUtil.isEmpty(regionPolicyMap)) {
|
||||||
// [满足政策的团队工资实时发送]该团队没有区域政策
|
// [满足政策的团队工资实时发送]该团队没有区域政策或账单政策
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -228,11 +229,11 @@ public class TeamSalaryPaymentListener implements MessageListener {
|
|||||||
log.warn("发送团队成员美元工资:{}\n{}\n{}\n{}\n{}\n{}", teamProfile, memberTarget, region, policy, payment, billCycle);
|
log.warn("发送团队成员美元工资:{}\n{}\n{}\n{}\n{}\n{}", teamProfile, memberTarget, region, policy, payment, billCycle);
|
||||||
// 发送团队成员工资
|
// 发送团队成员工资
|
||||||
memberBankBalancePayment(teamProfile, memberTarget.getId(), tmpBillMemberTarget,
|
memberBankBalancePayment(teamProfile, memberTarget.getId(), tmpBillMemberTarget,
|
||||||
region.getMetadata(), policy, payment);
|
region.getMetadata(), policy, payment, billCycle.getId());
|
||||||
|
|
||||||
// 发送团队拥有者(代理)工资
|
// 发送团队拥有者(代理)工资
|
||||||
teamBankBalancePayment(teamProfile, memberTarget.getId(), tmpBillMemberTarget,
|
teamBankBalancePayment(teamProfile, memberTarget.getId(), tmpBillMemberTarget,
|
||||||
region.getMetadata(), policy, payment);
|
region.getMetadata(), policy, payment, billCycle.getId());
|
||||||
} else {
|
} else {
|
||||||
// 辅助:组装钻石工资辅助模型
|
// 辅助:组装钻石工资辅助模型
|
||||||
tmpBillMemberTarget = buildDiamondTmpBillMemberTarget(policy, billTarget);
|
tmpBillMemberTarget = buildDiamondTmpBillMemberTarget(policy, billTarget);
|
||||||
@ -487,18 +488,37 @@ public class TeamSalaryPaymentListener implements MessageListener {
|
|||||||
|
|
||||||
if (Boolean.TRUE.equals(event.getThisMonthFirstDay())) {
|
if (Boolean.TRUE.equals(event.getThisMonthFirstDay())) {
|
||||||
// 如果为1号则自动结算一次上个月工资
|
// 如果为1号则自动结算一次上个月工资
|
||||||
return teamBillCycleService.getTeamBill(teamProfile.getId(), event.getLastMonth());
|
TeamBillCycle legacyMonthBill = teamBillCycleService.getTeamBill(teamProfile.getId(), event.getLastMonth());
|
||||||
|
if (Objects.nonNull(legacyMonthBill)) {
|
||||||
|
return legacyMonthBill;
|
||||||
|
}
|
||||||
|
return teamBillCycleService.getLatestTeamBillByMonth(teamProfile.getId(), event.getLastMonth());
|
||||||
}
|
}
|
||||||
// 结算本月工资
|
// 结算本月工资
|
||||||
return teamBillCycleService.getLatestByTeamId(teamProfile.getId());
|
return teamBillCycleService.getLatestByTeamId(teamProfile.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获得本次发放使用的政策.
|
||||||
|
*/
|
||||||
|
private Map<String, TeamPolicyManager> getPaymentPolicyMap(TeamProfile teamProfile,
|
||||||
|
TeamBillCycle billCycle, TeamSalaryPaymentEvent event) {
|
||||||
|
|
||||||
|
if (Boolean.TRUE.equals(event.getThisMonthFirstDay())) {
|
||||||
|
return Optional.ofNullable(billCycle.getSettleResult())
|
||||||
|
.map(TeamBillSettleResult::getPolicy)
|
||||||
|
.orElseGet(CollectionUtils::newHashMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
return teamPolicyManagerService.mapRegionReleaseWithCountry(Set.of(teamProfile.getRegion()));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送团队拥有者工资到银行账户
|
* 发送团队拥有者工资到银行账户
|
||||||
*/
|
*/
|
||||||
private void teamBankBalancePayment(TeamProfile teamProfile, String memberTargetId,
|
private void teamBankBalancePayment(TeamProfile teamProfile, String memberTargetId,
|
||||||
TeamBillMemberTarget target, Map<String, String> metadata, TeamPolicy policy,
|
TeamBillMemberTarget target, Map<String, String> metadata, TeamPolicy policy,
|
||||||
TeamSalaryPayment payment) {
|
TeamSalaryPayment payment, Long teamBillId) {
|
||||||
|
|
||||||
// 是否已经发送过代理部份工资
|
// 是否已经发送过代理部份工资
|
||||||
if (Boolean.FALSE.equals(
|
if (Boolean.FALSE.equals(
|
||||||
@ -526,7 +546,7 @@ public class TeamSalaryPaymentListener implements MessageListener {
|
|||||||
.setTeamId(teamProfile.getId())
|
.setTeamId(teamProfile.getId())
|
||||||
.setTeamOwnId(teamProfile.getOwnUserId())
|
.setTeamOwnId(teamProfile.getOwnUserId())
|
||||||
.setTeamMemberId(target.getUserId())
|
.setTeamMemberId(target.getUserId())
|
||||||
.setTeamBillId(getBillIdByTeamId(teamProfile))
|
.setTeamBillId(teamBillId)
|
||||||
.setTeamRegionId(teamProfile.getRegion())
|
.setTeamRegionId(teamProfile.getRegion())
|
||||||
.setRemarks(Lists.newArrayList(new TeamSalaryPaymentRemark()
|
.setRemarks(Lists.newArrayList(new TeamSalaryPaymentRemark()
|
||||||
.setRemark("将代理工资放入代理钱包")
|
.setRemark("将代理工资放入代理钱包")
|
||||||
@ -575,7 +595,7 @@ public class TeamSalaryPaymentListener implements MessageListener {
|
|||||||
.setMemberTargetId(memberTargetId)
|
.setMemberTargetId(memberTargetId)
|
||||||
.setTeamOwnId(teamProfile.getOwnUserId())
|
.setTeamOwnId(teamProfile.getOwnUserId())
|
||||||
.setTeamMemberId(target.getUserId())
|
.setTeamMemberId(target.getUserId())
|
||||||
.setTeamBillId(getBillIdByTeamId(teamProfile))
|
.setTeamBillId(teamBillId)
|
||||||
.setTeamRegionId(teamProfile.getRegion())
|
.setTeamRegionId(teamProfile.getRegion())
|
||||||
.setRemarks(Lists.newArrayList(new TeamSalaryPaymentRemark()
|
.setRemarks(Lists.newArrayList(new TeamSalaryPaymentRemark()
|
||||||
.setRemark("本次主播工资已转入代理钱包")
|
.setRemark("本次主播工资已转入代理钱包")
|
||||||
@ -603,7 +623,7 @@ public class TeamSalaryPaymentListener implements MessageListener {
|
|||||||
*/
|
*/
|
||||||
private void memberBankBalancePayment(TeamProfile teamProfile, String memberTargetId,
|
private void memberBankBalancePayment(TeamProfile teamProfile, String memberTargetId,
|
||||||
TeamBillMemberTarget target, Map<String, String> metadata, TeamPolicy policy,
|
TeamBillMemberTarget target, Map<String, String> metadata, TeamPolicy policy,
|
||||||
TeamSalaryPayment payment) {
|
TeamSalaryPayment payment, Long teamBillId) {
|
||||||
|
|
||||||
// 是否已经发送过该成员工资
|
// 是否已经发送过该成员工资
|
||||||
if (Boolean.TRUE.equals(
|
if (Boolean.TRUE.equals(
|
||||||
@ -635,7 +655,7 @@ public class TeamSalaryPaymentListener implements MessageListener {
|
|||||||
.setMemberTargetId(memberTargetId)
|
.setMemberTargetId(memberTargetId)
|
||||||
.setTeamOwnId(teamProfile.getOwnUserId())
|
.setTeamOwnId(teamProfile.getOwnUserId())
|
||||||
.setTeamMemberId(target.getUserId())
|
.setTeamMemberId(target.getUserId())
|
||||||
.setTeamBillId(getBillIdByTeamId(teamProfile))
|
.setTeamBillId(teamBillId)
|
||||||
.setTeamRegionId(teamProfile.getRegion())
|
.setTeamRegionId(teamProfile.getRegion())
|
||||||
.setRemarks(Lists.newArrayList(new TeamSalaryPaymentRemark()
|
.setRemarks(Lists.newArrayList(new TeamSalaryPaymentRemark()
|
||||||
.setRemark("将主播工资发放至主播钱包")
|
.setRemark("将主播工资发放至主播钱包")
|
||||||
@ -726,13 +746,6 @@ public class TeamSalaryPaymentListener implements MessageListener {
|
|||||||
// policy.getLevel(), isPayMember);
|
// policy.getLevel(), isPayMember);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获得账单ID.
|
|
||||||
*/
|
|
||||||
private Long getBillIdByTeamId(TeamProfile teamProfile) {
|
|
||||||
return teamBillCycleService.getLatestBillIdByTeamId(teamProfile.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 基于当前等级获得上一个等级政策.
|
* 基于当前等级获得上一个等级政策.
|
||||||
*
|
*
|
||||||
|
|||||||
@ -87,6 +87,11 @@ public interface TeamBillCycleService {
|
|||||||
*/
|
*/
|
||||||
TeamBillCycle getTeamBill(Long teamId, Integer billBelong);
|
TeamBillCycle getTeamBill(Long teamId, Integer billBelong);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取团队指定月份最新账单,兼容 yyyyMM 与 yyyyMM01/yyyyMM16 账期.
|
||||||
|
*/
|
||||||
|
TeamBillCycle getLatestTeamBillByMonth(Long teamId, Integer yearMonth);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询账单.
|
* 查询账单.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -427,6 +427,20 @@ public class TeamBillCycleServiceImpl implements TeamBillCycleService {
|
|||||||
TeamBillCycle.class);
|
TeamBillCycle.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TeamBillCycle getLatestTeamBillByMonth(Long teamId, Integer yearMonth) {
|
||||||
|
if (Objects.isNull(teamId) || Objects.isNull(yearMonth)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Integer normalizedYearMonth = yearMonth > 999999
|
||||||
|
? Integer.valueOf(yearMonth.toString().substring(0, 6))
|
||||||
|
: yearMonth;
|
||||||
|
return mongoTemplate.findOne(
|
||||||
|
Query.query(getBillBelongCriteria(normalizedYearMonth).and("teamId").is(teamId))
|
||||||
|
.with(Sort.by(Sort.Order.desc("billBelong"), Sort.Order.desc("id"))),
|
||||||
|
TeamBillCycle.class);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<TeamBillCycle> list(TeamBillCycleBackQryCmd query) {
|
public List<TeamBillCycle> list(TeamBillCycleBackQryCmd query) {
|
||||||
Criteria criteria = new Criteria();
|
Criteria criteria = new Criteria();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user