Browse Source

修复公司权限

xw 2 days ago
parent
commit
72d5d23cf6

+ 12 - 0
fs-admin/src/main/java/com/fs/company/controller/CompanyController.java

@@ -305,4 +305,16 @@ public class CompanyController extends BaseController
         List<OptionsVO> list = companyService.selectAllCompanyList(deptId);
         return getDataTable(list);
     }
+
+    /**
+     * 为旧企业补充角色和权限
+     * @param companyId 企业ID,不传则修复所有企业
+     */
+    @PreAuthorize("@ss.hasPermi('company:company:edit')")
+    @Log(title = "修复企业角色", businessType = BusinessType.UPDATE)
+    @PostMapping("/repairRoles")
+    public R repairCompanyRoles(@RequestParam(required = false) Long companyId)
+    {
+        return companyService.repairCompanyRolesAndPermissions(companyId);
+    }
 }

+ 7 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyUserRoleMapper.java

@@ -79,4 +79,11 @@ public interface CompanyUserRoleMapper
     void batchUserRole(List<CompanyUserRole> list);
 
     void deleteUserRoleByUserId(Long userId);
+
+    /**
+     * 根据角色ID删除用户角色关系
+     * @param roleId 角色ID
+     * @return 结果
+     */
+    int deleteUserRoleByRoleId(Long roleId);
 }

+ 7 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyService.java

@@ -197,4 +197,11 @@ public interface ICompanyService
     void addCompanyTuiLiveMoney(LiveOrder order);
 
     void subLiveCompanyMoney(LiveOrder order);
+
+    /**
+     * 为旧企业补充角色和权限
+     * @param companyId 企业ID,如果为null则修复所有企业
+     * @return 结果
+     */
+    R repairCompanyRolesAndPermissions(Long companyId);
 }

+ 184 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -1708,4 +1708,188 @@ public class CompanyServiceImpl implements ICompanyService
         }));
     }
 
+    /**
+     * 为旧企业补充角色和权限
+     * @param companyId 企业ID,如果为null则修复所有企业
+     * @return 结果
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R repairCompanyRolesAndPermissions(Long companyId) {
+        try {
+            List<Company> companies;
+            if (companyId != null) {
+                // 修复指定企业
+                Company company = companyMapper.selectCompanyById(companyId);
+                if (company == null) {
+                    return R.error("企业不存在");
+                }
+                companies = Collections.singletonList(company);
+            } else {
+                // 修复所有企业
+                Company query = new Company();
+                query.setIsDel(0);
+                companies = companyMapper.selectCompanyList(query);
+            }
+
+            int successCount = 0;
+            int failCount = 0;
+            StringBuilder failMsg = new StringBuilder();
+
+            for (Company company : companies) {
+                try {
+                    logger.info("开始为企业[{}]重置角色和权限", company.getCompanyName());
+                    
+                    // 查询当前企业的所有角色
+                    CompanyRole queryRole = new CompanyRole();
+                    queryRole.setCompanyId(company.getCompanyId());
+                    List<CompanyRole> existingRoles = roleMapper.selectCompanyRoleList(queryRole);
+                    
+                    // 删除除管理员外的所有角色
+                    if (existingRoles != null && !existingRoles.isEmpty()) {
+                        for (CompanyRole role : existingRoles) {
+                            // 保留管理员角色,删除其他所有角色
+                            if (role.getRoleKey() != null && !role.getRoleKey().equals("admin")) {
+                                // 先删除用户角色关系
+                                userRoleMapper.deleteUserRoleByRoleId(role.getRoleId());
+                                // 再删除角色
+                                roleMapper.deleteCompanyRoleById(role.getRoleId());
+                                logger.info("删除企业[{}]的角色: {}", company.getCompanyName(), role.getRoleName());
+                            }
+                        }
+                    }
+
+                    // 重新创建4个标准角色
+                    
+                    // 1. 创建销售经理角色(全部数据权限)
+                    CompanyRole salesManagerRole = new CompanyRole();
+                    salesManagerRole.setCompanyId(company.getCompanyId());
+                    salesManagerRole.setRoleName("销售经理");
+                    salesManagerRole.setRoleKey(company.getCompanyId()+"_sales_manager");
+                    salesManagerRole.setRoleSort(1);
+                    salesManagerRole.setDataScope("1"); // 全部数据权限
+                    salesManagerRole.setStatus("0");
+                    try {
+                        String json = configService.selectConfigByKey("salesmanagermenuconfig");
+                        if (StringUtils.isNotEmpty(json) && !json.equals("")) {
+                            CompanyMenuConfig config = JSONUtil.toBean(json, CompanyMenuConfig.class);
+                            salesManagerRole.setMenuIds(config.getMenuIds());
+                            if(config.getMenuIds().length > 0){
+                                roleService.insertRole(salesManagerRole);
+                            }else {
+                                roleService.insertDefaultRole(salesManagerRole);
+                            }
+                        }else {
+                            roleService.insertDefaultRole(salesManagerRole);
+                        }
+                    } catch (Exception e) {
+                        logger.error("获取菜单配置失败-销售经理", e);
+                        roleService.insertDefaultRole(salesManagerRole);
+                    }
+                    logger.info("为企业[{}]创建角色:销售经理", company.getCompanyName());
+
+                    // 2. 创建销售主管角色(本部门数据权限)
+                    CompanyRole salesSupervisorRole = new CompanyRole();
+                    salesSupervisorRole.setCompanyId(company.getCompanyId());
+                    salesSupervisorRole.setRoleName("销售主管");
+                    salesSupervisorRole.setRoleKey(company.getCompanyId()+"_sales_supervisor");
+                    salesSupervisorRole.setRoleSort(2);
+                    salesSupervisorRole.setDataScope("2"); // 本部门数据权限
+                    salesSupervisorRole.setStatus("0");
+                    try {
+                        String json = configService.selectConfigByKey("salessupervisormenuconfig");
+                        if (StringUtils.isNotEmpty(json) && !json.equals("")) {
+                            CompanyMenuConfig config = JSONUtil.toBean(json, CompanyMenuConfig.class);
+                            salesSupervisorRole.setMenuIds(config.getMenuIds());
+                            if(config.getMenuIds().length > 0){
+                                roleService.insertRole(salesSupervisorRole);
+                            }else {
+                                roleService.insertDefaultRole(salesSupervisorRole);
+                            }
+                        }else {
+                            roleService.insertDefaultRole(salesSupervisorRole);
+                        }
+                    } catch (Exception e) {
+                        logger.error("获取菜单配置失败-销售主管", e);
+                        roleService.insertDefaultRole(salesSupervisorRole);
+                    }
+                    logger.info("为企业[{}]创建角色:销售主管", company.getCompanyName());
+
+                    // 3. 创建数据运营角色(全部数据权限)
+                    CompanyRole dataOperationRole = new CompanyRole();
+                    dataOperationRole.setCompanyId(company.getCompanyId());
+                    dataOperationRole.setRoleName("数据运维");
+                    dataOperationRole.setRoleKey(company.getCompanyId()+"_data_operation");
+                    dataOperationRole.setRoleSort(3);
+                    dataOperationRole.setDataScope("1"); // 全部数据权限
+                    dataOperationRole.setStatus("0");
+                    try {
+                        String json = configService.selectConfigByKey("dataoperationmenuconfig");
+                        if (StringUtils.isNotEmpty(json) && !json.equals("")) {
+                            CompanyMenuConfig config = JSONUtil.toBean(json, CompanyMenuConfig.class);
+                            dataOperationRole.setMenuIds(config.getMenuIds());
+                            if(config.getMenuIds().length > 0){
+                                roleService.insertRole(dataOperationRole);
+                            }else {
+                                roleService.insertDefaultRole(dataOperationRole);
+                            }
+                        }else {
+                            roleService.insertDefaultRole(dataOperationRole);
+                        }
+                    } catch (Exception e) {
+                        logger.error("获取菜单配置失败-数据运维", e);
+                        roleService.insertDefaultRole(dataOperationRole);
+                    }
+                    logger.info("为企业[{}]创建角色:数据运维", company.getCompanyName());
+
+                    // 4. 创建销售角色(个人数据权限)
+                    CompanyRole salesRole = new CompanyRole();
+                    salesRole.setCompanyId(company.getCompanyId());
+                    salesRole.setRoleName("销售");
+                    salesRole.setRoleKey(company.getCompanyId()+"_sales");
+                    salesRole.setRoleSort(4);
+                    salesRole.setDataScope("5"); // 个人数据权限
+                    salesRole.setStatus("0");
+                    try {
+                        String json = configService.selectConfigByKey("companymenuconfig");
+                        if (StringUtils.isNotEmpty(json) && !json.equals("")) {
+                            CompanyMenuConfig config = JSONUtil.toBean(json, CompanyMenuConfig.class);
+                            salesRole.setMenuIds(config.getMenuIds());
+                            if(config.getMenuIds().length > 0){
+                                roleService.insertRole(salesRole);
+                            }else {
+                                roleService.insertDefaultRole(salesRole);
+                            }
+                        }else {
+                            roleService.insertDefaultRole(salesRole);
+                        }
+                    } catch (Exception e) {
+                        logger.error("获取菜单配置失败-销售", e);
+                        roleService.insertDefaultRole(salesRole);
+                    }
+                    logger.info("为企业[{}]创建角色:销售", company.getCompanyName());
+
+                    successCount++;
+                    logger.info("企业[{}]角色重置成功", company.getCompanyName());
+                    
+                } catch (Exception e) {
+                    failCount++;
+                    String msg = String.format("企业[%s]修复失败: %s", company.getCompanyName(), e.getMessage());
+                    logger.error(msg, e);
+                    failMsg.append(msg).append("; ");
+                }
+            }
+
+            String resultMsg = String.format("修复完成!成功: %d, 失败: %d", successCount, failCount);
+            if (failCount > 0) {
+                resultMsg += ". 失败详情: " + failMsg.toString();
+            }
+            return R.ok(resultMsg);
+            
+        } catch (Exception e) {
+            logger.error("修复企业角色和权限失败", e);
+            return R.error("修复失败: " + e.getMessage());
+        }
+    }
+
 }

+ 4 - 0
fs-service/src/main/resources/mapper/company/CompanyUserRoleMapper.xml

@@ -69,4 +69,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <delete id="deleteUserRoleByUserId" parameterType="Long">
 		delete from company_user_role where user_id=#{userId}
 	</delete>
+
+    <delete id="deleteUserRoleByRoleId" parameterType="Long">
+		delete from company_user_role where role_id=#{roleId}
+	</delete>
 </mapper>