Explorar o código

feat(merchant): 添加商户权限管理功能

- 添加商户权限列表查询接口 /role/merchant/list
- 添加商户权限分配接口 /role/merchant/addMerchantNode
- 在登录排除路径中添加商户相关接口
- 创建商户操作表 MerchantActionTable 和商户节点表 MerchantNodeTable
- 实现商户权限服务 MerchantRoleService 及其具体实现
- 添加商户权限相关的数据库映射和SQL操作
- 更新用户角色服务中的注释说明
孔向阳 hai 5 meses
pai
achega
c2f5a1e519

+ 44 - 0
uacrd-manager-server/src/main/java/com/crm/manager/controller/MerchantController.java

@@ -0,0 +1,44 @@
+package com.crm.manager.controller;
+
+import com.crm.manager.service.MerchantRoleService;
+import com.crm.rely.backend.core.dto.base.BaseResultDto;
+import com.crm.rely.backend.core.dto.user.role.UserNodeDisplayDto;
+import com.crm.rely.backend.core.entity.user.role.UserRoleAddEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+@RestController
+@RequestMapping("/role/merchant")
+public class MerchantController {
+    @Autowired
+    private MerchantRoleService merchantRoleService;
+
+    /**
+     * 商户权限列表
+     *
+     * @param merchantId
+     * @return
+     */
+    @RequestMapping("/list")
+    public BaseResultDto<List<UserNodeDisplayDto>> merchantDetailList(Long merchantId) {
+        List<UserNodeDisplayDto> userNodeDisplayEntities = merchantRoleService.merchantDetailList(merchantId);
+        return BaseResultDto.success(userNodeDisplayEntities);
+    }
+
+    /**
+     * 添加商户权限
+     *
+     * @param userRoleAddEntity
+     * @return
+     */
+    @RequestMapping("/addMerchantNode")
+    public BaseResultDto<String> add(@RequestBody @Valid UserRoleAddEntity userRoleAddEntity) {
+        merchantRoleService.add(userRoleAddEntity);
+        return BaseResultDto.success("添加成功");
+    }
+}

+ 21 - 0
uacrd-manager-server/src/main/java/com/crm/manager/dao/mapper/MerchantRoleMapper.java

@@ -0,0 +1,21 @@
+package com.crm.manager.dao.mapper;
+
+import com.crm.rely.backend.core.pojo.table.SysActionTable;
+import com.crm.rely.backend.core.pojo.table.ucard.MerchantActionTable;
+import com.crm.rely.backend.core.pojo.table.ucard.MerchantNodeTable;
+import com.crm.rely.backend.core.pojo.view.SysNodeView;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface MerchantRoleMapper {
+    List<SysNodeView> getMerchantNodesByMerchantId(@Param("merchantId") Long merchantId);
+
+    List<SysActionTable> getAllByMerchantId(@Param("merchantId") Long merchantId);
+
+    void bantchInsertNode(@Param("list") List<MerchantNodeTable> merchantNodeTables, @Param("merchantId") Long merchantId);
+
+    void bantchInsertAction(@Param("list") List<MerchantActionTable> merchantActionTables, @Param("merchantId") Long merchantId);
+}

+ 14 - 0
uacrd-manager-server/src/main/java/com/crm/manager/service/MerchantRoleService.java

@@ -0,0 +1,14 @@
+package com.crm.manager.service;
+
+import com.crm.rely.backend.core.dto.user.role.UserNodeDisplayDto;
+import com.crm.rely.backend.core.entity.user.role.UserRoleAddEntity;
+
+import java.util.List;
+
+public interface MerchantRoleService {
+
+    void add(UserRoleAddEntity userRoleAddEntity);
+
+    List<UserNodeDisplayDto> merchantDetailList(Long merchantId);
+
+}

+ 175 - 0
uacrd-manager-server/src/main/java/com/crm/manager/service/impl/MerchantRoleServiceImpl.java

@@ -0,0 +1,175 @@
+package com.crm.manager.service.impl;
+
+import com.crm.manager.dao.mapper.MerchantRoleMapper;
+import com.crm.manager.service.MerchantRoleService;
+import com.crm.rely.backend.core.constant.Constants;
+import com.crm.rely.backend.core.dto.user.role.UserActionDisplayDto;
+import com.crm.rely.backend.core.dto.user.role.UserNodeDisplayDto;
+import com.crm.rely.backend.core.entity.user.role.UserRoleAddEntity;
+import com.crm.rely.backend.core.entity.user.role.UserRoleOperateEntity;
+import com.crm.rely.backend.core.pojo.table.SysActionTable;
+import com.crm.rely.backend.core.pojo.table.UserRoleDetailTable;
+import com.crm.rely.backend.core.pojo.table.UserRoleNodeTable;
+import com.crm.rely.backend.core.pojo.table.ucard.MerchantActionTable;
+import com.crm.rely.backend.core.pojo.table.ucard.MerchantNodeTable;
+import com.crm.rely.backend.core.pojo.view.SysNodeView;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+@Service
+public class MerchantRoleServiceImpl implements MerchantRoleService {
+    @Autowired
+    private MerchantRoleMapper merchantRoleMapper;
+
+
+    @Override
+    public void add(UserRoleAddEntity userRoleAddEntity) {
+        Long merchantId = 1L;
+        List<MerchantNodeTable> merchantNodeTables = new ArrayList<>();
+        List<MerchantActionTable> merchantActionTables = new ArrayList<>();
+        List<UserRoleOperateEntity> userRoleOperateEntities = userRoleAddEntity.getData();
+        for (UserRoleOperateEntity userRoleOperateEntity : userRoleOperateEntities) {
+            // 节点
+            if(userRoleOperateEntity.getType() == 0){
+                MerchantNodeTable merchantNodeTable = new MerchantNodeTable();
+                merchantNodeTable.setMerchantId(merchantId);
+                merchantNodeTable.setNodeId(userRoleOperateEntity.getId());
+                merchantNodeTables.add(merchantNodeTable);
+            }
+
+            // 按钮
+            else if(userRoleOperateEntity.getType() == 1){
+                MerchantActionTable merchantActionTable = new MerchantActionTable();
+                merchantActionTable.setMerchantId(merchantId);
+                merchantActionTable.setActionId(userRoleOperateEntity.getId());
+                merchantActionTables.add(merchantActionTable);
+            }
+        }
+        merchantRoleMapper.bantchInsertNode(merchantNodeTables,merchantId);
+        merchantRoleMapper.bantchInsertAction(merchantActionTables,merchantId);
+    }
+
+    @Override
+    public List<UserNodeDisplayDto> merchantDetailList(Long merchantId) {
+        /*
+         * 该商户拥有的所有菜单
+         */
+        List<SysNodeView> sysNodeViews = merchantRoleMapper.getMerchantNodesByMerchantId(merchantId);
+
+        /*
+         * 获取按钮信息
+         */
+        List<SysActionTable> sysActionTables = merchantRoleMapper.getAllByMerchantId(merchantId);
+
+        List<UserRoleDetailTable> roleDetailTables = new ArrayList<UserRoleDetailTable>();
+
+        for (SysActionTable sysActionTable : sysActionTables) {
+
+            UserRoleDetailTable userRoleDetailTable = new UserRoleDetailTable();
+            userRoleDetailTable.setActionId(sysActionTable.getId());
+            userRoleDetailTable.setRoleId(null);
+            userRoleDetailTable.setNodeId(sysActionTable.getNodeId());
+
+            roleDetailTables.add(userRoleDetailTable);
+        }
+
+        List<UserNodeDisplayDto> userNodeDisplayEntities = new ArrayList<UserNodeDisplayDto>();
+        if (sysNodeViews != null && sysNodeViews.size() > 0) {
+            for (SysNodeView sysNodeTable : sysNodeViews) {
+                // 顶级菜单
+                if (sysNodeTable.getPid() == null || sysNodeTable.getPid() == 0) {
+                    UserNodeDisplayDto userNodeDisplayEntity = getUserNodeDisplayDto(sysNodeTable);
+                    recursion(sysNodeViews, sysActionTables, roleDetailTables, userNodeDisplayEntity);
+                    userNodeDisplayEntities.add(userNodeDisplayEntity);
+                }
+            }
+        }
+
+        return userNodeDisplayEntities;
+    }
+
+    private UserNodeDisplayDto getUserNodeDisplayDto(SysNodeView sysNodeTable) {
+        UserNodeDisplayDto userNodeDisplayEntity = new UserNodeDisplayDto();
+        userNodeDisplayEntity.setName(sysNodeTable.getName());
+        userNodeDisplayEntity.setCode(sysNodeTable.getCode());
+        userNodeDisplayEntity.setIcon(sysNodeTable.getIcon());
+        userNodeDisplayEntity.setLink(sysNodeTable.getLink());
+        userNodeDisplayEntity.setId(sysNodeTable.getId());
+        userNodeDisplayEntity.setShow(sysNodeTable.getShow());
+        userNodeDisplayEntity.setPid(sysNodeTable.getPid());
+        userNodeDisplayEntity.setSubIndex(sysNodeTable.getSubIndex());
+        userNodeDisplayEntity.setTId(sysNodeTable.getId() + "-" + userNodeDisplayEntity.getType());
+        return userNodeDisplayEntity;
+    }
+
+    private void recursion(List<SysNodeView> sysNodeViews, List<SysActionTable> sysActionTables,
+                           List<UserRoleDetailTable> userRoleDetailTables, UserNodeDisplayDto userNodeDisplayDto) {
+        // sysNodeViews -> 该角色拥有的所有菜单
+        // sysActionTables -> 所有权限信息
+        // userRoleDetailTables -> 该角色拥有的权限信息
+        // userNodeDisplayDto
+        for (SysNodeView sysNodePojo : sysNodeViews) {
+            if (userNodeDisplayDto.getId().equals(sysNodePojo.getPid())) {
+                UserNodeDisplayDto child = getUserNodeDisplayDto(sysNodePojo);
+
+                Map<String, UserActionDisplayDto> userActionDisplayDtos = getUserActionDisplayDtos(sysActionTables, userRoleDetailTables, child.getId());
+                child.setBtns(userActionDisplayDtos);
+
+                userNodeDisplayDto.getChildren().add(child);
+                recursion(sysNodeViews, sysActionTables, userRoleDetailTables, child);
+            } else {
+                Map<String, UserActionDisplayDto> userActionDisplayDtos = getUserActionDisplayDtos(sysActionTables, userRoleDetailTables, userNodeDisplayDto.getId());
+                userNodeDisplayDto.setBtns(userActionDisplayDtos);
+            }
+        }
+    }
+
+    private Map<String, UserActionDisplayDto> getUserActionDisplayDtos(List<SysActionTable> sysActionTables, List<UserRoleDetailTable> userRoleDetailTables, Long nodeId) {
+
+        if (sysActionTables == null && sysActionTables.size() <= 0) {
+            return new HashMap<>(0);
+        }
+        Map<String, UserActionDisplayDto> userActionDisplayDtos = new HashMap<>(sysActionTables.size());
+        List<SysActionTable> removeSysActionTables = new ArrayList<>(sysActionTables.size());
+        int size = sysActionTables.size();
+
+        for (int i = 0; i < size; i++) {
+            SysActionTable sysActionPojo = sysActionTables.get(i);
+            if (sysActionPojo.getNodeId().equals(nodeId)) {
+                UserActionDisplayDto userActionDisplayDto = getUserActionDisplayDto(sysActionPojo, userRoleDetailTables, nodeId);
+                userActionDisplayDtos.put(userActionDisplayDto.getCode(), userActionDisplayDto);
+                removeSysActionTables.add(sysActionPojo);
+            }
+        }
+        if (removeSysActionTables.size() > 0) {
+            userRoleDetailTables.removeAll(removeSysActionTables);
+        }
+        return userActionDisplayDtos;
+    }
+
+    private UserActionDisplayDto getUserActionDisplayDto(SysActionTable sysActionTable, List<UserRoleDetailTable> userRoleDetailTables, Long nodeId) {
+        if (sysActionTable.getNodeId() != null && sysActionTable.getNodeId().equals(nodeId)) {
+            UserActionDisplayDto userActionDisplayDto = new UserActionDisplayDto();
+            userActionDisplayDto.setName(sysActionTable.getName());
+            userActionDisplayDto.setCode(sysActionTable.getCode());
+            userActionDisplayDto.setId(sysActionTable.getId());
+            userActionDisplayDto.setPid(sysActionTable.getNodeId());
+            userActionDisplayDto.setShow(false);
+            userActionDisplayDto.setTId(userActionDisplayDto.getId() + "-" + userActionDisplayDto.getType());
+            if (userRoleDetailTables != null && userRoleDetailTables.size() != 0) {
+                Iterator<UserRoleDetailTable> userRoleDetailPojoIterator = userRoleDetailTables.iterator();
+                while (userRoleDetailPojoIterator.hasNext()) {
+                    UserRoleDetailTable userRoleDetailPojo = userRoleDetailPojoIterator.next();
+                    if (userRoleDetailPojo.getNodeId().equals(nodeId)
+                            && userRoleDetailPojo.getActionId().equals(sysActionTable.getId())) {
+                        userActionDisplayDto.setShow(true);
+                    }
+                }
+            }
+            return userActionDisplayDto;
+        }
+        return null;
+    }
+}

+ 9 - 3
uacrd-manager-server/src/main/java/com/crm/manager/service/impl/UserRoleServiceImpl.java

@@ -162,7 +162,7 @@ public class UserRoleServiceImpl implements UserRoleService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateRoleInfo(UserRoleUpdateEntity userRoleUpdateEntity) throws ServiceException {
-
+        // 角色id 查角色信息
         UserRoleTable userRoleTable = userRoleRepository.findOne(userRoleUpdateEntity.getId());
         if (userRoleTable == null) {
             throw new ServiceException(Constants.INFO_NOT_FOUND);
@@ -203,6 +203,7 @@ public class UserRoleServiceImpl implements UserRoleService {
             throw new ServiceException("当前角色不可修改!!!");
         }
         Long roleId = userRoleOperateListEntity.getRoleId();
+
         List<UserRoleNodeTable> roleNodeTables = null;
         List<UserRoleDetailTable> roleDetailTables = null;
         List<UserRoleOperateEntity> userRoleOperateEntities = userRoleOperateListEntity.getData();
@@ -476,7 +477,7 @@ public class UserRoleServiceImpl implements UserRoleService {
     private List<UserNodeDisplayDto> updateUserNode(Long roleId) throws ServiceException {
 
         /*
-         * 获取节点信息
+         * 该角色拥有的所有菜单
          */
         List<SysNodeView> sysNodeViews = userRoleNodeService.getSysNodesByRoleId(roleId);
 
@@ -489,7 +490,7 @@ public class UserRoleServiceImpl implements UserRoleService {
 //            throw new RuntimeException("权限信息有误,请联系管理员");
 //        }
         /*
-         * 获取详细信息
+         * 获取角色权限信息
          */
         List<UserRoleDetailTable> roleDetailTables = new ArrayList<UserRoleDetailTable>();
         if (sysActionTables != null || sysActionTables.size() >= 0) {
@@ -516,6 +517,7 @@ public class UserRoleServiceImpl implements UserRoleService {
         List<UserNodeDisplayDto> userNodeDisplayEntities = new ArrayList<UserNodeDisplayDto>();
         if (sysNodeViews != null && sysNodeViews.size() > 0) {
             for (SysNodeView sysNodeTable : sysNodeViews) {
+                // 顶级菜单
                 if (sysNodeTable.getPid() == null || sysNodeTable.getPid() == 0) {
                     UserNodeDisplayDto userNodeDisplayEntity = getUserNodeDisplayDto(sysNodeTable);
                     recursion(sysNodeViews, sysActionTables, roleDetailTables, userNodeDisplayEntity);
@@ -575,6 +577,10 @@ public class UserRoleServiceImpl implements UserRoleService {
      */
     private void recursion(List<SysNodeView> sysNodeViews, List<SysActionTable> sysActionTables,
                            List<UserRoleDetailTable> userRoleDetailTables, UserNodeDisplayDto userNodeDisplayDto) {
+        // sysNodeViews -> 该角色拥有的所有菜单
+        // sysActionTables -> 所有权限信息
+        // userRoleDetailTables -> 该角色拥有的权限信息
+        // userNodeDisplayDto
         for (SysNodeView sysNodePojo : sysNodeViews) {
             if (userNodeDisplayDto.getId().equals(sysNodePojo.getPid())) {
                 UserNodeDisplayDto child = getUserNodeDisplayDto(sysNodePojo);

+ 2 - 0
uacrd-manager-server/src/main/resources/application.yml

@@ -12,6 +12,8 @@ ribbon:
   ConnectTimeout: 60000
 login:
   excludePathPatterns:
+    /role/merchant/addMerchantNode,
+    /role/merchant/list,
     /user/login,
     /user/login/send/code,
     /user/logout,

+ 32 - 0
uacrd-manager-server/src/main/resources/mapper/MerchantRoleMapper.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.crm.manager.dao.mapper.MerchantRoleMapper">
+
+    <insert id="bantchInsertNode">
+        INSERT INTO merchant_node(merchant_id, node_id) VALUES
+        <foreach item="item" index="index" collection="list" separator=",">
+            (#{item.merchantId},#{item.nodeId})
+        </foreach>
+    </insert>
+
+    <insert id="bantchInsertAction">
+        INSERT INTO merchant_action(merchant_id, action_id) VALUES
+        <foreach item="item" index="index" collection="list" separator=",">
+            (#{item.merchantId},#{item.actionId})
+        </foreach>
+    </insert>
+
+    <select id="getMerchantNodesByMerchantId" resultType="com.crm.rely.backend.core.pojo.view.SysNodeView">
+        SELECT sn.*
+        FROM merchant_node mn
+                 JOIN sys_node sn ON mn.node_id = sn.id
+        WHERE mn.merchant_id = #{merchantId}
+    </select>
+    <select id="getAllByMerchantId" resultType="com.crm.rely.backend.core.pojo.table.SysActionTable">
+        SELECT sa.* FROM merchant_action ma
+                             JOIN sys_action sa ON ma.action_id = sa.id
+        WHERE ma.merchant_id = #{merchantId};
+    </select>
+</mapper>

+ 1 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/entity/base/SingleLongEntity.java

@@ -15,5 +15,6 @@ public class SingleLongEntity {
     @NotNull(message = Constants.SELECT_ROW)
     @Min(value = 0,message = Constants.SELECT_ROW)
     @Max(value = Long.MAX_VALUE,message = Constants.PARAMETER_ERROR)
+    // 角色id
     private Long id;
 }

+ 1 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/entity/user/role/UserRoleOperateEntity.java

@@ -9,6 +9,7 @@ public class UserRoleOperateEntity {
 
     private Long id;
 
+    // 0 菜单 1 按钮
     private Integer type;
 
     private String name;

+ 15 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/pojo/table/ucard/MerchantActionTable.java

@@ -0,0 +1,15 @@
+package com.crm.rely.backend.core.pojo.table.ucard;
+
+import com.crm.rely.backend.core.pojo.BaseTable;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+@Data
+@Entity
+@Table(name = "merchant_action")
+public class MerchantActionTable extends BaseTable {
+    private Long merchantId;
+    private Long actionId;
+}

+ 15 - 0
ucard-core/src/main/java/com/crm/rely/backend/core/pojo/table/ucard/MerchantNodeTable.java

@@ -0,0 +1,15 @@
+package com.crm.rely.backend.core.pojo.table.ucard;
+
+import com.crm.rely.backend.core.pojo.BaseTable;
+import lombok.Data;
+
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+@Data
+@Entity
+@Table(name = "merchant_node")
+public class MerchantNodeTable extends BaseTable {
+    private Long merchantId;
+    private Long nodeId;
+}