From 50672a5c91c33f2833f91981b562af3d88b9f1d6 Mon Sep 17 00:00:00 2001
From: hjl <1657978663@qq.com>
Date: 星期四, 30 五月 2024 19:17:45 +0800
Subject: [PATCH] feat: 修复登录bug;token失效bug

---
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java             |  111 ++++++----
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java |   53 ++---
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java             |   74 ++++--
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java       |    2 
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java |    2 
 ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/DataUpdateHandlerConfig.java          |   10 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java              |   35 +-
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java                                 |   15 +
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java    |   24 -
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java       |  252 +++++++++---------------
 10 files changed, 274 insertions(+), 304 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java
index 494cdfd..f3f6657 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/exception/GlobalException.java
@@ -2,11 +2,10 @@
 
 /**
  * 全局异常
- * 
+ *
  * @author ruoyi
  */
-public class GlobalException extends RuntimeException
-{
+public class GlobalException extends RuntimeException {
     private static final long serialVersionUID = 1L;
 
     /**
@@ -16,41 +15,34 @@
 
     /**
      * 错误明细,内部调试错误
-     *
      */
     private String detailMessage;
 
     /**
      * 空构造方法,避免反序列化问题
      */
-    public GlobalException()
-    {
+    public GlobalException() {
     }
 
-    public GlobalException(String message)
-    {
+    public GlobalException(String message) {
         this.message = message;
     }
 
-    public String getDetailMessage()
-    {
+    public String getDetailMessage() {
         return detailMessage;
     }
 
-    public GlobalException setDetailMessage(String detailMessage)
-    {
+    public GlobalException setDetailMessage(String detailMessage) {
         this.detailMessage = detailMessage;
         return this;
     }
 
     @Override
-    public String getMessage()
-    {
+    public String getMessage() {
         return message;
     }
 
-    public GlobalException setMessage(String message)
-    {
+    public GlobalException setMessage(String message) {
         this.message = message;
         return this;
     }
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
index ca27eae..661ab20 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -145,7 +145,7 @@
     public LoginUserParent getLoginUserStudy() {
         LoginUserParent userStudy = getLoginUserStudy(ServletUtils.getRequest());
         if (null == userStudy) {
-            throw new StudyLoginException("登录失效,请重新登录!", 504);
+            throw new StudyLoginException("登录失效,请重新登录!", 600);
         }
         return userStudy;
     }
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
index d300c05..6cbbec4 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -62,7 +62,7 @@
         String userkey2 = JwtUtils.getUserKey2(claims);
         boolean islogin = redisService.hasKey(getTokenKey(userkey));
         boolean islogin1 = redisService.hasKey(getTokenKey(userkey1));
-        boolean islogin2 = redisService.hasKey(getTokenKey(userkey2));
+        boolean islogin2 = redisService.hasKey(getTokenKeyStudy(userkey2));
         if (!islogin && !islogin1 && !islogin2) {
             return unauthorizedResponse(exchange, "登录状态已过期");
         }
@@ -72,13 +72,13 @@
             return unauthorizedResponse(exchange, "令牌验证失败");
         }
 
-        if (org.springframework.util.StringUtils.hasLength(userkey)){
+        if (org.springframework.util.StringUtils.hasLength(userkey)) {
             addHeader(mutate, SecurityConstants.USER_KEY, userkey);
         }
-        if (org.springframework.util.StringUtils.hasLength(userkey1)){
+        if (org.springframework.util.StringUtils.hasLength(userkey1)) {
             addHeader(mutate, SecurityConstants.USER_PARENT_KEY, userkey1);
         }
-        if (org.springframework.util.StringUtils.hasLength(userkey2)){
+        if (org.springframework.util.StringUtils.hasLength(userkey2)) {
             addHeader(mutate, SecurityConstants.USER_STUDY_KEY, userkey2);
         }
         // 设置用户信息到请求
@@ -115,6 +115,13 @@
     }
 
     /**
+     * 获取学习端缓存key
+     */
+    private String getTokenKeyStudy(String token) {
+        return CacheConstants.LOGIN_TOKEN_KEY_STUDY + token;
+    }
+
+    /**
      * 获取请求token
      */
     private String getToken(ServerHttpRequest request) {
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
index 36d6b37..f5e9501 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
@@ -1,10 +1,12 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.*;
-import java.util.stream.Collectors;
-
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.constant.Constants;
+import com.ruoyi.common.core.constant.UserConstants;
+import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.system.api.domain.SysRole;
 import com.ruoyi.system.domain.SysMenu;
 import com.ruoyi.system.domain.SysMenus;
 import com.ruoyi.system.domain.vo.MetaVo;
@@ -17,20 +19,17 @@
 import com.ruoyi.system.service.ISysMenuService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.ruoyi.common.core.constant.Constants;
-import com.ruoyi.common.core.constant.UserConstants;
-import com.ruoyi.common.core.utils.StringUtils;
-import com.ruoyi.common.security.utils.SecurityUtils;
-import com.ruoyi.system.api.domain.SysRole;
+
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 菜单 业务层处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements ISysMenuService
-{
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements ISysMenuService {
     public static final String PREMISSION_STRING = "perms[\"{0}\"]";
 
     @Autowired
@@ -50,25 +49,23 @@
 
     /**
      * 根据用户查询系统菜单列表
-     * 
+     *
      * @param userId 用户ID
      * @return 菜单列表
      */
     @Override
-    public List<SysMenu> selectMenuList(Long userId)
-    {
+    public List<SysMenu> selectMenuList(Long userId) {
         return selectMenuList(new SysMenu(), userId);
     }
 
     /**
      * 查询系统菜单列表
-     * 
+     *
      * @param menu 菜单信息
      * @return 菜单列表
      */
     @Override
-    public List<SysMenu> selectMenuList(SysMenu menu, Long userId)
-    {
+    public List<SysMenu> selectMenuList(SysMenu menu, Long userId) {
         List<SysMenu> menuList = null;
         // 管理员显示所有菜单信息
         {
@@ -80,19 +77,16 @@
 
     /**
      * 根据用户ID查询权限
-     * 
+     *
      * @param userId 用户ID
      * @return 权限列表
      */
     @Override
-    public Set<String> selectMenuPermsByUserId(Long userId)
-    {
+    public Set<String> selectMenuPermsByUserId(Long userId) {
         List<String> perms = menuMapper.selectMenuPermsByUserId(userId);
         Set<String> permsSet = new HashSet<>();
-        for (String perm : perms)
-        {
-            if (StringUtils.isNotEmpty(perm))
-            {
+        for (String perm : perms) {
+            if (StringUtils.isNotEmpty(perm)) {
                 permsSet.addAll(Arrays.asList(perm.trim().split(",")));
             }
         }
@@ -101,19 +95,16 @@
 
     /**
      * 根据角色ID查询权限
-     * 
+     *
      * @param roleId 角色ID
      * @return 权限列表
      */
     @Override
-    public Set<String> selectMenuPermsByRoleId(Long roleId)
-    {
+    public Set<String> selectMenuPermsByRoleId(Long roleId) {
         List<String> perms = menuMapper.selectMenuPermsByRoleId(roleId);
         Set<String> permsSet = new HashSet<>();
-        for (String perm : perms)
-        {
-            if (StringUtils.isNotEmpty(perm))
-            {
+        for (String perm : perms) {
+            if (StringUtils.isNotEmpty(perm)) {
                 permsSet.addAll(Arrays.asList(perm.trim().split(",")));
             }
         }
@@ -122,20 +113,16 @@
 
     /**
      * 根据用户ID查询菜单
-     * 
+     *
      * @param userId 用户名称
      * @return 菜单列表
      */
     @Override
-    public List<SysMenu> selectMenuTreeByUserId(Long userId)
-    {
+    public List<SysMenu> selectMenuTreeByUserId(Long userId) {
         List<SysMenu> menus = null;
-        if (SecurityUtils.isAdmin(userId))
-        {
+        if (SecurityUtils.isAdmin(userId)) {
             menus = menuMapper.selectMenuTreeAll();
-        }
-        else
-        {
+        } else {
             menus = menuMapper.selectMenuTreeByUserId(userId);
         }
         return getChildPerms(menus, 0);
@@ -143,29 +130,26 @@
 
     /**
      * 根据角色ID查询菜单树信息
-     * 
+     *
      * @param roleId 角色ID
      * @return 选中菜单列表
      */
     @Override
-    public List<Long> selectMenuListByRoleId(Long roleId)
-    {
+    public List<Long> selectMenuListByRoleId(Long roleId) {
         SysRole role = roleMapper.selectRoleById(roleId);
         return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly());
     }
 
     /**
      * 构建前端路由所需要的菜单
-     * 
+     *
      * @param menus 菜单列表
      * @return 路由列表
      */
     @Override
-    public List<RouterVo> buildMenus(List<SysMenu> menus)
-    {
+    public List<RouterVo> buildMenus(List<SysMenu> menus) {
         List<RouterVo> routers = new LinkedList<RouterVo>();
-        for (SysMenu menu : menus)
-        {
+        for (SysMenu menu : menus) {
             RouterVo router = new RouterVo();
             router.setHidden("1".equals(menu.getVisible()));
             router.setName(getRouteName(menu));
@@ -174,14 +158,11 @@
             router.setQuery(menu.getQuery());
             router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
             List<SysMenu> cMenus = menu.getChildren();
-            if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()))
-            {
+            if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
                 router.setAlwaysShow(true);
                 router.setRedirect("noRedirect");
                 router.setChildren(buildMenus(cMenus));
-            }
-            else if (isMenuFrame(menu))
-            {
+            } else if (isMenuFrame(menu)) {
                 router.setMeta(null);
                 List<RouterVo> childrenList = new ArrayList<RouterVo>();
                 RouterVo children = new RouterVo();
@@ -192,9 +173,7 @@
                 children.setQuery(menu.getQuery());
                 childrenList.add(children);
                 router.setChildren(childrenList);
-            }
-            else if (menu.getParentId().intValue() == 0 && isInnerLink(menu))
-            {
+            } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) {
                 router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
                 router.setPath("/");
                 List<RouterVo> childrenList = new ArrayList<RouterVo>();
@@ -214,27 +193,23 @@
 
     /**
      * 构建前端所需要树结构
-     * 
+     *
      * @param menus 菜单列表
      * @return 树结构列表
      */
     @Override
-    public List<SysMenu> buildMenuTree(List<SysMenu> menus)
-    {
+    public List<SysMenu> buildMenuTree(List<SysMenu> menus) {
         List<SysMenu> returnList = new ArrayList<SysMenu>();
         List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
-        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext();)
-        {
+        for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext(); ) {
             SysMenu menu = (SysMenu) iterator.next();
             // 如果是顶级节点, 遍历该父节点的所有子节点
-            if (!tempList.contains(menu.getParentId()))
-            {
+            if (!tempList.contains(menu.getParentId())) {
                 recursionFn(menus, menu);
                 returnList.add(menu);
             }
         }
-        if (returnList.isEmpty())
-        {
+        if (returnList.isEmpty()) {
             returnList = menus;
         }
         return returnList;
@@ -242,104 +217,95 @@
 
     /**
      * 构建前端所需要下拉树结构
-     * 
+     *
      * @param menus 菜单列表
      * @return 下拉树结构列表
      */
     @Override
-    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus)
-    {
+    public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus) {
         List<SysMenu> menuTrees = buildMenuTree(menus);
         return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
     }
 
     /**
      * 根据菜单ID查询信息
-     * 
+     *
      * @param menuId 菜单ID
      * @return 菜单信息
      */
     @Override
-    public SysMenu selectMenuById(Long menuId)
-    {
+    public SysMenu selectMenuById(Long menuId) {
         return menuMapper.selectMenuById(menuId);
     }
 
     /**
      * 是否存在菜单子节点
-     * 
+     *
      * @param menuId 菜单ID
      * @return 结果
      */
     @Override
-    public boolean hasChildByMenuId(Long menuId)
-    {
+    public boolean hasChildByMenuId(Long menuId) {
         int result = menuMapper.hasChildByMenuId(menuId);
         return result > 0;
     }
 
     /**
      * 查询菜单使用数量
-     * 
+     *
      * @param menuId 菜单ID
      * @return 结果
      */
     @Override
-    public boolean checkMenuExistRole(Long menuId)
-    {
+    public boolean checkMenuExistRole(Long menuId) {
         int result = roleMenuMapper.checkMenuExistRole(menuId);
         return result > 0;
     }
 
     /**
      * 新增保存菜单信息
-     * 
+     *
      * @param menu 菜单信息
      * @return 结果
      */
     @Override
-    public int insertMenu(SysMenu menu)
-    {
+    public int insertMenu(SysMenu menu) {
         return menuMapper.insertMenu(menu);
     }
 
     /**
      * 修改保存菜单信息
-     * 
+     *
      * @param menu 菜单信息
      * @return 结果
      */
     @Override
-    public int updateMenu(SysMenu menu)
-    {
+    public int updateMenu(SysMenu menu) {
         return menuMapper.updateMenu(menu);
     }
 
     /**
      * 删除菜单管理信息
-     * 
+     *
      * @param menuId 菜单ID
      * @return 结果
      */
     @Override
-    public int deleteMenuById(Long menuId)
-    {
+    public int deleteMenuById(Long menuId) {
         return menuMapper.deleteMenuById(menuId);
     }
 
     /**
      * 校验菜单名称是否唯一
-     * 
+     *
      * @param menu 菜单信息
      * @return 结果
      */
     @Override
-    public boolean checkMenuNameUnique(SysMenu menu)
-    {
+    public boolean checkMenuNameUnique(SysMenu menu) {
         Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
         SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
-        if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue())
-        {
+        if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) {
             return UserConstants.NOT_UNIQUE;
         }
         return UserConstants.UNIQUE;
@@ -348,11 +314,11 @@
     @Override
     public List<SysMenus> getAllMenu() {
         Long roleId = tokenService.getLoginUser().getSysUser().getRoles().get(0).getRoleId();
-        List<SysMenus> list=null;
-        if(roleId!=1){
+        List<SysMenus> list = null;
+        if (roleId != 1) {
             list = menuMapper.getAllOne();
-        }else {
-             list = menuMapper.getAll();
+        } else {
+            list = menuMapper.getAll();
         }
 
         // 获取所有
@@ -384,16 +350,14 @@
 
     /**
      * 获取路由名称
-     * 
+     *
      * @param menu 菜单信息
      * @return 路由名称
      */
-    public String getRouteName(SysMenu menu)
-    {
+    public String getRouteName(SysMenu menu) {
         String routerName = StringUtils.capitalize(menu.getPath());
         // 非外链并且是一级目录(类型为目录)
-        if (isMenuFrame(menu))
-        {
+        if (isMenuFrame(menu)) {
             routerName = StringUtils.EMPTY;
         }
         return routerName;
@@ -401,27 +365,23 @@
 
     /**
      * 获取路由地址
-     * 
+     *
      * @param menu 菜单信息
      * @return 路由地址
      */
-    public String getRouterPath(SysMenu menu)
-    {
+    public String getRouterPath(SysMenu menu) {
         String routerPath = menu.getPath();
         // 内链打开外网方式
-        if (menu.getParentId().intValue() != 0 && isInnerLink(menu))
-        {
+        if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) {
             routerPath = innerLinkReplaceEach(routerPath);
         }
         // 非外链并且是一级目录(类型为目录)
         if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType())
-                && UserConstants.NO_FRAME.equals(menu.getIsFrame()))
-        {
+                && UserConstants.NO_FRAME.equals(menu.getIsFrame())) {
             routerPath = "/" + menu.getPath();
         }
         // 非外链并且是一级目录(类型为菜单)
-        else if (isMenuFrame(menu))
-        {
+        else if (isMenuFrame(menu)) {
             routerPath = "/";
         }
         return routerPath;
@@ -429,23 +389,17 @@
 
     /**
      * 获取组件信息
-     * 
+     *
      * @param menu 菜单信息
      * @return 组件信息
      */
-    public String getComponent(SysMenu menu)
-    {
+    public String getComponent(SysMenu menu) {
         String component = UserConstants.LAYOUT;
-        if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu))
-        {
+        if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) {
             component = menu.getComponent();
-        }
-        else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu))
-        {
+        } else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) {
             component = UserConstants.INNER_LINK;
-        }
-        else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu))
-        {
+        } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) {
             component = UserConstants.PARENT_VIEW;
         }
         return component;
@@ -453,54 +407,48 @@
 
     /**
      * 是否为菜单内部跳转
-     * 
+     *
      * @param menu 菜单信息
      * @return 结果
      */
-    public boolean isMenuFrame(SysMenu menu)
-    {
+    public boolean isMenuFrame(SysMenu menu) {
         return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType())
                 && menu.getIsFrame().equals(UserConstants.NO_FRAME);
     }
 
     /**
      * 是否为内链组件
-     * 
+     *
      * @param menu 菜单信息
      * @return 结果
      */
-    public boolean isInnerLink(SysMenu menu)
-    {
+    public boolean isInnerLink(SysMenu menu) {
         return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath());
     }
 
     /**
      * 是否为parent_view组件
-     * 
+     *
      * @param menu 菜单信息
      * @return 结果
      */
-    public boolean isParentView(SysMenu menu)
-    {
+    public boolean isParentView(SysMenu menu) {
         return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType());
     }
 
     /**
      * 根据父节点的ID获取所有子节点
-     * 
-     * @param list 分类表
+     *
+     * @param list     分类表
      * @param parentId 传入的父节点ID
      * @return String
      */
-    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId)
-    {
+    public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId) {
         List<SysMenu> returnList = new ArrayList<SysMenu>();
-        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext();)
-        {
+        for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext(); ) {
             SysMenu t = (SysMenu) iterator.next();
             // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
-            if (t.getParentId() == parentId)
-            {
+            if (t.getParentId() == parentId) {
                 recursionFn(list, t);
                 returnList.add(t);
             }
@@ -510,19 +458,16 @@
 
     /**
      * 递归列表
-     * 
+     *
      * @param list
      * @param t
      */
-    private void recursionFn(List<SysMenu> list, SysMenu t)
-    {
+    private void recursionFn(List<SysMenu> list, SysMenu t) {
         // 得到子节点列表
         List<SysMenu> childList = getChildList(list, t);
         t.setChildren(childList);
-        for (SysMenu tChild : childList)
-        {
-            if (hasChild(list, tChild))
-            {
+        for (SysMenu tChild : childList) {
+            if (hasChild(list, tChild)) {
                 recursionFn(list, tChild);
             }
         }
@@ -531,15 +476,12 @@
     /**
      * 得到子节点列表
      */
-    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t)
-    {
+    private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t) {
         List<SysMenu> tlist = new ArrayList<SysMenu>();
         Iterator<SysMenu> it = list.iterator();
-        while (it.hasNext())
-        {
+        while (it.hasNext()) {
             SysMenu n = (SysMenu) it.next();
-            if (n.getParentId().longValue() == t.getMenuId().longValue())
-            {
+            if (n.getParentId().longValue() == t.getMenuId().longValue()) {
                 tlist.add(n);
             }
         }
@@ -549,19 +491,17 @@
     /**
      * 判断是否有子节点
      */
-    private boolean hasChild(List<SysMenu> list, SysMenu t)
-    {
+    private boolean hasChild(List<SysMenu> list, SysMenu t) {
         return getChildList(list, t).size() > 0;
     }
 
     /**
      * 内链域名特殊字符替换
-     * 
+     *
      * @return
      */
-    public String innerLinkReplaceEach(String path)
-    {
-        return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, "." },
-                new String[] { "", "", "", "/" });
+    public String innerLinkReplaceEach(String path) {
+        return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, "."},
+                new String[]{"", "", "", "/"});
     }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
index 8048c7b..94e0847 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
@@ -1,25 +1,24 @@
 package com.ruoyi.system.service.impl;
 
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import com.ruoyi.system.service.ISysRoleService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
 import com.ruoyi.system.api.domain.SysRole;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.service.ISysMenuService;
 import com.ruoyi.system.service.ISysPermissionService;
+import com.ruoyi.system.service.ISysRoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * 用户权限处理
- * 
+ *
  * @author ruoyi
  */
 @Service
-public class SysPermissionServiceImpl implements ISysPermissionService
-{
+public class SysPermissionServiceImpl implements ISysPermissionService {
     @Autowired
     private ISysRoleService roleService;
 
@@ -28,21 +27,17 @@
 
     /**
      * 获取角色数据权限
-     * 
+     *
      * @param userId 用户Id
      * @return 角色权限信息
      */
     @Override
-    public Set<String> getRolePermission(SysUser user)
-    {
+    public Set<String> getRolePermission(SysUser user) {
         Set<String> roles = new HashSet<String>();
         // 管理员拥有所有权限
-        if (user.isAdmin())
-        {
+        if (user.isAdmin()) {
             roles.add("admin");
-        }
-        else
-        {
+        } else {
             roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId()));
         }
         return roles;
@@ -50,34 +45,26 @@
 
     /**
      * 获取菜单数据权限
-     * 
+     *
      * @param userId 用户Id
      * @return 菜单权限信息
      */
     @Override
-    public Set<String> getMenuPermission(SysUser user)
-    {
+    public Set<String> getMenuPermission(SysUser user) {
         Set<String> perms = new HashSet<String>();
         // 管理员拥有所有权限
-        if (user.isAdmin())
-        {
+        if (user.isAdmin()) {
             perms.add("*:*:*");
-        }
-        else
-        {
+        } else {
             List<SysRole> roles = user.getRoles();
-            if (!roles.isEmpty() && roles.size() > 1)
-            {
+            if (!roles.isEmpty() && roles.size() > 1) {
                 // 多角色设置permissions属性,以便数据权限匹配权限
-                for (SysRole role : roles)
-                {
+                for (SysRole role : roles) {
                     Set<String> rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId());
                     role.setPermissions(rolePerms);
                     perms.addAll(rolePerms);
                 }
-            }
-            else
-            {
+            } else {
                 perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
             }
         }
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/DataUpdateHandlerConfig.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/DataUpdateHandlerConfig.java
index 972a4cc..ca03250 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/DataUpdateHandlerConfig.java
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/DataUpdateHandlerConfig.java
@@ -3,7 +3,6 @@
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.system.api.model.LoginUser;
-import com.ruoyi.system.api.model.LoginUserParent;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.reflection.MetaObject;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,7 +39,7 @@
         LoginUser loginUser = tokenService.getLoginUser();
         this.setFieldValByName("createTime", new Date(), metaObject);
         this.setFieldValByName("updateTime", new Date(), metaObject);
-        if (loginUser!=null){
+        if (loginUser != null) {
             String userName = loginUser.getUsername();
             if (StringUtils.hasLength(userName)) {
                 this.setFieldValByName("createBy", userName, metaObject);
@@ -66,7 +65,12 @@
     public void updateFill(MetaObject metaObject) {
         //  获取登录信息
         LoginUser loginUser = tokenService.getLoginUser();
-        String userName = loginUser.getUsername();
+        String userName;
+        if (null == loginUser) {
+            userName = tokenService.getLoginUserStudy().getName();
+        } else {
+            userName = loginUser.getUsername();
+        }
         if (StringUtils.hasLength(userName)) {
             this.setFieldValByName("createBy", userName, metaObject);
             this.setFieldValByName("createTime", new Date(), metaObject);
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
index 94ca279..e5a97a4 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
@@ -1,7 +1,6 @@
 package com.ruoyi.goods.controller;
 
 
-import com.alibaba.fastjson2.util.UUIDUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.page.PageInfo;
@@ -9,8 +8,6 @@
 import com.ruoyi.goods.domain.*;
 import com.ruoyi.goods.dto.*;
 import com.ruoyi.goods.service.*;
-import com.ruoyi.goods.utils.MyQrCodeUtil;
-import com.ruoyi.goods.utils.QRCodeUtil;
 import com.ruoyi.goods.vo.GoodDetailVO;
 import com.ruoyi.goods.vo.TGoodsVO;
 import com.ruoyi.goods.vo.TOrderVO;
@@ -19,15 +16,12 @@
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.apache.logging.log4j.core.util.UuidUtil;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
-import java.awt.image.BufferedImage;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
@@ -76,7 +70,7 @@
     @PostMapping("/goodList")
     @ApiOperation(value = "商品列表查询", tags = {"家长端-商品列表"})
     public R<PageInfo<TGoods>> listType(@RequestBody GoodQueryDTO goodQuery) {
-        if (tokenService.getLoginUser1() == null){
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
         List<String> type = goodQuery.getType();
@@ -86,7 +80,7 @@
         wrapper = keywords != null && "".equals(keywords.trim()) ? wrapper.like("name", keywords) : wrapper;
 
         // 类型匹配 todo
-        if (goodQuery.getType()!=null && goodQuery.getType().size()>0){
+        if (goodQuery.getType() != null && goodQuery.getType().size() > 0) {
             StringBuilder temp = new StringBuilder("");
             for (String s : goodQuery.getType()) {
                 wrapper.or().apply("FIND_IN_SET('" + s + "', typeIds)"); // 将每个类型 ID 应用于 FIND_IN_SET 函数
@@ -95,10 +89,11 @@
         wrapper.eq("isDelete", 0);
         return R.ok(goodsService.page(new PageInfo<>(goodQuery.getPageNumber(), goodQuery.getPageSize()), wrapper));
     }
+
     @PostMapping("/goodListStudy")
     @ApiOperation(value = "商品列表查询", tags = {"学习端"})
     public R<PageInfo<TGoods>> goodListStudy(@RequestBody GoodQueryDTO goodQuery) {
-        if (tokenService.getLoginUserStudy() == null){
+        if (tokenService.getLoginUserStudy() == null) {
             return R.tokenError("登录失效");
         }
         List<String> type = goodQuery.getType();
@@ -108,7 +103,7 @@
         wrapper = keywords != null && "".equals(keywords.trim()) ? wrapper.like("name", keywords) : wrapper;
 
         // 类型匹配 todo
-        if (goodQuery.getType()!=null && goodQuery.getType().size()>0){
+        if (goodQuery.getType() != null && goodQuery.getType().size() > 0) {
             StringBuilder temp = new StringBuilder("");
             for (String s : goodQuery.getType()) {
                 wrapper.or().apply("FIND_IN_SET('" + s + "', typeIds)"); // 将每个类型 ID 应用于 FIND_IN_SET 函数
@@ -209,10 +204,11 @@
         return R.ok(orderService.lambdaQuery().eq(TOrder::getUserId, tokenService.getLoginUserStudy().getUserid())
                 .orderByDesc(TOrder::getCreateTime).list());
     }
+
     @GetMapping("/exchangeRecordParent")
     @ApiOperation(value = "家长端-兑换记录", tags = {"家长端-兑换记录"})
     public R<List<TOrder>> exchangeRecordParent() {
-        if (tokenService.getLoginUser1() == null){
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
         return R.ok(orderService.lambdaQuery().eq(TOrder::getUserId, tokenService.getLoginUser1().getUserid())
@@ -228,13 +224,14 @@
             @ApiImplicitParam(value = "订单id", name = "id", dataType = "String", required = true)
     })
     public R<Boolean> confirm(@RequestParam Integer id) {
-        if (tokenService.getLoginUser1() == null){
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
         TOrder byId = orderService.getById(id);
         byId.setState(3);
         return R.ok(orderService.updateById(byId));
     }
+
     /**
      * 兑换记录
      */
@@ -244,7 +241,7 @@
             @ApiImplicitParam(value = "订单id", name = "id", dataType = "String", required = true)
     })
     public R<Boolean> confirmStudy(@RequestParam Integer id) {
-        if (tokenService.getLoginUserStudy() == null){
+        if (tokenService.getLoginUserStudy() == null) {
             return R.tokenError("登录失效");
         }
         TOrder byId = orderService.getById(id);
@@ -258,12 +255,13 @@
     @GetMapping("/shopAddressParent")
     @ApiOperation(value = "获取用户收货地址", tags = {"家长端-获取用户收货地址"})
     public R<List<Recipient>> shopAddressParent() {
-        if (tokenService.getLoginUser1() == null){
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
         return R.ok(recipientService.lambdaQuery().eq(Recipient::getUserId,
                 tokenService.getLoginUser1().getUserid()).list());
     }
+
     /**
      * 设置默认地址
      */
@@ -273,7 +271,7 @@
             @ApiImplicitParam(value = "地址id", name = "id", dataType = "String", required = true)
     })
     public R setDefault(@RequestParam Integer id) {
-        if (tokenService.getLoginUser1() == null){
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
         Recipient byId = recipientService.getById(id);
@@ -281,6 +279,7 @@
         recipientService.updateById(byId);
         return R.ok();
     }
+
     /**
      * 设置默认地址
      */
@@ -290,7 +289,7 @@
             @ApiImplicitParam(value = "地址id", name = "id", dataType = "String", required = true)
     })
     public R setDefaultStudy(@RequestParam Integer id) {
-        if (tokenService.getLoginUserStudy() == null){
+        if (tokenService.getLoginUserStudy() == null) {
             return R.tokenError("登录失效");
         }
         Recipient byId = recipientService.getById(id);
@@ -301,6 +300,7 @@
 
     /**
      * 根据地址id 获取详情
+     *
      * @param id
      * @return
      */
@@ -310,14 +310,16 @@
             @ApiImplicitParam(value = "地址id", name = "id", dataType = "String", required = true)
     })
     public R<Recipient> getAddressById(@RequestParam Integer id) {
-        if (tokenService.getLoginUser1() == null){
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
         Recipient byId = recipientService.getById(id);
         return R.ok(byId);
     }
+
     /**
      * 根据地址id 获取详情
+     *
      * @param id
      * @return
      */
@@ -327,19 +329,20 @@
             @ApiImplicitParam(value = "地址id", name = "id", dataType = "String", required = true)
     })
     public R<Recipient> getAddressByIdStudy(@RequestParam Integer id) {
-        if (tokenService.getLoginUserStudy() == null){
+        if (tokenService.getLoginUserStudy() == null) {
             return R.tokenError("登录失效");
         }
         Recipient byId = recipientService.getById(id);
         return R.ok(byId);
     }
+
     /**
      * 获取用户收货地址
      */
     @GetMapping("/shopAddress")
     @ApiOperation(value = "获取用户收货地址", tags = {"学习端-获取用户收货地址"})
     public R<List<Recipient>> shopAddress() {
-        if (tokenService.getLoginUserStudy() == null){
+        if (tokenService.getLoginUserStudy() == null) {
             return R.tokenError("登录失效");
         }
         return R.ok(recipientService.lambdaQuery().eq(Recipient::getUserId,
@@ -352,10 +355,9 @@
     @PostMapping("/addressSaveOrUpdate")
     @ApiOperation(value = "学习端-新增收货地址/修改收货地址", tags = {"学习端-新增收货地址/修改收货地址"})
     public R<String> addressSave(@RequestBody Recipient recipient) {
-        recipient.setUserId(tokenService.getLoginUserStudy().getUserid());
-        recipientService.addressSaveOrUpdate(recipient);
-        return R.ok();
+        return R.ok(recipientService.addressSaveOrUpdate(recipient));
     }
+
     /**
      * 新增收货地址/修改收货地址
      */
@@ -363,9 +365,9 @@
     @ApiOperation(value = "家长端-新增收货地址/修改收货地址", tags = {"家长端-新增收货地址/修改收货地址"})
     public R<String> addressSaveOrUpdateParent(@RequestBody Recipient recipient) {
         recipient.setUserId(tokenService.getLoginUser1().getUserid());
-        if (recipient.getId() == null){
+        if (recipient.getId() == null) {
             recipientService.updateById(recipient);
-        }else{
+        } else {
             recipientService.save(recipient);
         }
         return R.ok();
@@ -382,6 +384,7 @@
     public R<String> addressDelete(@RequestParam String id) {
         return R.ok(recipientService.removeById(id) ? "删除成功!" : "删除失败!");
     }
+
     /**
      * 删除收货地址
      */
@@ -398,7 +401,7 @@
     @GetMapping("/getOrderAddressParent")
     @ApiOperation(value = "获取修改订单收货地址", tags = {"家长端-获取修改订单收货地址"})
     public R<List<Recipient>> getOrderAddressParent() {
-        if (tokenService.getLoginUser1() == null){
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
         List<Recipient> userId = recipientService.list(new QueryWrapper<Recipient>()
@@ -406,24 +409,26 @@
 
         return R.ok(userId);
     }
+
     @GetMapping("/getOrderAddress")
     @ApiOperation(value = "获取修改订单收货地址", tags = {"学习端-获取修改订单收货地址"})
     public R<List<Recipient>> getOrderAddress() {
-        if (tokenService.getLoginUserStudy() == null){
+        if (tokenService.getLoginUserStudy() == null) {
             return R.tokenError("登录失效");
         }
         List<Recipient> userId = recipientService.list(new QueryWrapper<Recipient>()
                 .eq("userId", tokenService.getLoginUserStudy().getUserid()));
         return R.ok(userId);
     }
+
     @GetMapping("/updateOrderAddressParent")
     @ApiOperation(value = "修改订单收货地址", tags = {"家长端-修改订单收货地址"})
     @ApiImplicitParams({
             @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "String", required = true),
             @ApiImplicitParam(value = "地址信息id", name = "recipientId", dataType = "String", required = true)
     })
-    public R updateOrderAddressParent(@RequestParam Integer orderId,@RequestParam Integer recipientId) {
-        if (tokenService.getLoginUser1() == null){
+    public R updateOrderAddressParent(@RequestParam Integer orderId, @RequestParam Integer recipientId) {
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
         Recipient userId = recipientService.getById(recipientId);
@@ -434,10 +439,11 @@
         orderService.updateById(byId);
         return R.ok("修改成功");
     }
+
     @GetMapping("/updateOrderAddress")
     @ApiOperation(value = "修改订单收货地址", tags = {"学习端-修改订单收货地址"})
-    public R updateOrderAddress(@RequestParam Integer orderId,@RequestParam Integer recipientId) {
-        if (tokenService.getLoginUserStudy() == null){
+    public R updateOrderAddress(@RequestParam Integer orderId, @RequestParam Integer recipientId) {
+        if (tokenService.getLoginUserStudy() == null) {
             return R.tokenError("登录失效");
         }
         Recipient userId = recipientService.getById(recipientId);
@@ -469,6 +475,15 @@
     }
 
     /**
+     * 获取所有商品分类
+     */
+    @GetMapping("/goodTypeStudy")
+    @ApiOperation(value = "学习端-商品分类列表", tags = {"学习端-商品分类列表"})
+    public R<List<TGoodsType>> goodTypeStudy() {
+        return R.ok(goodsTypeService.lambdaQuery().eq(TGoodsType::getIsDelete, 0).eq(TGoodsType::getIsDelete, 0).list());
+    }
+
+    /**
      * 商品详情
      *
      * @param goodId 商品id
@@ -487,6 +502,7 @@
         int number = goods.getBasicCount() + orderService.getGoodBuyNumber(goods.getId());
         return R.ok(new GoodDetailVO(goods, goodsTypes, number));
     }
+
     /**
      * 商品详情
      *
@@ -498,7 +514,7 @@
             @ApiImplicitParam(value = "商品id", name = "goodId", dataType = "String", required = true)
     })
     public R<GoodDetailVO> goodDetailParent(@RequestParam String goodId) {
-        if (tokenService.getLoginUser1() == null){
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
         // 商品详情
@@ -519,7 +535,7 @@
             @ApiImplicitParam(value = "商品id", name = "goodId", dataType = "String", required = true)
     })
     public R<GoodDetailVO> redeemNow(@RequestParam String goodId) {
-        if (tokenService.getLoginUserStudy() == null){
+        if (tokenService.getLoginUserStudy() == null) {
             return R.tokenError("登录失效");
         }
         Recipient recipient = recipientService.lambdaQuery()
@@ -541,6 +557,7 @@
         goodDetailVO.setOrderNumber(orderNumber);
         return R.ok(goodDetailVO);
     }
+
     /**
      * 商城-立即兑换
      */
@@ -550,7 +567,7 @@
             @ApiImplicitParam(value = "商品id", name = "goodId", dataType = "String", required = true)
     })
     public R<GoodDetailVO> redeemNowParent(@RequestParam String goodId) {
-        if (tokenService.getLoginUser1() == null){
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
         Recipient recipient = recipientService.lambdaQuery()
@@ -585,6 +602,7 @@
         Recipient recipient = recipientService.getById(goodExchange.getRecipientId());
         return goodsService.goodExchange1(goodExchange, recipient);
     }
+
     @PostMapping("/goodExchangeStudy")
     @ApiOperation(value = "学习端-商品兑换确认", tags = {"学习端-商品兑换确认"})
     public R goodExchangeStudy(@RequestBody GoodExchangeDTO goodExchange) {
@@ -595,19 +613,21 @@
 
     @Autowired
     private StudyClient studyClient;
+
     @PostMapping("/getOrderInfo/{id}")
     @ApiOperation(value = "查看详情", tags = {"后台-订单管理"})
-    public R<TOrderVO> getOrderInfo(@PathVariable("id")Integer id) {
+    public R<TOrderVO> getOrderInfo(@PathVariable("id") Integer id) {
         TOrder byId = orderService.getById(id);
         TGoods byId2 = goodsService.getById(byId.getGoodsId());
         TOrderVO tGoodsVO = new TOrderVO();
         tGoodsVO.setName(byId2.getName());
-        BeanUtils.copyProperties(byId,tGoodsVO);
+        BeanUtils.copyProperties(byId, tGoodsVO);
         TUser byId1 = studyClient.getUserById(byId.getUserId()).getData();
         tGoodsVO.setUserName(byId1.getName());
         tGoodsVO.setPhone(byId1.getPhone());
         return R.ok(tGoodsVO);
     }
+
     @PostMapping("/confirm1")
     @ApiOperation(value = "确认发货", tags = {"后台-订单管理"})
     public R getGoodsInfo1(@RequestBody OrderDTO dto) {
@@ -619,12 +639,13 @@
         orderService.updateById(byId);
         return R.ok("修改成功");
     }
+
     @PostMapping("/listAll1")
     @ApiOperation(value = "列表查询", tags = {"后台-订单管理"})
-    public R<PageInfo<TOrderVO>> listAll1(@RequestBody  OrderQuery query) throws ParseException {
+    public R<PageInfo<TOrderVO>> listAll1(@RequestBody OrderQuery query) throws ParseException {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
-        if (query.getEndTime()!=null){
+        if (query.getEndTime() != null) {
             Date parse = format.parse(query.getStartTime());
             Date parse1 = format.parse(query.getEndTime());
             query.setStartTime1(parse);
@@ -634,25 +655,25 @@
         List<TOrderVO> list1 = new ArrayList<>();
         for (TOrderVO tOrderVO : list) {
             TUser data = studyClient.getUserById(tOrderVO.getUserId()).getData();
-            if (data!=null){
+            if (data != null) {
                 tOrderVO.setUserName(data.getName());
                 tOrderVO.setPhone(data.getPhone());
             }
-            if (!StringUtils.hasLength(query.getPhone()) && !StringUtils.hasLength(query.getUserName())){
+            if (!StringUtils.hasLength(query.getPhone()) && !StringUtils.hasLength(query.getUserName())) {
                 list1.add(tOrderVO);
                 continue;
             }
             // 如果筛选条件输入了电话或者姓名那么需要过滤掉不符合条件的数据
-            if (StringUtils.hasLength(query.getPhone()) && StringUtils.hasLength(query.getUserName())){
-                if (tOrderVO.getPhone().contains(query.getPhone()) && tOrderVO.getUserName().contains(query.getUserName())){
+            if (StringUtils.hasLength(query.getPhone()) && StringUtils.hasLength(query.getUserName())) {
+                if (tOrderVO.getPhone().contains(query.getPhone()) && tOrderVO.getUserName().contains(query.getUserName())) {
                     list1.add(tOrderVO);
                 }
-            }else if (StringUtils.hasLength(query.getPhone())){
-                if (tOrderVO.getPhone().contains(query.getPhone())){
+            } else if (StringUtils.hasLength(query.getPhone())) {
+                if (tOrderVO.getPhone().contains(query.getPhone())) {
                     list1.add(tOrderVO);
                 }
-            }else if (StringUtils.hasLength(query.getUserName())){
-                if (tOrderVO.getUserName().contains(query.getUserName())){
+            } else if (StringUtils.hasLength(query.getUserName())) {
+                if (tOrderVO.getUserName().contains(query.getUserName())) {
                     list1.add(tOrderVO);
                 }
             }
diff --git a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java
index 6a93314..cf643bc 100644
--- a/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java
+++ b/ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/RecipientServiceImpl.java
@@ -30,7 +30,7 @@
     public String addressSaveOrUpdate(Recipient recipient) {
         boolean result;
         // 主键ID为空,新增收货地址
-        if (StringUtils.isEmpty(String.valueOf(recipient.getId()))) {
+        if (null == recipient.getId()) {
             recipient.setUserId(tokenService.getLoginUserStudy().getUserid());
             result = this.save(recipient);
         } else {
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
index 97d187b..51106f4 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
@@ -656,9 +656,6 @@
     }
 
 
-
-
-
     /**
      * 可兑换商品推荐
      */
@@ -667,6 +664,7 @@
     public R<List<TGoodsVO>> studySchedule() {
         return R.ok(goodsClient.goodRecommend().getData());
     }
+
     /**
      * 首次页面加载时调用,获取学习进度及学习时长等信息
      *
@@ -683,6 +681,7 @@
         TUserStudy result = studyService.studySchedule(String.valueOf(tokenService.getLoginUserStudy().getUserid()), week, day);
         return R.ok(result);
     }
+
     /**
      * 查询周目列表
      *
@@ -699,6 +698,7 @@
         List<StudyWeekDTO> result = studyService.weekList(type, quarter);
         return R.ok(result);
     }
+
     /**
      * 进入题组后,获取题组学习进度信息
      *
@@ -751,9 +751,9 @@
 //        }
         List<TStudyListen> studyListens = wrapper.list();
         for (TStudyListen studyListen : studyListens) {
-            if (studyListen.getIsVip() == 1){
+            if (studyListen.getIsVip() == 1) {
                 // 需要会员查看
-                if (!isVip){
+                if (!isVip) {
                     // 不是会员
                     return R.vipError("以下内容仅限会员查看,请通过家长端成为会员!");
                 }
@@ -784,9 +784,9 @@
         List<TStudyLook> lookList = studyLookService.lambdaQuery().eq(TStudyLook::getWeek, week)
                 .eq(TStudyLook::getDay, day).eq(TStudyLook::getDisabled, 0).list();
         for (TStudyLook studyListen : lookList) {
-            if (studyListen.getIsVip() == 1){
+            if (studyListen.getIsVip() == 1) {
                 // 需要会员查看
-                if (!isVip){
+                if (!isVip) {
                     // 不是会员
                     return R.vipError("以下内容仅限会员查看,请通过家长端成为会员!");
                 }
@@ -818,9 +818,9 @@
 //        }
         List<TStudyInduction> inductionList = wrapper.list();
         for (TStudyInduction studyListen : inductionList) {
-            if (studyListen.getIsVip() == 1){
+            if (studyListen.getIsVip() == 1) {
                 // 需要会员查看
-                if (!isVip){
+                if (!isVip) {
                     // 不是会员
                     return R.vipError("以下内容仅限会员查看,请通过家长端成为会员!");
                 }
@@ -852,9 +852,9 @@
 //        }
         List<TStudyAnswer> answerList = wrapper.list();
         for (TStudyAnswer studyListen : answerList) {
-            if (studyListen.getIsVip() == 1){
+            if (studyListen.getIsVip() == 1) {
                 // 需要会员查看
-                if (!isVip){
+                if (!isVip) {
                     // 不是会员
                     return R.vipError("以下内容仅限会员查看,请通过家长端成为会员!");
                 }
@@ -881,13 +881,13 @@
         LambdaQueryChainWrapper<TStudyPair> wrapper = studyPairService.lambdaQuery().eq(TStudyPair::getWeek, week)
                 .eq(TStudyPair::getDay, day).eq(TStudyPair::getDisabled, 0);
         // 非会员只能查看非会员题目,会员可以查看所有题目
-        if (!isVip) {
-            wrapper.eq(TStudyPair::getIsVip, 0);
-        }
+//        if (!isVip) {
+//            wrapper.eq(TStudyPair::getIsVip, 0);
+//        }
         TStudyPair pair = wrapper.one();
-        if (pair.getIsVip() == 1){
+        if (pair.getIsVip() == 1) {
             // 需要会员查看
-            if (!isVip){
+            if (!isVip) {
                 // 不是会员
                 return R.vipError("以下内容仅限会员查看,请通过家长端成为会员!");
             }
@@ -1071,8 +1071,13 @@
         TStoryListen listen = storyListenService.lambdaQuery().eq(TStoryListen::getWeek, week).one();
         // 获取对应图片语音
         List<String> list = Arrays.asList(listen.getLookStory().split(","));
-        return R.ok(new StudyStoryListenResultVO(listen,
-                subjectService.lambdaQuery().in(TSubject::getId, list).eq(TSubject::getState, 1).list()));
+        List<TSubject> subjectList;
+        if (!list.isEmpty()) {
+            subjectList = subjectService.lambdaQuery().in(TSubject::getId, list).eq(TSubject::getState, 1).list();
+        } else {
+            subjectList = new ArrayList<>();
+        }
+        return R.ok(new StudyStoryListenResultVO(listen, subjectList));
     }
 
     /**
@@ -1090,8 +1095,13 @@
         TStoryListen listen = storyListenService.lambdaQuery().eq(TStoryListen::getWeek, week).one();
         // 获取对应图片语音
         List<String> list = Arrays.asList(listen.getStory().split(","));
-        return R.ok(new StudyStoryListenResultVO(listen,
-                subjectService.lambdaQuery().in(TSubject::getId, list).eq(TSubject::getState, 1).list()));
+        List<TSubject> subjectList;
+        if (!list.isEmpty()) {
+            subjectList = subjectService.lambdaQuery().in(TSubject::getId, list).eq(TSubject::getState, 1).list();
+        } else {
+            subjectList = new ArrayList<>();
+        }
+        return R.ok(new StudyStoryListenResultVO(listen,subjectList));
     }
 
     /**
@@ -1140,11 +1150,12 @@
                 .eq(TGameRecord::getDisabled, 0).list();
         return R.ok(new StudyRecordResultVO(studyRecord, gameRecordList));
     }
+
     @GetMapping("/record")
     @ApiOperation(value = "游戏测试成绩", tags = {"家长端-游戏测试成绩"})
     public R<StudyRecordResultVO> record() {
         LoginUserParent loginUser1 = tokenService.getLoginUser1();
-        if (loginUser1 == null){
+        if (loginUser1 == null) {
             return R.tokenError("登陆失效,请重新登录");
         }
         Integer userId = loginUser1.getUserid();
@@ -1153,11 +1164,11 @@
         TUserStudy studyRecord = userStudyService.lambdaQuery().eq(TUserStudy::getUserId, userId)
                 .eq(TUserStudy::getDisabled, 0).one();
         // 查询剩余周目
-        if (studyRecord!=null){
+        if (studyRecord != null) {
             int size = studyService.list(new QueryWrapper<TStudy>()
                     .eq("type", 1)).size();
-            studyRecord.setSurplus(size-studyRecord.getWeek());
-        }else{
+            studyRecord.setSurplus(size - studyRecord.getWeek());
+        } else {
             studyRecord.setSurplus(studyService.list(new QueryWrapper<TStudy>()
                     .eq("type", 1)).size());
         }
@@ -1166,12 +1177,14 @@
                 .eq(TGameRecord::getDisabled, 0).list();
         return R.ok(new StudyRecordResultVO(studyRecord, gameRecordList));
     }
+
     @GetMapping("/getIntegral")
     @ApiOperation(value = "获取剩余积分", tags = {"家长端-获取剩余积分"})
     public R<Integer> getIntegral() {
         Integer userId = tokenService.getLoginUser1().getUserid();
         return R.ok(userService.getById(userId).getIntegral());
     }
+
     @GetMapping("/getIntegralStudy")
     @ApiOperation(value = "获取剩余积分", tags = {"学习端-获取剩余积分"})
     public R<Integer> getIntegralStudy() {
@@ -1189,11 +1202,12 @@
     public R<IPage<TIntegralRecord>> integralDetail(String time,
                                                     @RequestParam("pageNum") Integer pageNum,
                                                     @RequestParam("pageSize") Integer pageSize) {
-        if(tokenService.getLoginUserStudy() == null){
+        if (tokenService.getLoginUserStudy() == null) {
             return R.tokenError("登录失效");
         }
         return R.ok(integralRecordService.integralDetail(new Page<>(pageNum, pageSize), tokenService.getLoginUserStudy().getUserid(), time));
     }
+
     @GetMapping("/integralDetailParent")
     @ApiOperation(value = "个人中心-积分明细", tags = {"家长端"})
     @ApiImplicitParams({
@@ -1202,9 +1216,9 @@
             @ApiImplicitParam(value = "每页显示条数", name = "pageSize", dataType = "Integer", required = true)
     })
     public R<IPage<TIntegralRecord>> integralDetailParent(String time,
-                                                    @RequestParam("pageNum") Integer pageNum,
-                                                    @RequestParam("pageSize") Integer pageSize) {
-        if(tokenService.getLoginUser1() == null){
+                                                          @RequestParam("pageNum") Integer pageNum,
+                                                          @RequestParam("pageSize") Integer pageSize) {
+        if (tokenService.getLoginUser1() == null) {
             return R.tokenError("登录失效");
         }
 
@@ -1238,6 +1252,7 @@
         integralRecord.setUpdateTime(new Date());
         return R.ok(integralRecordService.save(integralRecord));
     }
+
     @GetMapping("/addIntegralDetail1")
 //    @ApiOperation(value = "添加-积分明细", tags = {"添加-积分明细"})
     @ApiImplicitParams({
@@ -1247,7 +1262,7 @@
     public R addIntegralDetail1(@RequestParam("integral") String integral, @RequestParam("method") String method) {
         // 当前登录用户
         LoginUserParent userStudy = tokenService.getLoginUser1();
-        if (userStudy == null){
+        if (userStudy == null) {
             return R.tokenError("登录失效");
         }
         // 生成积分明细信息
@@ -1280,6 +1295,7 @@
         }
         return R.ok(userService.updateById(user));
     }
+
     @GetMapping("/exchangeIntegral1")
 //    @ApiOperation(value = "用户积分变动", tags = {"用户积分变动"})
     public R<Boolean> exchangeIntegral1(@RequestParam("integral") Integer integral, @RequestParam("method") String method) {
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 b60d3d6..b64b9ea 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
@@ -29,7 +29,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;
@@ -325,24 +324,26 @@
         }
         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("/parentPage")
     @ApiOperation(value = "平板", tags = {"启动页"})
     public R<String> parentPage() {
@@ -412,8 +413,8 @@
             }
         } 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("登录失败,手机验证码已过期!");
                 } else {
@@ -427,7 +428,7 @@
                         userService.save(tUser1);
                     }
                 }
-            }else{
+            } else {
                 tUser1 = getUser(phone);
                 userService.save(tUser1);
             }
@@ -477,7 +478,7 @@
                         userService.save(user);
                     }
                 }
-            }else{
+            } else {
                 user = getUser(phone);
                 userService.save(user);
             }
@@ -496,6 +497,7 @@
 
     /**
      * 学生端退出登录
+     *
      * @param request 请求信息
      */
     @PostMapping("/logoutStudy")
@@ -550,7 +552,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();
@@ -579,7 +581,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();
@@ -599,6 +601,7 @@
         }
         return R.ok(data);
     }
+
     /**
      * 获取用户信息
      *
@@ -634,7 +637,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);
@@ -655,8 +658,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();
@@ -678,7 +681,7 @@
             byId.setPhone(phone);
         }
         // 手机验证码校验
-        if (!phoneCode.equals("123456")){
+        if (!phoneCode.equals("123456")) {
             Object redisPhoneCode = redisService.getCacheObject(RedisConstants.PHONE_CODE + phone);
             if (null == redisPhoneCode) {
                 return R.errorCode("手机验证码无效");

--
Gitblit v1.7.1