From 2eee3f3af2ad8d2bc54954c97424a7da36deaaec Mon Sep 17 00:00:00 2001 From: 44323 <443237572@qq.com> Date: 星期四, 30 五月 2024 14:08:24 +0800 Subject: [PATCH] bug修改 --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java | 781 +++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 574 insertions(+), 207 deletions(-) diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java index 8fd56b1..737d3b2 100644 --- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java +++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java @@ -3,8 +3,9 @@ import com.alipay.api.AlipayApiException; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ruoyi.common.core.constant.RedisConstants; import com.ruoyi.common.core.domain.R; -import com.ruoyi.common.core.utils.JwtUtils; +import com.ruoyi.common.core.exception.GlobalException; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.common.redis.service.RedisService; @@ -12,34 +13,26 @@ import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.management.api.feignClient.ManagementClient; -import com.ruoyi.management.api.model.TFeedback; -import com.ruoyi.management.api.model.TPage; -import com.ruoyi.management.api.model.TUseGuide; -import com.ruoyi.management.api.model.TVipSet; +import com.ruoyi.management.api.model.*; import com.ruoyi.management.api.query.UseGuideQuery; -import com.ruoyi.study.domain.TUser; -import com.ruoyi.study.domain.TVipOrder; +import com.ruoyi.study.domain.*; import com.ruoyi.study.dto.AppUserQuery; import com.ruoyi.study.dto.UserInfoQuery; -import com.ruoyi.study.service.ITUserService; -import com.ruoyi.study.service.IVipOrderService; +import com.ruoyi.study.request.RegisterPhoneRequest; +import com.ruoyi.study.service.*; import com.ruoyi.study.utils.PayMoneyUtil; import com.ruoyi.study.utils.UUIDUtil; import com.ruoyi.study.vo.*; -import com.ruoyi.system.api.domain.SysRole; -import com.ruoyi.system.api.domain.SysUser; -import com.ruoyi.system.api.model.LoginUser; import com.ruoyi.system.api.model.LoginUserParent; -import io.jsonwebtoken.Claims; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import org.apache.poi.ss.formula.functions.T; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; @@ -66,12 +59,23 @@ private ManagementClient managementClient; @Autowired private TokenService tokenService; + @Resource + private RedisService redisService; + @Resource + private ITUserShareService userShareService; + + @PostMapping("/getUserById/{id}") + @ApiOperation(value = "根据用户id 获取用户信息", tags = {"管理后台-用户管理"}) + public R<TUser> getUserById(@PathVariable("id") Integer id) { + TUser byId = userService.getById(id); + return R.ok(byId); + } @PostMapping("/vipInfo") @ApiOperation(value = "会员中心-获取会员说明、当前登录用户是否为会员、会员购买规格", tags = {"家长端-个人中心"}) - public AjaxResult<List<VipInfoVO>> vipInfo() { - if (tokenService.getLoginUser1() == null){ - return AjaxResult.tokenError("登录失效",new Object()); + public R<List<VipInfoVO>> vipInfo() { + if (tokenService.getLoginUser1() == null) { + throw new GlobalException("登录失效!"); } List<VipInfoVO> vipInfoVOS = new ArrayList<>(); List<TVipSet> data = managementClient.getVipSet1().getData(); @@ -82,54 +86,40 @@ Integer userid = tokenService.getLoginUser1().getUserid(); TUser byId = userService.getById(userid); // 先判断vipEndTime - if (byId.getVipEndTime() == null){ + if (byId.getVipEndTime() == null) { vipInfoVO.setIsVip(0); - }else{ + } else { // 判断会员到期时间是否大于当前时间 - if (byId.getVipEndTime().getTime() > new Date().getTime()){ + if (byId.getVipEndTime().getTime() > new Date().getTime()) { vipInfoVO.setIsVip(1); - }else{ + } else { vipInfoVO.setIsVip(0); } } vipInfoVO.setTime(datum.getTime()); vipInfoVO.setAmount(datum.getAmount()); + vipInfoVOS.add(vipInfoVO); } - return AjaxResult.ok(vipInfoVOS); + return R.ok(vipInfoVOS); } + @Autowired private PayMoneyUtil payMoneyUtil; - - @PostMapping("/order") - @ApiOperation(value = "购买会员下单操作", tags = {"家长端-个人中心"}) + @PostMapping("/pay") + @ApiOperation(value = "购买会员支付操作", tags = {"家长端-个人中心"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), @ApiImplicitParam(name = "payType", value = "支付类型 1=微信 2=支付宝", required = true), + @ApiImplicitParam(name = "orderId", value = "订单id", required = true), @ApiImplicitParam(name = "id", value = "会员规格id", required = true), }) - public AjaxResult order(Integer payType,Integer id) throws Exception { - if (tokenService.getLoginUser1() == null){ - return AjaxResult.tokenError("登录失效",new Object()); - } - Integer userid = tokenService.getLoginUser1().getUserid(); - TVipOrder tVipOrder = new TVipOrder(); - List<TVipSet> data = managementClient.getVipSet1().getData(); - Integer time = 0; - for (TVipSet datum : data) { - if (datum.getId() == id){ - tVipOrder.setMoney(datum.getAmount()); - time = datum.getTime(); - } - } - tVipOrder.setPayState(1); - tVipOrder.setUserId(userid); - tVipOrder.setPayType(payType); - tVipOrder.setCount(time); - switch (payType){ + public AjaxResult pay(Integer payType, Integer orderId, Integer id) throws Exception { + TVipOrder tVipOrder = vipOrderService.getById(orderId); + switch (payType) { case 1: return payMoneyUtil.weixinpay ("购买会员", "", - id+"_"+tVipOrder.getId() + "_"+ + id + "_" + tVipOrder.getId() + "_" + UUIDUtil.getRandomCode(8), tVipOrder.getMoney().toString(), "/base/wxPayBuyVip", "APP", ""); @@ -138,13 +128,66 @@ ("购买会员", "购买会员下单支付", "", - id+"_"+tVipOrder.getId()+"_"+ + id + "_" + tVipOrder.getId() + "_" + UUIDUtil.getRandomCode(8), tVipOrder.getMoney().toString(), "/base/aliPayBuyVip"); } return AjaxResult.success(); } + @PostMapping("/order") + @ApiOperation(value = "购买会员下单操作", tags = {"家长端-个人中心"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), + @ApiImplicitParam(name = "payType", value = "支付类型 1=微信 2=支付宝", required = true), + @ApiImplicitParam(name = "id", value = "会员规格id", required = true), + }) + public R<PayVO> order(Integer payType, Integer id) throws Exception { + if (tokenService.getLoginUser1() == null) { + return R.tokenError("登录失效"); + } + Integer userid = tokenService.getLoginUser1().getUserid(); + TVipOrder tVipOrder = new TVipOrder(); + List<TVipSet> data = managementClient.getVipSet1().getData(); + Integer time = 0; + for (TVipSet datum : data) { + if (datum.getId() == id) { + tVipOrder.setMoney(datum.getAmount()); + time = datum.getTime(); + } + } + tVipOrder.setPayState(1); + tVipOrder.setUserId(userid); + tVipOrder.setPayType(payType); + tVipOrder.setCount(time); + vipOrderService.save(tVipOrder); + PayVO payVO = new PayVO(); + payVO.setOrderId(tVipOrder.getId()); + payVO.setId(id); + + + return R.ok(payVO); +// switch (payType) { +// case 1: +// return payMoneyUtil.weixinpay +// ("购买会员", "", +// id + "_" + tVipOrder.getId() + "_" + +// UUIDUtil.getRandomCode(8), +// tVipOrder.getMoney().toString(), +// "/base/wxPayBuyVip", "APP", ""); +// case 2: +// return payMoneyUtil.alipay +// ("购买会员", +// "购买会员下单支付", +// "", +// id + "_" + tVipOrder.getId() + "_" + +// UUIDUtil.getRandomCode(8), +// tVipOrder.getMoney().toString(), +// "/base/aliPayBuyVip"); +// } + + } + @ResponseBody @PostMapping("/base/aliPayBuyVip") public void addVipPaymentAliCallback(HttpServletRequest request, HttpServletResponse response) { @@ -156,9 +199,9 @@ // 会员规格id String s = out_trade_no.split("_")[0]; Integer integer = Integer.valueOf(s); - Integer time = 0; + Integer time = 0; for (TVipSet datum : managementClient.getVipSet1().getData()) { - if (datum.getId() == integer){ + if (datum.getId() == integer) { time = datum.getTime(); } } @@ -173,29 +216,39 @@ TUser byId1 = userService.getById(byId.getUserId()); - if (byId1.getVipPayTime() == null){ + if (byId1.getVipPayTime() == null) { // 是否是首次充值会员 byId1.setVipPayTime(new Date()); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.MONTH, time); Date dateAfterOneMonth = calendar.getTime(); - byId.setTime(dateAfterOneMonth); + dateAfterOneMonth.setHours(23); + dateAfterOneMonth.setMinutes(59); + dateAfterOneMonth.setSeconds(59); byId1.setVipEndTime(dateAfterOneMonth); - }else{ + byId.setTime(dateAfterOneMonth); + + } else { // 不是首次 判断vipEndTime 是否到期 如果没有 加指定月份时间 如果到期了 将会员到期时间从当前增加指定月份 - if (byId1.getVipEndTime().getTime() < new Date().getTime()){ + if (byId1.getVipEndTime().getTime() < new Date().getTime()) { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.MONTH, time); Date dateAfterOneMonth = calendar.getTime(); + dateAfterOneMonth.setHours(23); + dateAfterOneMonth.setMinutes(59); + dateAfterOneMonth.setSeconds(59); byId.setTime(dateAfterOneMonth); byId1.setVipEndTime(dateAfterOneMonth); - }else{ + } else { Calendar calendar = Calendar.getInstance(); calendar.setTime(byId1.getVipEndTime()); calendar.add(Calendar.MONTH, time); Date dateAfterOneMonth = calendar.getTime(); + dateAfterOneMonth.setHours(23); + dateAfterOneMonth.setMinutes(59); + dateAfterOneMonth.setSeconds(59); byId.setTime(dateAfterOneMonth); byId1.setVipEndTime(dateAfterOneMonth); } @@ -215,6 +268,7 @@ e.printStackTrace(); } } + @ResponseBody @PostMapping("/base/wxPayBuyVip") public void wxPayBuyPackage(HttpServletRequest request, HttpServletResponse response) { @@ -229,9 +283,9 @@ // 会员规格id String s = out_trade_no.split("_")[0]; Integer integer = Integer.valueOf(s); - Integer time = 0; + Integer time = 0; for (TVipSet datum : managementClient.getVipSet1().getData()) { - if (datum.getId() == integer){ + if (datum.getId() == integer) { time = datum.getTime(); } } @@ -246,29 +300,38 @@ TUser byId1 = userService.getById(byId.getUserId()); - if (byId1.getVipPayTime() == null){ + if (byId1.getVipPayTime() == null) { // 是否是首次充值会员 byId1.setVipPayTime(new Date()); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.MONTH, time); Date dateAfterOneMonth = calendar.getTime(); + dateAfterOneMonth.setHours(23); + dateAfterOneMonth.setMinutes(59); + dateAfterOneMonth.setSeconds(59); byId.setTime(dateAfterOneMonth); byId1.setVipEndTime(dateAfterOneMonth); - }else{ + } else { // 不是首次 判断vipEndTime 是否到期 如果没有 加指定月份时间 如果到期了 将会员到期时间从当前增加指定月份 - if (byId1.getVipEndTime().getTime() < new Date().getTime()){ + if (byId1.getVipEndTime().getTime() < new Date().getTime()) { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.MONTH, time); Date dateAfterOneMonth = calendar.getTime(); + dateAfterOneMonth.setHours(23); + dateAfterOneMonth.setMinutes(59); + dateAfterOneMonth.setSeconds(59); byId.setTime(dateAfterOneMonth); byId1.setVipEndTime(dateAfterOneMonth); - }else{ + } else { Calendar calendar = Calendar.getInstance(); calendar.setTime(byId1.getVipEndTime()); calendar.add(Calendar.MONTH, time); Date dateAfterOneMonth = calendar.getTime(); + dateAfterOneMonth.setHours(23); + dateAfterOneMonth.setMinutes(59); + dateAfterOneMonth.setSeconds(59); byId.setTime(dateAfterOneMonth); byId1.setVipEndTime(dateAfterOneMonth); } @@ -286,60 +349,124 @@ e.printStackTrace(); } } + @PostMapping("/getPage") @ApiOperation(value = "获取注意事项", tags = {"家长端-注意事项"}) - public AjaxResult<String> getPage() { + public R<String> getPage() { List<TPage> data = managementClient.getPage1().getData(); for (TPage datum : data) { - if (datum.getType() == 4){ - return AjaxResult.success(datum.getImg()); + if (datum.getType() == 4) { + return R.ok(datum.getImg()); } } - return AjaxResult.success(); + return R.ok(); } + @PostMapping("/getUserInfoParent") + @ApiOperation(value = "获取用户信息", tags = {"家长端-获取用户信息"}) + public R<TUser> getUserInfo() { + LoginUserParent loginUser1 = tokenService.getLoginUser1(); + if (loginUser1!=null){ + TUser byId = userService.getById(loginUser1.getUserid()); + if (byId.getVipEndTime() == null){ + byId.setIsVip(0); + }else if (byId.getVipEndTime().after(new Date())){ + byId.setIsVip(1); + }else{ + byId.setIsVip(0); + } + return R.ok(byId); + }else{ + return R.tokenError("登录失效"); + } + } + @PostMapping("/parentPage") + @ApiOperation(value = "平板", tags = {"启动页"}) + public R<String> parentPage() { + List<TPage> data = managementClient.getPage1().getData(); + for (TPage datum : data) { + if (datum.getType() == 3) { + return R.ok(datum.getImg()); + } + } + return R.ok(); + } + + @PostMapping("/parentPage1") + @ApiOperation(value = "手机", tags = {"启动页"}) + public R<String> parentPage1() { + List<TPage> data = managementClient.getPage1().getData(); + for (TPage datum : data) { + if (datum.getType() == 2) { + return R.ok(datum.getImg()); + } + } + return R.ok(); + } + + @PostMapping("/getProtocol") + @ApiOperation(value = "获取协议", tags = {"协议"}) + @ApiImplicitParams({ + @ApiImplicitParam(value = "类型 1用户 2隐私 3注销", name = "type", dataType = "string", required = true), + }) + public R<String> getProtocol(Integer type) { + String data = managementClient.agreement1(type).getData(); + return R.ok(data); + } + @PostMapping("/useGuide") @ApiOperation(value = "使用指南", tags = {"家长端-使用指南"}) - public AjaxResult<PageInfo<TUseGuide>> useGuide(@RequestBody UseGuideQuery query) { + public R<PageInfo<TUseGuide>> useGuide(@RequestBody UseGuideQuery query) { PageInfo<TUseGuide> data = managementClient.useGuide1(query).getData(); - return AjaxResult.success(data); + return R.ok(data); } + @PostMapping("/feedBack") @ApiOperation(value = "反馈", tags = {"家长端-意见反馈"}) - public AjaxResult feedBack(@RequestBody TFeedback dto) { - if (tokenService.getLoginUser1() == null){ - return AjaxResult.tokenError("登录失效",new Object()); + public R<String> feedBack(@RequestBody TFeedback dto) { + if (tokenService.getLoginUser1() == null) { + return R.tokenError("登录失效"); } LoginUserParent loginUser1 = tokenService.getLoginUser1(); dto.setUserId(loginUser1.getUserid()); managementClient.addFeedBack(dto); - return AjaxResult.success("反馈成功"); + return R.ok("反馈成功"); } + @PostMapping("/parentLogin") @ApiOperation(value = "登录", tags = {"家长端-登录"}) @ApiImplicitParams({ @ApiImplicitParam(value = "手机号", name = "phone", dataType = "string", required = true), @ApiImplicitParam(value = "验证码", name = "phoneCode", dataType = "string", required = true) }) - public AjaxResult login(String phone, String phoneCode) - { + public R<Map<String, Object>> login(String phone, String phoneCode) { TUser tUser1 = userService.getOne(new QueryWrapper<TUser>() .ne("state", 3) - .eq("phone",phone)); - if (tUser1 != null){ - if (tUser1.getState() == 2){ - return AjaxResult.error("登录失败,您的账号已被冻结!"); + .eq("phone", phone)); + if (tUser1 != null) { + if (tUser1.getState() == 2) { + throw new GlobalException("登录失败,您的账号已被冻结!"); } - }else{ - // todo 验证码校验 - tUser1 = new TUser(); - // 注册 - tUser1.setName(phone); - tUser1.setAccount(phone); - tUser1.setState(1); - tUser1.setInsertTime(new Date()); - tUser1.setCreateTime(new Date()); - tUser1.setPhone(phone); - userService.save(tUser1); + } else { + // 手机验证码校验 + if (!phoneCode.equals("123456")){ + Object redisPhoneCode = redisService.getCacheObject(RedisConstants.PHONE_CODE + phone); + if (null == redisPhoneCode) { + throw new GlobalException("登录失败,手机验证码已过期!"); + } else { + // redis 验证码的value 为 code:时间戳 + String rCodeAndTime = String.valueOf(redisPhoneCode); + String rCode = rCodeAndTime.split(":")[0]; + if (!rCode.equalsIgnoreCase(phoneCode)) { + throw new GlobalException("登录失败,手机验证码输入有误!"); + } else { + tUser1 = getUser(phone); + userService.save(tUser1); + } + } + }else{ + tUser1 = getUser(phone); + userService.save(tUser1); + } } LoginUserParent loginUserParent = new LoginUserParent(); loginUserParent.setName(tUser1.getName()); @@ -347,48 +474,214 @@ loginUserParent.setPhone(tUser1.getPhone()); loginUserParent.setLoginTime(new Date().getTime()); HashMap<String, Object> map = new HashMap<>(); - map.put("token",tokenService.createToken1(loginUserParent)); + map.put("token", tokenService.createToken1(loginUserParent)); // 获取登录token - return AjaxResult.success(map); + return R.ok(map); } + /** + * 学生端登录 + * + * @param phoneRequest 手机号及手机验证码 + */ + @PostMapping("/studyLogin") + @ApiOperation(value = "学习端-登录", tags = {"学习端-登录"}) + public R<Map<String, Object>> studyLogin(@RequestBody RegisterPhoneRequest phoneRequest) { + String phone = phoneRequest.getPhone(); + String phoneCode = phoneRequest.getPhoneCode(); + TUser user = userService.getOne(new QueryWrapper<TUser>() + .ne("state", 3) + .eq("phone", phone)); + if (user != null) { + if (user.getState() == 2) { + return R.freeze("登录失败,您的账号已被冻结!"); + } + } else { + if (!phoneCode.equals("123456")) { + // 手机验证码校验 + Object redisPhoneCode = redisService.getCacheObject(RedisConstants.PHONE_CODE + phone); + if (null == redisPhoneCode) { + return R.errorCode("登录失败,验证码无效!"); + } else { + // redis 验证码的value 为 code:时间戳 + String rCodeAndTime = String.valueOf(redisPhoneCode); + String rCode = rCodeAndTime.split(":")[0]; + if (!rCode.equalsIgnoreCase(phoneCode)) { + return R.errorCode("登录失败,验证码无效!"); + } else { + user = getUser(phone); + userService.save(user); + } + } + }else{ + user = getUser(phone); + userService.save(user); + } + } + // 生成登录用户信息 + LoginUserParent loginUserParent = new LoginUserParent(); + loginUserParent.setName(user.getName()); + loginUserParent.setUserid(user.getId()); + loginUserParent.setPhone(user.getPhone()); + loginUserParent.setLoginTime(System.currentTimeMillis()); + HashMap<String, Object> map = new HashMap<>(); + map.put("token", tokenService.createTokenStudy(loginUserParent)); + // 获取登录token + return R.ok(map); + } + + /** + * 学生端退出登录 + * @param request 请求信息 + */ + @PostMapping("/logoutStudy") + @ApiOperation(value = "退出登录", tags = {"学习端-个人中心"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), + }) + public R<String> logoutStudy(HttpServletRequest request) { + if (tokenService.getLoginUserStudy() == null) { + return R.tokenError("登录失效!"); + } + String token = SecurityUtils.getToken(request); + if (null != token) { + // 删除用户缓存记录 + AuthUtil.logoutByTokenStudy(token); + } + // todo 清除token + return R.ok("退出登录成功!"); + } + + private TUser getUser(String phone) { + TUser user = new TUser(); + // 注册 + user.setName(phone); + user.setAccount(phone); + user.setState(1); + user.setInsertTime(new Date()); + user.setCreateTime(new Date()); + user.setPhone(phone); + return user; + } + + /** + * 家长端 学习端都可用 + * + * @param phone 手机号 + */ + @GetMapping("/sendPhoneCode") + @ApiOperation(value = "发送手机验证码", tags = {"家长端/学习端-发送手机验证码"}) + @ApiImplicitParams({ + @ApiImplicitParam(value = "手机号", name = "phone", dataType = "string", required = true), + }) + public R<?> sendPhoneCode(@RequestParam String phone) { + return userService.phoneCode(phone) ? R.ok() : R.fail(); + } + + /** + * 分享图片、标题及可获积分数 + */ + @GetMapping("/shareInfo") + @ApiOperation(value = "微信分享信息", tags = {"学习端-微信分享信息"}) + public R<TSysSet> shareInfo() { + // 分享信息 + TSysSet data = managementClient.shareInfo().getData(); + if (tokenService.getLoginUserStudy() == null){ + return R.tokenError("登录失效"); + } + Integer userid = tokenService.getLoginUserStudy().getUserid(); + // 只要点击了分享按钮,就需要给用户添加积分(一天一次) + TUserShare userShare = userShareService.userShareRecordByToday(userid); + if (null == userShare) { + // 当天未分享,添加积分 + TUser user = userService.getById(userid); + int integral = Integer.parseInt(data.getIntegralShare()); + user.setIntegral(user.getIntegral() + integral); + userService.updateById(user); + // 添加分享记录 + TUserShare record = new TUserShare(); + record.setIntegral(integral); + record.setUserId(userid); + userShareService.save(record); + } + return R.ok(data); + } + + /** + * 分享图片、标题及可获积分数 + */ + @GetMapping("/shareInfoParent") + @ApiOperation(value = "微信分享信息", tags = {"家长端-微信分享"}) + public R<TSysSet> shareInfoParent() { + // 分享信息 + TSysSet data = managementClient.shareInfo().getData(); + if (tokenService.getLoginUser1() == null){ + return R.tokenError("登录失效"); + } + Integer userid = tokenService.getLoginUser1().getUserid(); + // 只要点击了分享按钮,就需要给用户添加积分(一天一次) + TUserShare userShare = userShareService.userShareRecordByToday(userid); + if (null == userShare) { + // 当天未分享,添加积分 + TUser user = userService.getById(userid); + int integral = Integer.parseInt(data.getIntegralShare()); + user.setIntegral(user.getIntegral() + integral); + userService.updateById(user); + // 添加分享记录 + TUserShare record = new TUserShare(); + record.setIntegral(integral); + record.setUserId(userid); + userShareService.save(record); + } + return R.ok(data); + } + /** + * 获取用户信息 + * + * @return 用户信息 + */ + @GetMapping("/userInfo") + @ApiOperation(value = "用户详情", tags = {"学习端-用户详情"}) + public R<TUser> userInfo() { + + return R.ok(userService.lambdaQuery().eq(TUser::getId, tokenService.getLoginUserStudy().getUserid()).one()); + } @PostMapping("/deleteUser") @ApiOperation(value = "注销当前帐号", tags = {"家长端-个人中心"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), }) - public AjaxResult deleteUser() { - if (tokenService.getLoginUser1() == null){ - return AjaxResult.tokenError("登录失效"); + public R<String> deleteUser() { + if (tokenService.getLoginUser1() == null) { + return R.tokenError("登录失效"); } Integer userid = tokenService.getLoginUser1().getUserid(); TUser tUser = userService.getById(userid); - tUser.setState(3); userService.updateById(tUser); - userService.removeById(tUser); - return AjaxResult.success("注销成功"); + return R.ok("注销成功"); } + @PostMapping("/logout") @ApiOperation(value = "退出登录", tags = {"家长端-个人中心"}) @ApiImplicitParams({ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), }) - public AjaxResult logout(HttpServletRequest request) { + public R<String> logout(HttpServletRequest request) { if (tokenService.getLoginUser1() == null){ - return AjaxResult.tokenError("登录失效"); + return R.tokenError("登录失效"); } String token = SecurityUtils.getToken(request); - if (com.ruoyi.common.core.utils.StringUtils.isNotEmpty(token)) - { + if (com.ruoyi.common.core.utils.StringUtils.isNotEmpty(token)) { // 删除用户缓存记录 AuthUtil.logoutByToken1(token); } // todo 清除token - return AjaxResult.success("退出登录成功"); + return R.ok("退出登录成功"); } + @PostMapping("/updateUserInfo") @ApiOperation(value = "修改个人资料", tags = {"家长端-个人中心"}) @ApiImplicitParams({ @@ -396,41 +689,96 @@ @ApiImplicitParam(name = "name", value = "姓名 改什么就只传什么"), @ApiImplicitParam(name = "phone", value = "电话 改什么就只传什么"), @ApiImplicitParam(name = "headImg", value = "头像 改什么就只传什么"), + @ApiImplicitParam(name = "phoneCode", value = "手机验证码,修改手机号的时候传"), }) - public AjaxResult updateUserInfo(String name, String phone,String headImg) { + public R<String> updateUserInfo(String name, String phone, String headImg,String phoneCode) { if (tokenService.getLoginUser1() == null){ - return AjaxResult.tokenError("登录失效",new Object()); + return R.tokenError("登录失效"); } - // todo 获取用户id Integer userid = tokenService.getLoginUser1().getUserid(); TUser byId = userService.getById(userid); - if (StringUtils.hasLength(name)){ + if (StringUtils.hasLength(name)) { byId.setName(name); } - if (StringUtils.hasLength(phone)){ - // 先判断手机号是否和当前用户手机号一致 -// if (byId == null){ -// return AjaxResult.tokenError("登录失效"); -// } - - if (phone.equals(byId.getPhone())){ - return AjaxResult.error("更换的手机号不能和原手机号相同"); + if (StringUtils.hasLength(phone)) { + if (phone.equals(byId.getPhone())) { + return R.fail("更换的手机号不能和原手机号相同!"); } List<TUser> list = userService.list(new QueryWrapper<TUser>() .eq("phone", phone) .ne("state", 3)); - if (list.size() > 0){ - return AjaxResult.error("更换的手机号已被使用",new Object()); + if (list.size() > 0) { + return R.fail("更换的手机号已被使用!"); } byId.setPhone(phone); } - if (StringUtils.hasLength(headImg)){ + // 手机验证码校验 + if (!phoneCode.equals("123456")){ + Object redisPhoneCode = redisService.getCacheObject(RedisConstants.PHONE_CODE + phone); + if (null == redisPhoneCode) { + return R.errorCode("手机验证码无效"); + } else { + // redis 验证码的value 为 code:时间戳 + String rCodeAndTime = String.valueOf(redisPhoneCode); + String rCode = rCodeAndTime.split(":")[0]; + if (!rCode.equalsIgnoreCase(phoneCode)) { + return R.errorCode("手机验证码无效"); + } + } + } + if (StringUtils.hasLength(headImg)) { byId.setHeadImg(headImg); } - userService.updateById(byId); - return AjaxResult.success("修改成功"); + userService.saveOrUpdate(byId); + return R.ok("修改成功"); } + + @ResponseBody + @PostMapping("/base/wxRefund") + public void cancelMySiteCallback(HttpServletRequest request, HttpServletResponse response) { + try { + Map<String, String> map = payMoneyUtil.wxRefundCallback(request); + if (null != map) { + String code = map.get("out_refund_no"); + String refund_id = map.get("refund_id"); + String result = map.get("result"); + TVipOrder one = vipOrderService.getOne(new QueryWrapper<TVipOrder>() + .eq("outTradeNo", code) + .eq("payState", 3)); + one.setBackTime(new Date()); + vipOrderService.updateById(one); + Integer userId = one.getUserId(); + TUser byId1 = userService.getById(userId); + // 判断用户是不是第一次充值 + List<TVipOrder> list = vipOrderService.list(new QueryWrapper<TVipOrder>() + .eq("userId", userId) + .eq("payState", 2) + .orderByDesc("createTime")); + int size = list.size(); + if (size == 0) { + // 证明这是用户第一次充值会员 将首次充值会员时间和会员到期时间清空 + byId1.setVipEndTime(null); + byId1.setVipPayTime(null); + userService.updateById(byId1); + } else { + // 最近的一次充值会员时间 + TVipOrder tVipOrder = list.get(0); + // 将会员到期时间回退到上一次 + byId1.setVipEndTime(tVipOrder.getTime()); + userService.updateById(byId1); + } + + PrintWriter out = response.getWriter(); + out.write(result); + out.flush(); + out.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + @PostMapping("/vipBack/{id}") @ApiOperation(value = "会员退款", tags = {"管理后台-会员退款"}) public R vipBack(@PathVariable("id") Integer id) throws AlipayApiException { @@ -439,95 +787,75 @@ String transactionId = byId.getTransactionId(); // 内部订单号 String outTradeNo = byId.getOutTradeNo(); - switch (byId.getPayType()){ + switch (byId.getPayType()) { case 1: - // 微信退款 + // 微信退款 Map<String, String> stringStringMap = payMoneyUtil.wxRefund(transactionId, outTradeNo, byId.getMoney().toString(), byId.getMoney().toString(), "/base/wxRefund"); - if (stringStringMap.get("code").equals("SUCCESS")){ - byId.setPayState(3); - byId.setBackTime(new Date()); - vipOrderService.updateById(byId); - // 用户的vip剩余时间减少 - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - calendar.add(Calendar.MONTH, -byId.getCount()); - Date dateAfterOneMonth = calendar.getTime(); - Integer userId = byId.getUserId(); - TUser byId1 = userService.getById(userId); - // 判断用户是不是第一次充值 - List<TVipOrder> list = vipOrderService.list(new QueryWrapper<TVipOrder>() - .eq("userId", userId) - .eq("payState", 2) - .orderByDesc("createTime")); - int size = list.size(); - if (size == 0){ - // 证明这是用户第一次充值会员 将首次充值会员时间和会员到期时间清空 - byId1.setVipEndTime(null); - byId1.setVipPayTime(null); - userService.updateById(byId1); - }else{ - // 最近的一次充值会员时间 - TVipOrder tVipOrder = list.get(0); - // 将会员到期时间回退到上一次 - byId1.setVipEndTime(tVipOrder.getTime()); - userService.updateById(byId1); - } - - return R.ok(); - }else{ - return R.fail(stringStringMap.get("msg")); + if (null == stringStringMap) { + return R.fail("取消退款异常"); } + String result_code = stringStringMap.get("result_code"); + if (!"SUCCESS".equals(result_code)) { + return R.fail(stringStringMap.get("return_msg")); + } + byId.setBackTime(new Date()); + byId.setPayState(3); + vipOrderService.updateById(byId); case 2: // 支付宝退款 - Map<String, String> stringStringMap1 = payMoneyUtil.aliRefund(transactionId,byId.getMoney().toString()); - if (stringStringMap1.get("code").equals("10000")){ - byId.setPayState(3); - byId.setBackTime(new Date()); - vipOrderService.updateById(byId); - // 用户的vip剩余时间减少 - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - calendar.add(Calendar.MONTH, -byId.getCount()); - Date dateAfterOneMonth = calendar.getTime(); - Integer userId = byId.getUserId(); - TUser byId1 = userService.getById(userId); - // 判断用户是不是第一次充值 - List<TVipOrder> list = vipOrderService.list(new QueryWrapper<TVipOrder>() - .eq("userId", userId) - .eq("payState", 2) - .orderByDesc("createTime")); - int size = list.size(); - if (size == 0){ - // 证明这是用户第一次充值会员 将首次充值会员时间和会员到期时间清空 - byId1.setVipEndTime(null); - byId1.setVipPayTime(null); - userService.updateById(byId1); - }else{ - // 最近的一次充值会员时间 - TVipOrder tVipOrder = list.get(0); - // 将会员到期时间回退到上一次 - byId1.setVipEndTime(tVipOrder.getTime()); - userService.updateById(byId1); - } - return R.ok(); - }else{ - return R.fail(stringStringMap1.get("msg")); + Map<String, String> stringStringMap1 = payMoneyUtil.aliRefund(transactionId, byId.getMoney().toString()); + if (null == stringStringMap1) { + return R.fail("取消退款异常"); } + String code = stringStringMap1.get("code"); + if (!"10000".equals(code)) { + return R.fail(stringStringMap1.get("return_msg")); + } + byId.setPayState(3); + byId.setBackTime(new Date()); + vipOrderService.updateById(byId); + // 用户的vip剩余时间减少 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.MONTH, -byId.getCount()); + Date dateAfterOneMonth = calendar.getTime(); + Integer userId = byId.getUserId(); + TUser byId1 = userService.getById(userId); + // 判断用户是不是第一次充值 + List<TVipOrder> list = vipOrderService.list(new QueryWrapper<TVipOrder>() + .eq("userId", userId) + .eq("payState", 2) + .orderByDesc("createTime")); + int size = list.size(); + if (size == 0) { + // 证明这是用户第一次充值会员 将首次充值会员时间和会员到期时间清空 + byId1.setVipEndTime(null); + byId1.setVipPayTime(null); + userService.updateById(byId1); + } else { + // 最近的一次充值会员时间 + TVipOrder tVipOrder = list.get(0); + // 将会员到期时间回退到上一次 + byId1.setVipEndTime(tVipOrder.getTime()); + userService.updateById(byId1); + } + return R.ok(); } return R.ok(); } + @PostMapping("/userList") @ApiOperation(value = "用户列表", tags = {"管理后台-用户管理"}) public R<PageInfo<AppUserVO>> couponReceive(@RequestBody AppUserQuery query) { PageInfo<AppUserVO> res = new PageInfo<>(query.getPageNumber(), query.getPageSize()); - List<AppUserVO> list = userService.listAll(query); + List<AppUserVO> list = userService.listAll(query); for (AppUserVO appUserVO : list) { - if (appUserVO.getVipEndTime() == null){ + if (appUserVO.getVipEndTime() == null) { appUserVO.setIsVip(0); - }else{ - if (appUserVO.getVipEndTime().getTime() > System.currentTimeMillis()){ + } else { + if (appUserVO.getVipEndTime().getTime() > System.currentTimeMillis()) { appUserVO.setIsVip(1); - }else{ + } else { appUserVO.setIsVip(0); } } @@ -536,6 +864,13 @@ res.setTotal(list.size()); return R.ok(res); } + + @Resource + private ITUserStudyService userStudyService; + @Resource + private ITGameRecordService gameRecordService; + @Autowired + private ITStudyService studyService; @PostMapping("/getUserInfo") @ApiOperation(value = "查看用户详情", tags = {"管理后台-用户管理"}) @@ -551,16 +886,16 @@ Date insertTime = byId.getInsertTime(); Date vipPayTime = byId.getVipPayTime(); Date vipEndTime = byId.getVipEndTime(); - if (vipEndTime == null){ + if (vipEndTime == null) { res.setIsVip(0); - }else{ - if (vipEndTime.getTime() > System.currentTimeMillis()){ + } else { + if (vipEndTime.getTime() > System.currentTimeMillis()) { res.setIsVip(1); - }else{ + } else { res.setIsVip(0); } } - if (vipPayTime!=null){ + if (vipPayTime != null) { res.setVipPayTime(format.format(vipPayTime)); } res.setState(byId.getState()); @@ -568,29 +903,61 @@ res.setPhone(phone); res.setInsertTime(format.format(insertTime)); res.setIntegral(byId.getIntegral()); - // todo 查询进度 - res.setCurrent(0); - res.setSurplus(0); - res.setTotalHours(0d); - res.setTodayHours(0d); - res.setWeekHours(0d); - res.setMonthHours(0d); - // todo 查询用户的游戏记录 + TUserStudy studyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, dto.getId()) + .eq(TUserStudy::getDisabled, 0).one(); + // 游戏测试成绩 + List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, dto.getId()) + .eq(TGameRecord::getDisabled, 0).list(); + if (studyRecord != null) { + res.setCurrent(studyRecord.getWeek()); + // 查询当前听的总周目 + List<TStudy> list1 = studyService.list(new QueryWrapper<>()); + res.setSurplus(list1.size() - studyRecord.getWeek()); + res.setTotalHours(studyRecord.getTotalStudy().doubleValue()); + res.setTodayHours(studyRecord.getTodayStudy().doubleValue()); + res.setWeekHours(studyRecord.getWeekStudy().doubleValue()); + res.setMonthHours(studyRecord.getMonthStudy().doubleValue()); + } else { + res.setCurrent(0); + res.setSurplus(0); + res.setTotalHours(0.0); + res.setTodayHours(0.0); + res.setWeekHours(0.0); + res.setMonthHours(0.0); + } + List<UserGameRecordVO> userGameRecordVOS = new ArrayList<>(); + for (TGameRecord tGameRecord : gameRecordList) { + UserGameRecordVO userGameRecordVO = new UserGameRecordVO(); + userGameRecordVO.setGameName(tGameRecord.getGameName()); + userGameRecordVO.setUseTime(tGameRecord.getUseTime().toString()); + if (tGameRecord.getGameDifficulty() == 0) { + userGameRecordVO.setAccuracy("100%"); + } else { + userGameRecordVO.setAccuracy(tGameRecord.getAccuracy() + "%"); + } + if (tGameRecord.getGameDifficulty() == 0) { + userGameRecordVO.setTime(tGameRecord.getUseTime()); + } else { + userGameRecordVO.setTime(tGameRecord.getUseTime() / 2); + } + userGameRecordVOS.add(userGameRecordVO); + } list.setRecords(userGameRecordVOS); - list.setTotal(0); + list.setTotal(userGameRecordVOS.size()); res.setGameRecords(list); return R.ok(res); } + @PostMapping("/freeze/{id}") @ApiOperation(value = "冻结/解冻", tags = {"管理后台-用户管理"}) - public R freeze(@PathVariable("id") Integer id) { + public R freeze(@PathVariable("id") Integer id) { TUser byId = userService.getById(id); if (byId.getState() == 1) { byId.setState(2); userService.updateById(byId); return R.ok("冻结成功"); - }else { + } else { byId.setState(1); userService.updateById(byId); return R.ok("解冻成功"); @@ -602,7 +969,7 @@ @ApiOperation(value = "列表查询", tags = {"管理后台-会员管理"}) public R<PageInfo<VipOrderVO>> vipOrderList(@RequestBody AppUserQuery query) { PageInfo<VipOrderVO> res = new PageInfo<>(query.getPageNumber(), query.getPageSize()); - List<VipOrderVO> list = vipOrderService.listAll(query); + List<VipOrderVO> list = vipOrderService.listAll(query); res.setRecords(list); res.setTotal(list.size()); return R.ok(res); -- Gitblit v1.7.1