Quellcode durchsuchen

refactor(app): 重构微信登录逻辑

- 移除了 User 实体类和 UserVO 视图类
- 更新了 LoginUserVO 结构,简化了用户信息- 新增 MsgVO 类用于公告消息
- 修改了 UserServiceImpl 中的微信登录逻辑
- 更新了 AppUserController,移除了未使用的接口
SheepHy vor 3 Wochen
Ursprung
Commit
e4d01ec38e

+ 4 - 15
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/controller/AppUserController.java

@@ -5,13 +5,14 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
-import org.jeecg.modules.app.dto.UserWechatRegisterDTO;
 import org.jeecg.modules.app.service.IUserService;
 import org.jeecg.modules.app.vo.LoginUserVO;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
 
 @Slf4j
 @Tag(name = "App用户相关接口")
@@ -34,16 +35,4 @@ public class AppUserController {
         return Result.ok(userService.wechatLogin(code));
     }
 
-    /**
-     * 微信小程序获取用户信息接口
-     *
-     * @param request               请求
-     * @param userWechatRegisterDTO {@link UserWechatRegisterDTO}
-     * @return {@link Result}<{@link ?}>
-     */
-    @PostMapping("/wechatRegister")
-    @Operation(summary = "微信小程序获取用户信息接口")
-    public Result<LoginUserVO> wechatInfo(@RequestBody UserWechatRegisterDTO userWechatRegisterDTO, HttpServletRequest request){
-        return Result.ok(userService.wechatInfo(userWechatRegisterDTO, request));
-    }
 }

+ 0 - 91
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/entity/User.java

@@ -1,91 +0,0 @@
-package org.jeecg.modules.app.entity;
-
-import com.baomidou.mybatisplus.annotation.*;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * 用户
- *
- */
-@Data
-@TableName("nm_user")
-@Accessors(chain = true)
-@EqualsAndHashCode(callSuper = false)
-public class User implements Serializable {
-
-    /**
-     * id
-     */
-    @TableId(type = IdType.ASSIGN_ID)
-    private String id;
-
-    /**
-     * 用户账号
-     */
-    private String userAccount;
-
-    /**
-     * 用户密码
-     */
-    private String userPassword;
-
-    /**
-     * 小程序openId
-     */
-    private String openid;
-
-    /**
-     * 用户昵称
-     */
-    private String userName;
-
-    /**
-     * 用户头像
-     */
-    private String userAvatar;
-
-    /**
-     * 用户简介
-     */
-    private String userProfile;
-
-    /**
-     * 电话
-     */
-    private String phone;
-
-    /**
-     * 性别  0-女、1-男
-     */
-    private String gender;
-
-    /**
-     * 用户角色:user/admin/ban
-     */
-    private String userRole;
-
-    /**
-     * 创建时间
-     */
-    private Date createTime;
-
-    /**
-     * 更新时间
-     */
-    private Date updateTime;
-
-    /**
-     * 是否删除
-     */
-    @Schema(description = "删除状态(0-正常,1-已删除)")
-    @TableLogic
-    private Integer delFlag;
-    @TableField(exist = false)
-    private static final long serialVersionUID = 1L;
-}

+ 0 - 9
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/mapper/AppUserMapper.java

@@ -1,9 +0,0 @@
-package org.jeecg.modules.app.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Mapper;
-import org.jeecg.modules.app.entity.User;
-
-@Mapper
-public interface AppUserMapper extends BaseMapper<User> {
-}

+ 4 - 15
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/IUserService.java

@@ -1,22 +1,11 @@
 package org.jeecg.modules.app.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
-import org.jeecg.modules.app.dto.UserWechatRegisterDTO;
-import org.jeecg.modules.app.entity.User;
 import org.jeecg.modules.app.vo.LoginUserVO;
+import org.jeecg.modules.app.vo.MsgVO;
 
-import javax.servlet.http.HttpServletRequest;
-
-public interface IUserService extends IService<User> {
-
-    LoginUserVO wechatInfo(UserWechatRegisterDTO userWechatRegisterDTO, HttpServletRequest request);
-
-    /**
-     * 获取脱敏的已登录用户信息
-     *
-     * @return
-     */
-    LoginUserVO getLoginUserVO(User user);
+public interface IUserService {
 
     LoginUserVO wechatLogin(String code);
+
+    MsgVO getMsg();
 }

+ 57 - 85
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/UserServiceImpl.java

@@ -3,132 +3,104 @@ package org.jeecg.modules.app.service.impl;
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.util.WxMaConfigHolder;
-import cn.hutool.core.util.IdUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.log4j.Log4j2;
 import me.chanjar.weixin.common.error.WxErrorException;
-import org.apache.commons.lang3.StringUtils;
-import org.jeecg.common.constant.CommonConstant;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.common.system.util.JwtUtil;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.RedisUtil;
-import org.jeecg.modules.app.dto.UserWechatRegisterDTO;
-import org.jeecg.modules.app.entity.User;
-import org.jeecg.modules.app.mapper.AppUserMapper;
 import org.jeecg.modules.app.service.IUserService;
 import org.jeecg.modules.app.vo.LoginUserVO;
-import org.springframework.beans.BeanUtils;
+import org.jeecg.modules.app.vo.MsgVO;
+import org.jeecg.modules.system.entity.SysAnnouncementSend;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.mapper.SysAnnouncementMapper;
+import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper;
+import org.jeecg.modules.system.mapper.SysUserMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.util.DigestUtils;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletRequest;
 
-import static org.jeecg.common.constant.CommonConstant.*;
-import static org.jeecg.common.util.PasswordUtil.SALTA_APP;
+import static org.jeecg.common.constant.CommonConstant.PREFIX_USER_TOKEN;
+import static org.jeecg.common.constant.CommonConstant.SC_INTERNAL_SERVER_ERROR_500;
 
 @Service
-public class UserServiceImpl extends ServiceImpl<AppUserMapper, User> implements IUserService {
+@Log4j2
+public class UserServiceImpl implements IUserService {
     @Resource
     private WxMaService wxMaService;
+    @Resource
+    private SysUserMapper sysUserMapper;
+    @Resource
+    private SysAnnouncementSendMapper sysAnnouncementSendMapper;
+    @Resource
+    private SysAnnouncementMapper sysAnnouncementMapper;
     @Autowired
     private RedisUtil redisUtil;
 
-    @Override
-    public LoginUserVO wechatInfo(UserWechatRegisterDTO userWechatRegisterDTO, HttpServletRequest request) {
-        try {
-            if (userWechatRegisterDTO == null || 
-                StringUtils.isAnyBlank(userWechatRegisterDTO.getCode(), userWechatRegisterDTO.getUserName(), userWechatRegisterDTO.getUserAvatar(), userWechatRegisterDTO.getGender())) {
-                throw new JeecgBootException("参数不能为空", SC_JEECG_NO_AUTHZ);
-            }
-            String code = userWechatRegisterDTO.getCode();
-            String userName = userWechatRegisterDTO.getUserName();
-            String userAvatar = userWechatRegisterDTO.getUserAvatar();
-            String gender = userWechatRegisterDTO.getGender();
-            WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
-            String openid = session.getOpenid();
-            String sessionKey = session.getSessionKey();
-            // 单机锁
-            synchronized (openid.intern()) {
-                // 查询用户是否已存在
-                User user = this.getOne(Wrappers.<User>lambdaQuery().eq(User::getOpenid, openid).eq(User::getDelFlag, 0));
-                // 用户不存在则创建
-                if (user == null) {
-                    user = new User();
-                    user.setOpenid(openid);
-                    user.setUserAccount(IdUtil.getSnowflakeNextIdStr());
-                    String encryptPassword = DigestUtils.md5DigestAsHex((SALTA_APP).getBytes());
-                    user.setUserPassword(encryptPassword);
-                    user.setUserAvatar(userAvatar);
-                    user.setUserName(userName);
-                    user.setGender(gender);
-                    boolean result = this.save(user);
-                    if (!result) {
-                        throw new JeecgBootException("登录失败", SC_INTERNAL_SERVER_ERROR_500);
-                    }
-                }
-                // 记录用户的登录态
-                request.getSession().setAttribute(USER_LOGIN_STATE, user);
-                return generateLoginUserVO(user);
-            }
-        } catch (WxErrorException e) {
-            log.error("微信登录失败: {}"+ e.getMessage());
-            throw new JeecgBootException("小程序登录失败:" + e, SC_INTERNAL_SERVER_ERROR_500);
-        } finally {
-            WxMaConfigHolder.remove(); // 清理ThreadLocal
-        }
-    }
-
     @Override
     public LoginUserVO wechatLogin(String code) {
         try {
             WxMaJscode2SessionResult session = wxMaService.getUserService().getSessionInfo(code);
             String openid = session.getOpenid();
             // 通过openId获取在系统中是否是已经绑定过的用户
-            User user = this.getOne(Wrappers.<User>lambdaQuery().eq(User::getOpenid, openid).eq(User::getDelFlag, 0));
+            SysUser user = sysUserMapper.selectOne(Wrappers.<SysUser>lambdaQuery()
+                    .eq(SysUser::getOpenid, openid)
+                    .eq(SysUser::getDelFlag, 0));
             if (null == user) {
                 // 用户不存在则创建
-                    user = new User();
-                    user.setOpenid(openid);
-                    user.setUserAccount(IdUtil.getSnowflakeNextIdStr());
-                    String encryptPassword = DigestUtils.md5DigestAsHex((SALTA_APP).getBytes());
-                    user.setUserPassword(encryptPassword);
-                    user.setUserName("微信用户");
-                    boolean result = this.save(user);
+                    user = new SysUser()
+                            .setOpenid(openid)
+                            .setRealname("微信用户")
+                            .setUsername("微信用户")
+                            .setOrgCode("A03");
+                    boolean result = sysUserMapper.insert(user) > 0;
                     if (!result) {
                         throw new JeecgBootException("登录失败", SC_INTERNAL_SERVER_ERROR_500);
                 }
             }
             return generateLoginUserVO(user);
         } catch (WxErrorException e) {
-            log.error("微信登录失败: " + e.getMessage());
+            log.error("微信登录失败: {}", e.getMessage());
             throw new JeecgBootException("小程序登录失败:" + e, SC_INTERNAL_SERVER_ERROR_500);
         } finally {
             WxMaConfigHolder.remove(); // 清理ThreadLocal
         }
     }
 
-    private LoginUserVO generateLoginUserVO(User user) {
-        String userAccount = user.getUserAccount();
-        String userPassword = user.getUserPassword();
-        // 1.生成token
-        String token = JwtUtil.sign(userAccount, userPassword);
-        // 设置token缓存有效时间
-        redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
-        redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
-        LoginUserVO loginUserVO = getLoginUserVO(user);
-        loginUserVO.setToken(token);
-        return loginUserVO;
+    @Override
+    public MsgVO getMsg() {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        sysAnnouncementSendMapper.selectList(Wrappers.<SysAnnouncementSend>lambdaQuery()
+                .eq(SysAnnouncementSend::getUserId, user.getId())).forEach(sysAnnouncementSend -> {
+
+        });
+
+        return null;
     }
 
-    @Override
-    public LoginUserVO getLoginUserVO(User user) {
-        if (user == null) {
-            return null;
+    private LoginUserVO generateLoginUserVO(SysUser user) {
+        String orgCode = user.getOrgCode().substring(0, 3);
+        String userAccount = "";
+        String userPassword = "";
+        if(orgCode.equals("A03") || user.getOpenid() != null){
+            userAccount = user.getUsername();
+            userPassword = user.getOpenid();
+        }else if (orgCode.equals("A04")){
+            userAccount = user.getUsername();
+            userPassword = user.getPassword();
         }
-        LoginUserVO loginUserVO = new LoginUserVO();
-        BeanUtils.copyProperties(user, loginUserVO);
-        return loginUserVO;
+        // 1.生成token
+        String token = JwtUtil.sign(userAccount, userPassword);
+        // 设置token缓存有效时间
+        redisUtil.set(PREFIX_USER_TOKEN + token, token);
+        redisUtil.expire(PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000);
+        return new LoginUserVO().setToken(token)
+                .setId(user.getId())
+                .setUserName(user.getUsername())
+                .setUserAvatar(user.getAvatar());
     }
 }

+ 0 - 6
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/LoginUserVO.java

@@ -35,12 +35,6 @@ public class LoginUserVO implements Serializable {
     @Schema(description = "用户头像")
     private String userAvatar;
 
-    /**
-     * 用户简介
-     */
-    @Schema(description = "用户简介")
-    private String userProfile;
-
     /**
      * token
      */

+ 24 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/MsgVO.java

@@ -0,0 +1,24 @@
+package org.jeecg.modules.app.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="公告消息返回参数")
+public class MsgVO {
+    @Schema(description = "消息id")
+    private String id;
+    @Schema(description = "标题")
+    private String titile;
+    @Schema(description = "发布人")
+    private String sender;
+    @Schema(description = "发布时间")
+    private java.util.Date sendTime;
+    private String imgUrl;
+    @Schema(description = "阅读状态(0未读,1已读)")
+    private int readFlag;
+}

+ 0 - 40
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/UserVO.java

@@ -1,40 +0,0 @@
-package org.jeecg.modules.app.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * 用户视图(脱敏)
- *
- */
-@Data
-public class UserVO implements Serializable {
-
-    /**
-     * id
-     */
-    @Schema(description = "用户 id")
-    private String id;
-
-    /**
-     * 用户昵称
-     */
-    @Schema(description = "用户昵称")
-    private String userName;
-
-    /**
-     * 用户头像
-     */
-    @Schema(description = "用户头像")
-    private String userAvatar;
-
-    /**
-     * 用户简介
-     */
-    @Schema(description = "用户简介")
-    private String userProfile;
-
-
-}

+ 1 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/entity/SysAnnouncement.java

@@ -153,6 +153,7 @@ public class SysAnnouncement implements Serializable {
      * 钉钉task_id,用于撤回消息
      */
     private String dtTaskId;
+    private String imgUrl;
 
     /**
      * 阅读状态 1表示已经阅读

+ 11 - 10
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/entity/SysUser.java

@@ -1,23 +1,20 @@
 package org.jeecg.modules.system.entity;
 
-import java.util.Date;
-
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
 import org.jeecg.common.aspect.annotation.Dict;
 import org.jeecgframework.poi.excel.annotation.Excel;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.fasterxml.jackson.annotation.JsonFormat;
-
 import java.io.Serializable;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
+import java.util.Date;
 
 /**
  * <p>
@@ -211,4 +208,8 @@ public class SysUser implements Serializable {
      */
     @TableField(exist = false)
     private boolean izBindThird;
+    /**
+     * 小程序openId
+     */
+    private String openid;
 }