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 48d66b787..8ba0c2765 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 @@ -8,6 +8,7 @@ public interface DailyTaskConstant { UNCOMPLETED, AVAILABLE, RECEIVED, + EXPIRE } enum RedisKey implements BaseRedisKey { @@ -22,6 +23,7 @@ public interface DailyTaskConstant { task_config,//任务配置 ip_limit,//主播上麦领取ip限制 device_limit,//主播上麦领取设备限制 + guild_diamod,//公会日流水 ; @Override diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskTypeEnum.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskTypeEnum.java index 0321c2da4..a6245dbd0 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskTypeEnum.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/dailytask/DailyTaskTypeEnum.java @@ -23,6 +23,9 @@ public enum DailyTaskTypeEnum { ROOM_SEND_BRAVO_NUM("ROOM_SEND_BRAVO_NUM"),//送出77个BRAVO礼物 GM_UP_MIC("GM_UP_MIC"),//每日任务新主播上麦(薅羊毛) GUILD_SALARY("GUILD_SALARY"),//公会长薪资 + GUILD_CREATE("GUILD_CREATE"),//公会开业仪式 + GUILD_MIC("GUILD_MIC"),//周上麦活跃时长1 + GUILD_MIC_ONE("GUILD_MIC"),//周上麦活跃时长2 ; private String handlerType; 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 new file mode 100644 index 000000000..9453c1530 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/constant/guild/GuildTaskConstant.java @@ -0,0 +1,11 @@ +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/GuildTaskLevelInfo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelInfo.java new file mode 100644 index 000000000..5efc570c4 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelInfo.java @@ -0,0 +1,63 @@ +package com.accompany.business.model.guildtask; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 公户开业仪式配置实体类 + * + * @author + * @since 2025-09-01 + */ +@Data +public class GuildTaskLevelInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "guild_task_id", type = IdType.AUTO) + private Integer guildTaskId; + /** + * 分区id + */ + private Integer partitionId; + /** + * GUILD_CREATE-公会开业, GUILD_MIC-麦上活跃1,GUILD_MIC_TWO-麦上活跃2 + */ + private String taskKey; + /** + * 等级 + */ + private Integer level; + /** + * 等级描述 + */ + private String name; + /** + * 经验(金钱时 单位 美分) + */ + private BigDecimal diamondNum; + /** + * 主播人数 + */ + private Integer anchorNum; + /** + * 主播人数 + */ + private Integer anchorMicReachMinutes; + /** + * 主播人数 + */ + private Integer anchorMicReachNum; + /** + * 创建时间 + */ + private Date createTime; + private Date updateTime; + + +} 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 new file mode 100644 index 000000000..c69183280 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelReward.java @@ -0,0 +1,65 @@ +package com.accompany.business.model.guildtask; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 公户开业仪式奖励配置实体类 + * + * @author + * @since 2025-09-01 + */ +@Data +public class GuildTaskLevelReward implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + /** + * 公户开业仪式配置ID + */ + private Integer guildTaskId; + /** + * 等级 + */ + private Integer level; + /** + * 奖品类型:8.金币 6.礼物 5.座驾 1.头饰 3.气泡, 10vip 11勋章 13.金豆,根据RewardTypeEnum来的 + */ + private Integer awardType; + /** + * 奖品id,这里指对应表的主键id + */ + private Long awardId; + /** + * 奖品数量 + */ + private Long awardNum; + /** + * 排序 + */ + private Integer awardSeq; + /** + * 奖励对象,1-公会长,3-主播 + */ + private Integer awardRole; + /** + * 奖励状态 + */ + private Integer awardStatus; + /** + * 创建时间 + */ + private Date createTime; + /** + * 更新时间 + */ + private Date updateTime; + + +} 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 new file mode 100644 index 000000000..b9668b5f6 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskLevelRewardRecord.java @@ -0,0 +1,73 @@ +package com.accompany.business.model.guildtask; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 公户开业仪式奖励奖励记录实体类 + * + * @author + * @since 2025-09-01 + */ +@Data +public class GuildTaskLevelRewardRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + /** + * 分区id + */ + private Integer partitionId; + private Long uid; + private Integer guildId; + private Long guildMemberId; + /** + * 公户开业仪式配置ID + */ + private Integer guildTaskId; + /** + * 等级 + */ + private Integer level; + /** + * 周期 + */ + private String cycleDate; + /** + * 领取日期 + */ + private String statDate; + /** + * 奖品类型:8.金币 6.礼物 5.座驾 1.头饰 3.气泡, 10vip 11勋章 ,根据RewardTypeEnum来的 + */ + private Integer awardType; + /** + * 奖品id + */ + private Long awardId; + /** + * 奖品数量 + */ + private Long awardNum; + /** + * 登录ip + */ + private String loginIp; + /** + * 设备号 + */ + private String deviceId; + /** + * 创建时间 + */ + private Date createTime; + private Date updateTime; + + +} diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskReachRecord.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskReachRecord.java new file mode 100644 index 000000000..9b910c576 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/model/guildtask/GuildTaskReachRecord.java @@ -0,0 +1,76 @@ +package com.accompany.business.model.guildtask; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 新公会达标任务信息表实体类 + * + * @author + * @since 2025-09-01 + */ +@Data +public class GuildTaskReachRecord implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id" , type = IdType.AUTO) + private Long id; + /** + * 周期 + */ + private String cycleDate; + /** + * 统计日期 + */ + private String statDate; + /** + * 分区id + */ + private Integer partitionId; + private Integer guildId; + private Integer guildTaskId; + /** + * GUILD_CREATE-公会开业, GUILD_MIC-麦上活跃1,GUILD_MIC_TWO-麦上活跃2 + */ + private String taskKey; + /** + * 等级 + */ + private Integer level; + /** + * 经验(金钱时 单位 美分) + */ + private BigDecimal diamondNum; + /** + * 主播人数 + */ + private Integer anchorNum; + /** + * 主播人数 + */ + private Integer anchorMicReachNum; + /** + * 达标状态0-未达标,1-已经达标 + */ + private Integer reachStatus; + /** + * 达标状态0-未领取,1-已领取 + */ + private Integer receiveStatus; + /** + * 创建时间 + */ + 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 27562693c..b8c83e1fa 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 @@ -24,7 +24,7 @@ public class DailyTaskVo { private Integer partitionId; @ApiModelProperty("任务类型") private DailyTaskTypeEnum taskType; - @ApiModelProperty("UNCOMPLETED-完成, AVAILABLE-可领取,RECEIVED-已领取") + @ApiModelProperty("UNCOMPLETED-完成, AVAILABLE-可领取,RECEIVED-已领取,EXPIRE-已过期") private DailyTaskConstant.ReceiveStatus receiveStatus; @ApiModelProperty("到达数量") private Long reachNum; 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 new file mode 100644 index 000000000..2301940e0 --- /dev/null +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guild/GuildTaskLevelInfoVo.java @@ -0,0 +1,35 @@ +package com.accompany.business.vo.guild; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class GuildTaskLevelInfoVo { + private Integer guildTaskId; + /** + * 分区id + */ + private Integer partitionId; + @ApiModelProperty("1-公会开业, 2-麦上活跃1,3-麦上活跃2") + private Byte type; + @ApiModelProperty("等级") + private Integer level; + @ApiModelProperty("等级描述") + private String name; + @ApiModelProperty("当前钻石流水") + private BigDecimal curDiamondNum; + @ApiModelProperty("档位-达标钻石流水") + private BigDecimal diamondNum; + @ApiModelProperty("当前主播人数") + private Integer curAnchorNum; + @ApiModelProperty("档位-主播人数") + private Integer anchorNum; + @ApiModelProperty("档位-主播上麦达标最少上麦分钟数") + private Integer anchorMicReachMinutes; + @ApiModelProperty("当前主播上麦达标人数") + private Integer curAnchorMicReachNum; + @ApiModelProperty("档位-主播上麦达标人数") + private Integer anchorMicReachNum; +} diff --git a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildMemberMicDayVo.java b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildMemberMicDayVo.java index 55f7b7bff..3e5fa0b3d 100644 --- a/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildMemberMicDayVo.java +++ b/accompany-business/accompany-business-sdk/src/main/java/com/accompany/business/vo/guildpolicy/GuildMemberMicDayVo.java @@ -5,6 +5,7 @@ import lombok.Data; @Data public class GuildMemberMicDayVo { private String statDate; + private Integer guildId; private Long guildMemberId; private Integer micMinutes; private Integer micDay; diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildMicStatisticsPolicy2Mapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildMicStatisticsPolicy2Mapper.java index 523d7ed9e..7051ec121 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildMicStatisticsPolicy2Mapper.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildpolicy2/GuildMicStatisticsPolicy2Mapper.java @@ -33,4 +33,7 @@ public interface GuildMicStatisticsPolicy2Mapper extends BaseMapper groupByPartitionGuildDate(@Param("statDate")String statDate, @Param("partitionId") Integer partitionId, + @Param("reachMinutes") Integer reachMinutes, @Param("guildIds") List guildIds); } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskLevelInfoMapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskLevelInfoMapper.java new file mode 100644 index 000000000..89d43b608 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskLevelInfoMapper.java @@ -0,0 +1,14 @@ +package com.accompany.business.mybatismapper.guildtask; + +import com.accompany.business.model.guildtask.GuildTaskLevelInfo; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 公户开业仪式配置 Mapper 接口 + * + * @author + * @since 2025-09-01 + */ +public interface GuildTaskLevelInfoMapper extends BaseMapper { + +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskLevelRewardMapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskLevelRewardMapper.java new file mode 100644 index 000000000..3ee75adca --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskLevelRewardMapper.java @@ -0,0 +1,14 @@ +package com.accompany.business.mybatismapper.guildtask; + +import com.accompany.business.model.guildtask.GuildTaskLevelReward; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 公户开业仪式奖励配置 Mapper 接口 + * + * @author + * @since 2025-09-01 + */ +public interface GuildTaskLevelRewardMapper extends BaseMapper { + +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskLevelRewardRecordMapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskLevelRewardRecordMapper.java new file mode 100644 index 000000000..8b0a58afe --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskLevelRewardRecordMapper.java @@ -0,0 +1,14 @@ +package com.accompany.business.mybatismapper.guildtask; + +import com.accompany.business.model.guildtask.GuildTaskLevelRewardRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 公户开业仪式奖励奖励记录 Mapper 接口 + * + * @author + * @since 2025-09-01 + */ +public interface GuildTaskLevelRewardRecordMapper extends BaseMapper { + +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskReachRecordMapper.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskReachRecordMapper.java new file mode 100644 index 000000000..95db5ec2b --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/mybatismapper/guildtask/GuildTaskReachRecordMapper.java @@ -0,0 +1,14 @@ +package com.accompany.business.mybatismapper.guildtask; + +import com.accompany.business.model.guildtask.GuildTaskReachRecord; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 新公会达标任务信息表 Mapper 接口 + * + * @author + * @since 2025-09-01 + */ +public interface GuildTaskReachRecordMapper extends BaseMapper { + +} 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 new file mode 100644 index 000000000..07f18ace1 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildCreateHandler.java @@ -0,0 +1,54 @@ +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.vo.dailytask.DailyProgressContext; +import com.accompany.business.vo.dailytask.DailyTaskContext; +import com.accompany.business.vo.dailytask.DailyTaskVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +@DailyTaskHandlerType(DailyTaskTypeEnum.GUILD_CREATE) +public class GuildCreateHandler extends AbstractDailyTaskHandler { + + @Autowired + private GuildMemberService guildMemberService; + @Autowired + private GuildService guildService; + @Autowired + private GuildTaskLevelInfoService guildTaskLevelInfoService; + + @Override + public DailyTaskVo doHandle(DailyTaskContext context) { + Guild guild = guildService.getVaildGuildByOwnerUid(context.getUid()); + if (guild == null) { + return null; + } + Date now = new Date(); + DailyTaskVo dailyTaskVo = new DailyTaskVo(); + Date createAfter14Day = DateUtil.offsetDay(guild.getCreateTime(), 14); + if (now.after(createAfter14Day)) { + dailyTaskVo.setReceiveStatus(DailyTaskConstant.ReceiveStatus.EXPIRE); + return dailyTaskVo; + } + return null; + } + + @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 new file mode 100644 index 000000000..9c904a23f --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/dailytask/handler/GuildMicHandler.java @@ -0,0 +1,23 @@ +package com.accompany.business.service.dailytask.handler; + +import com.accompany.business.constant.dailytask.DailyTaskTypeEnum; +import com.accompany.business.service.dailytask.AbstractDailyTaskHandler; +import com.accompany.business.service.dailytask.annotation.DailyTaskHandlerType; +import com.accompany.business.vo.dailytask.DailyProgressContext; +import com.accompany.business.vo.dailytask.DailyTaskContext; +import com.accompany.business.vo.dailytask.DailyTaskVo; +import org.springframework.stereotype.Component; + +@Component +@DailyTaskHandlerType(DailyTaskTypeEnum.GUILD_MIC) +public class GuildMicHandler extends AbstractDailyTaskHandler { + @Override + public DailyTaskVo doHandle(DailyTaskContext context) { + return null; + } + + @Override + public void doExecuteProgress(DailyProgressContext progressContext) { + + } +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayService.java index 333e1af06..3514a50a5 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayService.java @@ -8,6 +8,7 @@ import com.accompany.business.vo.guild.GuildMemberDiamondStatisticsDayVo; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import org.redisson.api.RMap; import java.math.BigDecimal; import java.util.List; @@ -37,4 +38,6 @@ public interface GuildDiamondStatisticsDayService extends IService listBdGuildInfo(IPage page, Long bdId, Integer orderBy); Map mapByStatDate(String statDate, String endDate, int partitionId, List guildIds); + + RMap guildStatDateDiamondMap(Integer partitionId, String statDate); } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayServiceImpl.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayServiceImpl.java index 16b388ac2..c5d9057a1 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayServiceImpl.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildDiamondStatisticsDayServiceImpl.java @@ -1,5 +1,6 @@ package com.accompany.business.service.guild; +import com.accompany.business.constant.dailytask.DailyTaskConstant; import com.accompany.business.model.guild.GuildDiamondStatisticsDay; import com.accompany.business.model.guild.GuildMember; import com.accompany.business.mybatismapper.guild.GuildDiamondStatisticsDayMapper; @@ -11,6 +12,10 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; +import org.redisson.api.RMap; +import org.redisson.api.RedissonClient; +import org.redisson.codec.TypedJsonJacksonCodec; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; @@ -31,10 +36,16 @@ import java.util.stream.Collectors; public class GuildDiamondStatisticsDayServiceImpl extends ServiceImpl implements GuildDiamondStatisticsDayService { + @Autowired + private RedissonClient redissonClient; + @Override public int updateDayDiamondStatistics(String cycleDate, String statDate, GuildMember guildMember, double diamond) { Date time = new Date(); - return baseMapper.updateDayDiamondStatistics(cycleDate, statDate, guildMember.getId(), guildMember.getPartitionId(), guildMember.getGuildId(), guildMember.getUid(), diamond, time); + int updated = baseMapper.updateDayDiamondStatistics(cycleDate, statDate, guildMember.getId(), guildMember.getPartitionId(), guildMember.getGuildId(), guildMember.getUid(), diamond, time); + this.guildStatDateDiamondMap(guildMember.getPartitionId(), statDate) + .put(guildMember.getGuildId(), BigDecimal.valueOf(diamond)); + return updated; } @Override @@ -81,4 +92,9 @@ public class GuildDiamondStatisticsDayServiceImpl extends ServiceImpl x.getDiamondNum())); } + public RMap guildStatDateDiamondMap(Integer partitionId, String statDate) { + return redissonClient.getMap(DailyTaskConstant.RedisKey.guild_diamod.getKey(statDate, partitionId.toString()), + new TypedJsonJacksonCodec(Integer.class, BigDecimal.class)); + } + } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildService.java index 2b512e8d6..b0ef3a237 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guild/GuildService.java @@ -94,4 +94,11 @@ public class GuildService extends ServiceImpl { return guildMemberNumMapByGuildIds.stream().collect(Collectors.toMap(AgencyOwnerVo::getGuildId, AgencyOwnerVo::getMemberNum)); } + public List listGreaterCreateTime(Integer partitionId, Date createTime) { + return this.lambdaQuery() + .eq(Guild::getPartitionId, partitionId) + .ge(Guild::getCreateTime, createTime) + .eq(Guild::getEnable, Boolean.TRUE) + .list(); + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildMicStatisticsPolicy2Service.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildMicStatisticsPolicy2Service.java index 13c0696ee..6e9027f36 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildMicStatisticsPolicy2Service.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildpolicy2/GuildMicStatisticsPolicy2Service.java @@ -9,10 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.collections.CollectionUtils; import org.springframework.stereotype.Service; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -64,4 +61,13 @@ public class GuildMicStatisticsPolicy2Service extends ServiceImpl mapByPartitionGuildDate(String statDate, Integer partitionId, Integer reachMinutes, List guildIds) { + List memberMicDayVos = baseMapper.groupByPartitionGuildDate(statDate, partitionId, reachMinutes, guildIds); + if (CollectionUtils.isEmpty(memberMicDayVos)) { + return Collections.emptyMap(); + } + return memberMicDayVos.stream().collect(Collectors.toMap(GuildMemberMicDayVo::getGuildId, GuildMemberMicDayVo::getMicDay)); + } } diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelInfoService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelInfoService.java new file mode 100644 index 000000000..f917bafa3 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelInfoService.java @@ -0,0 +1,43 @@ +package com.accompany.business.service.guildtask; + +import com.accompany.business.model.guildtask.GuildTaskLevelInfo; +import com.accompany.business.mybatismapper.guildtask.GuildTaskLevelInfoMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 公户开业仪式配置 服务实现类 + * + * @author + * @since 2025-09-01 + */ +@Service +public class GuildTaskLevelInfoService extends ServiceImpl { + + public List listGuildTask(Integer partitionId, String taskKey) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(GuildTaskLevelInfo::getPartitionId, partitionId); + wrapper.eq(GuildTaskLevelInfo::getTaskKey, taskKey) + .orderByAsc(GuildTaskLevelInfo::getLevel); + return baseMapper.selectList(wrapper); + } + + public List listGuildTaskList(Integer partitionId, List taskKeys) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(GuildTaskLevelInfo::getPartitionId, partitionId); + wrapper.in(GuildTaskLevelInfo::getTaskKey, taskKeys) + .orderByAsc(GuildTaskLevelInfo::getLevel); + return baseMapper.selectList(wrapper); + } + + public List listGuildTasks(Integer partitionId) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(GuildTaskLevelInfo::getPartitionId, partitionId) + .orderByAsc(GuildTaskLevelInfo::getLevel); + return baseMapper.selectList(wrapper); + } +} 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 new file mode 100644 index 000000000..d9ff190d1 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelRewardRecordService.java @@ -0,0 +1,18 @@ +package com.accompany.business.service.guildtask; + +import com.accompany.business.model.guildtask.GuildTaskLevelRewardRecord; +import com.accompany.business.mybatismapper.guildtask.GuildTaskLevelRewardRecordMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 公户开业仪式奖励奖励记录 服务实现类 + * + * @author + * @since 2025-09-01 + */ +@Service +public class GuildTaskLevelRewardRecordService extends ServiceImpl { + + +} 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 new file mode 100644 index 000000000..2921c972e --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskLevelRewardService.java @@ -0,0 +1,18 @@ +package com.accompany.business.service.guildtask; + +import com.accompany.business.model.guildtask.GuildTaskLevelReward; +import com.accompany.business.mybatismapper.guildtask.GuildTaskLevelRewardMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + * 公户开业仪式奖励配置 服务实现类 + * + * @author + * @since 2025-09-01 + */ +@Service +public class GuildTaskLevelRewardService extends ServiceImpl { + + +} 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 new file mode 100644 index 000000000..e95bb1fb0 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskReachRecordService.java @@ -0,0 +1,36 @@ +package com.accompany.business.service.guildtask; + +import com.accompany.business.model.guildtask.GuildTaskReachRecord; +import com.accompany.business.mybatismapper.guildtask.GuildTaskReachRecordMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 新公会达标任务信息表 服务实现类 + * + * @author + * @since 2025-09-01 + */ +@Service +public class GuildTaskReachRecordService extends ServiceImpl { + + public List list(Integer partitionId, Integer guildId, String taskKey) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(GuildTaskReachRecord::getPartitionId, partitionId) + .eq(GuildTaskReachRecord::getGuildId, guildId) + .eq(GuildTaskReachRecord::getTaskKey, taskKey); + return baseMapper.selectList(wrapper); + } + + public List listByCycle(String cycleDate, Integer partitionId, Integer guildId, String taskKey) { + LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.eq(GuildTaskReachRecord::getPartitionId, partitionId) + .eq(GuildTaskReachRecord::getGuildId, guildId) + .eq(GuildTaskReachRecord::getTaskKey, taskKey); + return baseMapper.selectList(wrapper); + } +} diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java new file mode 100644 index 000000000..c4c16bbb9 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/guildtask/GuildTaskService.java @@ -0,0 +1,236 @@ +package com.accompany.business.service.guildtask; + +import com.accompany.business.constant.dailytask.DailyTaskTypeEnum; +import com.accompany.business.model.guild.Guild; +import com.accompany.business.model.guildtask.GuildTaskLevelInfo; +import com.accompany.business.model.guildtask.GuildTaskReachRecord; +import com.accompany.business.service.guild.GuildDiamondStatisticsDayService; +import com.accompany.business.service.guild.GuildMemberService; +import com.accompany.business.service.guild.GuildService; +import com.accompany.business.service.guildpolicy2.GuildMicStatisticsPolicy2Service; +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.redisson.api.RMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.time.DayOfWeek; +import java.time.Duration; +import java.time.ZonedDateTime; +import java.time.temporal.TemporalAdjusters; +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class GuildTaskService { + @Autowired + private GuildTaskLevelInfoService guildTaskLevelInfoService; + @Autowired + private GuildTaskReachRecordService guildTaskReachRecordService; + @Autowired + private GuildService guildService; + @Autowired + private GuildMemberService guildMemberService; + @Autowired + private GuildDiamondStatisticsDayService guildDiamondStatisticsDayService; + @Autowired + private GuildMicStatisticsPolicy2Service guildMicStatisticsPolicy2Service; + + public void updateTaskCreateProgress(Date now, PartitionEnum partitionEnum) { + int partitionId = partitionEnum.getId(); + + String taskKey = DailyTaskTypeEnum.GUILD_CREATE.name(); + List taskLevelInfos = guildTaskLevelInfoService.listGuildTask(partitionId, taskKey); + if (CollectionUtils.isEmpty(taskLevelInfos)) { + return; + } + + ZonedDateTime nowzonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId()); + if (nowzonedDateTime.getHour() == 0 && nowzonedDateTime.getMinute() == 0) {//0点0分统计前一天的数据 + nowzonedDateTime = nowzonedDateTime.minusDays(1); + } + String statDate = nowzonedDateTime.format(DateTimeUtil.dateFormatter); + + ZonedDateTime before14DayBegin = nowzonedDateTime.minusDays(14).withHour(0).withMinute(0).withSecond(0); + Date before14DayBeginEastEightDate = DateTimeUtil.convertToEastEightZone(before14DayBegin + .format(DateTimeUtil.datetimeFormatter), partitionEnum.getZoneId()); + + List guilds = guildService.listGreaterCreateTime(partitionId, before14DayBeginEastEightDate); + if (CollectionUtils.isEmpty(guilds)) { + return; + } + Set guildIds = guilds.stream().map(Guild::getId).collect(Collectors.toSet()); + Map guildMemberNumMap = guildMemberService.mapGuildMemberNum(guildIds); + RMap guildStatDateDiamondMap = guildDiamondStatisticsDayService.guildStatDateDiamondMap(partitionId, statDate); + guildStatDateDiamondMap.expire(Duration.ofDays(1)); + Map diamondMap = guildStatDateDiamondMap + .getAll(guildIds); + + List resultList = new ArrayList<>(); + Integer maxReachMinutes = taskLevelInfos.stream().max(Comparator.comparing(GuildTaskLevelInfo::getAnchorMicReachMinutes)) + .map(GuildTaskLevelInfo::getAnchorMicReachMinutes).get(); + Map reachAnchorNumMap = new HashMap<>(); + if (maxReachMinutes > 0) { + reachAnchorNumMap = guildMicStatisticsPolicy2Service.mapByPartitionGuildDate(statDate, partitionId, maxReachMinutes, new ArrayList<>(guildIds)); + } + for (Guild guild : guilds) { + Integer guildId = guild.getId(); + List existRecords = guildTaskReachRecordService.list(partitionId, guildId, taskKey); + String cycleDate = DateTimeUtil.convertWithZoneId(guild.getCreateTime(), partitionEnum.getZoneId()) + .format(DateTimeUtil.dateFormatter); + this.calProgress(partitionEnum, guild, taskLevelInfos, existRecords, resultList, cycleDate, statDate, + guildMemberNumMap, diamondMap, reachAnchorNumMap, now); + } + + if (CollectionUtils.isNotEmpty(resultList)) { + guildTaskReachRecordService.saveOrUpdateBatch(resultList); + } + } + + private void calProgress(PartitionEnum partitionEnum, Guild guild, List taskLevelInfos, + List existRecords, List resultList, + String cycleDate, String statDate, Map guildMemberNumMap, + Map diamondMap, Map reachAnchorNumMap, Date now) { + Integer guildId = guild.getId(); + int partitionId = partitionEnum.getId(); + BigDecimal diamond = diamondMap.getOrDefault(guildId, BigDecimal.ZERO); + Integer anchorReachNum = reachAnchorNumMap.getOrDefault(guildId, 0); + Long memberNum = guildMemberNumMap.getOrDefault(guildId, 0L); + for (GuildTaskLevelInfo levelInfo : taskLevelInfos) { + if (CollectionUtils.isEmpty(existRecords)) { + boolean calNext = this.addNewGuildReachRecord(cycleDate, resultList, levelInfo, guildId, partitionId, + statDate, diamond, anchorReachNum, memberNum.intValue()); + if (!calNext) { + break; + } + } else { + Map existRecordMap = existRecords.stream() + .collect(Collectors.toMap(GuildTaskReachRecord::getLevel, x -> x)); + + GuildTaskReachRecord existOne = existRecordMap.get(levelInfo.getLevel()); + if (existOne != null) { + //不是当天并且等级已经达标,计算下一级 + if (!statDate.equals(existOne.getStatDate()) && existOne.getReachStatus() <= 0){ + this.addNewGuildReachRecord(cycleDate, resultList, levelInfo, guildId, partitionId, statDate, + diamond, anchorReachNum, memberNum.intValue()); + } else if (statDate.equals(existOne.getStatDate())) { + existOne.setDiamondNum(levelInfo.getDiamondNum()); + existOne.setAnchorNum(levelInfo.getAnchorNum()); + existOne.setAnchorMicReachNum(levelInfo.getAnchorMicReachNum()); + existOne.setLevel(levelInfo.getLevel()); + existOne.setGuildTaskId(levelInfo.getGuildTaskId()); + boolean calNext = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue() + && memberNum >= levelInfo.getAnchorNum() + && anchorReachNum >= levelInfo.getAnchorMicReachNum(); + existOne.setReachStatus(calNext ? 1 : 0); + existOne.setUpdateTime(now); + resultList.add(existOne); + if (!calNext) { + break; + } + } + } else { + boolean calNext = this.addNewGuildReachRecord(cycleDate, resultList, levelInfo, guildId, partitionId, + statDate, diamond, anchorReachNum, memberNum.intValue()); + if (!calNext) { + break; + } + } + } + } + } + + public boolean addNewGuildReachRecord(String cycleDate, List resultList, GuildTaskLevelInfo levelInfo, Integer guildId, + Integer partitionId, String statDate, BigDecimal diamond, Integer anchorReachNum, Integer memberNum) { + GuildTaskReachRecord reachRecord = new GuildTaskReachRecord(); + reachRecord.setId(null); + reachRecord.setCycleDate(cycleDate); + reachRecord.setGuildTaskId(levelInfo.getGuildTaskId()); + reachRecord.setPartitionId(partitionId); + reachRecord.setStatDate(statDate); + reachRecord.setGuildId(guildId); + reachRecord.setTaskKey(levelInfo.getTaskKey()); + reachRecord.setLevel(levelInfo.getLevel()); + reachRecord.setDiamondNum(diamond); + reachRecord.setAnchorNum(memberNum); + reachRecord.setAnchorMicReachNum(anchorReachNum); + boolean calNext = diamond.doubleValue() >= levelInfo.getDiamondNum().doubleValue() + && memberNum >= levelInfo.getAnchorNum() + && anchorReachNum >= levelInfo.getAnchorMicReachNum(); + reachRecord.setReachStatus(calNext ? 1 : 0); + reachRecord.setCreateTime(new Date()); + resultList.add(reachRecord); + if (!calNext) { //当前登记未达到,不再计算下一登记 + return false; + } + return true; + } + + public void updateWeekTaskProgress(Date now, PartitionEnum partitionEnum) { + + int partitionId = partitionEnum.getId(); + + List taskLevelInfos = guildTaskLevelInfoService.listGuildTaskList(partitionId, + Arrays.asList(DailyTaskTypeEnum.GUILD_MIC.name(), DailyTaskTypeEnum.GUILD_MIC_ONE.name())); + if (CollectionUtils.isEmpty(taskLevelInfos)) { + return; + } + + ZonedDateTime nowzonedDateTime = DateTimeUtil.convertWithZoneId(now, partitionEnum.getZoneId()); + if (nowzonedDateTime.getHour() == 0 && nowzonedDateTime.getMinute() == 0) {//0点0分统计前一天的数据 + nowzonedDateTime = nowzonedDateTime.minusDays(1); + } + String statDate = nowzonedDateTime.format(DateTimeUtil.dateFormatter); + + ZonedDateTime weekBegin = nowzonedDateTime.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + String cycleDate = weekBegin.format(DateTimeUtil.datetimeFormatter); + + List guilds = guildService.listVaildGuildByPartitionId(partitionId); + if (CollectionUtils.isEmpty(guilds)) { + return; + } + Set guildIds = guilds.stream().map(Guild::getId).collect(Collectors.toSet()); + Map guildMemberNumMap = guildMemberService.mapGuildMemberNum(guildIds); + RMap guildStatDateDiamondMap = guildDiamondStatisticsDayService.guildStatDateDiamondMap(partitionId, statDate); + guildStatDateDiamondMap.expire(Duration.ofDays(1)); + Map diamondMap = guildStatDateDiamondMap.getAll(guildIds); + + List resultList = new ArrayList<>(); + + Map> groupByTaksLevelMap = taskLevelInfos.stream().collect(Collectors.groupingBy(GuildTaskLevelInfo::getTaskKey)); + for (Map.Entry> entry : groupByTaksLevelMap.entrySet()) { + String taskKey = entry.getKey(); + List levelInfos = entry.getValue(); + Integer maxReachMinutes = levelInfos.stream().max(Comparator.comparing(GuildTaskLevelInfo::getAnchorMicReachMinutes)) + .map(GuildTaskLevelInfo::getAnchorMicReachMinutes).get(); + Map reachAnchorNumMap = new HashMap<>(); + if (maxReachMinutes > 0) { + reachAnchorNumMap = guildMicStatisticsPolicy2Service.mapByPartitionGuildDate(statDate, partitionId, maxReachMinutes, new ArrayList<>(guildIds)); + } + levelInfos.sort(Comparator.comparing(GuildTaskLevelInfo::getLevel)); + for (Guild guild : guilds) { + Integer guildId = guild.getId(); + List existRecords = guildTaskReachRecordService.listByCycle(cycleDate, partitionId, guildId, taskKey); + this.calProgress(partitionEnum, guild, taskLevelInfos, existRecords, resultList, cycleDate, statDate, + guildMemberNumMap, diamondMap, reachAnchorNumMap, now); + } + } + if (CollectionUtils.isNotEmpty(resultList)) { + guildTaskReachRecordService.saveOrUpdateBatch(resultList); + } + } + + + public List getGuildTaskLevelInfoList(Integer partitionId, Integer guildId, Byte type) { + List resultList = new ArrayList<>(); +// List guildTaskLevelInfos = guildTaskLevelInfoService.listGuildTasks(partitionId, type); +// if (CollectionUtils.isEmpty(guildTaskLevelInfos)) { +// return resultList; +// } + + return resultList; + } +} diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildMicStatisticsPolicy2Mapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildMicStatisticsPolicy2Mapper.xml index fef1669d2..b1f7c7b71 100644 --- a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildMicStatisticsPolicy2Mapper.xml +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildMicStatisticsPolicy2Mapper.xml @@ -66,6 +66,20 @@ where stat_date = #{statDate} and partition_id = #{partitionId} + + diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskLevelInfoMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskLevelInfoMapper.xml new file mode 100644 index 000000000..e95ce4cfd --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskLevelInfoMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskLevelRewardMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskLevelRewardMapper.xml new file mode 100644 index 000000000..eec98c471 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskLevelRewardMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskLevelRewardRecordMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskLevelRewardRecordMapper.xml new file mode 100644 index 000000000..31d45ed75 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskLevelRewardRecordMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskReachRecordMapper.xml b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskReachRecordMapper.xml new file mode 100644 index 000000000..9be28abe6 --- /dev/null +++ b/accompany-business/accompany-business-service/src/main/resources/accompany/sqlmappers/GuildTaskReachRecordMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java index b4ff7df4c..ef7dd6b56 100644 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/activity/dailytask/DailyTaskController.java @@ -1,8 +1,10 @@ package com.accompany.business.controller.activity.dailytask; +import cn.hutool.core.date.DateUtil; import com.accompany.business.constant.dailytask.DailyTaskTypeEnum; import com.accompany.business.service.dailytask.DailyTaskService; import com.accompany.business.service.dailytask.DailyTaskShopService; +import com.accompany.business.service.guildtask.GuildTaskService; import com.accompany.business.vo.dailytask.DailyTaskShopCenterVo; import com.accompany.business.vo.dailytask.DailyTaskTabVo; import com.accompany.business.vo.dailytask.DailyTaskVo; @@ -10,6 +12,7 @@ import com.accompany.business.vo.dailytask.UserGoldBeanBillVo; import com.accompany.common.annotation.Authorization; import com.accompany.common.result.BusiResult; import com.accompany.common.utils.IPUtils; +import com.accompany.core.enumeration.PartitionEnum; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -31,6 +34,8 @@ public class DailyTaskController { private DailyTaskService dailyTaskService; @Autowired private DailyTaskShopService dailyTaskShopService; + @Autowired + private GuildTaskService guildTaskService; @ApiOperation(value = "任务列表-tab", httpMethod = "GET") @@ -88,4 +93,15 @@ public class DailyTaskController { return dailyTaskShopService.bill(uid, billType, pageNo, pageSize); } + @ApiOperation(value = "任务执行", ignoreJsonView = true) + @GetMapping("/executeTaskCreate") + public void executeTaskCreate(String date, Integer partitionId) { + guildTaskService.updateTaskCreateProgress(DateUtil.parseDateTime(date), PartitionEnum.getByPartitionId(partitionId)); + } + + @ApiOperation(value = "每周任务执行", ignoreJsonView = true) + @GetMapping("/executeTaskWeek") + public void executeTaskWeek(String date, Integer partitionId) { + guildTaskService.updateTaskCreateProgress(DateUtil.parseDateTime(date), PartitionEnum.getByPartitionId(partitionId)); + } } diff --git a/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/GuildCreateTask.java b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/GuildCreateTask.java new file mode 100644 index 000000000..27120b5bf --- /dev/null +++ b/accompany-scheduler/accompany-scheduler-service/src/main/java/com/accompany/scheduler/task/dailytask/GuildCreateTask.java @@ -0,0 +1,45 @@ +package com.accompany.scheduler.task.dailytask; + +import com.accompany.business.service.guildtask.GuildTaskService; +import com.accompany.core.enumeration.PartitionEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; + +@Component +@Slf4j +public class GuildCreateTask { + + @Autowired + private GuildTaskService guildTaskService; + + @Scheduled(cron = "0 0/10 * * * ?") + public void guildCreateTaskByMinutes() { + Date now = new Date(); + log.info("GuildCreateTaskByMinutes start"); + PartitionEnum[] values = PartitionEnum.values(); + for (PartitionEnum partitionEnum : values) { + try { + guildTaskService.updateTaskCreateProgress(now, partitionEnum); + } catch (Exception e) { + log.error("GuildCreateTaskByMinutes error:{}" , e.getMessage(), e); + } + } + log.info("GuildCreateTaskByMinutes end"); + + log.info("GuildWeekTaskByMinutes start"); + + for (PartitionEnum partitionEnum : values) { + try { + guildTaskService.updateWeekTaskProgress(now, partitionEnum); + } catch (Exception e) { + log.error("GuildWeekTaskByMinutes error:{}" , e.getMessage(), e); + } + } + + log.info("GuildWeekTaskByMinutes end"); + } +}