package com.hollywood.applet.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.hollywood.applet.dto.PerformanceJoinDto; import com.hollywood.applet.dto.TrueOrFalse; import com.hollywood.applet.query.TPerformerActivityQuery; import com.hollywood.applet.query.TPerformerActivityUserQuery; import com.hollywood.applet.query.TUserQuery; import com.hollywood.applet.service.TPerformerActivityService; import com.hollywood.applet.service.TPerformerActivityUserService; import com.hollywood.applet.service.TUserService; import com.hollywood.applet.utils.LoginInfoUtil; import com.hollywood.common.basic.ApiResult; import com.hollywood.common.basic.PageInfo; import com.hollywood.common.exception.ServiceException; import com.hollywood.common.model.TPerformerActivity; import com.hollywood.common.model.TPerformerActivityUser; import com.hollywood.common.model.TPopularActivityUser; import com.hollywood.common.model.TUser; import com.hollywood.common.redis.RedisAutoTemplate; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** *

* 演员活动 前端控制器 *

* * @author xiaochen * @since 2024-02-29 */ @Api(tags = "演员活动") @RestController @RequestMapping("/tPerformerActivity") public class TPerformerActivityController { private final TPerformerActivityService performerActivityService; private final TPerformerActivityUserService performerActivityUserService; @Autowired private LoginInfoUtil loginInfoUtil; @Autowired private RedisAutoTemplate redisAutoTemplate; @Autowired private TUserService userService; @Autowired public TPerformerActivityController(TPerformerActivityService performerActivityService, TPerformerActivityUserService performerActivityUserService) { this.performerActivityService = performerActivityService; this.performerActivityUserService = performerActivityUserService; } /** * 获取演员活动列表 */ @ApiOperation(value = "获取演员活动分页列表") @PostMapping(value = "/pageList") public ApiResult> pageList(@RequestBody TPerformerActivityQuery query) { Long userId = loginInfoUtil.getUserId(); List ids = new ArrayList<>(); if (query.getMine()!=null&&query.getMine()==1){ List list = performerActivityUserService.list(Wrappers.lambdaQuery(TPerformerActivityUser.class) .eq(TPerformerActivityUser::getUserId, userId).eq(TPerformerActivityUser::getIsPay,2)); ids = list.stream() .map(TPerformerActivityUser::getActivityId) .collect(Collectors.toList()); if (ids.isEmpty()){ return ApiResult.success(new PageInfo<>()); } } return ApiResult.success(performerActivityService.pageList(query,ids)); } @ApiOperation(value = "演员活动-立即投票前获取可投票数") @GetMapping(value = "/vote-get/{acId}") public ApiResult voteGet(@PathVariable Long acId) { Long userId = loginInfoUtil.getUserId(); TPerformerActivity byId = performerActivityService.getById(acId); if (byId.getVoteType()==1){ String str = redisAutoTemplate.getStr(byId.getId() + ":" + userId + ":vote"); if (str==null){ redisAutoTemplate.setStr(byId.getId() + ":" + userId + ":vote", String.valueOf(byId.getVoteCount())); str= String.valueOf(byId.getVoteCount()); return ApiResult.success(str); }else { return ApiResult.success(redisAutoTemplate.getStr(byId.getId() + ":" + userId + ":vote")); } }else{ String str = redisAutoTemplate.getStr(byId.getId() + ":" + userId + ":vote"); if (str==null){ LocalTime currentTime = LocalTime.now(); // 获取凌晨12点时间 LocalTime midnight = LocalTime.of(0, 0); // 计算当前时间到凌晨12点的秒数差 long secondsUntilMidnight = getSecondsUntilEndOfDay(); redisAutoTemplate.setStr(byId.getId() + ":" + userId + ":vote", String.valueOf(byId.getVoteCount()),secondsUntilMidnight); str= String.valueOf(byId.getVoteCount()); return ApiResult.success(str); }else { return ApiResult.success(redisAutoTemplate.getStr(byId.getId() + ":" + userId + ":vote")); } } } @ApiOperation(value = "演员推荐-立即投票前获取可投票数") @GetMapping(value = "/vote") public ApiResult vote() { Long userId = loginInfoUtil.getUserId(); String str = redisAutoTemplate.getStr( userId + ":vote"); if (str==null) { LocalTime currentTime = LocalTime.now(); // 获取凌晨12点时间 LocalTime midnight = LocalTime.of(0, 0); // 计算当前时间到凌晨12点的秒数差 long secondsUntilMidnight = getSecondsUntilEndOfDay(); redisAutoTemplate.setStr( userId + ":vote","10" , secondsUntilMidnight); str = String.valueOf(10); } return ApiResult.success(str); } public static long getSecondsUntilEndOfDay() { LocalDateTime currentTime = LocalDateTime.now(); LocalDateTime endOfDay = LocalDateTime.of(currentTime.toLocalDate(), LocalTime.MAX); long remainingSeconds = currentTime.until(endOfDay, ChronoUnit.SECONDS); return remainingSeconds; } @ApiOperation(value = "演员推荐-投票操作") @GetMapping(value = "/vote-num") public ApiResult voteUser(Integer num,Long acId) { Long userId = loginInfoUtil.getUserId(); TUser byId = userService.getById(userId); TrueOrFalse trueOrFalse = new TrueOrFalse(); LocalDateTime currentTime = LocalDateTime.now(); Date date = new Date(); if (byId.getVipType()==3|| byId.getEndTime().isBefore(currentTime)){ throw new ServiceException("当前活动仅限会员参与"); } // // Long userId = loginInfoUtil.getUserId(); // // TUser byId = userService.getById(acId); String str = redisAutoTemplate.getStr(userId + ":vote"); Integer i = Integer.valueOf(str); int i1 = i - num; // 计算当前时间到凌晨12点的秒数差 long secondsUntilMidnight = getSecondsUntilEndOfDay(); redisAutoTemplate.setStr( userId + ":vote", String.valueOf(i1),secondsUntilMidnight); //改变演员的投票数量 TUser byId1 = userService.getById(acId); Integer voteCount1 = byId1.getHot(); if (voteCount1==null){ voteCount1=1; }else { voteCount1 = voteCount1+num; } byId1.setHot(voteCount1); userService.updateById(byId1); return ApiResult.success(); } @ApiOperation(value = "活动列表-投票操作") @GetMapping(value = "/vote-list") public ApiResult vote( Long peId, Integer num) { Long userId = loginInfoUtil.getUserId(); TUser byId2 = userService.getById(userId); TrueOrFalse trueOrFalse = new TrueOrFalse(); LocalDateTime currentTime = LocalDateTime.now(); Date date = new Date(); if (byId2.getVipType()==3|| byId2.getEndTime().isBefore(currentTime)){ throw new ServiceException("当前活动仅限会员参与"); } // Long userId = loginInfoUtil.getUserId(); TPerformerActivityUser byId1 = performerActivityUserService.getById(peId); TPerformerActivity byId = performerActivityService.getById(byId1.getActivityId()); redisAutoTemplate.addSet("performer:hot:"+byId.getId(), userId); // LocalDateTime currentTime = LocalDateTime.now(); if (byId.getStatus()==2){ throw new ServiceException("当前活动已下架"); } if (byId.getEndTime().isBefore(currentTime)){ throw new ServiceException("当前活动已结束"); } long secondsUntilMidnight = getSecondsUntilEndOfDay(); String str = redisAutoTemplate.getStr(byId.getId() + ":" + userId + ":vote"); Integer i = Integer.valueOf(str); int i1 = i - num; if (i1<0){ return ApiResult.failed("票数不足,请重试"); } if (byId.getVoteType()==1) { redisAutoTemplate.setStr(byId.getId() + ":" + userId + ":vote", String.valueOf(i1)); }else { redisAutoTemplate.setStr(byId.getId() + ":" + userId + ":vote", String.valueOf(i1),secondsUntilMidnight); } //改变活动投票数量 // Integer voteCount = byId.getVoteCount(); // if (voteCount==null){ // voteCount=num; // }else { // voteCount = voteCount+num; // } // byId.setVoteCount(voteCount); // performerActivityService.updateById(byId); //改变演员的投票数量 Integer voteCount1 = byId1.getGainVotesCount(); if (voteCount1==null){ voteCount1=num; }else { voteCount1 = voteCount1+num; } byId1.setGainVotesCount(voteCount1); performerActivityUserService.updateById(byId1); return ApiResult.success(); } /** * 获取演员活动参与人员列表 */ @ApiOperation(value = "获取演员活动参与人员列表") @PostMapping(value = "/userJoin") public ApiResult> userPageList(@Validated @RequestBody TPerformerActivityUserQuery query) { return ApiResult.success(performerActivityUserService.userPageList(query)); } /** * 查看演员活动详情 */ @ApiOperation(value = "查看演员活动详情") @GetMapping(value = "/getDetailById") public ApiResult getDetailById(@RequestParam Long id) { Long userId = loginInfoUtil.getUserId(); TPerformerActivity byId = performerActivityService.getById(id); List list = performerActivityUserService.list(Wrappers.lambdaQuery(TPerformerActivityUser.class).eq(TPerformerActivityUser::getIsPay,2).eq(TPerformerActivityUser::getUserId, userId).eq(TPerformerActivityUser::getActivityId,byId.getId())); if (!list.isEmpty()){ byId.setIsJoin(1); } List count = performerActivityUserService.list(Wrappers.lambdaQuery(TPerformerActivityUser.class).eq(TPerformerActivityUser::getActivityId,byId.getId())); byId.setHot(redisAutoTemplate.getSet("performer:hot:"+byId.getId()).size()); return ApiResult.success(byId); } @ApiOperation(value = "查看演员详情") @GetMapping(value = "/getPerformById") public ApiResult getPerformById(@RequestParam Long id) { return ApiResult.success(performerActivityUserService.getById(id)); } @ApiOperation(value = "参加演员活动") @PostMapping(value = "/join") public ApiResult join(@RequestBody PerformanceJoinDto performanceJoinDto) throws Exception { Long userId = loginInfoUtil.getUserId(); TUser byId = userService.getById(userId); TrueOrFalse trueOrFalse = new TrueOrFalse(); LocalDateTime currentTime = LocalDateTime.now(); Date date = new Date(); if (byId.getVipType() == 3 || byId.getEndTime().isBefore(currentTime)) { return ApiResult.failed("仅限会员报名"); } TPerformerActivity byId1 = performerActivityService.getById(performanceJoinDto.getAcId()); if (byId1.getStatus() == 2) { return ApiResult.failed("当前活动已下架"); } if (byId1.getRegistrationDeadlineTime() != null && byId1.getRegistrationDeadlineTime().isBefore(currentTime)) { return ApiResult.failed("当前活动已到截至报名时间"); // throw new ServiceException("当前活动已到截至报名时间"); } if (byId1.getEndTime().isBefore(currentTime)) { return ApiResult.failed("当前活动已结束"); // throw new ServiceException("当前活动已结束"); } List list = performerActivityUserService.list(Wrappers.lambdaQuery(TPerformerActivityUser.class).eq(TPerformerActivityUser::getIsPay, 2).eq(TPerformerActivityUser::getUserId, userId).eq(TPerformerActivityUser::getActivityId, performanceJoinDto.getAcId())); if (!list.isEmpty()) { return ApiResult.failed("当前用户已报名"); } return performerActivityService.join(performanceJoinDto, userId); } @ApiOperation(value = "获取演员推荐列表") @PostMapping(value = "/userPageList") public ApiResult> userPageList(@RequestBody TUserQuery query) { return ApiResult.success(userService.userPageList(query)); } @ApiOperation(value = "成为演员") @PostMapping(value = "/toBeAC") public ApiResult toBeAC(@RequestBody TUser user) { user.setId(loginInfoUtil.getUserId()); user.setAuditStatus(1); userService.updateById(user); return ApiResult.success(); } @ApiOperation(value = "编辑演员") @PostMapping(value = "/editAC") public ApiResult editAC(@RequestBody TUser user) { userService.updateById(user); return ApiResult.success(); } @ApiOperation(value = "获取用户详情(演员管理详情,演员审核详情通用)") @GetMapping(value = "/getUserDetailById") public ApiResult getUserDetailById(@RequestParam Long id) { TUser byId = userService.getById(id); return ApiResult.success(byId); } }