From 3a985c186965c4e315fdd6e8b834246f9cb7633a Mon Sep 17 00:00:00 2001 From: hokli <2629910752@qq.com> Date: Thu, 16 Oct 2025 19:14:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=9F=E8=80=B3=E5=85=B6=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E8=96=AA=E8=B5=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../accompany/common/utils/DateTimeUtil.java | 9 ++ .../payment/mapper/ChargeRecordMapperMgr.java | 3 + .../payment/service/ChargeRecordService.java | 12 ++ .../mapper/ChargeRecordMapperMgr.xml | 14 ++ .../vo/guildpolicy/GuildPolicy2AgencyVo.java | 22 +++ .../vo/guildpolicy/GuildPolicy2MemberVo.java | 8 + ...ldPolicy2Vo.java => GuildPolicy2MyVo.java} | 11 +- .../vo/guildpolicy/GuildPolicy2SalaryVo.java | 39 +++++ .../GuildDiamondWagePolicy2Service.java | 27 +++- .../guildpolicy2/GuildPolicy2Service.java | 144 ++++++++++++++---- .../guildpolicy/GuildPolicy2Controller.java | 16 +- 11 files changed, 263 insertions(+), 42 deletions(-) create mode 100644 accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2AgencyVo.java rename accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/{GuildPolicy2Vo.java => GuildPolicy2MyVo.java} (71%) create mode 100644 accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2SalaryVo.java diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/common/utils/DateTimeUtil.java b/accompany-base/accompany-core/src/main/java/com/accompany/common/utils/DateTimeUtil.java index ef804a44a..a7c01c398 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/common/utils/DateTimeUtil.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/common/utils/DateTimeUtil.java @@ -1148,4 +1148,13 @@ public class DateTimeUtil { return Date.from(eastEightZonedDateTime.toInstant()); } + public static Date convertToEastEightZone(ZonedDateTime originalDate) { + // 2. 转换为东八区时间 + ZonedDateTime eastEightZonedDateTime = originalDate + .withZoneSameInstant(ZoneId.of("Asia/Shanghai")); + + // 3. 返回Date对象 + return Date.from(eastEightZonedDateTime.toInstant()); + } + } diff --git a/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/mapper/ChargeRecordMapperMgr.java b/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/mapper/ChargeRecordMapperMgr.java index cd3ebc61c..098f98134 100644 --- a/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/mapper/ChargeRecordMapperMgr.java +++ b/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/mapper/ChargeRecordMapperMgr.java @@ -82,4 +82,7 @@ public interface ChargeRecordMapperMgr { @Param("startTime") Date startTime, @Param("endTime") Date endTime); List getAllChargeUserAmount(@Param("list") List uids, @Param("startTime") Date startTime, @Param("endTime") Date endTime); + + List getRefundGroupUidDateMap(@Param("uids") List uids, @Param("startTime") Date startTime, + @Param("endTime") Date endTime); } diff --git a/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/service/ChargeRecordService.java b/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/service/ChargeRecordService.java index e643524d5..d825bd9cb 100644 --- a/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/service/ChargeRecordService.java +++ b/accompany-base/accompany-payment/accompany-payment-service/src/main/java/com/accompany/payment/service/ChargeRecordService.java @@ -19,7 +19,11 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; @Service public class ChargeRecordService extends BaseService { @@ -177,4 +181,12 @@ public class ChargeRecordService extends BaseService { public ChargeRecordMapper getChargeRecordMapper() { return chargeRecordMapper; } + + public Map getRefundGroupUidDateMap(List uids, Date startTime, Date endTime) { + List refundGroupUidDateMap = chargeRecordMapperMgr.getRefundGroupUidDateMap(uids, startTime, endTime); + if (CollectionUtils.isEmpty(refundGroupUidDateMap)) { + return new HashMap<>(); + } + return refundGroupUidDateMap.stream().collect(Collectors.toMap(ChargeRecord::getUid, Function.identity())); + } } diff --git a/accompany-base/accompany-payment/accompany-payment-service/src/main/resources/mapper/ChargeRecordMapperMgr.xml b/accompany-base/accompany-payment/accompany-payment-service/src/main/resources/mapper/ChargeRecordMapperMgr.xml index fafdbf29b..4e1d255d2 100644 --- a/accompany-base/accompany-payment/accompany-payment-service/src/main/resources/mapper/ChargeRecordMapperMgr.xml +++ b/accompany-base/accompany-payment/accompany-payment-service/src/main/resources/mapper/ChargeRecordMapperMgr.xml @@ -404,4 +404,18 @@ group by uid + + \ No newline at end of file diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2AgencyVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2AgencyVo.java new file mode 100644 index 000000000..67334df3a --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2AgencyVo.java @@ -0,0 +1,22 @@ +package com.accompany.business.vo.guildpolicy; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +@Data +public class GuildPolicy2AgencyVo { + @ApiModelProperty("周期开始日期yyyy-MM-dd") + private String cycleDate; + + @ApiModelProperty("钻石数量") + private BigDecimal diamondNum = BigDecimal.ZERO; + + @ApiModelProperty("成员数据") + private List memberData = new ArrayList<>(); + + private GuildPolicy2SalaryVo guildSalary = new GuildPolicy2SalaryVo(); +} diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MemberVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MemberVo.java index 18ee9aa6e..2bd20323c 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MemberVo.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MemberVo.java @@ -14,4 +14,12 @@ public class GuildPolicy2MemberVo extends SimpleUserVo { private BigDecimal diamondNum; @ApiModelProperty("有效天数") private Integer micDay; + @ApiModelProperty("钻石薪资") + private BigDecimal diamondSalary = BigDecimal.ZERO; + @ApiModelProperty("时长薪资") + private BigDecimal micSalary = BigDecimal.ZERO; + @ApiModelProperty("公会长薪资") + private BigDecimal ownerSalary = BigDecimal.ZERO; + @ApiModelProperty("问题薪资") + private BigDecimal issueSalary = BigDecimal.ZERO; } diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2Vo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MyVo.java similarity index 71% rename from accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2Vo.java rename to accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MyVo.java index 5cccf5b56..eccfa26da 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2Vo.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2MyVo.java @@ -10,23 +10,20 @@ import java.util.List; @ApiModel @Data -public class GuildPolicy2Vo { +public class GuildPolicy2MyVo { @ApiModelProperty("周期开始日期yyyy-MM-dd") private String cycleDate; @ApiModelProperty("钻石数量") private BigDecimal diamondNum = BigDecimal.ZERO; - @ApiModelProperty("公会钻石数量") - private BigDecimal guildDiamondNum = BigDecimal.ZERO; - @ApiModelProperty("上麦有效天数") private Integer micDay = 0; - @ApiModelProperty("成员数据") - private List memberData = new ArrayList<>(); - @ApiModelProperty("我的数据") private List myData = new ArrayList<>(); + @ApiModelProperty("我的薪资") + private GuildPolicy2SalaryVo mySalary; + } diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2SalaryVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2SalaryVo.java new file mode 100644 index 000000000..0a4f47bf2 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildPolicy2SalaryVo.java @@ -0,0 +1,39 @@ +package com.accompany.business.vo.guildpolicy; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@ApiModel +@Data +public class GuildPolicy2SalaryVo { + @ApiModelProperty("钻石薪资") + private BigDecimal diamondSalary = BigDecimal.ZERO; + @ApiModelProperty("时长薪资") + private BigDecimal micSalary = BigDecimal.ZERO; + @ApiModelProperty("公会长薪资") + private BigDecimal ownerSalary = BigDecimal.ZERO; + @ApiModelProperty("问题薪资") + private BigDecimal issueSalary = BigDecimal.ZERO; + + @ApiModelProperty("钻石数量") + private BigDecimal diamondNum = BigDecimal.ZERO; + @ApiModelProperty("有效天数") + private Integer micDay = 0; + + + @ApiModelProperty("当前档位流水开始值") + private BigDecimal curLevelDiamondNum = BigDecimal.ZERO; + @ApiModelProperty("当前档位流水开始值描述") + private String curLevelName = ""; + @ApiModelProperty("当前档位在麦时长达标值") + private Integer curLevelMicDay = 0; + @ApiModelProperty("下一档开始值") + private BigDecimal nextLevelDiamondNum = BigDecimal.ZERO; + @ApiModelProperty("下一档开始值描述") + private String nextLevelName = ""; + + +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondWagePolicy2Service.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondWagePolicy2Service.java index e4b099dfc..976c72de5 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondWagePolicy2Service.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildDiamondWagePolicy2Service.java @@ -2,6 +2,7 @@ package com.accompany.business.service.guildpolicy2; import com.accompany.business.model.guildpolicy2.GuildDiamondWagePolicy2; import com.accompany.business.mybatismapper.guildpolicy2.GuildDiamondWagePolicy2Mapper; +import com.accompany.business.vo.guildpolicy.GuildPolicy2SalaryVo; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; @@ -77,11 +78,35 @@ public class GuildDiamondWagePolicy2Service extends ServiceImpl treeMap, BigDecimal diamondNum, Integer micDay) { + GuildPolicy2SalaryVo salaryVo = new GuildPolicy2SalaryVo(); + salaryVo.setDiamondNum(diamondNum); + salaryVo.setMicDay(micDay); + + Map.Entry curDiamondLevel = treeMap.headMap(diamondNum, true).lastEntry(); + Map.Entry nextDiamondLevel = treeMap.tailMap(diamondNum, false).firstEntry(); + + GuildDiamondWagePolicy2 curLevel = curDiamondLevel.getValue(); + salaryVo.setDiamondSalary(curLevel.getAnchorDiamondSalary()); + salaryVo.setMicSalary(micDay < curLevel.getMicDay() ? BigDecimal.ZERO : curLevel.getAnchorMicSalary()); + salaryVo.setOwnerSalary(curLevel.getOwnerSalary()); + salaryVo.setCurLevelName(curLevel.getLevel()); + salaryVo.setCurLevelDiamondNum(curLevel.getDiamondNum()); + salaryVo.setCurLevelMicDay(curLevel.getMicDay()); + + if (nextDiamondLevel != null) { + GuildDiamondWagePolicy2 nextLevel = nextDiamondLevel.getValue(); + salaryVo.setNextLevelDiamondNum(nextLevel.getDiamondNum()); + salaryVo.setNextLevelName(nextLevel.getLevel()); + } + + return salaryVo; + } + } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java index e7fb20002..fc812112d 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildPolicy2Service.java @@ -11,13 +11,11 @@ import com.accompany.business.service.guild.GuildAuthService; import com.accompany.business.service.guild.GuildMemberService; import com.accompany.business.service.guild.GuildMemberWeekLevelRewardV2Service; import com.accompany.business.service.purse.UserPurseService; -import com.accompany.business.service.room.RoomMicService; import com.accompany.business.service.user.UsersService; import com.accompany.business.util.CycleTimeUtil; import com.accompany.business.util.FullMonthCycleTimeUtil; import com.accompany.business.vo.guild.CycleDateVo; -import com.accompany.business.vo.guildpolicy.GuildPolicy2PersonalVo; -import com.accompany.business.vo.guildpolicy.GuildPolicy2Vo; +import com.accompany.business.vo.guildpolicy.*; import com.accompany.common.constant.Constant; import com.accompany.common.result.BusiResult; import com.accompany.common.status.BusiStatus; @@ -26,6 +24,8 @@ import com.accompany.core.enumeration.BillObjTypeEnum; import com.accompany.core.enumeration.PartitionEnum; import com.accompany.core.exception.ServiceException; import com.accompany.core.model.Users; +import com.accompany.payment.model.ChargeRecord; +import com.accompany.payment.service.ChargeRecordService; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -54,8 +54,6 @@ public class GuildPolicy2Service { @Autowired private GuildAuthService guildAuthService; @Autowired - private RoomMicService roomMicService; - @Autowired private GuildMicStatisticsPolicy2Service guildMicStatisticsPolicy2Service; @Autowired private UsersService usersService; @@ -73,10 +71,13 @@ public class GuildPolicy2Service { private GuildDiamondWagePolicy2Service guildDiamondWagePolicy2Service; @Autowired private GuildDiamondStatisticsPolicy2SettleService guildDiamondStatisticsPolicy2SettleService; - public BusiResult getGuildPolicy2(Long uid, String cycleBeginDate) { - GuildPolicy2Vo guildPolicy2Vo = new GuildPolicy2Vo(); - guildPolicy2Vo.setCycleDate(cycleBeginDate); + @Autowired + private ChargeRecordService chargeRecordService; + private static final String MIN_CYCLE_DATE = "2025-09-01"; + private static final BigDecimal ISSUE_SALARY_RATE = BigDecimal.valueOf(1.2); + + private GuildMember validateAndGetGuildMember(Long uid) { GuildMember guildMember = guildMemberService.getVaildGuildMemberByUid(uid); if (null == guildMember){ throw new ServiceException(BusiStatus.FAMILY_NOT_EXIST); @@ -87,30 +88,48 @@ public class GuildPolicy2Service { throw new ServiceException(BusiStatus.FAMILY_PERMISSION_DENIED); } - Long guildMemberId = guildMember.getId(); - - guildPolicy2Vo.setDiamondNum(guildDiamondStatisticsPolicy2Service.getTotalDiamondInCycleMember(cycleBeginDate, guildMemberId)); - - List myDiamondData = guildDiamondStatisticsPolicy2Service.listPersonalDiamondData(cycleBeginDate, guildMemberId); - List myMicData = guildMicStatisticsPolicy2Service.listPersonalMicData(cycleBeginDate, guildMemberId); - - List myData = mergeMyDataLists(myDiamondData, myMicData); - - if (CollectionUtils.isNotEmpty(myData)) { - guildPolicy2Vo.setMicDay(myData.stream().collect(Collectors.summingInt(GuildPolicy2PersonalVo::getMicDay))); - } - - fillAllDayOfMonth(guildPolicy2Vo, myData, cycleBeginDate, partitionEnum); - - if (guildAuthService.hasAuthByRoleType(partitionEnum.getClanMode(), guildMember.getRoleType(), GuildConstant.AuthCode.GUILD_POLICY2_MEMBER)) { - guildPolicy2Vo.setGuildDiamondNum(guildDiamondStatisticsPolicy2Service.getTotalDiamondInCycle(cycleBeginDate, guildMember.getGuildId())); - guildPolicy2Vo.setMemberData(guildDiamondStatisticsPolicy2Service.listMemberData(cycleBeginDate, guildMember.getGuildId())); - } - - return BusiResult.success(guildPolicy2Vo); + return guildMember; } - public List mergeMyDataLists(List list1, List list2) { + private boolean isCurrentOrPastCycle(String cycleBeginDate, String curCycleBeginDate) { + return cycleBeginDate.equals(curCycleBeginDate) || cycleBeginDate.compareTo(MIN_CYCLE_DATE) < 0; + } + + public BusiResult getGuildPolicy2(Long uid, String cycleBeginDate) { + GuildPolicy2MyVo guildPolicy2MyVo = new GuildPolicy2MyVo(); + guildPolicy2MyVo.setCycleDate(cycleBeginDate); + + GuildMember guildMember = this.validateAndGetGuildMember(uid); + + PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(guildMember.getPartitionId()); + Long guildMemberId = guildMember.getId(); + + String curCycleBeginDate = FullMonthCycleTimeUtil.getCycleDate(DateTimeUtil.convertWithZoneId(new Date(), partitionEnum.getZoneId())); + + List myMicData = guildMicStatisticsPolicy2Service.listPersonalMicData(cycleBeginDate, guildMemberId); + + if (isCurrentOrPastCycle(cycleBeginDate, curCycleBeginDate)) {// 当前周期 + guildPolicy2MyVo.setDiamondNum(guildDiamondStatisticsPolicy2Service.getTotalDiamondInCycleMember(cycleBeginDate, guildMemberId)); + List myDiamondData = guildDiamondStatisticsPolicy2Service.listPersonalDiamondData(cycleBeginDate, guildMemberId); + List myData = this.mergeMyDataLists(myDiamondData, myMicData); + + if (CollectionUtils.isNotEmpty(myData)) { + guildPolicy2MyVo.setMicDay(myData.stream().collect(Collectors.summingInt(GuildPolicy2PersonalVo::getMicDay))); + } + //填满整月天数 + this.fillAllDayOfMonth(guildPolicy2MyVo, myData, cycleBeginDate, partitionEnum); + + TreeMap diamondWageMap = guildDiamondWagePolicy2Service.getDiamondWageMap(partitionEnum.getId()); + GuildPolicy2SalaryVo salaryVo = guildDiamondWagePolicy2Service.getSalaryVo(diamondWageMap, guildPolicy2MyVo.getDiamondNum(), guildPolicy2MyVo.getMicDay()); + guildPolicy2MyVo.setMySalary(salaryVo); + } else { + //to-do + } + return BusiResult.success(guildPolicy2MyVo); + } + + //合并流水与在麦天数数据 + private List mergeMyDataLists(List list1, List list2) { // 处理空列表情况 if (list1 == null || list1.isEmpty()) return list2 != null ? list2 : new ArrayList<>(); if (list2 == null || list2.isEmpty()) return list1; @@ -135,7 +154,7 @@ public class GuildPolicy2Service { return new ArrayList<>(mergedMap.values()); } - private void fillAllDayOfMonth(GuildPolicy2Vo guildPolicy2Vo, List myData, String cycleBeginDate, PartitionEnum partitionEnum) { + private void fillAllDayOfMonth(GuildPolicy2MyVo guildPolicy2MyVo, List myData, String cycleBeginDate, PartitionEnum partitionEnum) { List resultMyDate = new ArrayList<>(); ZonedDateTime nowZoneDateTime = DateTimeUtil.convertWithZoneId(new Date(), partitionEnum.getZoneId()); Map realMap = new HashMap<>(); @@ -160,7 +179,68 @@ public class GuildPolicy2Service { resultMyDate.add(guildPolicy2PersonalVo); monthEnd = DateUtil.offsetDay(monthEnd, -1); } - guildPolicy2Vo.setMyData(resultMyDate); + guildPolicy2MyVo.setMyData(resultMyDate); + } + + public BusiResult getGuildMemberPolicy2(Long uid, String cycleBeginDate) { + GuildPolicy2AgencyVo guildPolicy2AgencyVo = new GuildPolicy2AgencyVo(); + guildPolicy2AgencyVo.setCycleDate(cycleBeginDate); + + GuildMember guildMember = this.validateAndGetGuildMember(uid); + + PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(guildMember.getPartitionId()); + if (!guildAuthService.hasAuthByRoleType(partitionEnum.getClanMode(), guildMember.getRoleType(), + GuildConstant.AuthCode.GUILD_POLICY2_MEMBER)){ + return BusiResult.success(guildPolicy2AgencyVo); + } + + String curCycleBeginDate = FullMonthCycleTimeUtil.getCycleDate(DateTimeUtil.convertWithZoneId(new Date(), partitionEnum.getZoneId())); + + if (isCurrentOrPastCycle(cycleBeginDate, curCycleBeginDate)) {// 当前周期 + TreeMap diamondWageMap = guildDiamondWagePolicy2Service.getDiamondWageMap(partitionEnum.getId()); + guildPolicy2AgencyVo.setDiamondNum(guildDiamondStatisticsPolicy2Service.getTotalDiamondInCycle(cycleBeginDate, guildMember.getGuildId())); + List memberData = guildDiamondStatisticsPolicy2Service.listMemberData(cycleBeginDate, guildMember.getGuildId()); + guildPolicy2AgencyVo.setMemberData(memberData); + if (CollectionUtils.isEmpty(memberData)) { + return BusiResult.success(guildPolicy2AgencyVo); + } + + List uids = memberData.stream().map(GuildPolicy2MemberVo::getUid).collect(Collectors.toList()); + + Date cycleBegin = DateUtil.parseDate(cycleBeginDate); + Date cycleEnd = DateUtil.endOfMonth(cycleBegin); + ZonedDateTime cycleBeginDateZoneDate = DateTimeUtil.convertWithZoneId(cycleBegin, partitionEnum.getZoneId()); + ZonedDateTime zoneBeginTime = cycleBeginDateZoneDate.withHour(0).withMinute(0).withSecond(0).withNano(0); + ZonedDateTime cycleEndDateZoneDate = DateTimeUtil.convertWithZoneId(cycleEnd, partitionEnum.getZoneId()); + ZonedDateTime zoneEndTime = cycleEndDateZoneDate.withHour(23).withMinute(59).withSecond(59).withNano(999_999_999); + Date beginOfMonth = DateTimeUtil.convertToEastEightZone(zoneBeginTime); + Date endOfMonth = DateTimeUtil.convertToEastEightZone(zoneEndTime); + + Map refundGroupUidDateMap = chargeRecordService.getRefundGroupUidDateMap(uids, beginOfMonth, endOfMonth); + + memberData.forEach(item -> { + GuildDiamondWagePolicy2 diamondWageVo = guildDiamondWagePolicy2Service.calDiamondWageVo(diamondWageMap, item.getDiamondNum(), item.getMicDay()); + item.setDiamondSalary(item.getDiamondSalary().add(diamondWageVo.getAnchorDiamondSalary())); + item.setMicSalary(item.getMicSalary().add(diamondWageVo.getAnchorMicSalary())); + item.setOwnerSalary(item.getOwnerSalary().add(diamondWageVo.getOwnerSalary())); + ChargeRecord chargeRecord = refundGroupUidDateMap.get(item.getUid()); + if (chargeRecord != null) { + BigDecimal refundAmount = BigDecimal.valueOf(chargeRecord.getAmount() != null ? chargeRecord.getAmount() : 0D) + .divide(BigDecimal.valueOf(100)) + .multiply(ISSUE_SALARY_RATE); + item.setIssueSalary(refundAmount); + } + }); + GuildPolicy2SalaryVo salaryVo = new GuildPolicy2SalaryVo(); + salaryVo.setDiamondSalary(memberData.stream().map(GuildPolicy2MemberVo::getDiamondSalary).reduce(BigDecimal.ZERO, BigDecimal::add)); + salaryVo.setMicSalary(memberData.stream().map(GuildPolicy2MemberVo::getMicSalary).reduce(BigDecimal.ZERO, BigDecimal::add)); + salaryVo.setOwnerSalary(memberData.stream().map(GuildPolicy2MemberVo::getOwnerSalary).reduce(BigDecimal.ZERO, BigDecimal::add)); + salaryVo.setIssueSalary(memberData.stream().map(GuildPolicy2MemberVo::getIssueSalary).reduce(BigDecimal.ZERO, BigDecimal::add)); + guildPolicy2AgencyVo.setGuildSalary(salaryVo); + } else { + //to-do + } + return BusiResult.success(guildPolicy2AgencyVo); } public BusiResult> getCycleDatesV2(Integer partitionId) { diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java index 6528fd73b..d8d39ffce 100644 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/guildpolicy/GuildPolicy2Controller.java @@ -4,7 +4,8 @@ import cn.hutool.core.date.DateUtil; import com.accompany.business.service.guildpolicy2.GuildPolicy2Service; import com.accompany.business.service.room.GuildMemberRoomMicRecordService; import com.accompany.business.vo.guild.CycleDateVo; -import com.accompany.business.vo.guildpolicy.GuildPolicy2Vo; +import com.accompany.business.vo.guildpolicy.GuildPolicy2AgencyVo; +import com.accompany.business.vo.guildpolicy.GuildPolicy2MyVo; import com.accompany.common.annotation.Authorization; import com.accompany.common.result.BusiResult; import com.accompany.core.enumeration.PartitionEnum; @@ -39,10 +40,21 @@ public class GuildPolicy2Controller { }) @Authorization @GetMapping("/incomeStat") - public BusiResult getGuildPolicy2(@RequestHeader(PUB_UID) Long uid, String cycleBeginDate) { + public BusiResult getGuildPolicy2(@RequestHeader(PUB_UID) Long uid, String cycleBeginDate) { return guildPolicy2Service.getGuildPolicy2(uid, cycleBeginDate); } + @ApiOperation(value = "公会成员收入统计", httpMethod = "GET") + @ApiImplicitParams({ + @ApiImplicitParam(name = "cycleBeginDate", value = "周期开始日期yyyy-MM-dd", required = true, dataType = "String", paramType = "query") + }) + @Authorization + @GetMapping("/memberIncomeStat") + public BusiResult getGuildMemberPolicy2(@RequestHeader(PUB_UID) Long uid, String cycleBeginDate) { + return guildPolicy2Service.getGuildMemberPolicy2(uid, cycleBeginDate); + } + + @GetMapping("/cycleDates") public BusiResult> getCycleDates(@RequestHeader(PUB_UID) Long uid) { return guildPolicy2Service.getCycleDates(uid);