From 781b5fea46cd55220b5ffca17aa6bb1b83551410 Mon Sep 17 00:00:00 2001 From: 44323 <443237572@qq.com> Date: 星期二, 21 五月 2024 08:59:55 +0800 Subject: [PATCH] 代码提交 --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java | 510 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 493 insertions(+), 17 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 d477903..8fd56b1 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 @@ -1,30 +1,50 @@ package com.ruoyi.study.controller; +import com.alipay.api.AlipayApiException; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.utils.JwtUtils; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.auth.AuthUtil; +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.query.UseGuideQuery; import com.ruoyi.study.domain.TUser; +import com.ruoyi.study.domain.TVipOrder; 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.vo.AppUserVO; -import com.ruoyi.study.vo.UserGameRecordVO; -import com.ruoyi.study.vo.UserInfoVO; -import com.ruoyi.study.vo.VipOrderVO; +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.stereotype.Controller; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; /** * <p> @@ -42,9 +62,463 @@ @Autowired private IVipOrderService vipOrderService; + @Autowired + private ManagementClient managementClient; + @Autowired + private TokenService tokenService; + + @PostMapping("/vipInfo") + @ApiOperation(value = "会员中心-获取会员说明、当前登录用户是否为会员、会员购买规格", tags = {"家长端-个人中心"}) + public AjaxResult<List<VipInfoVO>> vipInfo() { + if (tokenService.getLoginUser1() == null){ + return AjaxResult.tokenError("登录失效",new Object()); + } + List<VipInfoVO> vipInfoVOS = new ArrayList<>(); + List<TVipSet> data = managementClient.getVipSet1().getData(); + for (TVipSet datum : data) { + VipInfoVO vipInfoVO = new VipInfoVO(); + vipInfoVO.setInfo(datum.getInfo()); + vipInfoVO.setId(datum.getId()); + Integer userid = tokenService.getLoginUser1().getUserid(); + TUser byId = userService.getById(userid); + // 先判断vipEndTime + if (byId.getVipEndTime() == null){ + vipInfoVO.setIsVip(0); + }else{ + // 判断会员到期时间是否大于当前时间 + if (byId.getVipEndTime().getTime() > new Date().getTime()){ + vipInfoVO.setIsVip(1); + }else{ + vipInfoVO.setIsVip(0); + } + } + vipInfoVO.setTime(datum.getTime()); + vipInfoVO.setAmount(datum.getAmount()); + } + return AjaxResult.ok(vipInfoVOS); + } + @Autowired + private PayMoneyUtil payMoneyUtil; + + @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 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){ + 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"); + } + return AjaxResult.success(); + } + @ResponseBody + @PostMapping("/base/aliPayBuyVip") + public void addVipPaymentAliCallback(HttpServletRequest request, HttpServletResponse response) { + try { + Map<String, String> map = payMoneyUtil.alipayCallback(request); + if (null != map) { + String out_trade_no = map.get("out_trade_no"); + String trade_no = map.get("trade_no"); + // 会员规格id + String s = out_trade_no.split("_")[0]; + Integer integer = Integer.valueOf(s); + Integer time = 0; + for (TVipSet datum : managementClient.getVipSet1().getData()) { + if (datum.getId() == integer){ + time = datum.getTime(); + } + } + // 订单id + String s1 = out_trade_no.split("_")[1]; + Integer integer1 = Integer.valueOf(s1); + TVipOrder byId = vipOrderService.getById(integer1); + byId.setPayState(2); + byId.setTransactionId(trade_no); + byId.setOutTradeNo(out_trade_no); + byId.setPayTime(new Date()); + + + TUser byId1 = userService.getById(byId.getUserId()); + 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); + byId1.setVipEndTime(dateAfterOneMonth); + }else{ + // 不是首次 判断vipEndTime 是否到期 如果没有 加指定月份时间 如果到期了 将会员到期时间从当前增加指定月份 + if (byId1.getVipEndTime().getTime() < new Date().getTime()){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.MONTH, time); + Date dateAfterOneMonth = calendar.getTime(); + byId.setTime(dateAfterOneMonth); + byId1.setVipEndTime(dateAfterOneMonth); + }else{ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(byId1.getVipEndTime()); + calendar.add(Calendar.MONTH, time); + Date dateAfterOneMonth = calendar.getTime(); + byId.setTime(dateAfterOneMonth); + byId1.setVipEndTime(dateAfterOneMonth); + } + } + + // 修改订单状态 + vipOrderService.updateById(byId); + + // 修改用户会员续期信息 + userService.updateById(byId1); + PrintWriter out = response.getWriter(); + out.write("success"); + out.flush(); + out.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + @ResponseBody + @PostMapping("/base/wxPayBuyVip") + public void wxPayBuyPackage(HttpServletRequest request, HttpServletResponse response) { + try { + Map<String, String> map = payMoneyUtil.weixinpayCallback(request); + if (null != map) { + // 内部订单号 + String out_trade_no = map.get("out_trade_no"); + // 微信订单号 + String transaction_id = map.get("transaction_id"); + String result = map.get("result"); + // 会员规格id + String s = out_trade_no.split("_")[0]; + Integer integer = Integer.valueOf(s); + Integer time = 0; + for (TVipSet datum : managementClient.getVipSet1().getData()) { + if (datum.getId() == integer){ + time = datum.getTime(); + } + } + // 订单id + String s1 = out_trade_no.split("_")[1]; + Integer integer1 = Integer.valueOf(s1); + TVipOrder byId = vipOrderService.getById(integer1); + byId.setPayState(2); + byId.setTransactionId(transaction_id); + byId.setOutTradeNo(out_trade_no); + byId.setPayTime(new Date()); + + + TUser byId1 = userService.getById(byId.getUserId()); + 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); + byId1.setVipEndTime(dateAfterOneMonth); + }else{ + // 不是首次 判断vipEndTime 是否到期 如果没有 加指定月份时间 如果到期了 将会员到期时间从当前增加指定月份 + if (byId1.getVipEndTime().getTime() < new Date().getTime()){ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(new Date()); + calendar.add(Calendar.MONTH, time); + Date dateAfterOneMonth = calendar.getTime(); + byId.setTime(dateAfterOneMonth); + byId1.setVipEndTime(dateAfterOneMonth); + }else{ + Calendar calendar = Calendar.getInstance(); + calendar.setTime(byId1.getVipEndTime()); + calendar.add(Calendar.MONTH, time); + Date dateAfterOneMonth = calendar.getTime(); + byId.setTime(dateAfterOneMonth); + byId1.setVipEndTime(dateAfterOneMonth); + } + } + // 修改订单状态 + vipOrderService.updateById(byId); + // 修改用户会员续期信息 + userService.updateById(byId1); + PrintWriter out = response.getWriter(); + out.write(result); + out.flush(); + out.close(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + @PostMapping("/getPage") + @ApiOperation(value = "获取注意事项", tags = {"家长端-注意事项"}) + public AjaxResult<String> getPage() { + List<TPage> data = managementClient.getPage1().getData(); + for (TPage datum : data) { + if (datum.getType() == 4){ + return AjaxResult.success(datum.getImg()); + } + } + return AjaxResult.success(); + } + @PostMapping("/useGuide") + @ApiOperation(value = "使用指南", tags = {"家长端-使用指南"}) + public AjaxResult<PageInfo<TUseGuide>> useGuide(@RequestBody UseGuideQuery query) { + PageInfo<TUseGuide> data = managementClient.useGuide1(query).getData(); + return AjaxResult.success(data); + } + @PostMapping("/feedBack") + @ApiOperation(value = "反馈", tags = {"家长端-意见反馈"}) + public AjaxResult feedBack(@RequestBody TFeedback dto) { + if (tokenService.getLoginUser1() == null){ + return AjaxResult.tokenError("登录失效",new Object()); + } + LoginUserParent loginUser1 = tokenService.getLoginUser1(); + dto.setUserId(loginUser1.getUserid()); + managementClient.addFeedBack(dto); + return AjaxResult.success("反馈成功"); + } + @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) + { + TUser tUser1 = userService.getOne(new QueryWrapper<TUser>() + .ne("state", 3) + .eq("phone",phone)); + if (tUser1 != null){ + if (tUser1.getState() == 2){ + return AjaxResult.error("登录失败,您的账号已被冻结!"); + } + }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); + } + LoginUserParent loginUserParent = new LoginUserParent(); + loginUserParent.setName(tUser1.getName()); + loginUserParent.setUserid(tUser1.getId()); + loginUserParent.setPhone(tUser1.getPhone()); + loginUserParent.setLoginTime(new Date().getTime()); + HashMap<String, Object> map = new HashMap<>(); + map.put("token",tokenService.createToken1(loginUserParent)); + // 获取登录token + return AjaxResult.success(map); + } + + + @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("登录失效"); + } + Integer userid = tokenService.getLoginUser1().getUserid(); + TUser tUser = userService.getById(userid); + + tUser.setState(3); + userService.updateById(tUser); + + userService.removeById(tUser); + return AjaxResult.success("注销成功"); + } + @PostMapping("/logout") + @ApiOperation(value = "退出登录", tags = {"家长端-个人中心"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), + }) + public AjaxResult logout(HttpServletRequest request) { + if (tokenService.getLoginUser1() == null){ + return AjaxResult.tokenError("登录失效"); + } + String token = SecurityUtils.getToken(request); + if (com.ruoyi.common.core.utils.StringUtils.isNotEmpty(token)) + { + // 删除用户缓存记录 + AuthUtil.logoutByToken1(token); + } + // todo 清除token + return AjaxResult.success("退出登录成功"); + } + @PostMapping("/updateUserInfo") + @ApiOperation(value = "修改个人资料", tags = {"家长端-个人中心"}) + @ApiImplicitParams({ + @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), + @ApiImplicitParam(name = "name", value = "姓名 改什么就只传什么"), + @ApiImplicitParam(name = "phone", value = "电话 改什么就只传什么"), + @ApiImplicitParam(name = "headImg", value = "头像 改什么就只传什么"), + }) + public AjaxResult updateUserInfo(String name, String phone,String headImg) { + if (tokenService.getLoginUser1() == null){ + return AjaxResult.tokenError("登录失效",new Object()); + } + // todo 获取用户id + Integer userid = tokenService.getLoginUser1().getUserid(); + TUser byId = userService.getById(userid); + + 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("更换的手机号不能和原手机号相同"); + } + List<TUser> list = userService.list(new QueryWrapper<TUser>() + .eq("phone", phone) + .ne("state", 3)); + if (list.size() > 0){ + return AjaxResult.error("更换的手机号已被使用",new Object()); + } + byId.setPhone(phone); + } + if (StringUtils.hasLength(headImg)){ + byId.setHeadImg(headImg); + } + userService.updateById(byId); + return AjaxResult.success("修改成功"); + } + @PostMapping("/vipBack/{id}") + @ApiOperation(value = "会员退款", tags = {"管理后台-会员退款"}) + public R vipBack(@PathVariable("id") Integer id) throws AlipayApiException { + TVipOrder byId = vipOrderService.getById(id); + // 外部订单号 + String transactionId = byId.getTransactionId(); + // 内部订单号 + String outTradeNo = byId.getOutTradeNo(); + 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")); + } + 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")); + } + } + return R.ok(); + } @PostMapping("/userList") - @ApiOperation(value = "用户列表", tags = {"用户管理"}) - public R<PageInfo<AppUserVO>> couponReceive(AppUserQuery query) { + @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); for (AppUserVO appUserVO : list) { @@ -64,8 +538,8 @@ } @PostMapping("/getUserInfo") - @ApiOperation(value = "查看用户详情", tags = {"用户管理"}) - public R<UserInfoVO> getUserInfo(UserInfoQuery dto) { + @ApiOperation(value = "查看用户详情", tags = {"管理后台-用户管理"}) + public R<UserInfoVO> getUserInfo(@RequestBody UserInfoQuery dto) { SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd"); UserInfoVO res = new UserInfoVO(); PageInfo<UserGameRecordVO> list = new PageInfo<>(dto.getPageNumber(), dto.getPageSize()); @@ -108,23 +582,25 @@ res.setGameRecords(list); return R.ok(res); } - @PostMapping("/freeze") - @ApiOperation(value = "冻结/解冻", tags = {"用户管理"}) - public R freeze(Integer id) { + @PostMapping("/freeze/{id}") + @ApiOperation(value = "冻结/解冻", tags = {"管理后台-用户管理"}) + 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 { byId.setState(1); + userService.updateById(byId); return R.ok("解冻成功"); } } @PostMapping("/vipOrderList") - @ApiOperation(value = "列表查询", tags = {"会员管理"}) - public R<PageInfo<VipOrderVO>> vipOrderList(AppUserQuery query) { + @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); res.setRecords(list); -- Gitblit v1.7.1