From 64f7ccb9ef8b5a0618e65cddc14b981c1f108ba3 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期一, 04 十一月 2024 09:01:59 +0800 Subject: [PATCH] 代码提交 --- xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserTreeController.java | 550 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 548 insertions(+), 2 deletions(-) diff --git a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserTreeController.java b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserTreeController.java index d3abb7d..19788bc 100644 --- a/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserTreeController.java +++ b/xinquan-modules/xinquan-user/src/main/java/com/xinquan/user/controller/client/ClientAppUserTreeController.java @@ -1,9 +1,39 @@ package com.xinquan.user.controller.client; -import org.springframework.web.bind.annotation.RequestMapping; +import cn.hutool.core.util.RandomUtil; +import com.alibaba.fastjson2.util.UUIDUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xinquan.common.core.domain.R; +import com.xinquan.common.core.utils.page.CollUtils; +import com.xinquan.common.core.utils.page.PageDTO; +import com.xinquan.common.core.web.domain.BaseModel; +import com.xinquan.common.security.service.TokenService; +import com.xinquan.common.security.utils.SecurityUtils; +import com.xinquan.system.api.RemoteUserService; +import com.xinquan.system.api.domain.*; +import com.xinquan.system.api.domain.vo.AppUserEnergyRecordVO; +import com.xinquan.system.api.domain.vo.WateringVO; +import com.xinquan.system.api.feignClient.SysUserClient; +import com.xinquan.system.api.model.LoginUser; +import com.xinquan.user.api.domain.dto.UserEnergyDTO; +import com.xinquan.user.api.domain.dto.UserExchangeRecordDTO; +import com.xinquan.user.domain.vo.EnergyVO; +import com.xinquan.user.domain.vo.ExchangeRecordVO; +import com.xinquan.user.service.*; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.*; -import org.springframework.web.bind.annotation.RestController; +import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.ArrayList; +import java.util.List; /** * <p> @@ -16,6 +46,522 @@ @RestController @RequestMapping("/client/app-user-tree") public class ClientAppUserTreeController { + @Resource + private AppUserTreeService appUserTreeService; + @Resource + private AppUserViewingHistoryService appUserViewingHistoryService; + @Resource + private AppUserService appUserService; + @Resource + private AppUserEnergyRecordService appUserEnergyRecordService; + @Resource + private PrizeService prizeService; + @Resource + private PrizeRedemptionRecordService prizeRedemptionRecordService; + @Resource + private RemoteUserService remoteUserService; + @Resource + private SysUserClient sysUserClient; + @PostMapping("/getUserTree") + @ApiOperation(value = "获取用户树苗",tags = "树苗打卡站") + public R<AppUserTree> getUserTree() { + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.tokenError("登录失效"); + } + Long userId = loginUser.getUserid(); + AppUser byId = appUserService.getById(userId); + byId.setIsFirst(2); + appUserService.updateById(byId); + // 查询用户今日观看疗愈多少秒 + LocalDateTime now = LocalDateTime.now(); + LocalDateTime startOfDay = now.toLocalDate().atStartOfDay(); + LocalDateTime endOfDay = now.toLocalDate().atTime(LocalTime.MAX); + List<AppUserViewingHistory> list = appUserViewingHistoryService + .lambdaQuery().eq(AppUserViewingHistory::getAppUserId, userId) + .eq(AppUserViewingHistory::getViewingType, 1) + .eq(BaseModel::getDelFlag,0) + .between(AppUserViewingHistory::getCreateTime, startOfDay,endOfDay).list(); + int temp = 0; + for (AppUserViewingHistory appUserViewingHistory : list) { + temp += appUserViewingHistory.getTimeLook(); + } + AppUserTree one = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId) + .eq(AppUserTree::getSowAgain,2).one(); + if (one == null){ + AppUserTree appUserTree = new AppUserTree(); + appUserTree.setAppUserId(userId); + appUserTree.setTreeLevelType(1); + appUserTree.setGrowthValue(0); + appUserTree.setSowAgain(2); + appUserTree.setCreateTime(LocalDateTime.now()); + // 如果用户的签到时间是今天 那么修改为已签到 + if (byId.getSignTime()!=null && byId.getSignTime().toLocalDate().equals(LocalDateTime.now().toLocalDate())){ + appUserTree.setIsSign(1); + }else{ + appUserTree.setIsSign(2); + } + if (temp>=60){ + appUserTree.setTaskOne(1); + appUserTree.setTaskTwo(1); + } + else if (temp>=30){ + appUserTree.setTaskOne(1); + appUserTree.setTaskTwo(2); + }else{ + appUserTree.setTaskOne(2); + appUserTree.setTaskTwo(2); + } + appUserTree.setEnergyValue(byId.getEnergyValue()); + appUserTree.setNextLevel(1000); + appUserTreeService.save(appUserTree); + return R.ok(appUserTree); + }else{ + if (temp>=60){ + one.setTaskOne(1); + one.setTaskTwo(1); + } + else if (temp>=30){ + one.setTaskOne(1); + one.setTaskTwo(2); + }else{ + one.setTaskOne(2); + one.setTaskTwo(2); + } + // 如果用户的签到时间是今天 那么修改为已签到 + if (byId.getSignTime()!=null&&byId.getSignTime().toLocalDate().equals(LocalDateTime.now().toLocalDate())){ + one.setIsSign(1); + }else{ + one.setIsSign(2); + } + switch (one.getTreeLevelType()){ + case 1: + one.setNextLevel(1000); + break; + case 2: + one.setNextLevel(1000); + break; + case 3: + one.setNextLevel(1000); + break; + case 4: + one.setNextLevel(1000); + break; + case 5: + one.setNextLevel(2000); + break; + case 6: + one.setNextLevel(2000); + break; + case 7: + one.setNextLevel(2000); + break; + case 8: + one.setNextLevel(2000); + break; + case 9: + one.setNextLevel(2400); + break; + case 10: + one.setNextLevel(2400); + break; + } + one.setEnergyValue(byId.getEnergyValue()); + return R.ok(one); + } + } + @Autowired + private TokenService tokenService; + @PostMapping("/restart") + @ApiOperation(value = "重新播种",tags = "树苗打卡站") + public R restart() { + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.tokenError("登录失效"); + } + Long userId = loginUser.getUserid(); + if(userId ==null || userId == 0)return R.tokenError("登录失效"); + AppUserTree one = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId) + .eq(AppUserTree::getSowAgain,2).one(); + one.setSowAgain(1); + appUserTreeService.updateById(one); + AppUserTree appUserTree = new AppUserTree(); + appUserTree.setAppUserId(userId); + appUserTree.setTreeLevelType(1); + appUserTree.setGrowthValue(0); + appUserTree.setSowAgain(2); + appUserTree.setCreateTime(LocalDateTime.now()); + appUserTreeService.save(appUserTree); + return R.ok(); + } + + @PostMapping("/watering") + @ApiOperation(value = "浇水 返回值true证明升级了 false没升级",tags = "树苗打卡站") + public R<WateringVO> watering() { + WateringVO wateringVO = new WateringVO(); + + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.tokenError("登录失效"); + } + Long userId = loginUser.getUserid(); + AppUser byId = appUserService.getById(userId); + if (byId.getEnergyValue() == 0){ + return R.energyValueError("能量值不足"); + + } + AppUserTree one = appUserTreeService.lambdaQuery().eq(AppUserTree::getAppUserId, userId) + .eq(AppUserTree::getSowAgain,2).one(); + Integer currentEnergyValue = byId.getEnergyValue(); + byId.setEnergyValue(0); + byId.setTotalEnergyValue(byId.getTotalEnergyValue()+currentEnergyValue); + appUserService.updateById(byId); + List<TreeLevelSetting> data = sysUserClient.getTreeGroup().getData(); + // 判断能否升级 + int temp = 0; + for (TreeLevelSetting datum : data) { + switch (datum.getTreeLevelType()){ + case 1: + temp=datum.getGrowthValue(); + break; + case 2: + temp=datum.getGrowthValue(); + break; + case 3: + temp=datum.getGrowthValue(); + break; + case 4: + temp=datum.getGrowthValue(); + break; + case 5: + temp=datum.getGrowthValue(); + break; + case 6: + temp=datum.getGrowthValue(); + break; + case 7: + temp=datum.getGrowthValue(); + break; + case 8: + temp=datum.getGrowthValue(); + break; + case 9: + temp=datum.getGrowthValue(); + break; + case 10: + temp=datum.getGrowthValue(); + break; + } + } + + wateringVO.setNextLevel(temp); + // 升级阈值 + if (one.getGrowthValue()+currentEnergyValue>=temp){ + // 升级咯 如果当前等级已经为10级 + if (one.getTreeLevelType()==10){ + one.setGrowthValue(one.getGrowthValue()+currentEnergyValue); + wateringVO.setIsNext(false); + int a= 0; + for (TreeLevelSetting datum : data) { + if (datum.getTreeLevelType()==10){ + a = datum.getGrowthValue(); + } + } + wateringVO.setNextLevel(a); + }else{ + + // 将当前成长值更新 + one.setGrowthValue(one.getGrowthValue()+currentEnergyValue-temp); + // 升级 + one.setTreeLevelType(one.getTreeLevelType()+1); + switch (one.getTreeLevelType()+1){ + case 2: + temp=1000; + break; + case 3: + temp=1000; + break; + case 4: + temp=1000; + break; + case 5: + temp=2000; + break; + case 6: + temp=2000; + break; + case 7: + temp=2000; + break; + case 8: + temp=2000; + break; + case 9: + temp=2400; + break; + case 10: + temp=2400; + break; + } + wateringVO.setNextLevel(temp); + wateringVO.setIsNext(true); + // 升级了 使用浇水后的能量值减去升级阈值 + wateringVO.setGrowthValue(one.getGrowthValue()); + } + }else{ + wateringVO.setIsNext(false); + wateringVO.setGrowthValue(one.getGrowthValue()+currentEnergyValue); + // 不能升级 + one.setGrowthValue(one.getGrowthValue()+currentEnergyValue); + appUserTreeService.updateById(one); + } + appUserTreeService.updateById(one); + return R.ok(wateringVO); + } + @PostMapping("/sign") + @ApiOperation(value = "签到",tags = "树苗打卡站") + public R sign() { + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.tokenError("登录失效"); + } + Long userId = loginUser.getUserid(); + // 给用户加10能量 + AppUser byId = appUserService.getById(userId); + byId.setTotalEnergyValue(byId.getTotalEnergyValue()+10); + byId.setEnergyValue(byId.getEnergyValue()+10); + byId.setSignTime(LocalDateTime.now()); + appUserService.updateById(byId); + return R.ok(); + } + + @PostMapping("/isFirst") + @ApiOperation(value = "是否首次进入 ",tags = "树苗打卡站") + public R isFirst() { + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.tokenError("登录失效"); + } + Long userId = loginUser.getUserid(); + if(userId ==null || userId == 0)return R.tokenError("登录失效"); + AppUser byId = appUserService.getById(userId); + if (byId.getIsFirst() == 1){ + byId.setIsFirst(2); + appUserService.updateById(byId); + return R.ok(true); + }else{ + return R.ok(false); + } + } + @PostMapping("/userEnergyDetail") + @ApiOperation(value = "用户详情-能量值明细 ",tags = "管理后台-用户管理") + public R<PageDTO<AppUserEnergyRecordVO>> userEnergyDetail(@RequestBody UserEnergyDTO dto) { + String startTime = null; + String endTime = null; + if (org.springframework.util.StringUtils.hasLength(dto.getTime())){ + String[] split = dto.getTime().split(" - "); + startTime = split[0]+"00:00:00"; + endTime = split[1]+"23:59:59"; + } + String userId = dto.getUid(); + EnergyVO energyVO = new EnergyVO(); + energyVO.setEnergyTotal(appUserService.getById(userId).getTotalEnergyValue()); + LambdaQueryWrapper<AppUserEnergyRecord> lambdaQueryWrapper = new LambdaQueryWrapper<>(); + if (dto.getState()!=null){ + switch (dto.getState()){ + case 1: + lambdaQueryWrapper.eq(AppUserEnergyRecord::getChangeType, 1); + break; + case 2: + lambdaQueryWrapper.eq(AppUserEnergyRecord::getChangeType, 2); + break; + } + } + lambdaQueryWrapper.like(StringUtils.hasLength(dto.getContent()),AppUserEnergyRecord::getReason,dto.getContent()); + lambdaQueryWrapper.between(startTime!=null,BaseModel::getCreateTime,startTime,endTime); + lambdaQueryWrapper.eq(AppUserEnergyRecord::getAppUserId, userId).orderByDesc(BaseModel::getCreateTime); + Page<AppUserEnergyRecord> page = appUserEnergyRecordService.page(new Page<>(dto.getPageCurr(), dto.getPageSize()), lambdaQueryWrapper); + if (CollUtils.isEmpty(page.getRecords())){ + PageDTO<AppUserEnergyRecordVO> empty = PageDTO.empty(page); + energyVO.setList(new ArrayList<AppUserEnergyRecordVO>()); + return R.ok(empty); + } + PageDTO<AppUserEnergyRecordVO> appUserEnergyRecordVOPageDTO = PageDTO.of(page, AppUserEnergyRecordVO.class); + for (AppUserEnergyRecordVO appUserEnergyRecordVO : appUserEnergyRecordVOPageDTO.getList()) { + AppUser byId = appUserService.getById(appUserEnergyRecordVO.getAppUserId()); + appUserEnergyRecordVO.setPhone(byId.getNickname()); + appUserEnergyRecordVO.setName(byId.getCellPhone()); + if (appUserEnergyRecordVO.getUpdateId()!=null){ + SysUser data = remoteUserService.getSysUserById(appUserEnergyRecordVO.getUpdateId() + "").getData(); + if (data!=null){ + appUserEnergyRecordVO.setPhone(data.getUserName()); + appUserEnergyRecordVO.setName(data.getNickName()); + } + + } + } + energyVO.setList(appUserEnergyRecordVOPageDTO.getList()); + return R.ok(appUserEnergyRecordVOPageDTO); + } + @PostMapping("/userExchangeRecordList") + @ApiOperation(value = "用户详情-兑换记录 ",tags = "管理后台-用户管理") + public R<PageDTO<ExchangeRecordVO>> userExchangeRecordList(@RequestBody UserExchangeRecordDTO dto) { + Page<PrizeRedemptionRecord> page = prizeRedemptionRecordService.lambdaQuery() + .eq(PrizeRedemptionRecord::getAppUserId, dto.getUid()) + .orderByDesc(BaseModel::getCreateTime).page(new Page<>(dto.getPageCurr(), dto.getPageSize())); + if (CollUtils.isEmpty(page.getRecords())){ + PageDTO<ExchangeRecordVO> empty = PageDTO.empty(page); + return R.ok(empty); + } + PageDTO<ExchangeRecordVO> res = PageDTO.of(page, ExchangeRecordVO.class); + for (ExchangeRecordVO record : res.getList()) { + Prize temp = prizeService.lambdaQuery() + .eq(Prize::getId, record.getId()).one(); + if (temp != null){ + record.setName(temp.getName()); + record.setCoverUrl(temp.getCoverUrl()); + record.setWorth(temp.getWorth()); + record.setEnergyValue(temp.getEnergyValue()); + } + } + return R.ok(res); + } + @PostMapping("/energyDetail") + @ApiOperation(value = "能量值明细 ",tags = "树苗打卡站") + @ApiImplicitParams({ + @ApiImplicitParam(name = "state", value = "状态1全部 2增加 3扣除", dataType = "int", required = false), + @ApiImplicitParam(name = "pageCurr", value = "分页参数,当前页码", dataType = "Integer", required = true), + @ApiImplicitParam(name = "pageSize", value = "分页参数,每页数量", dataType = "Integer", required = true) + }) + public R<List<AppUserEnergyRecordVO>> energyDetail(Integer state,Integer pageCurr,Integer pageSize) { + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.tokenError("登录失效"); + } + Long userId = loginUser.getUserid(); + EnergyVO energyVO = new EnergyVO(); + energyVO.setEnergyTotal(appUserService.getById(userId).getTotalEnergyValue()); + LambdaQueryWrapper<AppUserEnergyRecord> lambdaQueryWrapper = new LambdaQueryWrapper<>(); + if (state!=null){ + switch (state){ + case 2: + lambdaQueryWrapper.eq(AppUserEnergyRecord::getChangeType, 1); + break; + case 3: + lambdaQueryWrapper.eq(AppUserEnergyRecord::getChangeType, 2); + break; + } + } + lambdaQueryWrapper.eq(AppUserEnergyRecord::getAppUserId, userId).orderByDesc(BaseModel::getCreateTime); + Page<AppUserEnergyRecord> page = appUserEnergyRecordService.page(new Page<>(pageCurr, pageSize), lambdaQueryWrapper); + if (CollUtils.isEmpty(page.getRecords())){ + PageDTO<AppUserEnergyRecordVO> empty = PageDTO.empty(page); + energyVO.setList(new ArrayList<AppUserEnergyRecordVO>()); + return R.ok(new ArrayList<>()); + } + PageDTO<AppUserEnergyRecordVO> appUserEnergyRecordVOPageDTO = PageDTO.of(page, AppUserEnergyRecordVO.class); + energyVO.setList(appUserEnergyRecordVOPageDTO.getList()); + return R.ok(appUserEnergyRecordVOPageDTO.getList()); + } + @PostMapping("/goodsList") + @ApiOperation(value = "能量兑换礼物列表 ",tags = "树苗打卡站") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageCurr", value = "分页参数,当前页码", dataType = "Integer", required = true), + @ApiImplicitParam(name = "pageSize", value = "分页参数,每页数量", dataType = "Integer", required = true) + }) + public R<List<Prize>> goodsList(Integer pageCurr,Integer pageSize) { + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.tokenError("登录失效"); + } + Long userId = loginUser.getUserid(); + Page<Prize> page = prizeService.lambdaQuery() + .eq(Prize::getStatus, 1) + .orderByDesc(BaseModel::getCreateTime).page(new Page<>(pageCurr, pageSize)); + + if (CollUtils.isEmpty(page.getRecords())){ + PageDTO<Prize> empty = PageDTO.empty(page); + return R.ok(new ArrayList<>()); + } + for (Prize record : page.getRecords()) { + PrizeRedemptionRecord one = prizeRedemptionRecordService.lambdaQuery() + .eq(PrizeRedemptionRecord::getPrizeId, record.getId()) + .eq(PrizeRedemptionRecord::getAppUserId, userId).one(); + if (one == null){ + record.setReceiveStatus(2); + }else{ + record.setReceiveStatus(1); + } + } + PageDTO<Prize> res = PageDTO.of(page, Prize.class); + return R.ok(res.getList()); + } + @PostMapping("/exchange") + @ApiOperation(value = "兑换奖品 ",tags = "树苗打卡站") + @ApiImplicitParams({ + @ApiImplicitParam(name = "prizeId", value = "奖品id", dataType = "Long", required = true), + }) + public R exchange(Long prizeId) { + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.tokenError("登录失效"); + } + Long userId = loginUser.getUserid(); + AppUser byId1 = appUserService.getById(userId); + Prize byId = prizeService.getById(prizeId); + if (byId1.getTotalEnergyValue()<=byId.getEnergyValue()){ + return R.fail("能量值不足"); + } + PrizeRedemptionRecord one = prizeRedemptionRecordService.lambdaQuery() + .eq(PrizeRedemptionRecord::getPrizeId, prizeId) + .eq(PrizeRedemptionRecord::getAppUserId, userId).one(); + if (one!=null){ + return R.fail("奖品已兑换"); + } + PrizeRedemptionRecord prizeRedemptionRecord = new PrizeRedemptionRecord(); + prizeRedemptionRecord.setStatus(1); + prizeRedemptionRecord.setEnergyValue(byId.getEnergyValue()); + prizeRedemptionRecord.setPrizeId(prizeId); + prizeRedemptionRecord.setAppUserId(userId); + prizeRedemptionRecord.setCreateTime(LocalDateTime.now()); + String code = RandomUtil.randomNumbers(6); + prizeRedemptionRecord.setCode(code); + prizeRedemptionRecordService.save(prizeRedemptionRecord); + // 随机生成6位纯数字验证码 + return R.ok(code); + } + @PostMapping("/exchangeRecordList") + @ApiOperation(value = "兑换记录 ",tags = "树苗打卡站") + @ApiImplicitParams({ + @ApiImplicitParam(name = "pageCurr", value = "分页参数,当前页码", dataType = "Integer", required = true), + @ApiImplicitParam(name = "pageSize", value = "分页参数,每页数量", dataType = "Integer", required = true) + }) + public R<List<ExchangeRecordVO>> exchangeRecordList(Integer pageCurr, Integer pageSize) { + LoginUser loginUser = tokenService.getLoginUser(); + if (loginUser==null){ + return R.tokenError("登录失效"); + } + Long userId = loginUser.getUserid(); + Page<PrizeRedemptionRecord> page = prizeRedemptionRecordService.lambdaQuery() + .eq(PrizeRedemptionRecord::getAppUserId, userId) + .orderByDesc(BaseModel::getCreateTime).page(new Page<>(pageCurr, pageSize)); + if (CollUtils.isEmpty(page.getRecords())){ + PageDTO<ExchangeRecordVO> empty = PageDTO.empty(page); + return R.ok(new ArrayList<ExchangeRecordVO>()); + } + PageDTO<ExchangeRecordVO> res = PageDTO.of(page, ExchangeRecordVO.class); + for (ExchangeRecordVO record : res.getList()) { + Prize temp = prizeService.lambdaQuery() + .eq(Prize::getId, record.getPrizeId()).one(); + if (temp != null){ + record.setName(temp.getName()); + record.setCoverUrl(temp.getCoverUrl()); + record.setWorth(temp.getWorth()); + record.setEnergyValue(temp.getEnergyValue()); + } + } + return R.ok(res.getList()); + } } -- Gitblit v1.7.1