Prechádzať zdrojové kódy

认证通会员part2

Aslee 3 rokov pred
rodič
commit
c49baee29e

+ 1 - 1
src/main/java/com/caimei/controller/vip/VipApi.java

@@ -161,7 +161,7 @@ public class VipApi {
         return vipService.vipServicesForm(authUserId);
         return vipService.vipServicesForm(authUserId);
     }
     }
 
 
-    @ApiOperation("会员订制化服务配置表单")
+    @ApiOperation("会员订制化服务配置")
     @ApiImplicitParam(name = "params", value = "authUserId:用户id;roleIds:配置的角色id,以,隔开", required = true)
     @ApiImplicitParam(name = "params", value = "authUserId:用户id;roleIds:配置的角色id,以,隔开", required = true)
     @PostMapping("/services/configure")
     @PostMapping("/services/configure")
     public ResponseJson vipServicesConfigure(@RequestBody String params){
     public ResponseJson vipServicesConfigure(@RequestBody String params){

+ 6 - 6
src/main/java/com/caimei/mapper/SystemMapper.java

@@ -184,12 +184,6 @@ public interface SystemMapper {
 
 
     void insertAdminUser(SysUser sysUser);
     void insertAdminUser(SysUser sysUser);
 
 
-    /**
-     * 根据菜单id删除会员菜单角色
-     * @param menuId
-     */
-    void deleteVipRoleByMenuId(Integer menuId);
-
     /**
     /**
      * 根据菜单id查询会员菜单角色id
      * 根据菜单id查询会员菜单角色id
      */
      */
@@ -204,4 +198,10 @@ public interface SystemMapper {
     List<SysMenu> getVipMenuList();
     List<SysMenu> getVipMenuList();
 
 
     List<Integer> getVipRoleIdList(Integer authUserId);
     List<Integer> getVipRoleIdList(Integer authUserId);
+
+    Integer getMenuParentId(Integer id);
+
+    void deleteVipRoleMenuRelation(Integer menuId);
+
+    void deleteRoleMenuPermission(Integer menuId);
 }
 }

+ 3 - 4
src/main/java/com/caimei/service/sys/SysMenuService.java

@@ -4,6 +4,7 @@ package com.caimei.service.sys;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.po.SysMenu;
 import com.caimei.model.po.SysMenu;
 import com.caimei.model.po.SysMenuTree;
 import com.caimei.model.po.SysMenuTree;
+import com.caimei.model.po.SysPermission;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
 
 
 import java.util.List;
 import java.util.List;
@@ -36,10 +37,6 @@ public interface SysMenuService {
      * 根据ID更新菜单
      * 根据ID更新菜单
      */
      */
     ResponseJson<Void> updateMenu(Integer id, SysMenu menu);
     ResponseJson<Void> updateMenu(Integer id, SysMenu menu);
-    /**
-     * 根据ID更新供应商菜单
-     */
-    ResponseJson<Void> updateShopMenu(SysMenu menu);
     /**
     /**
      * 根据ID(可选择的)更新菜单字段
      * 根据ID(可选择的)更新菜单字段
      */
      */
@@ -52,4 +49,6 @@ public interface SysMenuService {
      * 根据ID删除菜单
      * 根据ID删除菜单
      */
      */
     ResponseJson<Void> deleteMenu(Integer id);
     ResponseJson<Void> deleteMenu(Integer id);
+
+    ResponseJson<Void> saveVipRole(SysMenu menu, List<SysPermission> permissionList);
 }
 }

+ 102 - 80
src/main/java/com/caimei/service/sys/impl/SysMenuServiceImpl.java

@@ -10,6 +10,7 @@ import com.caimei.model.po.SysPermission;
 import com.caimei.model.po.SysRole;
 import com.caimei.model.po.SysRole;
 import com.caimei.service.sys.SysMenuService;
 import com.caimei.service.sys.SysMenuService;
 import com.caimei.service.sys.SysRoleService;
 import com.caimei.service.sys.SysRoleService;
+import com.caimei.utils.CommonUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -112,43 +113,26 @@ public class SysMenuServiceImpl implements SysMenuService {
         menu.setId(id);
         menu.setId(id);
         menu.setDelFlag(0);
         menu.setDelFlag(0);
         systemMapper.updateMenu(menu);
         systemMapper.updateMenu(menu);
-        // 移除菜单与供应商基础角色的关联
-        removeShopRoleRelation(menu.getId());
-        if (2 == menu.getMenuType() && 1 == menu.getBaseFlag() && 0 == menu.getParentId()) {
-            // 供应商基础菜单
-            addShopRoleRelation(menu.getId());
-        } else if (2 == menu.getMenuType() && 0 == menu.getBaseFlag() && 0 == menu.getParentId()) {
-            // 供应商会员菜单
-            ResponseJson<Void> result = saveVipRole(menu);
-            if (0 != result.getCode()) {
-                return result;
-            }
-        }
         // 按钮权限JSON数据解析
         // 按钮权限JSON数据解析
-        ResponseJson<Void> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
-        if (error != null) {
-            return error;
+        ResponseJson<List<SysPermission>> result = parsePermissionJson(menu.getId(), menu.getPermissionJson());
+        if (-1 == result.getCode()) {
+            return ResponseJson.error(result.getMsg(), null);
         }
         }
-        return ResponseJson.success();
-    }
-
-    /**
-     * 根据ID更新供应商菜单
-     */
-    @Transactional(rollbackFor=Exception.class)
-    @Override
-    public ResponseJson<Void> updateShopMenu(SysMenu menu) {
-        systemMapper.updateShopMenu(menu);
-        // 移除菜单与供应商基础角色的关联
-        removeShopRoleRelation(menu.getId());
-        if (1 == menu.getBaseFlag()) {
-            // 供应商基础菜单
-            addShopRoleRelation(menu.getId());
-        } else if (0 == menu.getBaseFlag()) {
-            // 供应商会员菜单
-            ResponseJson<Void> result = saveVipRole(menu);
-            if (0 != result.getCode()) {
-                return result;
+        List<SysPermission> permissionList = result.getData();
+        Integer parentMenuId = getBaseParentId(menu.getId());
+        SysMenu baseParentMenu = systemMapper.getMenu(parentMenuId);
+        if (2 == menu.getMenuType()) {
+            // 移除菜单与供应商基础角色的关联
+            removeMenuRoleRelation(menu.getId());
+            if (1 == baseParentMenu.getBaseFlag()) {
+                // 供应商基础菜单
+                addShopRoleRelation(menu.getId(), permissionList);
+            } else {
+                // 供应商会员菜单
+                ResponseJson<Void> saveResult = saveVipRole(menu, permissionList);
+                if (0 != saveResult.getCode()) {
+                    return saveResult;
+                }
             }
             }
         }
         }
         return ResponseJson.success();
         return ResponseJson.success();
@@ -184,9 +168,9 @@ public class SysMenuServiceImpl implements SysMenuService {
         }
         }
         systemMapper.updateMenu(dbMenu);
         systemMapper.updateMenu(dbMenu);
         // 按钮权限JSON数据解析
         // 按钮权限JSON数据解析
-        ResponseJson<Void> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
-        if (error != null) {
-            return error;
+        ResponseJson<List<SysPermission>> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
+        if (-1 == error.getCode()) {
+            return ResponseJson.error(error.getMsg(), null);
         }
         }
         return ResponseJson.success();
         return ResponseJson.success();
     }
     }
@@ -209,30 +193,27 @@ public class SysMenuServiceImpl implements SysMenuService {
         // 根据路由名称查询菜单
         // 根据路由名称查询菜单
         SysMenu dbMenu = systemMapper.getMenuByName(menu.getName());
         SysMenu dbMenu = systemMapper.getMenuByName(menu.getName());
         if (null == dbMenu) {
         if (null == dbMenu) {
+            systemMapper.insertMenu(menu);
             // 按钮权限JSON数据解析
             // 按钮权限JSON数据解析
-            ResponseJson<Void> error = parsePermissionJson(menu.getId(), menu.getPermissionJson());
-            if (error != null) {
-                return error;
+            Integer menuId = menu.getId();
+            ResponseJson<List<SysPermission>> result = parsePermissionJson(menuId, menu.getPermissionJson());
+            if (-1 == result.getCode()) {
+                return ResponseJson.error(result.getMsg(), null);
             }
             }
-            systemMapper.insertMenu(menu);
+            List<SysPermission> permissionList = result.getData();
             if (2 == menu.getMenuType()) {
             if (2 == menu.getMenuType()) {
-                if (0 == menu.getParentId()) {
-                    // 首层菜单
-                    if (1 == menu.getBaseFlag()) {
-                        // 会员基础菜单
-                        addShopRoleRelation(menu.getId());
-                    } else {
-                        // 会员订制菜单
-                        ResponseJson<Void> result = saveVipRole(menu);
-                        if (0 != result.getCode()) {
-                            systemMapper.deleteMenu(menu.getId());
-                            return result;
-                        }
-                    }
+                Integer parentMenuId = getBaseParentId(menuId);
+                SysMenu baseParentMenu = systemMapper.getMenu(parentMenuId);
+                if (1 == baseParentMenu.getBaseFlag()) {
+                    // 会员基础菜单
+                    addShopRoleRelation(menuId, permissionList);
                 } else {
                 } else {
-                    // 母菜单为会员基础菜单
-
-                    // 母菜单为会员订制菜单
+                    // 会员订制菜单
+                    ResponseJson<Void> saveResult = saveVipRole(menu, permissionList);
+                    if (0 != saveResult.getCode()) {
+                        systemMapper.deleteMenu(menuId);
+                        return saveResult;
+                    }
                 }
                 }
             }
             }
         }else {
         }else {
@@ -241,7 +222,24 @@ public class SysMenuServiceImpl implements SysMenuService {
         return ResponseJson.success();
         return ResponseJson.success();
     }
     }
 
 
-    private ResponseJson<Void> saveVipRole(SysMenu menu) {
+
+
+    /**
+     * 获取子菜单顶层母菜单id
+     * @param menuId
+     * @return
+     */
+    private Integer getBaseParentId(Integer menuId) {
+        Integer parentId = systemMapper.getMenuParentId(menuId);
+        if (0 != parentId) {
+           return getBaseParentId(parentId);
+        } else {
+            return menuId;
+        }
+    }
+
+    @Override
+    public ResponseJson<Void> saveVipRole(SysMenu menu, List<SysPermission> permissionList) {
         // 保存会员菜单角色
         // 保存会员菜单角色
         SysRole vipMenuRole = new SysRole();
         SysRole vipMenuRole = new SysRole();
         vipMenuRole.setRoleName(menu.getTitle() + "会员菜单角色");
         vipMenuRole.setRoleName(menu.getTitle() + "会员菜单角色");
@@ -249,35 +247,58 @@ public class SysMenuServiceImpl implements SysMenuService {
         vipMenuRole.setMenuIds(menu.getId().toString());
         vipMenuRole.setMenuIds(menu.getId().toString());
         vipMenuRole.setRoleType(2);
         vipMenuRole.setRoleType(2);
         Integer dbVipRoleId = systemMapper.getVipRoleIdByMenuId(menu.getId());
         Integer dbVipRoleId = systemMapper.getVipRoleIdByMenuId(menu.getId());
+        ResponseJson<Void> result = null;
         if (null == dbVipRoleId) {
         if (null == dbVipRoleId) {
-            return sysRoleService.addRole(vipMenuRole);
+            result = sysRoleService.addRole(vipMenuRole);
         } else {
         } else {
-            return sysRoleService.updateRole(dbVipRoleId, vipMenuRole);
+            result = sysRoleService.updateRole(dbVipRoleId, vipMenuRole);
+        }
+        if (0 != result.getCode()) {
+            return result;
         }
         }
+        permissionList.forEach(permission->{
+            systemMapper.insertRolePermissionRelation(vipMenuRole.getId(), permission.getId());
+        });
+        return ResponseJson.success();
     }
     }
 
 
-    private void addShopRoleRelation(Integer menuId) {
+    private void addShopRoleRelation(Integer menuId, List<SysPermission> permissionList) {
         // 添加供应商基础菜单时将该菜单与供应商基础角色关联
         // 添加供应商基础菜单时将该菜单与供应商基础角色关联
-        ResponseJson<SysRole> roleInfo = sysRoleService.getRoleInfo(2);
-        SysRole vipBaseRole = roleInfo.getData();
-        String menuIds = vipBaseRole.getMenuIds();
-        if (!menuIds.contains(menuId.toString())) {
-            menuIds += "," + menuId;
-            vipBaseRole.setMenuIds(menuIds);
-            sysRoleService.updateRole(2, vipBaseRole);
+        // 根据角色ID获取菜单Ids
+        List<Integer> menuIdList = systemMapper.getMenuIdsByRoleId(1);
+        if (!menuIdList.contains(menuId)) {
+            menuIdList.add(menuId);
+            SysRole sysRole = new SysRole();
+            String menuIds = CommonUtil.idListToString(menuIdList, ",");
+            sysRole.setMenuIds(menuIds);
+            sysRoleService.updateRole(1, sysRole);
+            sysRoleService.updateRole(2, sysRole);
         }
         }
+        // 添加权限关联
+        permissionList.forEach(permission->{
+            systemMapper.insertRolePermissionRelation(1,permission.getId());
+            systemMapper.insertRolePermissionRelation(2,permission.getId());
+        });
     }
     }
 
 
-    private void removeShopRoleRelation(Integer menuId) {
-        ResponseJson<SysRole> roleInfo = sysRoleService.getRoleInfo(2);
-        SysRole vipBaseRole = roleInfo.getData();
-        String menuIds = vipBaseRole.getMenuIds();
-        if (menuIds.contains(menuId.toString())) {
-            menuIds = menuIds.replace("," + menuId, "");
-            menuIds = menuIds.replace(menuId.toString(), "");
-            vipBaseRole.setMenuIds(menuIds);
-            sysRoleService.updateRole(2, vipBaseRole);
+
+    private void removeMenuRoleRelation(Integer menuId) {
+        // 根据角色ID获取菜单Ids
+        List<Integer> menuIdList = systemMapper.getMenuIdsByRoleId(1);
+        if (menuIdList.contains(menuId)) {
+            menuIdList.remove(menuId);
+            String menuIds = CommonUtil.idListToString(menuIdList, ",");
+            SysRole sysRole = new SysRole();
+            sysRole.setMenuIds(menuIds);
+            sysRoleService.updateRole(1, sysRole);
+            sysRoleService.updateRole(2, sysRole);
+        } else {
+            Integer roleId = systemMapper.getVipRoleIdByMenuId(menuId);
+            systemMapper.deleteRole(roleId);
+            systemMapper.deleteRoleMenuRelation(roleId);
         }
         }
+        // 根据菜单ID获取权限关联信息
+        systemMapper.deleteRoleMenuPermission(menuId);
     }
     }
 
 
     /**
     /**
@@ -305,8 +326,9 @@ public class SysMenuServiceImpl implements SysMenuService {
      * 按钮权限JSON数据解析
      * 按钮权限JSON数据解析
      * @param menuId 菜单Id
      * @param menuId 菜单Id
      * @param jsonStr 按钮权限JSON串
      * @param jsonStr 按钮权限JSON串
+     * @return
      */
      */
-    private ResponseJson<Void> parsePermissionJson(Integer menuId, String jsonStr) {
+    private ResponseJson<List<SysPermission>> parsePermissionJson(Integer menuId, String jsonStr) {
         // 按钮权限JSON数据解析
         // 按钮权限JSON数据解析
         JSONArray permissionJson = null;
         JSONArray permissionJson = null;
         List<SysPermission> permissionList = new ArrayList<>();
         List<SysPermission> permissionList = new ArrayList<>();
@@ -348,7 +370,7 @@ public class SysMenuServiceImpl implements SysMenuService {
                 systemMapper.deletePermission(id);
                 systemMapper.deletePermission(id);
             }
             }
         }
         }
-        return null;
+        return ResponseJson.success(permissionList);
     }
     }
 
 
 
 

+ 11 - 6
src/main/java/com/caimei/service/sys/impl/SysRoleServiceImpl.java

@@ -75,10 +75,15 @@ public class SysRoleServiceImpl implements SysRoleService {
     public ResponseJson<Void> updateRole(Integer id, SysRole sysRole) {
     public ResponseJson<Void> updateRole(Integer id, SysRole sysRole) {
         sysRole.setId(id);
         sysRole.setId(id);
         sysRole.setDelFlag(0);
         sysRole.setDelFlag(0);
-        // 删除原有角色菜单关联
-        systemMapper.deleteRoleMenuRelation(id);
         // 菜单Ids,用","隔开
         // 菜单Ids,用","隔开
         String menuIds = sysRole.getMenuIds();
         String menuIds = sysRole.getMenuIds();
+        if (1 == id) {
+            sysRole.setRoleName("shop_base_role");
+            sysRole.setRoleDesc("供应商基础功能角色");
+        } else if (2 == id) {
+            sysRole.setRoleName("vip_base_role");
+            sysRole.setRoleDesc("会员基础功能角色");
+        }
         systemMapper.updateRole(sysRole);
         systemMapper.updateRole(sysRole);
         // 保存角色菜单关系
         // 保存角色菜单关系
         saveRoleMenuRelation(sysRole.getId(), menuIds);
         saveRoleMenuRelation(sysRole.getId(), menuIds);
@@ -141,11 +146,11 @@ public class SysRoleServiceImpl implements SysRoleService {
      * 保存角色菜单关系
      * 保存角色菜单关系
      */
      */
     private void saveRoleMenuRelation(Integer roleId, String menuIds) {
     private void saveRoleMenuRelation(Integer roleId, String menuIds) {
+        // 删除原有角色菜单关联
+        systemMapper.deleteRoleMenuRelation(roleId);
+        // 删除原有角色权限关联
+        systemMapper.deleteRolePermissionRelation(roleId);
         if (StringUtils.hasLength(menuIds)) {
         if (StringUtils.hasLength(menuIds)) {
-            // 删除原有角色菜单关联
-            systemMapper.deleteRoleMenuRelation(roleId);
-            // 删除原有角色权限关联
-            systemMapper.deleteRolePermissionRelation(roleId);
             // 设置角色菜单
             // 设置角色菜单
             String[] split = menuIds.split(",");
             String[] split = menuIds.split(",");
             for (String s : split) {
             for (String s : split) {

+ 21 - 1
src/main/java/com/caimei/service/sys/impl/SysUserServiceImpl.java

@@ -2,10 +2,12 @@ package com.caimei.service.sys.impl;
 
 
 import com.caimei.components.RedisService;
 import com.caimei.components.RedisService;
 import com.caimei.mapper.SystemMapper;
 import com.caimei.mapper.SystemMapper;
+import com.caimei.mapper.VipMapper;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.po.SysMenu;
 import com.caimei.model.po.SysMenu;
 import com.caimei.model.po.SysRole;
 import com.caimei.model.po.SysRole;
 import com.caimei.model.po.SysUser;
 import com.caimei.model.po.SysUser;
+import com.caimei.model.vo.VipInfoVo;
 import com.caimei.service.sys.SysUserService;
 import com.caimei.service.sys.SysUserService;
 import com.caimei.utils.CommonUtil;
 import com.caimei.utils.CommonUtil;
 import com.caimei.utils.Md5Util;
 import com.caimei.utils.Md5Util;
@@ -32,6 +34,9 @@ public class SysUserServiceImpl implements SysUserService {
     @Resource
     @Resource
     private SystemMapper systemMapper;
     private SystemMapper systemMapper;
 
 
+    @Resource
+    private VipMapper vipMapper;
+
     /*@Resource
     /*@Resource
     private BCryptPasswordEncoder bCryptPasswordEncoder;*/
     private BCryptPasswordEncoder bCryptPasswordEncoder;*/
 
 
@@ -73,6 +78,22 @@ public class SysUserServiceImpl implements SysUserService {
         }
         }
         SysUser sysUser = systemMapper.findByUserId(id);
         SysUser sysUser = systemMapper.findByUserId(id);
         if (null != sysUser) {
         if (null != sysUser) {
+            VipInfoVo vipInfo = vipMapper.getVipInfo(id);
+            if (null != vipInfo && vipInfo.getEndDayLeft() <= 0) {
+                if (vipInfo.getFreeDayLeft() <= 0) {
+                    // 会员到期且已过试用期
+                    // 删除用户角色关联
+                    systemMapper.deleteUserRoleRelation(id);
+                    // 赋予基础供应商角色
+                    saveRoleRelation(id, "1");
+                } else {
+                    // 会员到期但还在试用期内
+                    // 删除用户角色关联
+                    systemMapper.deleteUserRoleRelation(id);
+                    // 赋予基础供应商角色和会员基础角色
+                    saveRoleRelation(id, "1,2");
+                }
+            }
             List<Integer> roleIds = setUserRoleInfo(sysUser);
             List<Integer> roleIds = setUserRoleInfo(sysUser);
             List<SysMenu> menus = null;
             List<SysMenu> menus = null;
             if (!CollectionUtils.isEmpty(roleIds)) {
             if (!CollectionUtils.isEmpty(roleIds)) {
@@ -124,7 +145,6 @@ public class SysUserServiceImpl implements SysUserService {
      * 获取用户列表
      * 获取用户列表
      *
      *
      * @param username 用户名
      * @param username 用户名
-     * @param linkName 姓名
      * @param pageNum  页码
      * @param pageNum  页码
      * @param pageSize 每页大小
      * @param pageSize 每页大小
      */
      */

+ 88 - 9
src/main/java/com/caimei/service/vip/impl/VipServiceImpl.java

@@ -4,15 +4,16 @@ import com.caimei.mapper.SystemMapper;
 import com.caimei.mapper.VipMapper;
 import com.caimei.mapper.VipMapper;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.ResponseJson;
 import com.caimei.model.dto.PackageDto;
 import com.caimei.model.dto.PackageDto;
-import com.caimei.model.po.AuthVipPo;
-import com.caimei.model.po.SysMenu;
-import com.caimei.model.po.VipHistoryPo;
+import com.caimei.model.po.*;
 import com.caimei.model.vo.*;
 import com.caimei.model.vo.*;
 import com.caimei.service.sys.SysMenuService;
 import com.caimei.service.sys.SysMenuService;
+import com.caimei.service.sys.SysRoleService;
 import com.caimei.service.sys.SysUserService;
 import com.caimei.service.sys.SysUserService;
 import com.caimei.service.vip.VipService;
 import com.caimei.service.vip.VipService;
+import com.caimei.utils.CommonUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
+import io.swagger.models.auth.In;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -37,6 +38,8 @@ public class VipServiceImpl implements VipService {
     private SysMenuService sysMenuService;
     private SysMenuService sysMenuService;
     @Resource
     @Resource
     private SysUserService sysUserService;
     private SysUserService sysUserService;
+    @Resource
+    private SysRoleService sysRoleService;
 
 
     @Override
     @Override
     public ResponseJson<Integer> payVip(Integer authUserId, Integer packageId, String services, Integer payWay, Integer payStatus, Date payTime) {
     public ResponseJson<Integer> payVip(Integer authUserId, Integer packageId, String services, Integer payWay, Integer payStatus, Date payTime) {
@@ -216,25 +219,101 @@ public class VipServiceImpl implements VipService {
 
 
     @Override
     @Override
     public ResponseJson vipMenusConfigure(List<Map<String, Object>> baseMenuList, List<Map<String, Object>> upMenuList) {
     public ResponseJson vipMenusConfigure(List<Map<String, Object>> baseMenuList, List<Map<String, Object>> upMenuList) {
-        baseMenuList.forEach(menu->{
+        systemMapper.deleteRoleMenuRelation(1);
+        systemMapper.deleteRolePermissionRelation(1);
+        systemMapper.deleteRoleMenuRelation(2);
+        systemMapper.deleteRolePermissionRelation(2);
+        Set<Integer> baseMenuIdSet = new HashSet<>();
+        Set<Integer> basePermissionIdSet = new HashSet<>();
+        for (Map<String,Object> menu : baseMenuList) {
             SysMenu baseMenu = new SysMenu();
             SysMenu baseMenu = new SysMenu();
             baseMenu.setBaseFlag(1);
             baseMenu.setBaseFlag(1);
-            baseMenu.setId(Integer.parseInt(menu.get("id").toString()));
+            String menuId = menu.get("id").toString();
+            baseMenu.setId(Integer.parseInt(menuId));
             baseMenu.setStatus(Integer.parseInt(menu.get("status").toString()));
             baseMenu.setStatus(Integer.parseInt(menu.get("status").toString()));
             baseMenu.setTitle(menu.get("title").toString());
             baseMenu.setTitle(menu.get("title").toString());
-            sysMenuService.updateShopMenu(baseMenu);
+            // 更新菜单
+            systemMapper.updateShopMenu(baseMenu);
+            getAllBaseMenuIds(baseMenu, baseMenuIdSet, basePermissionIdSet);
+        }
+        baseMenuIdSet.forEach(menuId -> {
+            // 保存角色菜单关系
+            systemMapper.insertRoleMenuRelation(1, menuId);
+            systemMapper.insertRoleMenuRelation(2, menuId);
+        });
+        basePermissionIdSet.forEach(permissionId->{
+            // 保存角色权限关系
+            systemMapper.insertRolePermissionRelation(1, permissionId);
+            systemMapper.insertRolePermissionRelation(2, permissionId);
         });
         });
         upMenuList.forEach(menu->{
         upMenuList.forEach(menu->{
+            Set<Integer> vipMenuIdSet = new HashSet<>();
+            Set<Integer> vipPermissionIdSet = new HashSet<>();
             SysMenu upMenu = new SysMenu();
             SysMenu upMenu = new SysMenu();
+            Integer menuId = Integer.parseInt(menu.get("id").toString());
             upMenu.setBaseFlag(0);
             upMenu.setBaseFlag(0);
-            upMenu.setId(Integer.parseInt(menu.get("id").toString()));
+            upMenu.setParentId(0);
+            upMenu.setId(menuId);
             upMenu.setStatus(Integer.parseInt(menu.get("status").toString()));
             upMenu.setStatus(Integer.parseInt(menu.get("status").toString()));
             upMenu.setTitle(menu.get("title").toString());
             upMenu.setTitle(menu.get("title").toString());
-            sysMenuService.updateShopMenu(upMenu);
+            systemMapper.updateShopMenu(upMenu);
+            // 获取菜单下所有权限id
+            List<SysPermission> permissionList = systemMapper.getPermissionList(menuId);
+            Integer dbRoleId = systemMapper.getVipRoleIdByMenuId(menuId);
+            sysMenuService.saveVipRole(upMenu, permissionList);
+            Integer roleId = systemMapper.getVipRoleIdByMenuId(menuId);
+            // 获取子菜单列表
+            List<SysMenu> childMenuList = systemMapper.getMenuList(menuId, 2, null);
+            childMenuList.forEach(childMenu->{
+                getAllVipMenuIds(childMenu, vipMenuIdSet, vipPermissionIdSet);
+            });
+            if (null == dbRoleId) {
+                vipMenuIdSet.forEach(vipMenuId-> systemMapper.insertRoleMenuRelation(roleId, vipMenuId));
+                vipPermissionIdSet.forEach(vipPermissionId-> systemMapper.insertRolePermissionRelation(roleId, vipPermissionId));
+            }
         });
         });
         return ResponseJson.success();
         return ResponseJson.success();
     }
     }
 
 
+    /**
+     * 获取一颗菜单树下的所有菜单id和权限id
+     */
+    private ResponseJson<Void> getAllBaseMenuIds(SysMenu menu, Set<Integer> menuIdSet, Set<Integer> permissionIdSet) {
+        // 删除基础菜单与会员角色的关联
+        Integer menuId = menu.getId();
+        menuIdSet.add(menuId);
+        Integer roleId = systemMapper.getVipRoleIdByMenuId(menuId);
+        if (null != roleId) {
+            systemMapper.deleteRole(roleId);
+            systemMapper.deleteRoleMenuRelation(roleId);
+            systemMapper.deleteRolePermissionRelation(roleId);
+        }
+        // 获取菜单下所有权限id
+        List<Integer> permissionIdList = systemMapper.getPermissionIds(menuId);
+        permissionIdSet.addAll(permissionIdList);
+        // 获取子菜单列表
+        List<SysMenu> childMenuList = systemMapper.getMenuList(menuId, 2, null);
+        // 遍历获取子菜单id和
+        childMenuList.forEach(childMenu -> getAllBaseMenuIds(childMenu, menuIdSet, permissionIdSet));
+        return ResponseJson.success();
+    }
+
+    /**
+     * 获取一颗菜单树下的所有菜单id和权限id
+     */
+    private ResponseJson<Void> getAllVipMenuIds(SysMenu menu, Set<Integer> menuIdSet, Set<Integer> permissionIdSet) {
+        Integer menuId = menu.getId();
+        menuIdSet.add(menuId);
+        // 获取菜单下所有权限id
+        List<Integer> permissionIdList = systemMapper.getPermissionIds(menuId);
+        permissionIdSet.addAll(permissionIdList);
+        // 获取子菜单列表
+        List<SysMenu> childMenuList = systemMapper.getMenuList(menuId, 2, null);
+        // 遍历获取子菜单id和
+        childMenuList.forEach(childMenu -> getAllBaseMenuIds(childMenu, menuIdSet, permissionIdSet));
+        return ResponseJson.success();
+    }
+
     @Override
     @Override
     public ResponseJson<List<SysMenu>> vipServicesForm(Integer authUserId) {
     public ResponseJson<List<SysMenu>> vipServicesForm(Integer authUserId) {
         List<SysMenu> vipServiceList = systemMapper.getVipMenuList();
         List<SysMenu> vipServiceList = systemMapper.getVipMenuList();
@@ -258,7 +337,7 @@ public class VipServiceImpl implements VipService {
         // 删除原有角色关联
         // 删除原有角色关联
         systemMapper.deleteUserRoleRelation(authUserId);
         systemMapper.deleteUserRoleRelation(authUserId);
         // 保存用户角色关系
         // 保存用户角色关系
-        sysUserService.saveRoleRelation(authUserId, roleIds + ",2");
+        sysUserService.saveRoleRelation(authUserId, roleIds + ",1,2");
         return ResponseJson.success();
         return ResponseJson.success();
     }
     }
 }
 }

+ 29 - 8
src/main/resources/mapper/SystemMapper.xml

@@ -83,7 +83,7 @@
         VALUES (#{roleName}, #{roleDesc}, #{roleType}, NOW())
         VALUES (#{roleName}, #{roleDesc}, #{roleType}, NOW())
     </insert>
     </insert>
     <select id="getMenuIdsByRoleId" resultType="java.lang.Integer">
     <select id="getMenuIdsByRoleId" resultType="java.lang.Integer">
-        SELECT DISTINCT menu_id FROM auth_role_menu WHERE role_id = #{roleId}
+        SELECT DISTINCT menu_id FROM auth_role_menu arm left join auth_menu m on arm.menu_id = m.id WHERE role_id = #{roleId} and m.id is not null
     </select>
     </select>
     <select id="getPermissionMenuIdsByRoleId" resultType="java.lang.String">
     <select id="getPermissionMenuIdsByRoleId" resultType="java.lang.String">
         SELECT DISTINCT CONCAT(p.id, '-', p.menu_id) FROM auth_permission p
         SELECT DISTINCT CONCAT(p.id, '-', p.menu_id) FROM auth_permission p
@@ -128,7 +128,7 @@
         </foreach>
         </foreach>
     </select>
     </select>
     <select id="getMenuList" resultType="com.caimei.model.po.SysMenu">
     <select id="getMenuList" resultType="com.caimei.model.po.SysMenu">
-        SELECT m.id, m.title, m.name, m.icon, m.parent_id AS parentId, m.status, m.hidden, m.sort, m.create_time AS createTime, del_flag AS delFlag,
+        SELECT m.id, m.title, m.name, m.icon, m.base_flag as baseFlag, m.parent_id AS parentId, m.status, m.hidden, m.sort, m.create_time AS createTime, del_flag AS delFlag,
         (SELECT COUNT(*) FROM auth_menu WHERE parent_id=m.id) AS childCount
         (SELECT COUNT(*) FROM auth_menu WHERE parent_id=m.id) AS childCount
         FROM auth_menu m
         FROM auth_menu m
         WHERE m.del_flag = 0
         WHERE m.del_flag = 0
@@ -182,7 +182,7 @@
     <update id="updateMenu">
     <update id="updateMenu">
         UPDATE auth_menu
         UPDATE auth_menu
         SET title=#{title},
         SET title=#{title},
-            name=#{name},
+            'name'=#{name},
             icon=#{icon},
             icon=#{icon},
             parent_id=#{parentId},
             parent_id=#{parentId},
             hidden=#{hidden},
             hidden=#{hidden},
@@ -215,8 +215,13 @@
         select authUserId as id from cm_brand_auth_user where authUserId = #{authUserId} and status = 1
         select authUserId as id from cm_brand_auth_user where authUserId = #{authUserId} and status = 1
     </select>
     </select>
     <select id="getVipRoleIdByMenuId" resultType="java.lang.Integer">
     <select id="getVipRoleIdByMenuId" resultType="java.lang.Integer">
-        select role_id from auth_role_menu arm left join auth_role r on arm.role_id = r.id
-        where menu_id = #{menuId} and role_id != 2 and role_type = 2 limit 1
+        select role_id
+        from auth_role_menu arm
+                 left join auth_role r on arm.role_id = r.id
+        where menu_id = #{menuId}
+          and role_id not in (1, 2)
+          and role_type = 2
+        limit 1
     </select>
     </select>
     <select id="getUserList" resultType="com.caimei.model.po.SysUser">
     <select id="getUserList" resultType="com.caimei.model.po.SysUser">
         SELECT u.authUserId as id, u.name as username, u.linkMan, u.mobile, u.createTime, u.status,u.createBy
         SELECT u.authUserId as id, u.name as username, u.linkMan, u.mobile, u.createTime, u.status,u.createBy
@@ -243,6 +248,9 @@
     <select id="findByUsername" resultType="com.caimei.model.po.SysUser">
     <select id="findByUsername" resultType="com.caimei.model.po.SysUser">
         select authUserId as id from cm_brand_auth_user where name = #{username}
         select authUserId as id from cm_brand_auth_user where name = #{username}
     </select>
     </select>
+    <select id="getMenuParentId" resultType="java.lang.Integer">
+        select parent_id from auth_menu where id = #{id}
+    </select>
     <update id="updatePermission">
     <update id="updatePermission">
         UPDATE auth_permission SET name=#{name}, title=#{title}, menu_id = #{menuId}
         UPDATE auth_permission SET name=#{name}, title=#{title}, menu_id = #{menuId}
         WHERE id = #{id}
         WHERE id = #{id}
@@ -260,12 +268,25 @@
     <delete id="deletePermission">
     <delete id="deletePermission">
         DELETE FROM auth_permission WHERE id = #{id}
         DELETE FROM auth_permission WHERE id = #{id}
     </delete>
     </delete>
-    <delete id="deleteVipRoleByMenuId">
-        delete from auth_role where id = (select role_id from auth_role_menu where menu_id = #{menuId} and role_id != 2)
-    </delete>
     <delete id="deleteSysUser">
     <delete id="deleteSysUser">
         delete from cm_brand_auth_user where authUserId = #{id}
         delete from cm_brand_auth_user where authUserId = #{id}
     </delete>
     </delete>
+    <delete id="deleteVipRoleMenuRelation">
+        delete from auth_role_menu where role_id = (
+            select role_id
+            from auth_role_menu arm
+                     left join auth_role r on arm.role_id = r.id
+            where menu_id = #{menuId}
+              and role_id not in (1, 2)
+              and role_type = 2
+            limit 1
+        )
+    </delete>
+    <delete id="deleteRoleMenuPermission">
+        delete
+        from auth_role_permission
+        where permission_id in (select permission_id from auth_permission where menu_id = #{menuId})
+    </delete>
     <insert id="insertPermission" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
     <insert id="insertPermission" keyProperty="id" keyColumn="id" useGeneratedKeys="true">
         INSERT INTO auth_permission(title, name, menu_id)
         INSERT INTO auth_permission(title, name, menu_id)
         VALUES (#{title}, #{name}, #{menuId})
         VALUES (#{title}, #{name}, #{menuId})

+ 1 - 2
src/main/resources/mapper/VipMapper.xml

@@ -143,7 +143,7 @@
                avu.endTime,
                avu.endTime,
                if(avu.id is null, 3, (if(NOW() <![CDATA[<]]> avu.endTime, 1, 0))) as vipStatus,
                if(avu.id is null, 3, (if(NOW() <![CDATA[<]]> avu.endTime, 1, 0))) as vipStatus,
                90 - timestampdiff(day, u.createTime, NOW()) as freeDayLeft,
                90 - timestampdiff(day, u.createTime, NOW()) as freeDayLeft,
-               timestampdiff(day,NOW(),avu.endTime) as endDayLeft,
+               if(avu.id is null, 0, timestampdiff(day,NOW(),avu.endTime)) as endDayLeft,
                date_add(u.createTime, interval 90 day)                   as freeEndTime
                date_add(u.createTime, interval 90 day)                   as freeEndTime
         from cm_brand_auth_user u
         from cm_brand_auth_user u
                  left join auth_vip_user avu on u.authUserId = avu.authUserId
                  left join auth_vip_user avu on u.authUserId = avu.authUserId
@@ -159,7 +159,6 @@
     <select id="getBaseMenuList" resultType="com.caimei.model.po.SysMenu">
     <select id="getBaseMenuList" resultType="com.caimei.model.po.SysMenu">
         select m.id, m.title,m.base_flag as baseFlag, m.move_flag as moveFlag, m.status
         select m.id, m.title,m.base_flag as baseFlag, m.move_flag as moveFlag, m.status
         from auth_menu m
         from auth_menu m
-                 left join auth_role_menu arm on m.id = arm.menu_id
         where m.menu_type = 2
         where m.menu_type = 2
           and m.base_flag = 1
           and m.base_flag = 1
           and m.parent_id = 0
           and m.parent_id = 0