From c832cae4de3ff53e3b80cad317fbdd84de46c02d Mon Sep 17 00:00:00 2001 From: hjl <1657978663@qq.com> Date: 星期五, 19 七月 2024 09:31:34 +0800 Subject: [PATCH] fix: 学习端bug --- ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java | 487 ++++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 345 insertions(+), 142 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 737d3b2..2e90069 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,6 +3,7 @@ import com.alipay.api.AlipayApiException; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.RedisConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.exception.GlobalException; @@ -29,7 +30,6 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -64,11 +64,45 @@ @Resource private ITUserShareService userShareService; + @Autowired + private ITIntegralRecordService integralRecordService; @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("/vipInfoStudy") + @ApiOperation(value = "会员中心-获取会员说明、当前登录用户是否为会员、会员购买规格", tags = {"学习端-个人中心"}) + public R<List<VipInfoVO>> vipInfoStudy() { + if (tokenService.getLoginUserStudy() == null) { + throw new GlobalException("登录失效!"); + } + 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.getLoginUserStudy().getUserid(); + TUser byId = userService.getById(userid); + // 先判断vipEndTime + if (byId.getVipEndTime() == null) { + vipInfoVO.setIsVip(0); + } else { + // 判断会员到期时间是否大于当前时间 + if (byId.getVipEndTime().getTime() > System.currentTimeMillis()) { + vipInfoVO.setIsVip(1); + } else { + vipInfoVO.setIsVip(0); + } + } + vipInfoVO.setTime(datum.getTime()); + vipInfoVO.setAmount(datum.getAmount()); + vipInfoVOS.add(vipInfoVO); + } + return R.ok(vipInfoVOS); } @PostMapping("/vipInfo") @@ -105,36 +139,36 @@ @Autowired private PayMoneyUtil payMoneyUtil; + @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 pay(Integer payType, Integer orderId, Integer id) throws Exception { - TVipOrder tVipOrder = vipOrderService.getById(orderId); - switch (payType) { + public AjaxResult pay(@RequestBody PayDTO dto) throws Exception { + TVipOrder tVipOrder = vipOrderService.getById(dto.getOrderId()); + switch (dto.getPayType()) { case 1: return payMoneyUtil.weixinpay ("购买会员", "", - id + "_" + tVipOrder.getId() + "_" + + dto.getId() + "_" + tVipOrder.getId() + "_" + UUIDUtil.getRandomCode(8), tVipOrder.getMoney().toString(), - "/base/wxPayBuyVip", "APP", ""); + "/base/user/wxPayBuyVip", "APP", ""); case 2: return payMoneyUtil.alipay ("购买会员", "购买会员下单支付", "", - id + "_" + tVipOrder.getId() + "_" + + dto.getId() + "_" + tVipOrder.getId() + "_" + UUIDUtil.getRandomCode(8), tVipOrder.getMoney().toString(), - "/base/aliPayBuyVip"); + "/base/user/aliPayBuyVip"); } return AjaxResult.success(); } + @PostMapping("/order") @ApiOperation(value = "购买会员下单操作", tags = {"家长端-个人中心"}) @ApiImplicitParams({ @@ -164,36 +198,23 @@ 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") + @PostMapping("/aliPayBuyVip") public void addVipPaymentAliCallback(HttpServletRequest request, HttpServletResponse response) { try { + System.err.println("进入支付宝回调"); Map<String, String> map = payMoneyUtil.alipayCallback(request); + System.err.println("返回参数" + map); if (null != map) { + PrintWriter out = response.getWriter(); + out.write("success"); + out.flush(); + out.close(); String out_trade_no = map.get("out_trade_no"); String trade_no = map.get("trade_no"); // 会员规格id @@ -209,11 +230,13 @@ String s1 = out_trade_no.split("_")[1]; Integer integer1 = Integer.valueOf(s1); TVipOrder byId = vipOrderService.getById(integer1); + if (byId.getBackTime() != null) { + return; + } 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) { @@ -259,10 +282,7 @@ // 修改用户会员续期信息 userService.updateById(byId1); - PrintWriter out = response.getWriter(); - out.write("success"); - out.flush(); - out.close(); + } } catch (Exception e) { e.printStackTrace(); @@ -270,16 +290,21 @@ } @ResponseBody - @PostMapping("/base/wxPayBuyVip") + @PostMapping("/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"); + PrintWriter out = response.getWriter(); + out.write(result); + out.flush(); + out.close(); // 会员规格id String s = out_trade_no.split("_")[0]; Integer integer = Integer.valueOf(s); @@ -340,10 +365,7 @@ vipOrderService.updateById(byId); // 修改用户会员续期信息 userService.updateById(byId1); - PrintWriter out = response.getWriter(); - out.write(result); - out.flush(); - out.close(); + } } catch (Exception e) { e.printStackTrace(); @@ -361,24 +383,38 @@ } return R.ok(); } + @PostMapping("/getUserInfoParent") @ApiOperation(value = "获取用户信息", tags = {"家长端-获取用户信息"}) public R<TUser> getUserInfo() { LoginUserParent loginUser1 = tokenService.getLoginUser1(); - if (loginUser1!=null){ + if (loginUser1 != null) { TUser byId = userService.getById(loginUser1.getUserid()); - if (byId.getVipEndTime() == null){ + if (byId.getVipEndTime() == null) { byId.setIsVip(0); - }else if (byId.getVipEndTime().after(new Date())){ + } else if (byId.getVipEndTime().after(new Date())) { byId.setIsVip(1); - }else{ + } else { byId.setIsVip(0); } return R.ok(byId); - }else{ + } else { return R.tokenError("登录失效"); } } + + @PostMapping("/studyPage") + @ApiOperation(value = "学习端", tags = {"启动页"}) + public R<String> studyPage() { + List<TPage> data = managementClient.getPage1().getData(); + for (TPage datum : data) { + if (datum.getType() == 1) { + return R.ok(datum.getImg()); + } + } + return R.ok(); + } + @PostMapping("/parentPage") @ApiOperation(value = "平板", tags = {"启动页"}) public R<String> parentPage() { @@ -417,7 +453,26 @@ @ApiOperation(value = "使用指南", tags = {"家长端-使用指南"}) public R<PageInfo<TUseGuide>> useGuide(@RequestBody UseGuideQuery query) { PageInfo<TUseGuide> data = managementClient.useGuide1(query).getData(); + for (TUseGuide record : data.getRecords()) { + String plainTextContent = record.getAnswer().replaceAll("\\<.*?\\>", ""); + record.setCount(plainTextContent); + } return R.ok(data); + } + + @PostMapping("/useGuideGetInfo") + @ApiOperation(value = "查看详情", tags = {"家长端-使用指南"}) + public R useGuideGetInfo(Integer id) { + UseGuideQuery useGuideQuery = new UseGuideQuery(); + useGuideQuery.setPageNumber(1); + useGuideQuery.setPageSize(300); + PageInfo<TUseGuide> data = managementClient.useGuide1(useGuideQuery).getData(); + for (TUseGuide record : data.getRecords()) { + if (record.getId() == id) { + return R.ok(record.getAnswer()); + } + } + return R.ok(); } @PostMapping("/feedBack") @@ -432,39 +487,48 @@ 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 R<Map<String, Object>> login(String phone, String phoneCode) { + public R<Map<String, Object>> login(String phone, String phoneCode) throws Exception { TUser tUser1 = userService.getOne(new QueryWrapper<TUser>() .ne("state", 3) .eq("phone", phone)); if (tUser1 != null) { if (tUser1.getState() == 2) { - throw new GlobalException("登录失败,您的账号已被冻结!"); + return R.freeze("登录失败,您的账号已被冻结!"); } } else { // 手机验证码校验 - if (!phoneCode.equals("123456")){ - Object redisPhoneCode = redisService.getCacheObject(RedisConstants.PHONE_CODE + phone); + if (!phoneCode.equals("123456")) { + Object redisPhoneCode = redisService.getCacheObject(RedisConstants.PHONE_CODE + phone); if (null == redisPhoneCode) { - throw new GlobalException("登录失败,手机验证码已过期!"); + return R.errorCode("登录失败,手机验证码无效!"); } else { // redis 验证码的value 为 code:时间戳 String rCodeAndTime = String.valueOf(redisPhoneCode); String rCode = rCodeAndTime.split(":")[0]; if (!rCode.equalsIgnoreCase(phoneCode)) { - throw new GlobalException("登录失败,手机验证码输入有误!"); + return R.errorCode("登录失败,手机验证码无效!"); } else { + tUser1.setHeadImg("https://haitunyingyu.obs.cn-southwest-2.myhuaweicloud.com/admin/1c6ee218aa18434db2e86df903990de8.jpg"); tUser1 = getUser(phone); + String upperCase = UUIDUtil.getRandomCode(6).toUpperCase(); + tUser1.setAccount("用户"+upperCase); + tUser1.setName("用户"+upperCase); userService.save(tUser1); } } - }else{ + } else { + String upperCase = UUIDUtil.getRandomCode(6).toUpperCase(); tUser1 = getUser(phone); + tUser1.setHeadImg("https://haitunyingyu.obs.cn-southwest-2.myhuaweicloud.com/admin/1c6ee218aa18434db2e86df903990de8.jpg"); + tUser1.setAccount("用户"+upperCase); + tUser1.setName("用户"+upperCase); userService.save(tUser1); } } @@ -472,10 +536,32 @@ loginUserParent.setName(tUser1.getName()); loginUserParent.setUserid(tUser1.getId()); loginUserParent.setPhone(tUser1.getPhone()); - loginUserParent.setLoginTime(new Date().getTime()); + loginUserParent.setLoginTime(System.currentTimeMillis()); HashMap<String, Object> map = new HashMap<>(); - map.put("token", tokenService.createToken1(loginUserParent)); // 获取登录token + map.put("token", tokenService.createToken1(loginUserParent)); + // 学习进度检查 + TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, tUser1.getId()) + .eq(TUserStudy::getDisabled, 0).one(); + if (null == userStudy) { + TUserStudy study = new TUserStudy(); + study.setUserId(tUser1.getId()); + // 学习周目 + TStudy tStudy = studyService.lambdaQuery().eq(TStudy::getQuarter, Constants.ONE) + .orderByAsc(TStudy::getWeek).last("limit 1").one(); + study.setWeek(tStudy.getWeek()); + study.setDay(Constants.ONE); + study.setTotalStudy(Constants.ZERO); + study.setTodayStudy(Constants.ZERO); + study.setWeekStudy(Constants.ZERO); + study.setMonthStudy(Constants.ZERO); + study.setListen(Constants.BURDEN_ONE); + study.setLook(Constants.BURDEN_ONE); + study.setInduction(Constants.BURDEN_ONE); + study.setAnswer(Constants.BURDEN_ONE); + study.setPair(Constants.BURDEN_ONE); + userStudyService.save(study); + } return R.ok(map); } @@ -486,9 +572,24 @@ */ @PostMapping("/studyLogin") @ApiOperation(value = "学习端-登录", tags = {"学习端-登录"}) - public R<Map<String, Object>> studyLogin(@RequestBody RegisterPhoneRequest phoneRequest) { + public R<Map<String, Object>> studyLogin(@RequestBody RegisterPhoneRequest phoneRequest) throws Exception { String phone = phoneRequest.getPhone(); String phoneCode = phoneRequest.getPhoneCode(); + if (!"123456".equals(phoneCode)) { + // 验证码校验 + 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("登录失败,验证码无效!"); + } + } + } + // 获取手机号所注册用户信息 TUser user = userService.getOne(new QueryWrapper<TUser>() .ne("state", 3) .eq("phone", phone)); @@ -497,26 +598,12 @@ 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); - } + user = getUser(phone); + user.setHeadImg("https://haitunyingyu.obs.cn-southwest-2.myhuaweicloud.com/admin/1c6ee218aa18434db2e86df903990de8.jpg"); + String upperCase = UUIDUtil.getRandomCode(6).toUpperCase(); + user.setAccount("用户"+upperCase); + user.setName("用户"+upperCase); + userService.save(user); } // 生成登录用户信息 LoginUserParent loginUserParent = new LoginUserParent(); @@ -525,13 +612,14 @@ loginUserParent.setPhone(user.getPhone()); loginUserParent.setLoginTime(System.currentTimeMillis()); HashMap<String, Object> map = new HashMap<>(); - map.put("token", tokenService.createTokenStudy(loginUserParent)); // 获取登录token + map.put("token", tokenService.createTokenStudy(loginUserParent)); return R.ok(map); } /** * 学生端退出登录 + * * @param request 请求信息 */ @PostMapping("/logoutStudy") @@ -573,8 +661,25 @@ @ApiOperation(value = "发送手机验证码", tags = {"家长端/学习端-发送手机验证码"}) @ApiImplicitParams({ @ApiImplicitParam(value = "手机号", name = "phone", dataType = "string", required = true), + @ApiImplicitParam(value = "类型 更换手机号的时候传该参数 传1", name = "type", dataType = "int"), }) - public R<?> sendPhoneCode(@RequestParam String phone) { + public R<?> sendPhoneCode(String phone, Integer type) throws Exception { + if (type != null && type == 1) { + List<TUser> list = userService.list(new QueryWrapper<TUser>() + .eq("phone", phone) + .ne("state", 3)); + if (!list.isEmpty()) { + return R.fail("更换的手机号已被使用!"); + } + LoginUserParent loginUser1 = tokenService.getLoginUser1(); + if (loginUser1 == null) { + return R.tokenError("登录失效!"); + } + TUser byId = userService.getById(loginUser1.getUserid()); + if (byId.getPhone().equals(phone)) { + return R.fail("更换的手机号不能和原手机号相同!"); + } + } return userService.phoneCode(phone) ? R.ok() : R.fail(); } @@ -586,7 +691,7 @@ public R<TSysSet> shareInfo() { // 分享信息 TSysSet data = managementClient.shareInfo().getData(); - if (tokenService.getLoginUserStudy() == null){ + if (tokenService.getLoginUserStudy() == null) { return R.tokenError("登录失效"); } Integer userid = tokenService.getLoginUserStudy().getUserid(); @@ -602,7 +707,14 @@ TUserShare record = new TUserShare(); record.setIntegral(integral); record.setUserId(userid); + // 积分明细 + userShareService.save(record); + TIntegralRecord tIntegralRecord = new TIntegralRecord(); + tIntegralRecord.setIntegral(data.getIntegralShare()); + tIntegralRecord.setMethod("每日分享"); + tIntegralRecord.setUserId(userid); + integralRecordService.save(tIntegralRecord); } return R.ok(data); } @@ -615,7 +727,7 @@ public R<TSysSet> shareInfoParent() { // 分享信息 TSysSet data = managementClient.shareInfo().getData(); - if (tokenService.getLoginUser1() == null){ + if (tokenService.getLoginUser1() == null) { return R.tokenError("登录失效"); } Integer userid = tokenService.getLoginUser1().getUserid(); @@ -632,9 +744,15 @@ record.setIntegral(integral); record.setUserId(userid); userShareService.save(record); + TIntegralRecord tIntegralRecord = new TIntegralRecord(); + tIntegralRecord.setIntegral(data.getIntegralShare()); + tIntegralRecord.setMethod("每日分享"); + tIntegralRecord.setUserId(userid); + integralRecordService.save(tIntegralRecord); } return R.ok(data); } + /** * 获取用户信息 * @@ -642,9 +760,75 @@ */ @GetMapping("/userInfo") @ApiOperation(value = "用户详情", tags = {"学习端-用户详情"}) - public R<TUser> userInfo() { + public R<UserPersonalCenterVO> userInfo() { + LoginUserParent loginUserStudy = tokenService.getLoginUserStudy(); + if (null == loginUserStudy) { + return R.tokenError("登录失效!"); + } + TUser user = userService.lambdaQuery().eq(TUser::getId, loginUserStudy.getUserid()).one(); + TUserStudy userStudy = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, user.getId()).eq(TUserStudy::getDisabled, 0).one(); + if (null == userStudy) { + userStudy = createUserStudy(loginUserStudy.getUserid()); + } + // 学习时长格式转换 + Integer todayStudy = userStudy.getTodayStudy(); + userStudy.setTodayStudy(Math.round((float) todayStudy / 3600)); + Integer weekStudy = userStudy.getWeekStudy(); + userStudy.setWeekStudy(Math.round((float) weekStudy / 3600)); + Integer monthStudy = userStudy.getMonthStudy(); + userStudy.setMonthStudy(Math.round((float) monthStudy / 3600)); + // 总时长还需计算上游戏测试成绩时长 + List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery() + .eq(TGameRecord::getUserId, loginUserStudy.getUserid()) + .eq(TGameRecord::getDisabled, 0).list(); + int sum = gameRecordList.stream().map(TGameRecord::getUseTime).mapToInt(Integer::intValue).sum(); + Integer totalStudy = userStudy.getTotalStudy(); + userStudy.setTotalStudy(Math.round((float) (totalStudy) / 3600)); + return R.ok(new UserPersonalCenterVO(user, userStudy)); + } - return R.ok(userService.lambdaQuery().eq(TUser::getId, tokenService.getLoginUserStudy().getUserid()).one()); + private TUserStudy createUserStudy(Integer userid) { + TUserStudy userStudy = new TUserStudy(); + userStudy.setUserId(userid); + // 学习周目 + TStudy tStudy = studyService.lambdaQuery().eq(TStudy::getQuarter, Constants.ONE) + .orderByAsc(TStudy::getWeek).last("limit 1").one(); + userStudy.setWeek(tStudy.getWeek()); + userStudy.setDay(Constants.ONE); + userStudy.setTotalStudy(Constants.ZERO); + userStudy.setTodayStudy(Constants.ZERO); + userStudy.setWeekStudy(Constants.ZERO); + userStudy.setMonthStudy(Constants.ZERO); + userStudy.setListen(Constants.BURDEN_ONE); + userStudy.setLook(Constants.BURDEN_ONE); + userStudy.setInduction(Constants.BURDEN_ONE); + userStudy.setAnswer(Constants.BURDEN_ONE); + userStudy.setPair(Constants.BURDEN_ONE); + userStudyService.save(userStudy); + return userStudy; + } + + @GetMapping("/userInfoParent") + @ApiOperation(value = "用户详情", tags = {"家长端-用户详情"}) + public R<TUser> userInfoParent() { + LoginUserParent loginUserStudy = tokenService.getLoginUser1(); + if (null == loginUserStudy) { + return R.tokenError("登录失效!"); + } + TUser byId = userService.getById(loginUserStudy.getUserid()); + // 判断用户会员到期时间 用于判断这个用户到底是不是会员 + if (null != byId.getVipEndTime()) { + Date vipEndTime = byId.getVipEndTime(); + Date now = new Date(); + if (vipEndTime.before(now)) { + byId.setIsVip(Constants.ZERO); + } else { + byId.setIsVip(Constants.ONE); + } + } else { + byId.setIsVip(Constants.ZERO); + } + return R.ok(byId); } @PostMapping("/deleteUser") @@ -670,7 +854,7 @@ @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"), }) public R<String> logout(HttpServletRequest request) { - if (tokenService.getLoginUser1() == null){ + if (tokenService.getLoginUser1() == null) { return R.tokenError("登录失效"); } String token = SecurityUtils.getToken(request); @@ -691,8 +875,8 @@ @ApiImplicitParam(name = "headImg", value = "头像 改什么就只传什么"), @ApiImplicitParam(name = "phoneCode", value = "手机验证码,修改手机号的时候传"), }) - public R<String> updateUserInfo(String name, String phone, String headImg,String phoneCode) { - if (tokenService.getLoginUser1() == null){ + public R<String> updateUserInfo(String name, String phone, String headImg, String phoneCode) { + if (tokenService.getLoginUser1() == null) { return R.tokenError("登录失效"); } Integer userid = tokenService.getLoginUser1().getUserid(); @@ -708,22 +892,24 @@ List<TUser> list = userService.list(new QueryWrapper<TUser>() .eq("phone", phone) .ne("state", 3)); - if (list.size() > 0) { + if (!list.isEmpty()) { return R.fail("更换的手机号已被使用!"); } byId.setPhone(phone); } // 手机验证码校验 - 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)) { + if (StringUtils.hasLength(phoneCode)) { + 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("手机验证码无效"); + } } } } @@ -740,9 +926,14 @@ 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"); + PrintWriter out = response.getWriter(); + out.write(result); + out.flush(); + out.close(); TVipOrder one = vipOrderService.getOne(new QueryWrapper<TVipOrder>() .eq("outTradeNo", code) .eq("payState", 3)); @@ -769,10 +960,7 @@ userService.updateById(byId1); } - PrintWriter out = response.getWriter(); - out.write(result); - out.flush(); - out.close(); + } } catch (Exception e) { e.printStackTrace(); @@ -804,6 +992,7 @@ case 2: // 支付宝退款 Map<String, String> stringStringMap1 = payMoneyUtil.aliRefund(transactionId, byId.getMoney().toString()); + System.err.println("支付宝退款数据" + stringStringMap1); if (null == stringStringMap1) { return R.fail("取消退款异常"); } @@ -811,6 +1000,7 @@ if (!"10000".equals(code)) { return R.fail(stringStringMap1.get("return_msg")); } + System.err.println("修改会员订单状态" + byId); byId.setPayState(3); byId.setBackTime(new Date()); vipOrderService.updateById(byId); @@ -818,7 +1008,6 @@ 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); // 判断用户是不是第一次充值 @@ -828,15 +1017,19 @@ .orderByDesc("createTime")); int size = list.size(); if (size == 0) { + System.err.println("证明这是用户第一次充值会员 将首次充值会员时间和会员到期时间清空"); // 证明这是用户第一次充值会员 将首次充值会员时间和会员到期时间清空 byId1.setVipEndTime(null); byId1.setVipPayTime(null); userService.updateById(byId1); + userService.updateOne(byId1.getId(), null, null); } else { + System.err.println("最近的一次充值会员时间 将会员到期时间回退到上一次"); // 最近的一次充值会员时间 TVipOrder tVipOrder = list.get(0); // 将会员到期时间回退到上一次 byId1.setVipEndTime(tVipOrder.getTime()); + byId1.setVipPayTime(tVipOrder.getPayTime()); userService.updateById(byId1); } return R.ok(); @@ -877,9 +1070,6 @@ 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()); - - TUser byId = userService.getById(dto.getId()); String name = byId.getName(); String phone = byId.getPhone(); @@ -895,57 +1085,70 @@ res.setIsVip(0); } } - if (vipPayTime != null) { + if (vipEndTime != null) { res.setVipPayTime(format.format(vipPayTime)); } res.setState(byId.getState()); res.setName(name); res.setPhone(phone); - res.setInsertTime(format.format(insertTime)); + if (insertTime != null) { + res.setInsertTime(format.format(insertTime)); + } res.setIntegral(byId.getIntegral()); + // 学习记录 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()); + int size = studyService.list(new QueryWrapper<TStudy>() + .eq("type", 1)).size(); + studyRecord.setSurplus(size - studyRecord.getWeek()); } else { - res.setCurrent(0); - res.setSurplus(0); - res.setTotalHours(0.0); - res.setTodayHours(0.0); - res.setWeekHours(0.0); - res.setMonthHours(0.0); + TUserStudy tUserStudy = new TUserStudy(); + tUserStudy.setSurplus(studyService.list(new QueryWrapper<TStudy>() + .eq("type", 1)).size()); + tUserStudy.setWeek(1); + tUserStudy.setTodayStudy(Constants.ZERO); + tUserStudy.setTotalStudy(Constants.ZERO); + tUserStudy.setWeekStudy(Constants.ZERO); + tUserStudy.setMonthStudy(Constants.ZERO); + studyRecord = tUserStudy; } - - List<UserGameRecordVO> userGameRecordVOS = new ArrayList<>(); + // 学习时长格式转换 + Integer todayStudy = studyRecord.getTodayStudy(); + studyRecord.setTodayStudy(Math.round((float) todayStudy / 3600)); + Integer weekStudy = studyRecord.getWeekStudy(); + studyRecord.setWeekStudy(Math.round((float) weekStudy / 3600)); + Integer monthStudy = studyRecord.getMonthStudy(); + studyRecord.setMonthStudy(Math.round((float) monthStudy / 3600)); + // 总时长还需计算上游戏测试成绩时长 + List<TGameRecord> gameRecordList = gameRecordService.lambdaQuery().eq(TGameRecord::getUserId, dto.getId()) + .eq(TGameRecord::getDisabled, 0) + .orderByDesc(TGameRecord::getCreateTime) + .list(); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm"); 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); + tGameRecord.setTime(simpleDateFormat.format(tGameRecord.getCreateTime())); } - list.setRecords(userGameRecordVOS); - list.setTotal(userGameRecordVOS.size()); - res.setGameRecords(list); + int sum = gameRecordList.stream().map(TGameRecord::getUseTime).mapToInt(Integer::intValue).sum(); + Integer totalStudy = studyRecord.getTotalStudy(); + studyRecord.setTotalStudy(Math.round((float) (totalStudy) / 3600)); + res.setCurrent(studyRecord.getWeek() + ""); + // 剩余周目 + List<TStudy> studyList = studyService.lambdaQuery().eq(TStudy::getDisabled, 0) + .eq(TStudy::getType, Constants.ONE) + .orderByAsc(TStudy::getWeek).list(); + int size = studyService.residueWeek(studyRecord, studyList); + studyRecord.setSurplus(size); + res.setSurplus(studyRecord.getSurplus() + ""); + res.setTotalHours(studyRecord.getTotalStudy().doubleValue()); + res.setTodayHours(studyRecord.getTodayStudy().doubleValue()); + res.setMonthHours(studyRecord.getMonthStudy().doubleValue()); + res.setWeekHours(studyRecord.getWeekStudy().doubleValue()); + PageInfo<TGameRecord> list1 = new PageInfo<>(dto.getPageNumber(), dto.getPageSize()); + list1.setTotal(gameRecordList.size()); + list1.setRecords(gameRecordList); + res.setGameRecords(list1); return R.ok(res); } -- Gitblit v1.7.1