From f5104954de04e692b899fc02e59ddea9eb8c42cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Mon, 16 Jun 2025 18:57:34 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=AE=9E?= =?UTF-8?q?=E5=90=8D=E8=AE=A4=E8=AF=81=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserVerifyController.java | 1 + .../controller/WxOfficialController.java | 73 ++++++++++--------- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java index ff62321..e2acfc5 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java @@ -93,6 +93,7 @@ public class UserVerifyController extends BaseController { loginUser.setRealName(userVerify.getRealName()); if(userVerify.getType().equals(1)){ loginUser.setRealName(userVerify.getName()); + loginUser.setCertification(1); } userService.updateById(loginUser); } diff --git a/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java b/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java index 46fae32..2443093 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java @@ -75,10 +75,10 @@ public class WxOfficialController extends BaseController { @ApiOperation("验证微信服务器") @GetMapping("/{id}") - public String validate(@PathVariable("id") Integer tenantId,@RequestParam String nonce,@RequestParam String timestamp,@RequestParam String signature,@RequestParam String echostr){ + public String validate(@PathVariable("id") Integer tenantId, @RequestParam String nonce, @RequestParam String timestamp, @RequestParam String signature, @RequestParam String echostr) { System.out.println("nonce = " + nonce); System.out.println("tenantId = " + tenantId); - if(tenantId == null){ + if (tenantId == null) { return null; } String token = "gxwebsoft"; @@ -87,7 +87,7 @@ public class WxOfficialController extends BaseController { Arrays.sort(array); // 将三个参数字符串拼接成一个字符串进行sha1加密 StringBuilder sb = new StringBuilder(); - for (String str: array){ + for (String str : array) { sb.append(str); } final String strSha1 = DigestUtil.sha1Hex(sb.toString()); @@ -101,7 +101,7 @@ public class WxOfficialController extends BaseController { @Transactional(rollbackFor = {Exception.class}) @RequestMapping("/{id}") @ResponseBody - public String receiveMessages(HttpServletRequest request,@PathVariable("id") Integer tenantId) throws IOException { + public String receiveMessages(HttpServletRequest request, @PathVariable("id") Integer tenantId) throws IOException { System.out.println("tenantId = " + tenantId); Integer userId = 0; // 用户ID // 从请求中获取XML数据 @@ -113,9 +113,9 @@ public class WxOfficialController extends BaseController { Element FromUserName = XmlUtil.getElement(rootElement, "FromUserName"); String openId = FromUserName.getTextContent(); System.out.println("openId = " + openId); - if(StrUtil.isNotBlank(openId)){ + if (StrUtil.isNotBlank(openId)) { // 获取用户基本信息(UnionID机制) - final String userStr = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + getAccessToken() + "&openid="+ openId +"&lang=zh_CN"); + final String userStr = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + getAccessToken() + "&openid=" + openId + "&lang=zh_CN"); // 保存第三方用户信息表shop_user_oauth final JSONObject jsonObject = JSONObject.parseObject(userStr); final String unionid = jsonObject.getString("unionid"); @@ -123,15 +123,15 @@ public class WxOfficialController extends BaseController { System.out.println("unionid = " + unionid); sendTemplateMessage(openId); // 关注操作 - if (subscribe != null &&subscribe.equals("1")) { - final int count = userOauthService.count(new LambdaQueryWrapper().eq(UserOauth::getOauthType, MP_OFFICIAL).eq(UserOauth::getUnionid, unionid).eq(UserOauth::getTenantId,tenantId)); + if (subscribe != null && subscribe.equals("1")) { + final int count = userOauthService.count(new LambdaQueryWrapper().eq(UserOauth::getOauthType, MP_OFFICIAL).eq(UserOauth::getUnionid, unionid).eq(UserOauth::getTenantId, tenantId)); System.out.println("count = " + count); if (count == 0) { // 其他平台是否有注册过 final List list = userOauthService.list(new LambdaQueryWrapper().eq(UserOauth::getUnionid, unionid).eq(UserOauth::getDeleted, 0)); final int size = list.size(); // 新用户注册 - if (size== 0) { + if (size == 0) { User user = new User(); user.setStatus(0); user.setUsername("wxoff_".concat(RandomUtil.randomString(12))); @@ -160,8 +160,8 @@ public class WxOfficialController extends BaseController { } // 更新 if (!CollectionUtils.isEmpty(list)) { - for (UserOauth item: list){ - if(item.getUserId() != null){ + for (UserOauth item : list) { + if (item.getUserId() != null) { userId = item.getUserId(); } } @@ -183,7 +183,7 @@ public class WxOfficialController extends BaseController { return null; } - private void sendTemplateMessage(String openId){ + private void sendTemplateMessage(String openId) { String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + getAccessToken(); TemplateMessage templateMessage = new TemplateMessage(); templateMessage.setToUser(openId); @@ -198,12 +198,12 @@ public class WxOfficialController extends BaseController { {{productType.DATA}}:{{name.DATA}} 消费时间:{{time.DATA}} {{remark.DATA}} */ HashMap data = new HashMap<>(); - data.put("first",new TemplateMessageDTO("您收到了一条新的订单。")); - data.put("tradeDateTime",new TemplateMessageDTO("02月18日 01时05分")); - data.put("customerInfo",new TemplateMessageDTO("广州 王俊")); - data.put("orderItemName",new TemplateMessageDTO("兴趣车型")); - data.put("orderItemData",new TemplateMessageDTO("骐达 2011款 1.6 CVT 舒适版")); - data.put("remark",new TemplateMessageDTO("截止24日09:39分,您尚有10个订单未处理。")); + data.put("first", new TemplateMessageDTO("您收到了一条新的订单。")); + data.put("tradeDateTime", new TemplateMessageDTO("02月18日 01时05分")); + data.put("customerInfo", new TemplateMessageDTO("广州 王俊")); + data.put("orderItemName", new TemplateMessageDTO("兴趣车型")); + data.put("orderItemData", new TemplateMessageDTO("骐达 2011款 1.6 CVT 舒适版")); + data.put("remark", new TemplateMessageDTO("截止24日09:39分,您尚有10个订单未处理。")); System.out.println("data = " + data); // 链式构建请求 String result = HttpRequest.post(url) @@ -219,31 +219,31 @@ public class WxOfficialController extends BaseController { public ApiResult send(UserParam param) { // send发送订阅通知 String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/bizsend?access_token=" + getAccessToken(); - final UserOauth userOauth = userOauthService.getOne(new LambdaQueryWrapper().eq(UserOauth::getUserId, param.getUserId()).eq(UserOauth::getOauthType,"MP-OFFICIAL").eq(UserOauth::getDeleted, 0)); - if(userOauth != null){ + final UserOauth userOauth = userOauthService.getOne(new LambdaQueryWrapper().eq(UserOauth::getUserId, param.getUserId()).eq(UserOauth::getOauthType, "MP-OFFICIAL").eq(UserOauth::getDeleted, 0)); + if (userOauth != null) { param.setOpenid(userOauth.getOauthId()); final String oauthId = userOauth.getOauthId(); // 跳转小程序链接 HashMap miniprogram = new HashMap<>(); - miniprogram.put("appid",miniAppid); - miniprogram.put("pagepath","pages/chat/chat?friendId=" + param.getUserId()); + miniprogram.put("appid", miniAppid); + miniprogram.put("pagepath", "pages/chat/chat?friendId=" + param.getUserId()); // 参数 HashMap data = new HashMap<>(); final HashMap thing1 = new HashMap<>(); final HashMap thing2 = new HashMap<>(); - thing1.put("value","有新访客需要接待"); - thing2.put("value","吉媒小红娘"); - data.put("thing1",thing1); - data.put("thing2",thing2); + thing1.put("value", "有新访客需要接待"); + thing2.put("value", "吉媒小红娘"); + data.put("thing1", thing1); + data.put("thing2", thing2); // 请求主服务器获取用户信息 HashMap map = new HashMap<>(); map.put("access_token", getAccessToken()); - map.put("touser",oauthId); // "opEVj6e1YIlMyovkOQFCLJ7llmuI" + map.put("touser", oauthId); // "opEVj6e1YIlMyovkOQFCLJ7llmuI" // 红娘来信通知 map.put("template_id", templateId); - map.put("miniprogram",JSONObject.toJSONString(miniprogram)); - map.put("data",data); + map.put("miniprogram", JSONObject.toJSONString(miniprogram)); + map.put("data", data); // 新访客通知 // map.put("tid","XMpEsDHmZZqpiaAzmPqO0Gk_h39WCRkaNZ9VoSI9F34"); // map.put("page","https://admin.jimeigroup.cn"); @@ -258,12 +258,12 @@ public class WxOfficialController extends BaseController { JSONObject jsonObject = JSONObject.parseObject(result); System.out.println("jsonObject = " + jsonObject); - if(jsonObject != null){ + if (jsonObject != null) { return success(jsonObject); } } - return fail("请求失败",getAccessToken()); + return fail("请求失败", getAccessToken()); } // 调用接口凭证 @@ -286,7 +286,7 @@ public class WxOfficialController extends BaseController { JSONObject response = JSON.parseObject(result); if (response.getString("access_token") != null) { // 存入缓存 - redisUtil.set(key, result,7000L, TimeUnit.SECONDS); + redisUtil.set(key, result, 7000L, TimeUnit.SECONDS); return response.getString("access_token"); } return null; @@ -324,25 +324,26 @@ public class WxOfficialController extends BaseController { if (entity != null) { String result = EntityUtils.toString(entity, "UTF-8"); System.out.println("result = " + result); - if(!result.contains("ok")){ + if (!result.contains("ok")) { System.out.println("result = " + result); String key = MP_OFFICIAL.concat(":access_token:5"); redisUtil.delete(key); return fail(result); } - return success("返回结果",entity); + return success("返回结果", entity); } } catch (IOException e) { throw new RuntimeException(e); } - return fail("创建失败",url); + return fail("创建失败", url); } @ApiOperation("test") @PostMapping("/test") - public ApiResult count(){ + public ApiResult count() { final int count = userOauthService.count(new LambdaQueryWrapper().eq(UserOauth::getOauthType, MP_OFFICIAL).eq(UserOauth::getUnionid, "o0FaIuKa2UsVp6FCbvmZlrcaBRCM")); System.out.println("count = " + count); return success(getAccessToken()); } + } From 4d07efc220a8931f606a27f50853d4a8f4e9e847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Mon, 16 Jun 2025 19:40:16 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=AE=9E?= =?UTF-8?q?=E5=90=8D=E8=AE=A4=E8=AF=81=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserVerifyController.java | 210 ++++++++++-------- .../gxwebsoft/common/system/entity/User.java | 2 +- 2 files changed, 113 insertions(+), 99 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java index e2acfc5..2fd27bc 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java @@ -1,5 +1,6 @@ package com.gxwebsoft.common.system.controller; +import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -17,6 +18,7 @@ import com.gxwebsoft.common.core.annotation.OperationLog; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -32,120 +34,132 @@ import java.util.List; @RestController @RequestMapping("/api/system/user-verify") public class UserVerifyController extends BaseController { - @Resource - private UserVerifyService userVerifyService; - @Resource - private UserService userService; + @Resource + private UserVerifyService userVerifyService; + @Resource + private UserService userService; - @PreAuthorize("hasAuthority('sys:userVerify:list')") - @ApiOperation("分页查询实名认证") - @GetMapping("/page") - public ApiResult> page(UserVerifyParam param) { - // 使用关联查询 - return success(userVerifyService.pageRel(param)); + @PreAuthorize("hasAuthority('sys:userVerify:list')") + @ApiOperation("分页查询实名认证") + @GetMapping("/page") + public ApiResult> page(UserVerifyParam param) { + // 使用关联查询 + return success(userVerifyService.pageRel(param)); + } + + @PreAuthorize("hasAuthority('sys:userVerify:list')") + @ApiOperation("查询全部实名认证") + @GetMapping() + public ApiResult> list(UserVerifyParam param) { + // 使用关联查询 + return success(userVerifyService.listRel(param)); + } + + @ApiOperation("根据id查询实名认证") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(userVerifyService.getByIdRel(id)); + } + + @ApiOperation("根据userId查询实名认证") + @GetMapping("/myUserVerify") + public ApiResult myUserVerify() { + if (getLoginUser() == null) { + return fail("请先登录", null); + } + return success(userVerifyService.getOne(new LambdaQueryWrapper().eq(UserVerify::getUserId, getLoginUserId()).last("limit 1"))); + } + + @ApiOperation("提交实名认证") + @PostMapping() + public ApiResult save(@RequestBody UserVerify userVerify) { + if (getLoginUser() == null) { + return fail("请先登录"); + } + userVerify.setUserId(getLoginUserId()); + if (userVerifyService.save(userVerify)) { + return success("提交成功"); + } + return fail("提交失败"); + } + + @Transactional(rollbackFor = Exception.class) + @ApiOperation("修改实名认证") + @PutMapping() + public ApiResult update(@RequestBody UserVerify userVerify) { + final User loginUser = getLoginUser(); + if (loginUser == null) { + return fail("请先登录"); } - @PreAuthorize("hasAuthority('sys:userVerify:list')") - @ApiOperation("查询全部实名认证") - @GetMapping() - public ApiResult> list(UserVerifyParam param) { - // 使用关联查询 - return success(userVerifyService.listRel(param)); + final User byUserId = userService.getByUserId(userVerify.getUserId().toString()); + if (ObjUtil.isEmpty(byUserId)) { + return fail("用户不存在"); } - - @ApiOperation("根据id查询实名认证") - @GetMapping("/{id}") - public ApiResult get(@PathVariable("id") Integer id) { - // 使用关联查询 - return success(userVerifyService.getByIdRel(id)); - } - - @ApiOperation("根据userId查询实名认证") - @GetMapping("/myUserVerify") - public ApiResult myUserVerify() { - if(getLoginUser() == null){ - return fail("请先登录",null); + // 不通过 + byUserId.setCertification(false); + // 通过认证 + if (userVerify.getStatus().equals(1)) { + byUserId.setRealName(userVerify.getRealName()); + byUserId.setCertification(true); + byUserId.setType(userVerify.getType()); + // 企业认证 + if (userVerify.getType().equals(1)) { + byUserId.setRealName(userVerify.getName()); } - return success(userVerifyService.getOne(new LambdaQueryWrapper().eq(UserVerify::getUserId, getLoginUserId()).last("limit 1"))); } + userService.updateById(byUserId); - @ApiOperation("提交实名认证") - @PostMapping() - public ApiResult save(@RequestBody UserVerify userVerify) { - if (getLoginUser() == null) { - return fail("请先登录"); - } - userVerify.setUserId(getLoginUserId()); - if (userVerifyService.save(userVerify)) { - return success("提交成功"); - } - return fail("提交失败"); + if (userVerifyService.updateById(userVerify)) { + return success("提交成功"); } + return fail("提交失败"); + } - @ApiOperation("修改实名认证") - @PutMapping() - public ApiResult update(@RequestBody UserVerify userVerify) { - final User loginUser = getLoginUser(); - if (loginUser == null) { - return fail("请先登录"); - } - if (userVerify.getStatus().equals(1)){ - loginUser.setRealName(userVerify.getRealName()); - if(userVerify.getType().equals(1)){ - loginUser.setRealName(userVerify.getName()); - loginUser.setCertification(1); - } - userService.updateById(loginUser); - } - if (userVerifyService.updateById(userVerify)) { - return success("提交成功"); - } - return fail("提交失败"); + @PreAuthorize("hasAuthority('sys:userVerify:remove')") + @OperationLog + @ApiOperation("删除实名认证") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (userVerifyService.removeById(id)) { + return success("删除成功"); } + return fail("删除失败"); + } - @PreAuthorize("hasAuthority('sys:userVerify:remove')") - @OperationLog - @ApiOperation("删除实名认证") - @DeleteMapping("/{id}") - public ApiResult remove(@PathVariable("id") Integer id) { - if (userVerifyService.removeById(id)) { - return success("删除成功"); - } - return fail("删除失败"); + @PreAuthorize("hasAuthority('sys:userVerify:save')") + @OperationLog + @ApiOperation("批量添加实名认证") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (userVerifyService.saveBatch(list)) { + return success("添加成功"); } + return fail("添加失败"); + } - @PreAuthorize("hasAuthority('sys:userVerify:save')") - @OperationLog - @ApiOperation("批量添加实名认证") - @PostMapping("/batch") - public ApiResult saveBatch(@RequestBody List list) { - if (userVerifyService.saveBatch(list)) { - return success("添加成功"); - } - return fail("添加失败"); + @PreAuthorize("hasAuthority('sys:userVerify:update')") + @OperationLog + @ApiOperation("批量修改实名认证") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(userVerifyService, "id")) { + return success("修改成功"); } + return fail("修改失败"); + } - @PreAuthorize("hasAuthority('sys:userVerify:update')") - @OperationLog - @ApiOperation("批量修改实名认证") - @PutMapping("/batch") - public ApiResult removeBatch(@RequestBody BatchParam batchParam) { - if (batchParam.update(userVerifyService, "id")) { - return success("修改成功"); - } - return fail("修改失败"); - } - - @PreAuthorize("hasAuthority('sys:userVerify:remove')") - @OperationLog - @ApiOperation("批量删除实名认证") - @DeleteMapping("/batch") - public ApiResult removeBatch(@RequestBody List ids) { - if (userVerifyService.removeByIds(ids)) { - return success("删除成功"); - } - return fail("删除失败"); + @PreAuthorize("hasAuthority('sys:userVerify:remove')") + @OperationLog + @ApiOperation("批量删除实名认证") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (userVerifyService.removeByIds(ids)) { + return success("删除成功"); } + return fail("删除失败"); + } } diff --git a/src/main/java/com/gxwebsoft/common/system/entity/User.java b/src/main/java/com/gxwebsoft/common/system/entity/User.java index 6f77f9a..14b7118 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/User.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/User.java @@ -248,7 +248,7 @@ public class User implements UserDetails { private String companyName; @ApiModelProperty("是否已实名认证") - private Integer certification; + private Boolean certification; @ApiModelProperty("机构名称") @TableField(exist = false) From c922346f893aec2a3b1eb5ffa32afd71e7ac0f35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Mon, 16 Jun 2025 20:28:14 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=AE=9E?= =?UTF-8?q?=E5=90=8D=E8=AE=A4=E8=AF=81=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/system/controller/UserVerifyController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java index 2fd27bc..cdbf6c1 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java @@ -93,7 +93,7 @@ public class UserVerifyController extends BaseController { return fail("请先登录"); } - final User byUserId = userService.getByUserId(userVerify.getUserId().toString()); + final User byUserId = userService.getById(userVerify.getUserId()); if (ObjUtil.isEmpty(byUserId)) { return fail("用户不存在"); } From 1be7538b48403b362186bf3c9c73686c04e7bdfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Mon, 16 Jun 2025 22:30:04 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9AuserRole?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/UserRoleController.java | 152 +++++++++++++----- .../common/system/entity/UserRole.java | 51 +++--- .../common/system/mapper/UserRoleMapper.java | 70 +++++--- .../system/mapper/xml/UserRoleMapper.xml | 89 ++++++---- .../common/system/param/UserRoleParam.java | 37 +++++ .../system/service/UserRoleService.java | 77 ++++++--- .../service/impl/UserRoleServiceImpl.java | 65 +++++--- .../com/gxwebsoft/generator/SysGenerator.java | 1 + 8 files changed, 383 insertions(+), 159 deletions(-) create mode 100644 src/main/java/com/gxwebsoft/common/system/param/UserRoleParam.java diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserRoleController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserRoleController.java index 534a617..9385ece 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/UserRoleController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/UserRoleController.java @@ -1,57 +1,135 @@ package com.gxwebsoft.common.system.controller; -import cn.afterturn.easypoi.excel.ExcelImportUtil; -import cn.afterturn.easypoi.excel.entity.ImportParams; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.service.UserRoleService; +import com.gxwebsoft.common.system.entity.UserRole; +import com.gxwebsoft.common.system.param.UserRoleParam; +import com.gxwebsoft.common.core.web.ApiResult; +import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; -import com.gxwebsoft.common.core.config.ConfigProperties; -import com.gxwebsoft.common.core.security.JwtSubject; -import com.gxwebsoft.common.core.security.JwtUtil; -import com.gxwebsoft.common.core.utils.CommonUtil; -import com.gxwebsoft.common.core.web.*; -import com.gxwebsoft.common.system.entity.*; -import com.gxwebsoft.common.system.param.UserImportParam; -import com.gxwebsoft.common.system.param.UserParam; -import com.gxwebsoft.common.system.result.LoginResult; -import com.gxwebsoft.common.system.service.*; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; -import io.swagger.models.auth.In; -import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; -import java.math.BigDecimal; -import java.util.*; -import java.util.stream.Collectors; +import java.util.List; /** - * 用户控制器 + * 用户角色控制器 * - * @author WebSoft - * @since 2018-12-24 16:10:41 + * @author 科技小王子 + * @since 2025-06-16 20:39:53 */ -@Slf4j -@Api(tags = "用户角色") +@Api(tags = "用户角色管理") @RestController @RequestMapping("/api/system/user-role") public class UserRoleController extends BaseController { - @Resource - private UserRoleService userRoleService; + @Resource + private UserRoleService userRoleService; - @ApiOperation("查询角色下的用户") - @GetMapping("/user-list-in-role/{id}") - public ApiResult> userListInRole(@PathVariable Integer id) { - return success(userRoleService.listByRoleId(id)); + @ApiOperation("查询角色下的用户") + @GetMapping("/user-list-in-role/{id}") + public ApiResult> userListInRole(@PathVariable Integer id) { + return success(userRoleService.listByRoleId(id)); + } + + @ApiOperation("分页查询用户角色") + @GetMapping("/page") + public ApiResult> page(UserRoleParam param) { + // 使用关联查询 + return success(userRoleService.pageRel(param)); + } + + @ApiOperation("查询全部用户角色") + @GetMapping() + public ApiResult> list(UserRoleParam param) { + // 使用关联查询 + return success(userRoleService.listRel(param)); + } + + + @ApiOperation("根据id查询用户角色") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + // 使用关联查询 + return success(userRoleService.getByIdRel(id)); + } + + @PreAuthorize("hasAuthority('sys:userRole:save')") + @OperationLog + @ApiOperation("添加用户角色") + @PostMapping() + public ApiResult save(@RequestBody UserRole userRole) { + // 记录当前登录用户id + User loginUser = getLoginUser(); + if (loginUser != null) { + userRole.setUserId(loginUser.getUserId()); } + if (userRoleService.save(userRole)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @ApiOperation("修改用户角色") + @PutMapping() + public ApiResult update(@RequestBody UserRole userRole) { + final User loginUser = getLoginUser(); + if (loginUser == null) { + return fail("请先登录"); + } + if (userRoleService.updateById(userRole)) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:userRole:remove')") + @OperationLog + @ApiOperation("删除用户角色") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (userRoleService.removeById(id)) { + return success("删除成功"); + } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:userRole:save')") + @OperationLog + @ApiOperation("批量添加用户角色") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (userRoleService.saveBatch(list)) { + return success("添加成功"); + } + return fail("添加失败"); + } + + @PreAuthorize("hasAuthority('sys:userRole:update')") + @OperationLog + @ApiOperation("批量修改用户角色") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(userRoleService, "id")) { + return success("修改成功"); + } + return fail("修改失败"); + } + + @PreAuthorize("hasAuthority('sys:userRole:remove')") + @OperationLog + @ApiOperation("批量删除用户角色") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (userRoleService.removeByIds(ids)) { + return success("删除成功"); + } + return fail("删除失败"); + } } diff --git a/src/main/java/com/gxwebsoft/common/system/entity/UserRole.java b/src/main/java/com/gxwebsoft/common/system/entity/UserRole.java index ca12165..21632f4 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/UserRole.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/UserRole.java @@ -1,49 +1,52 @@ package com.gxwebsoft.common.system.entity; -import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import java.time.LocalDateTime; +import java.io.Serializable; +import java.util.Date; + import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; - -import java.io.Serializable; -import java.util.Date; +import lombok.EqualsAndHashCode; /** * 用户角色 * - * @author WebSoft - * @since 2018-12-24 16:10:23 + * @author 科技小王子 + * @since 2025-06-16 20:39:53 */ @Data @ApiModel(description = "用户角色") @TableName("sys_user_role") public class UserRole implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - @ApiModelProperty("主键id") - @TableId(type = IdType.AUTO) - private Integer id; + @ApiModelProperty("主键id") + @TableId(type = IdType.AUTO) + private Integer id; - @ApiModelProperty("用户id") - private Integer userId; + @ApiModelProperty("用户id") + private Integer userId; - @ApiModelProperty("角色id") - private Integer roleId; + @ApiModelProperty("角色id") + private Integer roleId; - @ApiModelProperty("创建时间") - private Date createTime; + @ApiModelProperty("创建时间") + private Date createTime; - @ApiModelProperty("修改时间") - private Date updateTime; + @ApiModelProperty("修改时间") + private Date updateTime; - @ApiModelProperty("角色名称") - @TableField(exist = false) - private String roleName; + @ApiModelProperty("角色名称") + @TableField(exist = false) + private String roleName; - @ApiModelProperty("租户ID") - private Integer tenantId; + @ApiModelProperty("租户ID") + private Integer tenantId; } diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/UserRoleMapper.java b/src/main/java/com/gxwebsoft/common/system/mapper/UserRoleMapper.java index 51b38c8..71efd86 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/UserRoleMapper.java +++ b/src/main/java/com/gxwebsoft/common/system/mapper/UserRoleMapper.java @@ -2,8 +2,10 @@ package com.gxwebsoft.common.system.mapper; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.gxwebsoft.common.system.entity.Role; import com.gxwebsoft.common.system.entity.UserRole; +import com.gxwebsoft.common.system.param.UserRoleParam; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -11,35 +13,53 @@ import java.util.List; /** * 用户角色Mapper * - * @author WebSoft - * @since 2018-12-24 16:10:02 + * @author 科技小王子 + * @since 2025-06-16 20:39:53 */ public interface UserRoleMapper extends BaseMapper { - /** - * 批量添加用户角色 - * - * @param userId 用户id - * @param roleIds 角色id集合 - * @return int - */ - int insertBatch(@Param("userId") Integer userId, @Param("roleIds") List roleIds); + /** + * 批量添加用户角色 + * + * @param userId 用户id + * @param roleIds 角色id集合 + * @return int + */ + int insertBatch(@Param("userId") Integer userId, @Param("roleIds") List roleIds); - /** - * 根据用户id查询角色 - * - * @param userId 用户id - * @return List - */ - @InterceptorIgnore(tenantLine = "true") - List selectByUserId(@Param("userId") Integer userId); + /** + * 根据用户id查询角色 + * + * @param userId 用户id + * @return List + */ + @InterceptorIgnore(tenantLine = "true") + List selectByUserId(@Param("userId") Integer userId); - /** - * 批量根据用户id查询角色 - * - * @param userIds 用户id集合 - * @return List - */ - List selectByUserIds(@Param("userIds") List userIds); + /** + * 批量根据用户id查询角色 + * + * @param userIds 用户id集合 + * @return List + */ + List selectByUserIds(@Param("userIds") List userIds); + + /** + * 分页查询 + * + * @param page 分页对象 + * @param param 查询参数 + * @return List + */ + List selectPageRel(@Param("page") IPage page, + @Param("param") UserRoleParam param); + + /** + * 查询全部 + * + * @param param 查询参数 + * @return List + */ + List selectListRel(@Param("param") UserRoleParam param); } diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserRoleMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserRoleMapper.xml index 6b1c3e2..a5184a8 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserRoleMapper.xml +++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserRoleMapper.xml @@ -1,35 +1,66 @@ - - + + - - INSERT INTO sys_user_role(user_id, role_id) VALUES - - (#{userId}, #{roleId}) - - + + INSERT INTO sys_user_role(user_id, role_id) VALUES + + (#{userId}, #{roleId}) + + - + - + + + + + SELECT a.* + FROM sys_user_role a + + + AND a.id = #{param.id} + + + AND a.user_id = #{param.userId} + + + AND a.role_id = #{param.roleId} + + + AND a.create_time >= #{param.createTimeStart} + + + AND a.create_time <= #{param.createTimeEnd} + + + + + + + + + diff --git a/src/main/java/com/gxwebsoft/common/system/param/UserRoleParam.java b/src/main/java/com/gxwebsoft/common/system/param/UserRoleParam.java new file mode 100644 index 0000000..24f30dc --- /dev/null +++ b/src/main/java/com/gxwebsoft/common/system/param/UserRoleParam.java @@ -0,0 +1,37 @@ +package com.gxwebsoft.common.system.param; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.gxwebsoft.common.core.annotation.QueryField; +import com.gxwebsoft.common.core.annotation.QueryType; +import com.gxwebsoft.common.core.web.BaseParam; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户角色查询参数 + * + * @author 科技小王子 + * @since 2025-06-16 20:39:53 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +@ApiModel(value = "UserRoleParam对象", description = "用户角色查询参数") +public class UserRoleParam extends BaseParam { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键id") + @QueryField(type = QueryType.EQ) + private Integer id; + + @ApiModelProperty(value = "用户id") + @QueryField(type = QueryType.EQ) + private Integer userId; + + @ApiModelProperty(value = "角色id") + @QueryField(type = QueryType.EQ) + private Integer roleId; + +} diff --git a/src/main/java/com/gxwebsoft/common/system/service/UserRoleService.java b/src/main/java/com/gxwebsoft/common/system/service/UserRoleService.java index 49c37ff..4fecd69 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/UserRoleService.java +++ b/src/main/java/com/gxwebsoft/common/system/service/UserRoleService.java @@ -1,43 +1,70 @@ package com.gxwebsoft.common.system.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.system.entity.Role; import com.gxwebsoft.common.system.entity.UserRole; +import com.gxwebsoft.common.system.param.UserRoleParam; import java.util.List; /** * 用户角色Service * - * @author WebSoft - * @since 2018-12-24 16:10:35 + * @author 科技小王子 + * @since 2025-06-16 20:39:53 */ public interface UserRoleService extends IService { - /** - * 批量添加用户角色 - * - * @param userId 用户id - * @param roleIds 角色id集合 - * @return int - */ - int saveBatch(Integer userId, List roleIds); + /** + * 批量添加用户角色 + * + * @param userId 用户id + * @param roleIds 角色id集合 + * @return int + */ + int saveBatch(Integer userId, List roleIds); - /** - * 根据用户id查询角色 - * - * @param userId 用户id - * @return List - */ - List listByUserId(Integer userId); + /** + * 根据用户id查询角色 + * + * @param userId 用户id + * @return List + */ + List listByUserId(Integer userId); - /** - * 批量根据用户id查询角色 - * - * @param userIds 用户id集合 - * @return List - */ - List listByUserIds(List userIds); + /** + * 批量根据用户id查询角色 + * + * @param userIds 用户id集合 + * @return List + */ + List listByUserIds(List userIds); + + List listByRoleId(Integer roleId); + + /** + * 分页关联查询 + * + * @param param 查询参数 + * @return PageResult + */ + PageResult pageRel(UserRoleParam param); + + /** + * 关联查询全部 + * + * @param param 查询参数 + * @return List + */ + List listRel(UserRoleParam param); + + /** + * 根据id查询 + * + * @param id 主键id + * @return UserRole + */ + UserRole getByIdRel(Integer id); - List listByRoleId(Integer roleId); } diff --git a/src/main/java/com/gxwebsoft/common/system/service/impl/UserRoleServiceImpl.java b/src/main/java/com/gxwebsoft/common/system/service/impl/UserRoleServiceImpl.java index df574dc..d7220c3 100644 --- a/src/main/java/com/gxwebsoft/common/system/service/impl/UserRoleServiceImpl.java +++ b/src/main/java/com/gxwebsoft/common/system/service/impl/UserRoleServiceImpl.java @@ -3,9 +3,12 @@ package com.gxwebsoft.common.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gxwebsoft.common.system.entity.Role; -import com.gxwebsoft.common.system.entity.UserRole; import com.gxwebsoft.common.system.mapper.UserRoleMapper; import com.gxwebsoft.common.system.service.UserRoleService; +import com.gxwebsoft.common.system.entity.UserRole; +import com.gxwebsoft.common.system.param.UserRoleParam; +import com.gxwebsoft.common.core.web.PageParam; +import com.gxwebsoft.common.core.web.PageResult; import org.springframework.stereotype.Service; import java.util.List; @@ -13,30 +16,54 @@ import java.util.List; /** * 用户角色Service实现 * - * @author WebSoft - * @since 2018-12-24 16:10:36 + * @author 科技小王子 + * @since 2025-06-16 20:39:53 */ @Service public class UserRoleServiceImpl extends ServiceImpl implements UserRoleService { + @Override + public int saveBatch(Integer userId, List roleIds) { + return baseMapper.insertBatch(userId, roleIds); + } - @Override - public int saveBatch(Integer userId, List roleIds) { - return baseMapper.insertBatch(userId, roleIds); - } + @Override + public List listByUserId(Integer userId) { + return baseMapper.selectByUserId(userId); + } - @Override - public List listByUserId(Integer userId) { - return baseMapper.selectByUserId(userId); - } + @Override + public List listByUserIds(List userIds) { + return baseMapper.selectByUserIds(userIds); + } - @Override - public List listByUserIds(List userIds) { - return baseMapper.selectByUserIds(userIds); - } + @Override + public List listByRoleId(Integer roleId) { + return list(new LambdaQueryWrapper().eq(UserRole::getRoleId, roleId)); + } + + @Override + public PageResult pageRel(UserRoleParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + List list = baseMapper.selectPageRel(page, param); + return new PageResult<>(list, page.getTotal()); + } + + @Override + public List listRel(UserRoleParam param) { + List list = baseMapper.selectListRel(param); + // 排序 + PageParam page = new PageParam<>(); + page.setDefaultOrder("create_time desc"); + return page.sortRecords(list); + } + + @Override + public UserRole getByIdRel(Integer id) { + UserRoleParam param = new UserRoleParam(); + param.setId(id); + return param.getOne(baseMapper.selectListRel(param)); + } - @Override - public List listByRoleId(Integer roleId) { - return list(new LambdaQueryWrapper().eq(UserRole::getRoleId, roleId)); - } } diff --git a/src/test/java/com/gxwebsoft/generator/SysGenerator.java b/src/test/java/com/gxwebsoft/generator/SysGenerator.java index dedabe2..4b66085 100644 --- a/src/test/java/com/gxwebsoft/generator/SysGenerator.java +++ b/src/test/java/com/gxwebsoft/generator/SysGenerator.java @@ -52,6 +52,7 @@ public class SysGenerator { // "sys_domain", // "sys_company", // "sys_user_verify" +// "sys_user_role" }; // 需要去除的表前缀 private static final String[] TABLE_PREFIX = new String[]{ From 779c4cbaf367cbe0c6d4148a087f323dd96b2e09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 17 Jun 2025 20:33:31 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9AmyUserVerify?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/UserVerifyController.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java index cdbf6c1..ec1fc15 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java @@ -64,11 +64,18 @@ public class UserVerifyController extends BaseController { @ApiOperation("根据userId查询实名认证") @GetMapping("/myUserVerify") - public ApiResult myUserVerify() { + public ApiResult myUserVerify(UserVerifyParam param) { if (getLoginUser() == null) { return fail("请先登录", null); } - return success(userVerifyService.getOne(new LambdaQueryWrapper().eq(UserVerify::getUserId, getLoginUserId()).last("limit 1"))); + final LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(UserVerify::getUserId, getLoginUserId()); + wrapper.eq(UserVerify::getDeleted, 0); + if(param.getStatus() != null){ + wrapper.eq(UserVerify::getStatus, param.getStatus()); + } + wrapper.last("limit 1"); + return success(userVerifyService.getOne(wrapper)); } @ApiOperation("提交实名认证") From eaddddafe3bbaa27e50b07bdfb58a1c0d699e861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Wed, 18 Jun 2025 15:39:04 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9AuserRole?= =?UTF-8?q?=E6=96=B0=E5=A2=9EroleCode=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gxwebsoft/common/system/entity/UserRole.java | 4 ++++ .../com/gxwebsoft/common/system/mapper/xml/UserRoleMapper.xml | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gxwebsoft/common/system/entity/UserRole.java b/src/main/java/com/gxwebsoft/common/system/entity/UserRole.java index 21632f4..986c39c 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/UserRole.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/UserRole.java @@ -46,6 +46,10 @@ public class UserRole implements Serializable { @TableField(exist = false) private String roleName; + @ApiModelProperty("角色标识") + @TableField(exist = false) + private String roleCode; + @ApiModelProperty("租户ID") private Integer tenantId; diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserRoleMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserRoleMapper.xml index a5184a8..69272a3 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserRoleMapper.xml +++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserRoleMapper.xml @@ -32,8 +32,9 @@ - SELECT a.* + SELECT a.*, b.role_name, b.role_code FROM sys_user_role a + LEFT JOIN sys_role b ON a.role_id = b.role_id AND a.id = #{param.id} From 3dee8bd0d1728a3bde66b4655c7eb65faa0eeef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Fri, 20 Jun 2025 06:55:29 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E9=87=8D?= =?UTF-8?q?=E7=BD=AE=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81=E7=A0=81=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AccessKeyController.java | 228 ++++++++++-------- 1 file changed, 125 insertions(+), 103 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/AccessKeyController.java b/src/main/java/com/gxwebsoft/common/system/controller/AccessKeyController.java index da834ba..6f4ec1f 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/AccessKeyController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/AccessKeyController.java @@ -4,17 +4,24 @@ import cn.hutool.core.util.StrUtil; import com.gxwebsoft.common.core.annotation.OperationLog; import com.gxwebsoft.common.core.utils.CacheClient; import com.gxwebsoft.common.core.utils.CommonUtil; +import com.gxwebsoft.common.core.utils.RedisUtil; import com.gxwebsoft.common.core.web.*; import com.gxwebsoft.common.system.entity.AccessKey; import com.gxwebsoft.common.system.param.AccessKeyParam; import com.gxwebsoft.common.system.service.AccessKeyService; import io.swagger.annotations.Api; + +import java.util.concurrent.TimeUnit; + import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; +import java.util.Random; + +import static com.gxwebsoft.common.core.constants.WebsiteConstants.CACHE_KEY_VERIFICATION_CODE_BY_DEV_SMS; /** * 访问凭证管理控制器 @@ -26,125 +33,140 @@ import java.util.List; @RestController @RequestMapping("/api/system/access-key") public class AccessKeyController extends BaseController { - @Resource - private AccessKeyService accessKeyService; - @Resource - private CacheClient cacheClient; + @Resource + private AccessKeyService accessKeyService; + @Resource + private CacheClient cacheClient; + @Resource + private RedisUtil redisUtil; - @PreAuthorize("hasAuthority('sys:accessKey:list')") - @OperationLog - @ApiOperation("分页查询访问凭证") - @GetMapping("/page") - public ApiResult> page(AccessKeyParam param) { - // 使用关联查询 - final PageResult accessKeyPageResult = accessKeyService.pageRel(param); - if (param.getCode() != null) { - // 短信验证码校验 - String code = cacheClient.get(param.getPhone(), String.class); - if (StrUtil.equals(code,param.getCode()) || "128880".equals(param.getCode())) { - return success(accessKeyPageResult); - } - return fail("短信验证码不正确",null); + @PreAuthorize("hasAuthority('sys:accessKey:list')") + @OperationLog + @ApiOperation("分页查询访问凭证") + @GetMapping("/page") + public ApiResult> page(AccessKeyParam param) { + // 使用关联查询 + final PageResult accessKeyPageResult = accessKeyService.pageRel(param); + if (param.getCode() != null) { + // 短信验证码校验 + String code = cacheClient.get(param.getPhone(), String.class); + if (StrUtil.equals(code, param.getCode()) || "128880".equals(param.getCode())) { + return success(accessKeyPageResult); } - // 默认不给查看AccessSecret - accessKeyPageResult.getList().forEach( d -> { - d.setAccessSecret(null); - }); - return success(accessKeyPageResult); + return fail("短信验证码不正确", null); } + // 默认不给查看AccessSecret + accessKeyPageResult.getList().forEach(d -> { + d.setAccessSecret(null); + }); + return success(accessKeyPageResult); + } - @PreAuthorize("hasAuthority('sys:accessKey:list')") - @OperationLog - @ApiOperation("查询全部访问凭证管理") - @GetMapping() - public ApiResult> list(AccessKeyParam param) { - PageParam page = new PageParam<>(param); - page.setDefaultOrder("create_time desc"); - return success(accessKeyService.list(page.getOrderWrapper())); - // 使用关联查询 - //return success(accessKeyService.listRel(param)); - } + @PreAuthorize("hasAuthority('sys:accessKey:list')") + @OperationLog + @ApiOperation("查询全部访问凭证管理") + @GetMapping() + public ApiResult> list(AccessKeyParam param) { + PageParam page = new PageParam<>(param); + page.setDefaultOrder("create_time desc"); + return success(accessKeyService.list(page.getOrderWrapper())); + // 使用关联查询 + //return success(accessKeyService.listRel(param)); + } - @PreAuthorize("hasAuthority('sys:accessKey:list')") - @OperationLog - @ApiOperation("根据id查询访问凭证管理") - @GetMapping("/{id}") - public ApiResult get(@PathVariable("id") Integer id) { - return success(accessKeyService.getById(id)); - // 使用关联查询 - //return success(accessKeyService.getByIdRel(id)); - } + @PreAuthorize("hasAuthority('sys:accessKey:list')") + @OperationLog + @ApiOperation("根据id查询访问凭证管理") + @GetMapping("/{id}") + public ApiResult get(@PathVariable("id") Integer id) { + return success(accessKeyService.getById(id)); + // 使用关联查询 + //return success(accessKeyService.getByIdRel(id)); + } - @PreAuthorize("hasAuthority('sys:accessKey:list')") - @OperationLog - @ApiOperation("添加访问凭证管理") - @PostMapping() - public ApiResult save(@RequestBody AccessKey accessKey) { - final int count = accessKeyService.count(); - if (count >= 5) { - return fail("当前账号只能绑定 5 个 AccessKey"); - } - accessKey.setAccessKey("AI" + CommonUtil.randomUUID16()); - accessKey.setAccessSecret(CommonUtil.randomUUID16().concat(CommonUtil.randomUUID16())); - if (accessKeyService.save(accessKey)) { - return success("创建成功"); - } - return fail("创建失败"); + @PreAuthorize("hasAuthority('sys:accessKey:list')") + @OperationLog + @ApiOperation("添加访问凭证管理") + @PostMapping() + public ApiResult save(@RequestBody AccessKey accessKey) { + final int count = accessKeyService.count(); + if (count >= 5) { + return fail("当前账号只能绑定 5 个 AccessKey"); } + accessKey.setAccessKey("AI" + CommonUtil.randomUUID16()); + accessKey.setAccessSecret(CommonUtil.randomUUID16().concat(CommonUtil.randomUUID16())); + if (accessKeyService.save(accessKey)) { + return success("创建成功"); + } + return fail("创建失败"); + } - @PreAuthorize("hasAuthority('sys:accessKey:update')") - @OperationLog - @ApiOperation("修改访问凭证管理") - @PutMapping() - public ApiResult update(@RequestBody AccessKey accessKey) { - if (accessKeyService.updateById(accessKey)) { - return success("修改成功"); - } - return fail("修改失败"); + @PreAuthorize("hasAuthority('sys:accessKey:update')") + @OperationLog + @ApiOperation("修改访问凭证管理") + @PutMapping() + public ApiResult update(@RequestBody AccessKey accessKey) { + if (accessKeyService.updateById(accessKey)) { + return success("修改成功"); } + return fail("修改失败"); + } - @PreAuthorize("hasAuthority('sys:accessKey:remove')") - @OperationLog - @ApiOperation("删除访问凭证管理") - @DeleteMapping("/{id}") - public ApiResult remove(@PathVariable("id") Integer id) { - if (accessKeyService.removeById(id)) { - return success("删除成功"); - } - return fail("删除失败"); + @PreAuthorize("hasAuthority('sys:accessKey:remove')") + @OperationLog + @ApiOperation("删除访问凭证管理") + @DeleteMapping("/{id}") + public ApiResult remove(@PathVariable("id") Integer id) { + if (accessKeyService.removeById(id)) { + return success("删除成功"); } + return fail("删除失败"); + } - @PreAuthorize("hasAuthority('sys:accessKey:save')") - @OperationLog - @ApiOperation("批量添加访问凭证管理") - @PostMapping("/batch") - public ApiResult saveBatch(@RequestBody List list) { - if (accessKeyService.saveBatch(list)) { - return success("添加成功"); - } - return fail("添加失败"); + @PreAuthorize("hasAuthority('sys:accessKey:save')") + @OperationLog + @ApiOperation("批量添加访问凭证管理") + @PostMapping("/batch") + public ApiResult saveBatch(@RequestBody List list) { + if (accessKeyService.saveBatch(list)) { + return success("添加成功"); } + return fail("添加失败"); + } - @PreAuthorize("hasAuthority('sys:accessKey:update')") - @OperationLog - @ApiOperation("批量修改访问凭证管理") - @PutMapping("/batch") - public ApiResult removeBatch(@RequestBody BatchParam batchParam) { - if (batchParam.update(accessKeyService, "id")) { - return success("修改成功"); - } - return fail("修改失败"); + @PreAuthorize("hasAuthority('sys:accessKey:update')") + @OperationLog + @ApiOperation("批量修改访问凭证管理") + @PutMapping("/batch") + public ApiResult removeBatch(@RequestBody BatchParam batchParam) { + if (batchParam.update(accessKeyService, "id")) { + return success("修改成功"); } + return fail("修改失败"); + } - @PreAuthorize("hasAuthority('sys:accessKey:remove')") - @OperationLog - @ApiOperation("批量删除访问凭证管理") - @DeleteMapping("/batch") - public ApiResult removeBatch(@RequestBody List ids) { - if (accessKeyService.removeByIds(ids)) { - return success("删除成功"); - } - return fail("删除失败"); + @PreAuthorize("hasAuthority('sys:accessKey:remove')") + @OperationLog + @ApiOperation("批量删除访问凭证管理") + @DeleteMapping("/batch") + public ApiResult removeBatch(@RequestBody List ids) { + if (accessKeyService.removeByIds(ids)) { + return success("删除成功"); } + return fail("删除失败"); + } + + @PreAuthorize("hasAuthority('sys:accessKey:resetSMSCode')") + @OperationLog + @ApiOperation("重置短信验证码") + @PostMapping("/resetSMSCode") + public ApiResult resetSMSCode() { + // 生成短信验证码 + Random randObj = new Random(); + String code = Integer.toString(100000 + randObj.nextInt(900000)); + redisUtil.set(CACHE_KEY_VERIFICATION_CODE_BY_DEV_SMS, code, 5L, TimeUnit.MINUTES); + return success("新验证码:".concat(code)); + } + } From 6e4d41cff27206c07ad52c19c54faa8416466b33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Fri, 20 Jun 2025 07:05:58 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E9=87=8D?= =?UTF-8?q?=E7=BD=AE=E4=B8=87=E8=83=BD=E7=9F=AD=E4=BF=A1=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gxwebsoft/common/system/controller/AccessKeyController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/AccessKeyController.java b/src/main/java/com/gxwebsoft/common/system/controller/AccessKeyController.java index 6f4ec1f..e933232 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/AccessKeyController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/AccessKeyController.java @@ -158,7 +158,7 @@ public class AccessKeyController extends BaseController { @PreAuthorize("hasAuthority('sys:accessKey:resetSMSCode')") @OperationLog - @ApiOperation("重置短信验证码") + @ApiOperation("重置万能短信验证码") @PostMapping("/resetSMSCode") public ApiResult resetSMSCode() { // 生成短信验证码 From 5404cc56894179ad538ae698930ab5569421330c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Mon, 23 Jun 2025 00:40:10 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9AUserVerify?= =?UTF-8?q?=E6=96=B0=E5=A2=9EorganizationId=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/gxwebsoft/common/system/entity/UserVerify.java | 3 +++ .../common/system/mapper/xml/UserVerifyMapper.xml | 6 ++++++ .../gxwebsoft/common/system/param/UserVerifyParam.java | 8 ++++++++ 3 files changed, 17 insertions(+) diff --git a/src/main/java/com/gxwebsoft/common/system/entity/UserVerify.java b/src/main/java/com/gxwebsoft/common/system/entity/UserVerify.java index a8486e0..f6cccc2 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/UserVerify.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/UserVerify.java @@ -65,6 +65,9 @@ public class UserVerify implements Serializable { @ApiModelProperty(value = "审核人") private Integer adminId; + @ApiModelProperty(value = "机构ID") + private Integer organizationId; + @ApiModelProperty(value = "备注") private String comments; diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserVerifyMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserVerifyMapper.xml index e0d1cc7..e555436 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserVerifyMapper.xml +++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserVerifyMapper.xml @@ -38,6 +38,12 @@ AND a.zz_code = #{param.zzCode} + + AND a.admin_id = #{param.adminId} + + + AND a.organization_id = #{param.organizationId} + AND a.comments LIKE CONCAT('%', #{param.comments}, '%') diff --git a/src/main/java/com/gxwebsoft/common/system/param/UserVerifyParam.java b/src/main/java/com/gxwebsoft/common/system/param/UserVerifyParam.java index f0ec164..223d943 100644 --- a/src/main/java/com/gxwebsoft/common/system/param/UserVerifyParam.java +++ b/src/main/java/com/gxwebsoft/common/system/param/UserVerifyParam.java @@ -57,6 +57,14 @@ public class UserVerifyParam extends BaseParam { @QueryField(type = QueryType.EQ) private String zzCode; + @ApiModelProperty(value = "管理员ID") + @QueryField(type = QueryType.EQ) + private Integer adminId; + + @ApiModelProperty(value = "机构ID") + @QueryField(type = QueryType.EQ) + private Integer organizationId; + @ApiModelProperty(value = "备注") private String comments; From 366fd4e34b5d5d03af95138a7623f359db897e01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Mon, 23 Jun 2025 02:41:13 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9AUserVerify?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/UserRoleController.java | 1 - .../system/controller/UserVerifyController.java | 11 ++++++++++- .../common/system/entity/UserVerify.java | 17 +++++++++++------ .../system/mapper/xml/UserVerifyMapper.xml | 3 ++- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserRoleController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserRoleController.java index 9385ece..0c14ecb 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/UserRoleController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/UserRoleController.java @@ -7,7 +7,6 @@ import com.gxwebsoft.common.system.entity.UserRole; import com.gxwebsoft.common.system.param.UserRoleParam; import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.PageResult; -import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.BatchParam; import com.gxwebsoft.common.core.annotation.OperationLog; import io.swagger.annotations.Api; diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java index ec1fc15..1bb0d68 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java @@ -5,7 +5,9 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.system.entity.Organization; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.service.OrganizationService; import com.gxwebsoft.common.system.service.UserService; import com.gxwebsoft.common.system.service.UserVerifyService; import com.gxwebsoft.common.system.entity.UserVerify; @@ -38,6 +40,8 @@ public class UserVerifyController extends BaseController { private UserVerifyService userVerifyService; @Resource private UserService userService; + @Resource + private OrganizationService organizationService; @PreAuthorize("hasAuthority('sys:userVerify:list')") @ApiOperation("分页查询实名认证") @@ -75,7 +79,12 @@ public class UserVerifyController extends BaseController { wrapper.eq(UserVerify::getStatus, param.getStatus()); } wrapper.last("limit 1"); - return success(userVerifyService.getOne(wrapper)); + final UserVerify one = userVerifyService.getOne(wrapper); + if(one.getOrganizationId() > 0){ + final Organization organization = organizationService.getById(one.getOrganizationId()); + one.setOrganizationName(organization.getOrganizationName()); + } + return success(one); } @ApiOperation("提交实名认证") diff --git a/src/main/java/com/gxwebsoft/common/system/entity/UserVerify.java b/src/main/java/com/gxwebsoft/common/system/entity/UserVerify.java index f6cccc2..b0277ed 100644 --- a/src/main/java/com/gxwebsoft/common/system/entity/UserVerify.java +++ b/src/main/java/com/gxwebsoft/common/system/entity/UserVerify.java @@ -1,17 +1,15 @@ package com.gxwebsoft.common.system.entity; import com.baomidou.mybatisplus.annotation.*; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.io.Serializable; -import java.util.Date; - import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Date; + /** * 实名认证 * @@ -68,6 +66,13 @@ public class UserVerify implements Serializable { @ApiModelProperty(value = "机构ID") private Integer organizationId; + @ApiModelProperty(value = "机构ID") + @TableField(exist = false) + private String organizationName; + + @ApiModelProperty(value = "用户角色ID") + private Integer userRoleId; + @ApiModelProperty(value = "备注") private String comments; diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserVerifyMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserVerifyMapper.xml index e555436..379cce3 100644 --- a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserVerifyMapper.xml +++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserVerifyMapper.xml @@ -4,9 +4,10 @@ - SELECT a.*, b.phone + SELECT a.*, b.phone, c.organization_name FROM sys_user_verify a LEFT JOIN sys_user b ON a.user_id = b.user_id + LEFT JOIN sys_organization c ON a.organization_id = c.organization_id AND a.id = #{param.id} From afce6628e2e69138353f0c3a6770d859488dda4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Mon, 23 Jun 2025 19:20:10 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9AUserVerify?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/UserVerifyController.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java index 1bb0d68..a47d381 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/UserVerifyController.java @@ -1,22 +1,19 @@ package com.gxwebsoft.common.system.controller; import cn.hutool.core.util.ObjUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.gxwebsoft.common.core.annotation.OperationLog; +import com.gxwebsoft.common.core.web.ApiResult; import com.gxwebsoft.common.core.web.BaseController; +import com.gxwebsoft.common.core.web.BatchParam; +import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.common.system.entity.Organization; import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.entity.UserVerify; +import com.gxwebsoft.common.system.param.UserVerifyParam; import com.gxwebsoft.common.system.service.OrganizationService; import com.gxwebsoft.common.system.service.UserService; import com.gxwebsoft.common.system.service.UserVerifyService; -import com.gxwebsoft.common.system.entity.UserVerify; -import com.gxwebsoft.common.system.param.UserVerifyParam; -import com.gxwebsoft.common.core.web.ApiResult; -import com.gxwebsoft.common.core.web.PageResult; -import com.gxwebsoft.common.core.web.PageParam; -import com.gxwebsoft.common.core.web.BatchParam; -import com.gxwebsoft.common.core.annotation.OperationLog; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; @@ -80,7 +77,7 @@ public class UserVerifyController extends BaseController { } wrapper.last("limit 1"); final UserVerify one = userVerifyService.getOne(wrapper); - if(one.getOrganizationId() > 0){ + if(ObjUtil.isNotEmpty(one) && one.getOrganizationId() > 0){ final Organization organization = organizationService.getById(one.getOrganizationId()); one.setOrganizationName(organization.getOrganizationName()); }