|
|
@@ -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());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|