From 87f979fb201a82ebad5926735ed6dfa75ca004d3 Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期一, 21 七月 2025 09:21:42 +0800 Subject: [PATCH] 修改bug --- ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserController.java | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 155 insertions(+), 11 deletions(-) diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserController.java index c224b41..988b461 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/UserController.java @@ -1,12 +1,19 @@ package com.ruoyi.web.controller.system; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.constant.WxConstant; +import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.BasePage; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.model.LoginUser; -import com.ruoyi.common.utils.NumberUtil; -import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.*; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.model.TbQuestion; import com.ruoyi.system.model.TbSystemConfig; @@ -14,17 +21,34 @@ import com.ruoyi.system.service.TbQuestionService; import com.ruoyi.system.service.TbSystemConfigService; import com.ruoyi.system.service.TbUserService; +import com.ruoyi.system.utils.wx.WxProperties; import com.ruoyi.system.vo.InviteUserListVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.apache.http.entity.ContentType; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.*; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.*; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.multipart.MultipartFile; -import java.util.ArrayList; -import java.util.List; +import javax.servlet.http.HttpServletRequest; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.security.SecureRandom; +import java.text.MessageFormat; +import java.text.SimpleDateFormat; +import java.util.*; import java.util.concurrent.TimeUnit; + +import static com.ruoyi.system.utils.wx.tools.WxAppletTools.ACCESS_TOKEN_URL; @Slf4j @RestController @@ -44,21 +68,27 @@ @Autowired private TbSystemConfigService systemConfigService; + @Autowired + private WxProperties wxConfig; + @Autowired + private RestTemplate restTemplate; + @ApiOperation(value = "修改用户信息",tags = {"用户模块"}) @PostMapping("/updateUserInfo") public R<?> updateUserInfo(String avatar,String username) { LoginUser loginUser = tokenService.getLoginUser(); - if (StringUtils.isBlank(avatar)) { - return R.fail("头像不能为空"); - } - if (StringUtils.isBlank(username)) { - return R.fail("姓名不能为空"); + if(loginUser==null){ + return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录"); } Long userId = loginUser.getUserId(); TbUser user = userService.getById(userId); - user.setUserName(username); - user.setAvatar(avatar); + if(StringUtils.isNotEmpty(username)) { + user.setUserName(username); + } + if(StringUtils.isNotEmpty(avatar)){ + user.setAvatar(avatar); + } userService.updateById(user); return R.ok(); } @@ -68,6 +98,9 @@ @GetMapping("/getUserInfo") public R<?> getUserInfo() { LoginUser loginUser = tokenService.getLoginUser(); + if(loginUser==null){ + return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录"); + } Long userId = loginUser.getUserId(); TbUser user = userService.getById(userId); return R.ok(user); @@ -77,6 +110,9 @@ @PostMapping("/accountCancellation") public R<?> accountCancellation() { LoginUser loginUser = tokenService.getLoginUser(); + if(loginUser==null){ + return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录"); + } Long userId = loginUser.getUserId(); TbUser user = userService.getById(userId); user.setStatus(3); @@ -90,6 +126,9 @@ @GetMapping("/getInviteUserList") public R<Page<InviteUserListVo>> getInviteUserList(BasePage page) { LoginUser loginUser = tokenService.getLoginUser(); + if(loginUser==null){ + return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录"); + } Long userId = loginUser.getUserId(); Page<TbUser> page1 = userService.page(new Page<>(page.getPageNum(), page.getPageSize()), new LambdaQueryWrapper<TbUser>().eq(TbUser::getInviteId, userId).orderByDesc(TbUser::getCreateTime)); Page<InviteUserListVo> inviteUserListVoPage = new Page<>(); @@ -125,4 +164,109 @@ return R.ok(content); } + + @ApiOperation(value = "退出登录",tags = {"用户模块"}) + @PostMapping("/quit") + public R<String> quit(HttpServletRequest request) { + tokenService.quitLogin(request); + return R.ok(); + } + + + @Autowired + private OSSUtil ossUtil; + @ApiOperation(value = "个人的小程序码(分享码)生成") + @GetMapping("/person-code") + public R<String> createQRcode() { + LoginUser loginUser = tokenService.getLoginUser(); + if(loginUser==null){ + return R.fail(HttpStatus.UNAUTHORIZED,"请重新登录"); + } + Long userId = loginUser.getUserId(); + // 获取调用凭证accessToken + String accessToken = getAccessToken(); + RestTemplate rest = new RestTemplate(); + InputStream inputStream = null; + OutputStream outputStream = null; + String imgUrl = ""; + try { + String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token="+accessToken; + log.info("url: "+url); + Map<String,Object> param = new HashMap<>(); + param.put("path","pages/shoppingMall/shoppingMall?userId="+userId); + param.put("width", 430); //二维码尺寸 + log.info("调用生成微信URL接口传参:" + param); + MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); + HttpEntity requestEntity = new HttpEntity(param, headers); + ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]); + log.info("调用小程序生成微信永久小程序码URL接口返回结果:" + entity.getBody()); + byte[] result = entity.getBody(); + inputStream = new ByteArrayInputStream(result); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); + // 最后上传生成的文件名 + String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + ".jpg"; + // oss中的文件夹名 + String objectName = sdf.format(new Date()) + "/" + finalFileName; + // 上传oss + ossUtil.uploadFile2OSS(inputStream, objectName); + //获取文件的URl地址 + imgUrl = ossUtil.getImgUrl(objectName); + log.info("imgUrl: "+imgUrl); + return R.ok(imgUrl); + + } catch (Exception e) { + log.error("调用小程序生成微信永久小程序码URL接口异常",e); + } finally { + if(inputStream != null){ + try { + inputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if(outputStream != null){ + try { + outputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return R.fail(); + } + @ApiOperation(value = "获取微信小程序二维码",tags = {"获取微信小程序二维码"}) + @PostMapping("/getQRCode") + public AjaxResult getQRCode() { + LoginUser loginUser = tokenService.getLoginUser(); + if(loginUser==null){ + return AjaxResult.error(HttpStatus.UNAUTHORIZED,"请重新登录"); + } + Long userId = loginUser.getUserId(); + String accessToken = getAccessToken(); + try { + String url = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token="+accessToken; + Map<String, Object> param = new HashMap<>(); + param.put("path", "pages/shoppingMall/shoppingMall?userId="+userId); + param.put("width", 240); //二维码尺寸 + HttpRequest post = HttpUtil.createPost(url); + post.body(JSON.toJSONString(param)); + HttpResponse execute = post.execute(); + String body = execute.body(); + System.out.println(body); + byte[] bytes = body.getBytes(); + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); + return AjaxResult.success(body); + } catch (Exception e) { + System.err.println("调用小程序生成微信永久小程序码URL接口异常" + e); + } + return AjaxResult.success(); + } + + public String getAccessToken() { + String requestUrl = MessageFormat.format(ACCESS_TOKEN_URL, wxConfig.getMemberAppId(), wxConfig.getMemberAppSecret()); + String respBody = restTemplate.getForEntity(requestUrl, String.class).getBody(); + JSONObject jsonObject = JSONObject.parseObject(respBody); + return jsonObject.getString("access_token"); + } } -- Gitblit v1.7.1