diff --git a/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/team/TeamBdRestController.java b/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/team/TeamBdRestController.java index 40f11bb0..73a39d94 100644 --- a/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/team/TeamBdRestController.java +++ b/rc-service/rc-service-other/other-adapter/src/main/java/com/red/circle/other/adapter/app/team/TeamBdRestController.java @@ -280,6 +280,21 @@ public class TeamBdRestController extends BaseController { return teamBdHistoryService.queryBdHistory(cmd); } + /** + * 查询BD历史记录详情(More页面) + * + * @param cmd 查询命令 + * @return BD历史记录详情 + * @eo.name 查询BD历史记录详情 + * @eo.url /history/more + * @eo.method get + * @eo.request-type formdata + */ + @GetMapping("/history/more") + public BdHistoryMoreCO queryBdHistoryMore(@Validated BdHistoryMoreQryCmd cmd) { + return teamBdHistoryService.queryBdHistoryMore(cmd); + } + /** * 查询BD Leader历史记录 * @@ -295,5 +310,20 @@ public class TeamBdRestController extends BaseController { return teamBdHistoryService.queryBdLeaderHistory(cmd); } + /** + * 查询BD Leader历史记录详情(More页面) + * + * @param cmd 查询命令 + * @return BD Leader历史记录详情 + * @eo.name 查询BD Leader历史记录详情 + * @eo.url /leader/history/more + * @eo.method get + * @eo.request-type formdata + */ + @GetMapping("/leader/history/more") + public BdLeaderHistoryMoreCO queryBdLeaderHistoryMore(@Validated BdLeaderHistoryMoreQryCmd cmd) { + return teamBdHistoryService.queryBdLeaderHistoryMore(cmd); + } + } diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/team/TeamBdHistoryServiceImpl.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/team/TeamBdHistoryServiceImpl.java index 55836381..cdb7bc33 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/team/TeamBdHistoryServiceImpl.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/service/team/TeamBdHistoryServiceImpl.java @@ -1,10 +1,14 @@ package com.red.circle.other.app.service.team; import com.red.circle.other.app.dto.clientobject.team.*; +import com.red.circle.other.app.dto.cmd.team.BdHistoryMoreQryCmd; import com.red.circle.other.app.dto.cmd.team.BdHistoryQryCmd; +import com.red.circle.other.app.dto.cmd.team.BdLeaderHistoryMoreQryCmd; import com.red.circle.other.app.dto.cmd.team.BdLeaderHistoryQryCmd; import com.red.circle.other.infra.database.mongo.entity.bd.BdLeaderSalarySettlementRecord; import com.red.circle.other.infra.database.mongo.entity.bd.BdSalarySettlementRecord; +import com.red.circle.other.infra.database.mongo.entity.bd.detail.BdLeaderTeamMemberDetail; +import com.red.circle.other.infra.database.mongo.entity.bd.detail.BdTeamMemberDetail; import com.red.circle.other.infra.enums.BdSettlementStatus; import com.red.circle.tool.core.collection.CollectionUtils; import com.red.circle.tool.core.text.StringUtils; @@ -149,6 +153,122 @@ public class TeamBdHistoryServiceImpl implements TeamBdHistoryService { return summary; } + @Override + public BdHistoryMoreCO queryBdHistoryMore(BdHistoryMoreQryCmd cmd) { + Long userId = cmd.getReqUserId(); + String sysOrigin = cmd.getReqSysOrigin().getOrigin(); + Integer billBelong = cmd.getBillBelong(); + + // 构建查询条件 + Query query = new Query(); + query.addCriteria(Criteria.where("bdUserId").is(userId)); + query.addCriteria(Criteria.where("sysOrigin").is(sysOrigin)); + query.addCriteria(Criteria.where("billBelong").is(billBelong)); + + // 查询结算记录 + BdSalarySettlementRecord record = mongoTemplate.findOne( + query, BdSalarySettlementRecord.class); + + // 构建返回结果 + BdHistoryMoreCO result = new BdHistoryMoreCO(); + result.setPeriod(formatPeriod(billBelong)); + + if (record == null) { + result.setTeamTotalRecharge(BigDecimal.ZERO); + result.setTeamTotalSalary(BigDecimal.ZERO); + result.setMemberDetails(new ArrayList<>()); + return result; + } + + // 设置汇总数据 + result.setTeamTotalRecharge(record.getTeamRechargeAmount() != null ? + record.getTeamRechargeAmount() : BigDecimal.ZERO); + result.setTeamTotalSalary(record.getTeamSalaryAmount() != null ? + record.getTeamSalaryAmount() : BigDecimal.ZERO); + + // 转换成员明细 + List memberDetails = new ArrayList<>(); + if (!CollectionUtils.isEmpty(record.getMemberDetails())) { + memberDetails = record.getMemberDetails().stream() + .map(this::convertToBdTeamMemberDetailCO) + .toList(); + } + result.setMemberDetails(memberDetails); + + return result; + } + + @Override + public BdLeaderHistoryMoreCO queryBdLeaderHistoryMore(BdLeaderHistoryMoreQryCmd cmd) { + Long userId = cmd.getReqUserId(); + String sysOrigin = cmd.getReqSysOrigin().getOrigin(); + Integer billBelong = cmd.getBillBelong(); + + // 构建查询条件 + Query query = new Query(); + query.addCriteria(Criteria.where("bdLeaderUserId").is(userId)); + query.addCriteria(Criteria.where("sysOrigin").is(sysOrigin)); + query.addCriteria(Criteria.where("billBelong").is(billBelong)); + + // 查询结算记录 + BdLeaderSalarySettlementRecord record = mongoTemplate.findOne( + query, BdLeaderSalarySettlementRecord.class); + + // 构建返回结果 + BdLeaderHistoryMoreCO result = new BdLeaderHistoryMoreCO(); + result.setPeriod(formatPeriod(billBelong)); + + if (record == null) { + result.setTeamSalary(BigDecimal.ZERO); + result.setBdNumber(0); + result.setMemberDetails(new ArrayList<>()); + return result; + } + + // 设置汇总数据 + result.setTeamSalary(record.getTeamSalaryAmount() != null ? + record.getTeamSalaryAmount() : BigDecimal.ZERO); + result.setBdNumber(record.getBdNumber() != null ? record.getBdNumber() : 0); + + // 转换成员明细 + List memberDetails = new ArrayList<>(); + if (!CollectionUtils.isEmpty(record.getMemberDetails())) { + memberDetails = record.getMemberDetails().stream() + .map(this::convertToBdLeaderTeamMemberDetailCO) + .toList(); + } + result.setMemberDetails(memberDetails); + + return result; + } + + /** + * 转换BD团队成员明细 + */ + private BdTeamMemberDetailCO convertToBdTeamMemberDetailCO(BdTeamMemberDetail detail) { + BdTeamMemberDetailCO co = new BdTeamMemberDetailCO(); + co.setUserId(detail.getUserId()); + co.setUserName(detail.getUserName()); + co.setUserAvatar(detail.getUserAvatar()); + co.setSalary(detail.getSalary() != null ? detail.getSalary() : BigDecimal.ZERO); + co.setRecharge(detail.getRecharge() != null ? detail.getRecharge() : BigDecimal.ZERO); + co.setHostCount(detail.getHostCount() != null ? detail.getHostCount() : 0); + return co; + } + + /** + * 转换BD Leader团队成员明细 + */ + private BdLeaderTeamMemberDetailCO convertToBdLeaderTeamMemberDetailCO(BdLeaderTeamMemberDetail detail) { + BdLeaderTeamMemberDetailCO co = new BdLeaderTeamMemberDetailCO(); + co.setBdUserId(detail.getBdUserId()); + co.setBdUserName(detail.getBdUserName()); + co.setBdUserAvatar(detail.getBdUserAvatar()); + co.setSalary(detail.getSalary() != null ? detail.getSalary() : BigDecimal.ZERO); + co.setAgencyCount(detail.getAgencyCount() != null ? detail.getAgencyCount() : 0); + return co; + } + /** * 转换BD结算记录为DTO */ diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdHistoryMoreCO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdHistoryMoreCO.java new file mode 100644 index 00000000..489c8037 --- /dev/null +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdHistoryMoreCO.java @@ -0,0 +1,35 @@ +package com.red.circle.other.app.dto.clientobject.team; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.List; + +/** + * BD历史记录详情 + */ +@Data +@Accessors(chain = true) +public class BdHistoryMoreCO { + + /** + * 结算周期(格式:2025.10.01-2025.10.15) + */ + private String period; + + /** + * 团队总充值(美元) + */ + private BigDecimal teamTotalRecharge; + + /** + * 团队总工资(美元) + */ + private BigDecimal teamTotalSalary; + + /** + * 团队成员明细列表 + */ + private List memberDetails; +} diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdLeaderHistoryMoreCO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdLeaderHistoryMoreCO.java new file mode 100644 index 00000000..9cd97ba3 --- /dev/null +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdLeaderHistoryMoreCO.java @@ -0,0 +1,35 @@ +package com.red.circle.other.app.dto.clientobject.team; + +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; +import java.util.List; + +/** + * BD Leader历史记录详情 + */ +@Data +@Accessors(chain = true) +public class BdLeaderHistoryMoreCO { + + /** + * 结算周期(格式:2025.10.01-2025.10.15) + */ + private String period; + + /** + * 团队工资总和(美元) + */ + private BigDecimal teamSalary; + + /** + * BD 数量 + */ + private Integer bdNumber; + + /** + * BD 成员明细列表 + */ + private List memberDetails; +} diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdLeaderTeamMemberDetailCO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdLeaderTeamMemberDetailCO.java new file mode 100644 index 00000000..c3d00cbf --- /dev/null +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdLeaderTeamMemberDetailCO.java @@ -0,0 +1,42 @@ +package com.red.circle.other.app.dto.clientobject.team; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +/** + * BD Leader团队成员明细 + */ +@Data +@Accessors(chain = true) +public class BdLeaderTeamMemberDetailCO { + + /** + * BD 用户 ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long bdUserId; + + /** + * BD 用户名称 + */ + private String bdUserName; + + /** + * BD 用户头像 + */ + private String bdUserAvatar; + + /** + * 工资金额(美元) + */ + private BigDecimal salary; + + /** + * Agency 数量 + */ + private Integer agencyCount; +} diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdTeamMemberDetailCO.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdTeamMemberDetailCO.java new file mode 100644 index 00000000..b3e6141b --- /dev/null +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/clientobject/team/BdTeamMemberDetailCO.java @@ -0,0 +1,47 @@ +package com.red.circle.other.app.dto.clientobject.team; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; +import lombok.experimental.Accessors; + +import java.math.BigDecimal; + +/** + * BD团队成员明细 + */ +@Data +@Accessors(chain = true) +public class BdTeamMemberDetailCO { + + /** + * 用户 ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long userId; + + /** + * 用户名称 + */ + private String userName; + + /** + * 用户头像 + */ + private String userAvatar; + + /** + * 工资金额(美元) + */ + private BigDecimal salary; + + /** + * 充值金额(美元) + */ + private BigDecimal recharge; + + /** + * Host 数量 + */ + private Integer hostCount; +} diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/cmd/team/BdHistoryMoreQryCmd.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/cmd/team/BdHistoryMoreQryCmd.java new file mode 100644 index 00000000..d6daf9bf --- /dev/null +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/cmd/team/BdHistoryMoreQryCmd.java @@ -0,0 +1,20 @@ +package com.red.circle.other.app.dto.cmd.team; + +import com.red.circle.common.business.dto.cmd.AppExtCommand; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * BD历史记录详情查询命令 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class BdHistoryMoreQryCmd extends AppExtCommand { + + /** + * 结算周期(格式:202501 表示2025年1月上半月,202502 表示2025年1月下半月) + */ + @NotNull(message = "结算周期不能为空") + private Integer billBelong; +} diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/cmd/team/BdLeaderHistoryMoreQryCmd.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/cmd/team/BdLeaderHistoryMoreQryCmd.java new file mode 100644 index 00000000..255ae0c0 --- /dev/null +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/dto/cmd/team/BdLeaderHistoryMoreQryCmd.java @@ -0,0 +1,20 @@ +package com.red.circle.other.app.dto.cmd.team; + +import com.red.circle.common.business.dto.cmd.AppExtCommand; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * BD Leader历史记录详情查询命令 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class BdLeaderHistoryMoreQryCmd extends AppExtCommand { + + /** + * 结算周期(格式:202501 表示2025年1月上半月,202502 表示2025年1月下半月) + */ + @NotNull(message = "结算周期不能为空") + private Integer billBelong; +} diff --git a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/team/TeamBdHistoryService.java b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/team/TeamBdHistoryService.java index b2ee369e..d3893db3 100644 --- a/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/team/TeamBdHistoryService.java +++ b/rc-service/rc-service-other/other-client/src/main/java/com/red/circle/other/app/service/team/TeamBdHistoryService.java @@ -1,8 +1,12 @@ package com.red.circle.other.app.service.team; +import com.red.circle.other.app.dto.clientobject.team.BdHistoryMoreCO; import com.red.circle.other.app.dto.clientobject.team.BdHistorySummaryCO; +import com.red.circle.other.app.dto.clientobject.team.BdLeaderHistoryMoreCO; import com.red.circle.other.app.dto.clientobject.team.BdLeaderHistorySummaryCO; +import com.red.circle.other.app.dto.cmd.team.BdHistoryMoreQryCmd; import com.red.circle.other.app.dto.cmd.team.BdHistoryQryCmd; +import com.red.circle.other.app.dto.cmd.team.BdLeaderHistoryMoreQryCmd; import com.red.circle.other.app.dto.cmd.team.BdLeaderHistoryQryCmd; /** @@ -19,4 +23,14 @@ public interface TeamBdHistoryService { * 查询BD Leader历史记录 */ BdLeaderHistorySummaryCO queryBdLeaderHistory(BdLeaderHistoryQryCmd cmd); + + /** + * 查询BD历史记录详情(More页面) + */ + BdHistoryMoreCO queryBdHistoryMore(BdHistoryMoreQryCmd cmd); + + /** + * 查询BD Leader历史记录详情(More页面) + */ + BdLeaderHistoryMoreCO queryBdLeaderHistoryMore(BdLeaderHistoryMoreQryCmd cmd); }