From 1205ba59a3db514bc560f84b6b45ebf072f73787 Mon Sep 17 00:00:00 2001 From: hokli <2629910752@qq.com> Date: Tue, 2 Sep 2025 18:27:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=B8=B8=E4=BB=BB=E5=8A=A1-=E5=85=AC?= =?UTF-8?q?=E4=BC=9A=E6=B4=BB=E5=8A=A8=E5=A5=96=E5=8A=B1=E9=A2=86=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/enumeration/BillDomainTypeEnum.java | 1 + .../core/enumeration/BillObjTypeEnum.java | 2 + .../constant/dailytask/DailyTaskConstant.java | 1 + .../constant/guild/GuildTaskConstant.java | 6 - .../model/guildtask/GuildTaskLevelReward.java | 4 +- .../guildtask/GuildTaskLevelRewardRecord.java | 3 +- .../business/vo/dailytask/DailyTaskVo.java | 3 + .../vo/guild/GuildTaskLevelInfoVo.java | 13 +- .../dailytask/handler/GuildCreateHandler.java | 48 ++-- .../dailytask/handler/GuildMicHandler.java | 37 ++- .../service/guild/GuildMemberService.java | 12 +- .../GuildTaskLevelRewardRecordService.java | 22 ++ .../GuildTaskLevelRewardService.java | 46 +++- .../GuildTaskReachRecordService.java | 9 + .../service/guildtask/GuildTaskService.java | 219 +++++++++++++++++- .../accompany/business/util/RewardUtil.java | 2 +- .../dailytask/GuildTaskController.java | 34 +++ 17 files changed, 429 insertions(+), 33 deletions(-) create mode 100644 accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/GuildTaskController.java diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillDomainTypeEnum.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillDomainTypeEnum.java index 58c850e83..ba4617a3b 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillDomainTypeEnum.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillDomainTypeEnum.java @@ -32,6 +32,7 @@ public enum BillDomainTypeEnum { GAME_USD(25, "游戏薪资"), GUILD_POLICY2(26, "土耳其公会政策2"), DAILY_TASK(27, "日任务奖励"), + GUILD_TASK(28, "公会开业奖励"), ; private int value; diff --git a/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillObjTypeEnum.java b/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillObjTypeEnum.java index a31fb4aad..28c252feb 100644 --- a/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillObjTypeEnum.java +++ b/accompany-base/accompany-core/src/main/java/com/accompany/core/enumeration/BillObjTypeEnum.java @@ -283,6 +283,8 @@ public enum BillObjTypeEnum { OFFICIAL_MIUNS_GUILD_CRYSTAL( 187, "官方扣除公会紫晶", BillTypeEnum.OUT, CurrencyEnum.GUILD_CRYSTAL, BillDomainTypeEnum.GUILD_POLICY2), DAILY_TASK_DIAMOND( 188, "日任务奖励", BillTypeEnum.IN, CurrencyEnum.DIAMOND, BillDomainTypeEnum.DAILY_TASK), DAILY_TASK_GOLD( 189, "日任务奖励钻石", BillTypeEnum.IN, CurrencyEnum.GOLD, BillDomainTypeEnum.DAILY_TASK), + GUILD_TASK_DIAMOND( 190, "公会任务奖励金币", BillTypeEnum.IN, CurrencyEnum.DIAMOND, BillDomainTypeEnum.GUILD_TASK), + GUILD_TASK_GOLD( 191, "公会任务奖励钻石", BillTypeEnum.IN, CurrencyEnum.GOLD, BillDomainTypeEnum.DAILY_TASK), ; BillObjTypeEnum(int value, String desc, BillTypeEnum type, CurrencyEnum currency, BillDomainTypeEnum domain) { diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskConstant.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskConstant.java index 8ba0c2765..12d70e6c3 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskConstant.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskConstant.java @@ -5,6 +5,7 @@ import com.accompany.common.redis.BaseRedisKey; public interface DailyTaskConstant { enum ReceiveStatus { + NOTYETOPEN, UNCOMPLETED, AVAILABLE, RECEIVED, diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/guild/GuildTaskConstant.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/guild/GuildTaskConstant.java index 9453c1530..1bb82dc01 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/guild/GuildTaskConstant.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/guild/GuildTaskConstant.java @@ -2,10 +2,4 @@ package com.accompany.business.constant.guild; public class GuildTaskConstant { - public static class TaskStatus { - public static final byte UNCOMPLETED = 0; - public static final byte AVAILABLE = 1; - public static final byte RECEIVED = 2; - public static final byte EXPIRE = 3; - } } diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelReward.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelReward.java index c69183280..d63a148e5 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelReward.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelReward.java @@ -31,7 +31,7 @@ public class GuildTaskLevelReward implements Serializable { /** * 奖品类型:8.金币 6.礼物 5.座驾 1.头饰 3.气泡, 10vip 11勋章 13.金豆,根据RewardTypeEnum来的 */ - private Integer awardType; + private Byte awardType; /** * 奖品id,这里指对应表的主键id */ @@ -47,7 +47,7 @@ public class GuildTaskLevelReward implements Serializable { /** * 奖励对象,1-公会长,3-主播 */ - private Integer awardRole; + private Byte awardRole; /** * 奖励状态 */ diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelRewardRecord.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelRewardRecord.java index b9668b5f6..088b92253 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelRewardRecord.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelRewardRecord.java @@ -46,7 +46,7 @@ public class GuildTaskLevelRewardRecord implements Serializable { /** * 奖品类型:8.金币 6.礼物 5.座驾 1.头饰 3.气泡, 10vip 11勋章 ,根据RewardTypeEnum来的 */ - private Integer awardType; + private Byte awardType; /** * 奖品id */ @@ -69,5 +69,4 @@ public class GuildTaskLevelRewardRecord implements Serializable { private Date createTime; private Date updateTime; - } diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskVo.java index b8c83e1fa..0f8b8b827 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskVo.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/dailytask/DailyTaskVo.java @@ -5,6 +5,7 @@ import com.accompany.business.constant.dailytask.DailyTaskTypeEnum; import com.accompany.business.model.dailytask.DailyTaskReward; import com.accompany.business.vo.guild.GuildCycleDiamondWageLevelVo; import com.accompany.business.vo.guild.GuildMemberWeekLevelRewardItemVo; +import com.accompany.business.vo.guild.GuildTaskLevelInfoVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; @@ -42,4 +43,6 @@ public class DailyTaskVo { private GuildCycleDiamondWageLevelVo cycleDiamondWageLevelVo; @ApiModelProperty("任务剩余秒数") private Long expireSecond; + @ApiModelProperty("公会开业仪式") + private List guildTaskVos; } diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildTaskLevelInfoVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildTaskLevelInfoVo.java index 2301940e0..48a407855 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildTaskLevelInfoVo.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildTaskLevelInfoVo.java @@ -1,19 +1,26 @@ package com.accompany.business.vo.guild; +import com.accompany.business.constant.dailytask.DailyTaskConstant; +import com.accompany.business.vo.dailytask.DailyTaskRewardVo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; +import java.util.List; @Data public class GuildTaskLevelInfoVo { + @ApiModelProperty("达标ID,领取奖励的时候传") + private Long reachId; private Integer guildTaskId; + @ApiModelProperty("达标时间") + private String reachStatDate; /** * 分区id */ private Integer partitionId; @ApiModelProperty("1-公会开业, 2-麦上活跃1,3-麦上活跃2") - private Byte type; + private String taskKey; @ApiModelProperty("等级") private Integer level; @ApiModelProperty("等级描述") @@ -32,4 +39,8 @@ public class GuildTaskLevelInfoVo { private Integer curAnchorMicReachNum; @ApiModelProperty("档位-主播上麦达标人数") private Integer anchorMicReachNum; + @ApiModelProperty("未开启-NOTYETOPEN,UNCOMPLETED-未完成, AVAILABLE-可领取,RECEIVED-已领取,EXPIRE-已过期") + private DailyTaskConstant.ReceiveStatus receiveStatus; + @ApiModelProperty("奖励列表") + private List rewardVos; } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildCreateHandler.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildCreateHandler.java index 07f18ace1..22548f04b 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildCreateHandler.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildCreateHandler.java @@ -1,33 +1,36 @@ package com.accompany.business.service.dailytask.handler; -import cn.hutool.core.date.DateUtil; import com.accompany.business.constant.dailytask.DailyTaskConstant; import com.accompany.business.constant.dailytask.DailyTaskTypeEnum; import com.accompany.business.model.guild.Guild; import com.accompany.business.service.dailytask.AbstractDailyTaskHandler; import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType; -import com.accompany.business.service.guild.GuildMemberService; import com.accompany.business.service.guild.GuildService; -import com.accompany.business.service.guildtask.GuildTaskLevelInfoService; +import com.accompany.business.service.guildtask.GuildTaskService; import com.accompany.business.vo.dailytask.DailyProgressContext; import com.accompany.business.vo.dailytask.DailyTaskContext; import com.accompany.business.vo.dailytask.DailyTaskVo; +import com.accompany.business.vo.guild.GuildTaskLevelInfoVo; +import com.accompany.common.utils.DateTimeUtil; +import com.accompany.core.enumeration.PartitionEnum; +import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.time.Duration; +import java.time.ZonedDateTime; import java.util.Date; +import java.util.List; @Component @DailyTaskHandlerType(DailyTaskTypeEnum.GUILD_CREATE) public class GuildCreateHandler extends AbstractDailyTaskHandler { - @Autowired - private GuildMemberService guildMemberService; @Autowired private GuildService guildService; @Autowired - private GuildTaskLevelInfoService guildTaskLevelInfoService; + private GuildTaskService guildTaskService; @Override public DailyTaskVo doHandle(DailyTaskContext context) { @@ -36,19 +39,38 @@ public class GuildCreateHandler extends AbstractDailyTaskHandler { return null; } Date now = new Date(); + Integer partitionId = context.getPartitionId(); + PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId); + DailyTaskTypeEnum dailyTaskTypeEnum = context.getDailyTaskTypeEnum(); + String taskDate = context.getTodayDate(); DailyTaskVo dailyTaskVo = new DailyTaskVo(); - Date createAfter14Day = DateUtil.offsetDay(guild.getCreateTime(), 14); - if (now.after(createAfter14Day)) { - dailyTaskVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.EXPIRE); - return dailyTaskVo; + List guildCreateTaskList = guildTaskService.getGuildCreateTaskList(dailyTaskTypeEnum.name(), taskDate, partitionId, guild.getId()); + if (CollectionUtils.isEmpty(guildCreateTaskList)) { + return null; } - return null; + dailyTaskVo.setGuildTaskVos(guildCreateTaskList); + ZonedDateTime guildCreateDate = DateTimeUtil.convertWithZoneId(guild.getCreateTime(), partitionEnum.getZoneId()); + ZonedDateTime createAfter14Day = guildCreateDate.plusDays(14).withHour(23).withMinute(59).withSecond(59); + ZonedDateTime nowZoneDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId()); + ZonedDateTime nowZonedEndDateTime = nowZoneDateTime.withHour(23).withMinute(59).withSecond(59); + Boolean expire = nowZonedEndDateTime.isAfter(createAfter14Day); + if (expire) { + dailyTaskVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.EXPIRE); + for (GuildTaskLevelInfoVo infoVo : guildCreateTaskList) { + if (infoVo.getReceiveStatus().equals(DailyTaskConstant.ReceiveStatus.UNCOMPLETED)) { + infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.EXPIRE); + } + } + dailyTaskVo.setExpireSecond(0L); + } else { + Duration duration = Duration.between(createAfter14Day, nowZoneDateTime); + dailyTaskVo.setExpireSecond(duration.getSeconds()); + } + return dailyTaskVo; } @Override public void doExecuteProgress(DailyProgressContext progressContext) { } - - } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildMicHandler.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildMicHandler.java index 9c904a23f..f16c8fae6 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildMicHandler.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildMicHandler.java @@ -1,19 +1,54 @@ package com.accompany.business.service.dailytask.handler; import com.accompany.business.constant.dailytask.DailyTaskTypeEnum; +import com.accompany.business.model.guild.Guild; import com.accompany.business.service.dailytask.AbstractDailyTaskHandler; import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType; +import com.accompany.business.service.guild.GuildService; +import com.accompany.business.service.guildtask.GuildTaskService; import com.accompany.business.vo.dailytask.DailyProgressContext; import com.accompany.business.vo.dailytask.DailyTaskContext; import com.accompany.business.vo.dailytask.DailyTaskVo; +import com.accompany.business.vo.guild.GuildTaskLevelInfoVo; +import com.accompany.common.utils.DateTimeUtil; +import com.accompany.core.enumeration.PartitionEnum; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.time.DayOfWeek; +import java.time.ZonedDateTime; +import java.time.temporal.TemporalAdjusters; +import java.util.Date; +import java.util.List; + @Component @DailyTaskHandlerType(DailyTaskTypeEnum.GUILD_MIC) public class GuildMicHandler extends AbstractDailyTaskHandler { + + @Autowired + private GuildService guildService; + @Autowired + private GuildTaskService guildTaskService; + @Override public DailyTaskVo doHandle(DailyTaskContext context) { - return null; + Guild guild = guildService.getVaildGuildByOwnerUid(context.getUid()); + if (guild == null) { + return null; + } + Date now = new Date(); + Integer partitionId = context.getPartitionId(); + PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId); + DailyTaskTypeEnum dailyTaskTypeEnum = context.getDailyTaskTypeEnum(); + String taskDate = context.getTodayDate(); + ZonedDateTime nowZonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId()); + String cycleDate = nowZonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).format(DateTimeUtil.dateFormatter); + List guildWeekTaskList = guildTaskService.getGuildWeekTaskList(cycleDate, dailyTaskTypeEnum.getHandlerType(), taskDate, partitionId, guild.getId()); + DailyTaskVo dailyTaskVo = new DailyTaskVo(); + dailyTaskVo.setGuildTaskVos(guildWeekTaskList); + ZonedDateTime weekEndTime = nowZonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.SUNDAY)).withMinute(59).withHour(23).withSecond(59); + dailyTaskVo.setExpireSecond((long)weekEndTime.getSecond() - nowZonedDateTime.getSecond()); + return dailyTaskVo; } @Override diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java index 66e2d883c..cf491ee5b 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildMemberService.java @@ -87,7 +87,6 @@ public class GuildMemberService extends ServiceImpl listGuildOwnerByPartitionIdRegionId(int partitionId, int regionId) { return this.baseMapper.listGuildOwnerByPartitionIdRegionId(partitionId, regionId); } @@ -117,4 +116,15 @@ public class GuildMemberService extends ServiceImpl x)); } + + public List listVaildAllGuildMember(Integer guildId) { + List guildMembers = this.lambdaQuery() + .eq(GuildMember::getGuildId, guildId) + .eq(GuildMember::getEnable, Boolean.TRUE) + .list(); + if (CollectionUtils.isEmpty(guildMembers)) { + return Collections.EMPTY_LIST; + } + return guildMembers; + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelRewardRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelRewardRecordService.java index d9ff190d1..5de126e91 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelRewardRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelRewardRecordService.java @@ -5,6 +5,8 @@ import com.accompany.business.mybatismapper.guildtask.GuildTaskLevelRewardRecord import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.util.Date; + /** * 公户开业仪式奖励奖励记录 服务实现类 * @@ -14,5 +16,25 @@ import org.springframework.stereotype.Service; @Service public class GuildTaskLevelRewardRecordService extends ServiceImpl { + public GuildTaskLevelRewardRecord calRecord(Integer partitionId, Long uid, Integer guildId, Long guildMemberId, Integer guildTaskId, Integer level, + String cycleDate, String statDate, Byte awardType, Long awardId, Long awardNum, String loginIp, String deviceId) { + GuildTaskLevelRewardRecord rewardRecord = new GuildTaskLevelRewardRecord(); + rewardRecord.setPartitionId(partitionId); + rewardRecord.setUid(uid); + rewardRecord.setGuildId(guildId); + rewardRecord.setGuildMemberId(guildMemberId); + rewardRecord.setGuildTaskId(guildTaskId); + rewardRecord.setLevel(level); + rewardRecord.setCycleDate(cycleDate); + rewardRecord.setStatDate(statDate); + rewardRecord.setAwardType(awardType); + rewardRecord.setAwardId(awardId); + rewardRecord.setAwardNum(awardNum); + rewardRecord.setLoginIp(loginIp); + rewardRecord.setDeviceId(deviceId); + rewardRecord.setCreateTime(new Date()); + rewardRecord.setUpdateTime(new Date()); + return rewardRecord; + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelRewardService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelRewardService.java index 2921c972e..2272ea2da 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelRewardService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelRewardService.java @@ -1,18 +1,62 @@ package com.accompany.business.service.guildtask; +import com.accompany.business.common.constant.RewardTypeEnum; +import com.accompany.business.common.vo.RewardVo; import com.accompany.business.model.guildtask.GuildTaskLevelReward; import com.accompany.business.mybatismapper.guildtask.GuildTaskLevelRewardMapper; +import com.accompany.business.service.activity.h5.ActivityH5LevelAwardService; +import com.accompany.business.vo.dailytask.DailyTaskRewardVo; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * 公户开业仪式奖励配置 服务实现类 * - * @author + * @author * @since 2025-09-01 */ @Service public class GuildTaskLevelRewardService extends ServiceImpl { + @Autowired + private ActivityH5LevelAwardService activityH5LevelAwardService; + public Map> mapByGuildTaskIds(List guildTaskIds, Integer partitionId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(GuildTaskLevelReward::getGuildTaskId, guildTaskIds); + queryWrapper.eq(GuildTaskLevelReward::getAwardStatus, 1); + List guildTaskLevelRewards = baseMapper.selectList(queryWrapper); + Map> resultMap = new HashMap<>(); + if (CollectionUtils.isEmpty(guildTaskLevelRewards)) { + return resultMap; + } + for (GuildTaskLevelReward reward : guildTaskLevelRewards) { + List resultList = resultMap.getOrDefault(reward.getGuildTaskId(), new ArrayList<>()); + RewardVo rewardVo = activityH5LevelAwardService.covertI18nRewardInfo(RewardTypeEnum.getByRewardType(reward.getAwardType()), reward.getAwardId().intValue(), partitionId); + resultList.add(DailyTaskRewardVo.builder() + .awardName(rewardVo.getName()) + .unit(rewardVo.getUnit()) + .awardNum(reward.getAwardNum()) + .awardPic(rewardVo.getPic()) + .build()); + resultMap.put(reward.getGuildTaskId(), resultList); + + } + return resultMap; + } + + public List listByGuildTaskId(Integer guildTaskId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(GuildTaskLevelReward::getGuildTaskId, guildTaskId); + queryWrapper.eq(GuildTaskLevelReward::getAwardStatus, 1); + return baseMapper.selectList(queryWrapper); + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskReachRecordService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskReachRecordService.java index b80159140..c3c7d45bd 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskReachRecordService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskReachRecordService.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.List; /** @@ -34,4 +35,12 @@ public class GuildTaskReachRecordService extends ServiceImpl getGuildTaskLevelInfoList(Integer partitionId, Integer guildId, Byte type) { + public List getGuildCreateTaskList(String taskKey, String statDate, Integer partitionId, Integer guildId) { List resultList = new ArrayList<>(); -// List guildTaskLevelInfos = guildTaskLevelInfoService.listGuildTasks(partitionId, type); -// if (CollectionUtils.isEmpty(guildTaskLevelInfos)) { -// return resultList; -// } + List guildTaskLevelInfos = guildTaskLevelInfoService.listGuildTask(partitionId, taskKey); + if (CollectionUtils.isEmpty(guildTaskLevelInfos)) { + return resultList; + } + List reachRecords = guildTaskReachRecordService.list(partitionId, guildId, taskKey); + Map reachRecordMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(reachRecords)) { + reachRecordMap = reachRecords.stream().filter(x -> x.getReachStatus() > 0 || statDate.equals(x.getStatDate())) + .collect(Collectors.toMap(GuildTaskReachRecord::getLevel, x -> x)); + } + List guildTaskIds = guildTaskLevelInfos.stream().map(GuildTaskLevelInfo::getGuildTaskId).collect(Collectors.toList()); + Map> rewardMap = guildTaskLevelRewardService.mapByGuildTaskIds(guildTaskIds, partitionId); + for (GuildTaskLevelInfo guildTaskLevelInfo : guildTaskLevelInfos) { + GuildTaskLevelInfoVo infoVo = new GuildTaskLevelInfoVo(); + infoVo.setLevel(guildTaskLevelInfo.getLevel()); + infoVo.setGuildTaskId(guildTaskLevelInfo.getGuildTaskId()); + infoVo.setName(guildTaskLevelInfo.getName()); + infoVo.setTaskKey(guildTaskLevelInfo.getTaskKey()); + infoVo.setPartitionId(partitionId); + infoVo.setAnchorNum(guildTaskLevelInfo.getAnchorNum()); + infoVo.setDiamondNum(guildTaskLevelInfo.getDiamondNum()); + infoVo.setRewardVos(rewardMap.getOrDefault(guildTaskLevelInfo.getGuildTaskId(), Collections.emptyList())); + GuildTaskReachRecord guildTaskReachRecord = reachRecordMap.get(guildTaskLevelInfo.getLevel()); + if (guildTaskReachRecord == null) { + infoVo.setCurAnchorNum(0); + infoVo.setCurDiamondNum(BigDecimal.ZERO); + infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.UNCOMPLETED); + } else { + infoVo.setCurAnchorNum(guildTaskReachRecord.getAnchorNum()); + infoVo.setCurDiamondNum(guildTaskReachRecord.getDiamondNum()); + infoVo.setReachStatDate(guildTaskReachRecord.getStatDate()); + infoVo.setReachId(guildTaskReachRecord.getId()); + if (guildTaskReachRecord.getReceiveStatus() > 0) { + infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.RECEIVED); + } else if (guildTaskReachRecord.getReachStatus() > 0) { + infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.AVAILABLE); + } else { + infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.UNCOMPLETED); + } + } + resultList.add(infoVo); + } return resultList; } + + public List getGuildWeekTaskList(String cycleDate, String taskKey, String statDate, Integer partitionId, Integer guildId) { + List resultList = new ArrayList<>(); + List guildTaskLevelInfos = guildTaskLevelInfoService.listGuildTask(partitionId, taskKey); + if (CollectionUtils.isEmpty(guildTaskLevelInfos)) { + return resultList; + } + List reachRecords = guildTaskReachRecordService.listByCycle(cycleDate, partitionId, guildId, taskKey); + Map reachRecordMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(reachRecords)) { + reachRecordMap = reachRecords.stream().filter(x -> x.getReachStatus() > 0 || statDate.equals(x.getStatDate())) + .collect(Collectors.toMap(GuildTaskReachRecord::getLevel, x -> x)); + } + List guildTaskIds = guildTaskLevelInfos.stream().map(GuildTaskLevelInfo::getGuildTaskId).collect(Collectors.toList()); + Map> rewardMap = guildTaskLevelRewardService.mapByGuildTaskIds(guildTaskIds, partitionId); + + for (GuildTaskLevelInfo guildTaskLevelInfo : guildTaskLevelInfos) { + GuildTaskLevelInfoVo infoVo = new GuildTaskLevelInfoVo(); + infoVo.setLevel(guildTaskLevelInfo.getLevel()); + infoVo.setGuildTaskId(guildTaskLevelInfo.getGuildTaskId()); + infoVo.setName(guildTaskLevelInfo.getName()); + infoVo.setTaskKey(guildTaskLevelInfo.getTaskKey()); + infoVo.setPartitionId(partitionId); + infoVo.setAnchorNum(guildTaskLevelInfo.getAnchorNum()); + infoVo.setDiamondNum(guildTaskLevelInfo.getDiamondNum()); + infoVo.setAnchorMicReachMinutes(guildTaskLevelInfo.getAnchorMicReachMinutes()); + infoVo.setAnchorMicReachNum(guildTaskLevelInfo.getAnchorMicReachNum()); + infoVo.setRewardVos(rewardMap.getOrDefault(guildTaskLevelInfo.getGuildTaskId(), Collections.emptyList())); + GuildTaskReachRecord guildTaskReachRecord = reachRecordMap.get(guildTaskLevelInfo.getLevel()); + if (guildTaskReachRecord == null) { + infoVo.setCurAnchorNum(0); + infoVo.setCurDiamondNum(BigDecimal.ZERO); + infoVo.setCurAnchorMicReachNum(0); + if (statDate.equals(cycleDate)) { + infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.UNCOMPLETED); + } else { + infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.NOTYETOPEN); + } + } else { + infoVo.setCurAnchorNum(guildTaskReachRecord.getAnchorNum()); + infoVo.setCurDiamondNum(guildTaskReachRecord.getDiamondNum()); + infoVo.setCurAnchorMicReachNum(guildTaskReachRecord.getAnchorMicReachNum()); + infoVo.setReachStatDate(guildTaskReachRecord.getStatDate()); + infoVo.setReachId(guildTaskReachRecord.getId()); + if (guildTaskReachRecord.getReceiveStatus() > 0) { + infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.RECEIVED); + } else if (guildTaskReachRecord.getReachStatus() > 0) { + infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.AVAILABLE); + } else { + infoVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.UNCOMPLETED); + } + } + resultList.add(infoVo); + } + return resultList; + } + + public BusiResult receive(Long reachId, Long uid, String loginIp, String deviceId) { + GuildTaskReachRecord reachRecord = guildTaskReachRecordService.getById(reachId); + if (reachRecord == null) { + throw new ServiceException(BusiStatus.SERVERBUSY); + } + if (reachRecord.getReceiveStatus() > 0) { + throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END); + } + Integer guildId = reachRecord.getGuildId(); + Guild guild = guildService.getVaildGuildById(guildId); + if (guild == null) { + throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END); + } + if (!guild.getOwnerUid().equals(uid)) { + throw new ServiceException(BusiStatus.HALL_PERMISSION_DENIED); + } + Date now = new Date(); + Integer partitionId = guild.getPartitionId(); + PartitionEnum partitionEnum = PartitionEnum.getByPartitionId(partitionId); + ZonedDateTime nowZonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId()); + boolean expired = true; + DailyTaskTypeEnum dailyTaskTypeEnum = DailyTaskTypeEnum.valueOf(reachRecord.getTaskKey()); + if (dailyTaskTypeEnum.equals(DailyTaskTypeEnum.GUILD_MIC)) { + ZonedDateTime guildCreateDate = DateTimeUtil.convertWithZoneId(guild.getCreateTime(), partitionEnum.getZoneId()); + ZonedDateTime createAfter14Day = guildCreateDate.plusDays(14).withHour(23).withMinute(59).withSecond(59); + ZonedDateTime nowZoneDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId()); + ZonedDateTime nowZonedEndDateTime = nowZoneDateTime.withHour(23).withMinute(59).withSecond(59); + expired = nowZonedEndDateTime.isAfter(createAfter14Day); + } else { + String cycleDate = nowZonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)).format(DateTimeUtil.dateFormatter); + if (cycleDate.equals(reachRecord.getCycleDate())) { + expired = false; + } + } + if (expired) { + throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END); + } + reachRecord.setReceiveStatus(1); + reachRecord.setUpdateTime(now); + boolean received = guildTaskReachRecordService.updateById(reachRecord); + if (!received) { + throw new ServiceException(BusiStatus.DAILY_TASK_RECEIVE_END); + } + List levelRewards = guildTaskLevelRewardService.listByGuildTaskId(reachRecord.getGuildTaskId()); + if (CollectionUtils.isEmpty(levelRewards)) { + throw new ServiceException(BusiStatus.DAILY_TASK_REWARD_ERROR); + } + List guildMembers = guildMemberService.listVaildAllGuildMember(guildId); + if (CollectionUtils.isEmpty(guildMembers)) { + throw new ServiceException(BusiStatus.SERVERERROR); + } + List rewardRecords = new ArrayList<>(); + for (GuildTaskLevelReward configReward : levelRewards) { + for (GuildMember guildMember : guildMembers) { + GuildTaskLevelRewardRecord rewardRecord = guildTaskLevelRewardRecordService.calRecord(partitionId, guildMember.getUid(), guildId, guildMember.getId(), + reachRecord.getGuildTaskId(), reachRecord.getLevel(), reachRecord.getCycleDate(), + reachRecord.getStatDate(), configReward.getAwardType(), configReward.getAwardId(), + configReward.getAwardNum(), loginIp, deviceId); + if (configReward.getAwardRole().equals(GuildConstant.RoleType.OWNER)) {//只给公会长发奖励 + if (guildMember.getRoleType().equals(GuildConstant.RoleType.OWNER)) { + rewardRecords.add(rewardRecord); + } + } else { + rewardRecords.add(rewardRecord); + } + } + } + boolean saveBatch = guildTaskLevelRewardRecordService.saveBatch(rewardRecords); + if (!saveBatch) { + throw new ServiceException(BusiStatus.SERVERERROR); + } + + for (GuildTaskLevelRewardRecord configReward : rewardRecords) { + if (RewardTypeEnum.GOLDBEAN.getType().equals(configReward.getAwardType())) { + userGoldBeanService.addGoldBean(uid, BigDecimal.valueOf(configReward.getAwardNum()), GoldBeanBillType.TASK_GAIN, + String.valueOf(configReward.getId()), 1, dailyTaskTypeEnum.name(), 1L, 1L, + nowZonedDateTime.format(DateTimeUtil.dateFormatter)); + } + BillObjTypeEnum goldBillObjTypeEnum = null; + if (RewardTypeEnum.GOLD.getType().equals(configReward.getAwardType())) { + goldBillObjTypeEnum = GUILD_TASK_GOLD; + } else if (RewardTypeEnum.DIAMOND.getType().equals(configReward.getAwardType())) { + goldBillObjTypeEnum = GUILD_TASK_DIAMOND; + } + rewardUtil.sendRewardByType(uid, RewardTypeEnum.getByRewardType(configReward.getAwardType()), configReward.getAwardId().intValue(), + configReward.getAwardNum().intValue(), dailyTaskTypeEnum.name(), Boolean.FALSE, goldBillObjTypeEnum); + } + return BusiResult.success(); + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/util/RewardUtil.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/util/RewardUtil.java index 281f1b899..9c8b7f9c4 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/util/RewardUtil.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/util/RewardUtil.java @@ -348,7 +348,7 @@ public class RewardUtil { } bizExecutor.execute(() -> { try { - userGoldBeanService.addGoldBean(uid, BigDecimal.valueOf(num), GoldBeanBillType.ROOM_BOOM_RANDOM, null, 1, null, null, null,null); + userGoldBeanService.addGoldBean(uid, BigDecimal.valueOf(num), GoldBeanBillType.ROOM_BOOM_RANDOM, null, 1, null, null, 1L,null); } catch (Exception e) { log.error("[RewardUtil] {} {} {} {} {} 发奖异常", uid, typeEnum, refId, num, remark, e); } diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/GuildTaskController.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/GuildTaskController.java new file mode 100644 index 000000000..cf5283dc7 --- /dev/null +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/GuildTaskController.java @@ -0,0 +1,34 @@ +package com.accompany.business.controller.activity.dailytask; + +import com.accompany.business.service.guildtask.GuildTaskService; +import com.accompany.common.result.BusiResult; +import com.accompany.common.utils.IPUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +import static com.accompany.common.constant.ApplicationConstant.PublicParameters.DEVICE_ID; +import static com.accompany.common.constant.ApplicationConstant.PublicParameters.PUB_UID; + +@Api(tags = "公会开业",value = "公会开业") +@RestController +@RequestMapping("/guildtask") +public class GuildTaskController { + @Autowired + private GuildTaskService guildTaskService; + + + @ApiOperation(value = "领取", httpMethod = "POST") + @PostMapping("/recv") + public BusiResult receive(@RequestHeader(PUB_UID) Long uid,@RequestHeader(DEVICE_ID)String deviceId, + HttpServletRequest request, Long reachId) { + String loginIp = IPUtils.getRealIpAddress(request); + return guildTaskService.receive(reachId, uid, loginIp, deviceId); + } +}