上线版本-3.12

This commit is contained in:
zjh 2026-03-12 10:05:46 +08:00
parent 291c7abda2
commit ffb85b85d6
16 changed files with 647 additions and 62 deletions

View File

@ -128,9 +128,11 @@ public class DataEntryEngineModelController {
* @return 分页查询结果
*/
@GetMapping("/selectVersionByPage")
public Response selectVersionByConditionPage() {
public Response selectVersionByConditionPage(
@NotBlank(message = "用户不能为空") @RequestParam String userId
) {
PageResultDTO<DataEntryEngineModelDto> tPageResultDTO =
entryEngineModelService.selectVersionByConditionPage();
entryEngineModelService.selectVersionByConditionPage(userId);
return Response.ok().data(tPageResultDTO);
}
}

View File

@ -3,11 +3,14 @@ package com.xdap.self_development.controller;
import com.definesys.mpaas.common.http.Response;
import com.xdap.self_development.controller.request.ModelRolesRequest;
import com.xdap.self_development.controller.request.PreAndRolePageRequest;
import com.xdap.self_development.controller.request.RolePerJoinRequest;
import com.xdap.self_development.controller.request.UserRoleBindingRequest;
import com.xdap.self_development.domain.dto.PageResultDTO;
import com.xdap.self_development.domain.pojo.ModelRolesPojo;
import com.xdap.self_development.domain.view.MenuListView;
import com.xdap.self_development.domain.view.MenuParamView;
import com.xdap.self_development.domain.view.RoleInfoView;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.service.ModelMenuPermissionService;
import com.xdap.self_development.service.ModelRoleService;
@ -15,6 +18,7 @@ import org.apache.commons.lang3.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
import java.util.HashMap;
import java.util.List;
@ -191,4 +195,24 @@ public class PermissionController {
return Response.ok().data(map);
}
/**
* 根据条件获取权限和角色
*
* @param request 条件
* @return 前置角色和当前角色映射
*/
@PostMapping("/getPreAndRoleByCondition")
public Response getPreAndRoleByCondition(
@RequestBody PreAndRolePageRequest request
) {
PageResultDTO<RoleInfoView> result = modelRoleService.getPreAndRoleByCondition(request);
return Response.ok().data(result);
}
@GetMapping("/exportPreAndRole")
public void exportPreAndRole(
HttpServletResponse response
) {
modelRoleService.writePreAndRole(response);
}
}

View File

@ -66,7 +66,6 @@ public class ParameterForm {
/**
* 部门
*/
@NotBlank(message = "部门不能为空")
private String department;
/**

View File

@ -0,0 +1,17 @@
package com.xdap.self_development.controller.request;
import lombok.Data;
import javax.validation.constraints.Min;
@Data
public class PreAndRolePageRequest {
@Min(message = "页码最小为1", value = 1)
private Integer pageNum;
@Min(message = "页大小最小为1", value = 1)
private Integer pageSize;
private String username = "";
private String department = "";
private String roleName = "";
}

View File

@ -0,0 +1,11 @@
package com.xdap.self_development.controller.request;
import lombok.Data;
@Data
public class UserRoleBindingItem {
// 用户或部门id
private String userOrDeptId;
// 是否为部门id
private Integer isDept;
}

View File

@ -8,6 +8,5 @@ import java.util.List;
public class UserRoleBindingRequest {
//角色ID 用户ID 用户是否是部门0:用户 1部门
private String roleId;
private List<String> userOrDeptIds;
private Integer isDept;
private List<UserRoleBindingItem> userOrDept;
}

View File

@ -0,0 +1,32 @@
package com.xdap.self_development.domain.view;
import com.definesys.mpaas.query.annotation.SQL;
import com.definesys.mpaas.query.annotation.SQLQuery;
import lombok.Data;
@SQLQuery(value = {
@SQL(view = "selectRoleAndPerInfo",
sql = "SELECT r.id AS roleId, r.role_name AS roleName, r.role_name AS role_Name, r.role_code AS roleCode, r.role_description AS roleDescription, dur.user_or_dep AS userOrDep, dur.user_or_dep AS user_Or_Dep , dur.is_dep AS isDep, mp.permission_path AS permissionPath, mp.parameter_per as parameterPer FROM yfsjglpt_model_roles r LEFT JOIN yfsjglpt_model_dep_user_role dur ON r.id = dur.role_id LEFT JOIN yfsjglpt_model_role_permission rp ON dur.role_id = rp.role_id LEFT JOIN yfsjglpt_model_menu_parameter mp ON mp.id = rp.per_id WHERE r.is_enabled = 1 and dur.is_enable = 1 and (rp.is_enable is null or rp.is_enable = 1)")
})
@Data
public class RoleAndPreView {
// 角色相关
// 角色Id
private String roleId;
// 角色名称
private String roleName;
// 角色描述
private String roleDescription;
// 关联相关
// 用户或部门ID
private String userOrDep;
// 是否是部门,0个人1部门
private Integer isDep;
// 权限相关
// 参数权限
private Integer parameterPer;
// 权限路径
private String permissionPath;
}

View File

@ -0,0 +1,42 @@
package com.xdap.self_development.domain.view;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class RoleInfoView {
// 角色Id
@ExcelIgnore
private String roleId;
// 角色名称
@ExcelProperty("角色名称")
private String roleName;
// 成员姓名
@ExcelProperty("成员姓名")
private String username;
// 成员工号
@ExcelProperty("成员工号")
private String userNumber;
// 成员部门
@ExcelProperty("成员部门")
private String department;
// 角色描述
@ExcelProperty("角色描述")
private String roleDescription;
// 成员Id
@ExcelIgnore
private String userId;
// 成员部门Id
@ExcelIgnore
private String departmentId;
// 查询权限
@ExcelProperty("查询权限")
private String queryPerms;
// 编辑权限
@ExcelProperty("编辑权限")
private String editPerms;
}

View File

@ -0,0 +1,11 @@
package com.xdap.self_development.domain.view;
import lombok.Data;
import java.util.List;
@Data
public class UserDeptItem {
private String username;
private List<String> departmentIds;
}

View File

@ -40,7 +40,7 @@ public interface DataEntryEngineModelService {
DataEntryEngineModelPojo selectBymodelId(String modelID);
PageResultDTO<DataEntryEngineModelDto> selectVersionByConditionPage();
PageResultDTO<DataEntryEngineModelDto> selectVersionByConditionPage(String userId);
void delete(String modelId);

View File

@ -2,13 +2,17 @@ package com.xdap.self_development.service;
import com.xdap.self_development.controller.request.ModelRolesRequest;
import com.xdap.self_development.controller.request.PreAndRolePageRequest;
import com.xdap.self_development.controller.request.RolePerJoinRequest;
import com.xdap.self_development.controller.request.UserRoleBindingRequest;
import com.xdap.self_development.domain.dto.PageResultDTO;
import com.xdap.self_development.domain.pojo.EngineParamDetailPojo;
import com.xdap.self_development.domain.pojo.ModelRolesPojo;
import com.xdap.self_development.domain.pojo.ParameterPojo;
import com.xdap.self_development.domain.view.MenuParamView;
import com.xdap.self_development.domain.view.RoleInfoView;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotBlank;
import java.util.HashMap;
import java.util.List;
@ -56,4 +60,12 @@ public interface ModelRoleService {
Map<String, Map<String, Set<String>>> buildPermissionIndex(
Set<String> permissions
);
PageResultDTO<RoleInfoView> getPreAndRoleByCondition(PreAndRolePageRequest request);
void updateUserRole(UserRoleBindingRequest request, int isDept);
void writePreAndRole(HttpServletResponse response);
List<RoleInfoView> getPerAndRole(PreAndRolePageRequest request);
}

View File

@ -19,13 +19,11 @@ import com.xdap.self_development.domain.dto.PageResultDTO;
import com.xdap.self_development.domain.enums.DistributeStatusEnum;
import com.xdap.self_development.domain.enums.ParamValueVersionEnum;
import com.xdap.self_development.domain.pojo.*;
import com.xdap.self_development.domain.view.MenuParamView;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.exception.ExcelImportException;
import com.xdap.self_development.listener.EngineModelListener;
import com.xdap.self_development.service.DataEntryEngineModelService;
import com.xdap.self_development.service.EngineParamDetailService;
import com.xdap.self_development.service.ResponsiblePerService;
import com.xdap.self_development.service.XdapDeptUsersService;
import com.xdap.self_development.service.*;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.poi.ss.usermodel.IndexedColors;
@ -65,6 +63,8 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
private EngineParamDetailService engineParamDetailService;
@Resource
private MpaasQueryFactory sw;
@Resource
private ModelRoleService modelRoleService;
private int page = 1;
private int size = 10;
@ -303,10 +303,6 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
engineParamDetailPojo.setCreationDate(Timestamp.valueOf(LocalDateTime.now()));
engineParamDetailPojo.setIsDistributedRes(Objects.equals(parameter.getParameterSource(), "数据平台手工录入") ? 0 : 2);
engineParamDetailPojo.setIsDistributedFilled(Objects.equals(parameter.getParameterSource(), "数据平台手工录入") ? 0 : 2);
//为每个参数生成默认责任人
List<ResponsiblePersonPojo> personPojos = responsiblePerService.selectByDepName(parameter.getDepartment());
if (ObjectUtils.isNotEmpty(personPojos)) {
}
engineParamDetailPojos.add(engineParamDetailPojo);
}
@ -377,14 +373,45 @@ public class DataEntryEngineModelServiceImpl implements DataEntryEngineModelServ
* @return 分页结果DTO
*/
@Override
public PageResultDTO<DataEntryEngineModelDto> selectVersionByConditionPage() {
public PageResultDTO<DataEntryEngineModelDto> selectVersionByConditionPage(String userId) {
//todo
List<MenuParamView> menuParamViews = modelRoleService.selectPersByUser(userId);
boolean ycFlag = false;
boolean othFlag = false;
for (MenuParamView item : menuParamViews) {
if (item.getPermissionPath().startsWith("竞品发动机数据") && !item.getPermissionPath().equals("竞品发动机数据审批流程")) {
othFlag = true;
continue;
}
if (item.getPermissionPath().startsWith("玉柴发动机数据") && !item.getPermissionPath().equals("玉柴发动机数据审批流程")) {
ycFlag = true;
continue;
}
if (ycFlag && othFlag) {
break;
}
}
List<DataEntryEngineModelDto> list = bd.getBusinessDatabase()
.viewQueryMode(true)
.view("selectVersionByConditionPage")
.doQuery(DataEntryEngineModelDto.class);
PageResultDTO<DataEntryEngineModelDto> pageResultDTO = new PageResultDTO<>();
pageResultDTO.setList(list);
pageResultDTO.setTotalCount(list.size());
boolean finalYcFlag = ycFlag;
boolean finalOthFlag = othFlag;
List<DataEntryEngineModelDto> collect = list.stream().filter(x -> {
if (finalYcFlag && Objects.equals(x.getYcOrOth(), "玉柴")) {
return true;
}
return finalOthFlag && Objects.equals(x.getYcOrOth(), "竞品");
}).collect(Collectors.toList());
pageResultDTO.setList(collect);
pageResultDTO.setTotalCount(collect.size());
return pageResultDTO;
}

View File

@ -189,6 +189,10 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
));
}
private static String nvl(Object obj) {
return obj == null ? "" : obj.toString();
}
public Map<String, Set<String>> selectParamListByDetails(String modelID, Integer parameterVersion, String userId) {
if (parameterVersion == null) {
DataEntryEngineModelPojo engineModel = bd.getBusinessDatabase()
@ -199,6 +203,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
}
parameterVersion = engineModel.getVersionNumber();
}
List<EngineParamDetailPojo> pojoList = selectByIsUserId(modelID, parameterVersion, userId);
AtomicInteger seq = new AtomicInteger(1);
@ -229,29 +234,37 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
DataEntryEngineModelPojo dataEntryEngineModelPojo = bd.getBusinessDatabase()
.eq("id", modelID)
.doQueryFirst(DataEntryEngineModelPojo.class);
if (dataEntryEngineModelPojo == null) {
throw new CommonException("未找到机型的数据");
}
//状态代号
String productNumber = dataEntryEngineModelPojo.getProductNumber();
String productNumber = nvl(dataEntryEngineModelPojo.getProductNumber());
//板块
String plate = dataEntryEngineModelPojo.getPlate();
String plate = nvl(dataEntryEngineModelPojo.getPlate());
//平台
String platform = dataEntryEngineModelPojo.getPlatform();
String platform = nvl(dataEntryEngineModelPojo.getPlatform());
//系列
String series = dataEntryEngineModelPojo.getSeries();
String series = nvl(dataEntryEngineModelPojo.getSeries());
//细分市场
String marketSegment = dataEntryEngineModelPojo.getMarketSegment();
String marketSegment = nvl(dataEntryEngineModelPojo.getMarketSegment());
//项目名称
String projectName = dataEntryEngineModelPojo.getProjectName();
String projectName = nvl(dataEntryEngineModelPojo.getProjectName());
//项目编号
String projectNumber = dataEntryEngineModelPojo.getProjectNumber();
String projectNumber = nvl(dataEntryEngineModelPojo.getProjectNumber());
//品牌
String brand = dataEntryEngineModelPojo.getBrand();
String brand = nvl(dataEntryEngineModelPojo.getBrand());
//排放
String emission = dataEntryEngineModelPojo.getEmission();
String burnType = dataEntryEngineModelPojo.getBurnType();
String engineCapacity = dataEntryEngineModelPojo.getEngineCapacity();
Date productionDate = dataEntryEngineModelPojo.getProductionDate();
String manufacturerName = dataEntryEngineModelPojo.getManufacturerName();
String manufacturerAbbreviation = dataEntryEngineModelPojo.getManufacturerAbbreviation();
String emission = nvl(dataEntryEngineModelPojo.getEmission());
String burnType = nvl(dataEntryEngineModelPojo.getBurnType());
String engineCapacity = nvl(dataEntryEngineModelPojo.getEngineCapacity());
String productionDateStr;
if (dataEntryEngineModelPojo.getProductionDate() != null) {
productionDateStr = new SimpleDateFormat("yyyy-MM-dd").format(dataEntryEngineModelPojo.getProductionDate());
} else {
productionDateStr = ""; // 或者设置一个默认值
}
String manufacturerName = nvl(dataEntryEngineModelPojo.getManufacturerName());
String manufacturerAbbreviation = nvl(dataEntryEngineModelPojo.getManufacturerAbbreviation());
Set<String> strings = new HashSet<>();
if ("玉柴".equals(dataEntryEngineModelPojo.getYcOrOth())) {
strings.add("状态代号:" + productNumber);
@ -260,7 +273,7 @@ public class EngineParamDetailServiceImpl implements EngineParamDetailService {
strings.add("品牌:" + brand);
strings.add("厂家全称:" + manufacturerName);
strings.add("厂家简称:" + manufacturerAbbreviation);
strings.add("生产日期:" + new SimpleDateFormat("yyyy-MM-dd").format(productionDate));
strings.add("生产日期:" + productionDateStr);
}
strings.add("产品型号:" + dataEntryEngineModelPojo.getModelName());
strings.add("板块:" + plate);

View File

@ -1,15 +1,21 @@
package com.xdap.self_development.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.definesys.mpaas.query.MpaasQuery;
import com.xdap.api.moudle.department.pojo.entity.XdapDepartments;
import com.xdap.api.moudle.department.pojo.entity.XdapDeptUsers;
import com.xdap.api.moudle.user.pojo.XdapUsers;
import com.xdap.self_development.common.BusinessDatabase;
import com.xdap.self_development.controller.request.ModelRolesRequest;
import com.xdap.self_development.controller.request.RolePerJoinRequest;
import com.xdap.self_development.controller.request.UserRoleBindingRequest;
import com.xdap.self_development.controller.request.*;
import com.xdap.self_development.domain.dto.PageResultDTO;
import com.xdap.self_development.domain.enums.ParamPermissionEnum;
import com.xdap.self_development.domain.pojo.*;
import com.xdap.self_development.domain.view.MenuParamView;
import com.xdap.self_development.domain.view.RoleAndPreView;
import com.xdap.self_development.domain.view.RoleInfoView;
import com.xdap.self_development.domain.view.UserDeptItem;
import com.xdap.self_development.exception.CommonException;
import com.xdap.self_development.service.ModelRoleService;
import com.xdap.self_development.service.XdapDeptUsersService;
@ -20,6 +26,11 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.text.Collator;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@ -40,6 +51,9 @@ public class ModelRoleServiceImpl implements ModelRoleService {
@Resource
private XdapDeptUsersService xdapDeptUsersService;
@Resource
private ModelRoleService modelRoleService;
/**
* 添加角色
* 根据请求参数添加新角色
@ -274,38 +288,146 @@ public class ModelRoleServiceImpl implements ModelRoleService {
}
private static List<String> processPermissions(List<String> perms) {
if (perms == null || perms.isEmpty()) {
return new ArrayList<>();
}
class PathInfo {
final String pathWithoutTrailingSlash;
final boolean hasTrailingSlash;
PathInfo(String originalPath) {
this.hasTrailingSlash = originalPath.endsWith("/");
this.pathWithoutTrailingSlash = hasTrailingSlash ? originalPath.substring(0, originalPath.length() - 1) : originalPath;
}
String getOriginalPath() {
return pathWithoutTrailingSlash + (hasTrailingSlash ? "/" : "");
}
}
List<PathInfo> pathInfos = perms.stream()
.filter(Objects::nonNull)
.map(PathInfo::new)
.collect(Collectors.toList());
Set<String> permSetWithoutTrailingSlash = pathInfos.stream()
.map(info -> info.pathWithoutTrailingSlash)
.collect(Collectors.toSet());
List<PathInfo> filteredPathInfos = pathInfos.stream()
.filter(info -> {
String currentPath = info.pathWithoutTrailingSlash;
int lastSlashIndex = currentPath.lastIndexOf('/');
if (lastSlashIndex > 0) {
String parentPath = currentPath.substring(0, lastSlashIndex);
return !permSetWithoutTrailingSlash.contains(parentPath);
}
return true;
})
.collect(Collectors.toList());
Map<String, List<PathInfo>> groupedByParent = filteredPathInfos.stream()
.filter(info -> info.pathWithoutTrailingSlash.indexOf('/') >= 0)
.collect(Collectors.groupingBy(info -> {
String path = info.pathWithoutTrailingSlash;
int lastSlashIndex = path.lastIndexOf('/');
return path.substring(0, lastSlashIndex);
}));
List<String> topLevelPerms = filteredPathInfos.stream()
.filter(info -> info.pathWithoutTrailingSlash.indexOf('/') < 0)
.map(info -> {
String formattedPath = info.pathWithoutTrailingSlash.replace('/', '-');
return formattedPath + (info.hasTrailingSlash ? "/" : "");
})
.collect(Collectors.toList());
List<String> result = new ArrayList<>();
for (Map.Entry<String, List<PathInfo>> groupEntry : groupedByParent.entrySet()) {
String parentPath = groupEntry.getKey();
List<PathInfo> childInfos = groupEntry.getValue();
boolean anyHasTrailingSlash = childInfos.stream().anyMatch(info -> info.hasTrailingSlash);
List<String> leafNames = childInfos.stream()
.filter(info -> !info.hasTrailingSlash)
.map(info -> {
String path = info.pathWithoutTrailingSlash;
int lastSlashIndex = path.lastIndexOf('/');
return path.substring(lastSlashIndex + 1);
})
.collect(Collectors.toList());
String formattedParentPath = parentPath.replace('/', '-');
String finalPermString;
if (anyHasTrailingSlash) {
finalPermString = formattedParentPath + "/";
} else {
if (!leafNames.isEmpty()) {
String joinedLeafNames = String.join("", leafNames);
finalPermString = formattedParentPath + "-" + joinedLeafNames;
} else {
finalPermString = formattedParentPath + "/";
}
}
result.add(finalPermString);
}
result.addAll(topLevelPerms);
Collections.sort(result);
return result;
}
private static RoleInfoView getRoleInfoView(Map.Entry<String, List<RoleInfoView>> entry) {
List<RoleInfoView> views = entry.getValue();
if (views == null || views.isEmpty()) {
return null;
}
RoleInfoView firstView = views.get(0);
List<String> allEditPerms = views.stream()
.map(RoleInfoView::getEditPerms)
.filter(p -> p != null && !p.isEmpty())
.collect(Collectors.toList());
List<String> allQueryPerms = views.stream()
.map(RoleInfoView::getQueryPerms)
.filter(p -> p != null && !p.isEmpty())
.collect(Collectors.toList());
List<String> processedEditPerms = processPermissions(allEditPerms);
List<String> processedQueryPerms = processPermissions(allQueryPerms);
String combinedEditPerms = String.join(",\n", processedEditPerms);
String combinedQueryPerms = String.join(",\n", processedQueryPerms);
firstView.setEditPerms(combinedEditPerms);
firstView.setQueryPerms(combinedQueryPerms);
return firstView;
}
/**
* 用户角色绑定
* 将用户或部门与角色进行绑定
*
* @param userRoleBindingRequest 用户角色绑定请求
* @param request 用户角色绑定请求
*/
@Override
@Transactional
public void userRoleBinding(UserRoleBindingRequest userRoleBindingRequest) {
//将角色绑定的老版本人员置为未启用
String roleId = userRoleBindingRequest.getRoleId();
Integer isDept = userRoleBindingRequest.getIsDept();
if (ObjectUtils.isNotEmpty(roleId)) {
businessDatabase.getBusinessDatabase()
.update("is_enable", 0)
.eq("role_id", roleId)
.eq("is_dep", isDept)
.doUpdate(ModelDepUserRolePojo.class);
}
for (String userOrDeptId : userRoleBindingRequest.getUserOrDeptIds()) {
ModelDepUserRolePojo modelDepUserRolePojo = new ModelDepUserRolePojo();
modelDepUserRolePojo.setRoleId(roleId);
modelDepUserRolePojo.setUserOrDep(userOrDeptId);
modelDepUserRolePojo.setIsEnable(1);
if (isDept != 0 && isDept != 1) {
throw new CommonException("用户定位异常,非用户或部门");
}
modelDepUserRolePojo.setIsDep(isDept);
modelDepUserRolePojo.setCreationDate(new Date());
businessDatabase.getBusinessDatabase()
.doInsert(modelDepUserRolePojo);
}
public void userRoleBinding(UserRoleBindingRequest request) {
// 更新用户
modelRoleService.updateUserRole(request, 0);
// 更新部门
modelRoleService.updateUserRole(request, 1);
}
@ -486,4 +608,274 @@ public class ModelRoleServiceImpl implements ModelRoleService {
}
return index;
}
@Override
public void updateUserRole(UserRoleBindingRequest request, int isDept) {
String roleId = request.getRoleId();
// 获取目前已绑定的id
List<String> userOrDepartRoleIds = new ArrayList<>();
List<ModelDepUserRolePojo> userOrDepartRoles = businessDatabase.getBusinessDatabase()
.eq("is_enable", 1)
.eq("role_id", roleId)
.eq("is_dep", isDept)
.doQuery(ModelDepUserRolePojo.class);
if (!userOrDepartRoles.isEmpty()) {
userOrDepartRoleIds.addAll(userOrDepartRoles.stream().map(ModelDepUserRolePojo::getUserOrDep).collect(Collectors.toList()));
}
// 获取传入的用户id
List<UserRoleBindingItem> userRolesReq = request.getUserOrDept().stream()
.filter(item -> item.getIsDept() == isDept)
.collect(Collectors.toList());
// 找出需要需要禁用和新增的用户id
List<String> userToAdd = new ArrayList<>();
for (UserRoleBindingItem item : userRolesReq) {
if (userOrDepartRoleIds.contains(item.getUserOrDeptId())) {
userOrDepartRoleIds.remove(item.getUserOrDeptId());
} else {
userToAdd.add(item.getUserOrDeptId());
}
}
// 更新用户
if (!userOrDepartRoleIds.isEmpty()) {
businessDatabase.getBusinessDatabase()
.in("user_or_dep", userOrDepartRoleIds)
.eq("is_dep", isDept)
.update("is_enable", 0)
.eq("role_id", roleId)
.doUpdate(ModelDepUserRolePojo.class);
}
// 新增用户
if (!userToAdd.isEmpty()) {
for (String userOrDeptId : userToAdd) {
// 检查当前用户是否已经被禁用
ModelDepUserRolePojo unableUser = businessDatabase.getBusinessDatabase()
.eq("user_or_dep", userOrDeptId)
.eq("is_enable", 0)
.eq("role_id", roleId)
.eq("is_dep", isDept)
.doQueryFirst(ModelDepUserRolePojo.class);
if (unableUser == null) {
ModelDepUserRolePojo modelDepUserRolePojo = new ModelDepUserRolePojo();
modelDepUserRolePojo.setRoleId(roleId);
modelDepUserRolePojo.setUserOrDep(userOrDeptId);
modelDepUserRolePojo.setIsEnable(1);
modelDepUserRolePojo.setIsDep(isDept);
modelDepUserRolePojo.setCreationDate(new Date());
businessDatabase.getBusinessDatabase()
.doInsert(modelDepUserRolePojo);
} else {
businessDatabase.getBusinessDatabase()
.eq("id", unableUser.getId())
.update("is_enable", 1)
.doUpdate(ModelDepUserRolePojo.class);
}
}
}
}
@Override
public void writePreAndRole(HttpServletResponse response) {
String fileName = "系统权限导出_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd_HH-mm-ss"));
try {
String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20");
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + encodedFileName + ".xlsx");
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
PreAndRolePageRequest request = new PreAndRolePageRequest();
List<RoleInfoView> result = modelRoleService.getPerAndRole(request);
EasyExcel.write(response.getOutputStream(), RoleInfoView.class)
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.sheet("系统权限")
.doWrite(result);
} catch (Exception e) {
throw new CommonException("导出Excel失败: " + e.getMessage());
}
}
@Override
public PageResultDTO<RoleInfoView> getPreAndRoleByCondition(PreAndRolePageRequest request) {
List<RoleInfoView> result = modelRoleService.getPerAndRole(request);
PageResultDTO<RoleInfoView> page = new PageResultDTO<>();
if (result.isEmpty()) {
page.setTotalCount(0);
page.setList(new ArrayList<>());
return page;
}
int totalElements = result.size();
int totalPages = (int) Math.ceil((double) totalElements / request.getPageSize());
if (request.getPageNum() > totalPages) {
request.setPageNum(totalPages);
}
int fromIndex = (request.getPageNum() - 1) * request.getPageSize();
int toIndex = Math.min(fromIndex + request.getPageSize(), totalElements);
List<RoleInfoView> finalResult = new ArrayList<>(result.subList(fromIndex, toIndex));
page.setList(finalResult);
page.setTotalCount(result.size());
return page;
}
@Override
public List<RoleInfoView> getPerAndRole(PreAndRolePageRequest request) {
Set<String> deptOrUsers = new HashSet<>();
List<UserDeptItem> userDeparts = new ArrayList<>();
// 按用户名查询
if (!request.getUsername().isEmpty()) {
List<XdapUsers> xdapUsers = businessDatabase.getSystemDatabase()
.like("username", request.getUsername())
.doQuery(XdapUsers.class);
if (!xdapUsers.isEmpty()) {
deptOrUsers.addAll(
xdapUsers.stream().map(XdapUsers::getId).collect(Collectors.toList())
);
xdapUsers.forEach(user -> {
UserDeptItem item = new UserDeptItem();
item.setUsername(user.getUsername());
List<XdapDeptUsers> deptUsers = businessDatabase.getSystemDatabase()
.eq("user_id", user.getId())
.doQuery(XdapDeptUsers.class);
if (!deptUsers.isEmpty()) {
deptOrUsers.addAll(
deptUsers.stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList())
);
item.setDepartmentIds(deptUsers.stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList()));
}
userDeparts.add(item);
});
}
}
// 按部门名查询
if (!request.getDepartment().isEmpty()) {
List<XdapDepartments> xdapDepartments = businessDatabase.getSystemDatabase()
.like("name", request.getDepartment())
.doQuery(XdapDepartments.class);
if (!xdapDepartments.isEmpty()) {
deptOrUsers.addAll(
xdapDepartments.stream().map(XdapDepartments::getId).collect(Collectors.toSet())
);
}
}
// 查询所有用户的角色和权限
List<RoleAndPreView> roleAndPreViews = new ArrayList<>();
MpaasQuery query = businessDatabase.getBusinessDatabase()
.viewQueryMode(true)
.view("selectRoleAndPerInfo")
.like("role_name", request.getRoleName());
// 根据部门名和用户名查角色
if (!deptOrUsers.isEmpty()) {
query.in("userOrDep", deptOrUsers);
roleAndPreViews.addAll(
query.doQuery(RoleAndPreView.class)
);
} else {
if (request.getUsername().isEmpty() && request.getDepartment().isEmpty()) {
roleAndPreViews.addAll(
query.doQuery(RoleAndPreView.class)
);
}
}
// 查询用户和部门并构建临时返回
List<RoleInfoView> resultTemp = new ArrayList<>();
roleAndPreViews.forEach(roleAndPreView -> {
RoleInfoView view = new RoleInfoView();
if (roleAndPreView.getIsDep() == 0) {
XdapUsers user = businessDatabase.getSystemDatabase()
.eq("id", roleAndPreView.getUserOrDep())
.doQueryFirst(XdapUsers.class);
if (user == null) {
view.setUsername("未知用户-" + roleAndPreView.getUserOrDep());
} else {
view.setUsername(user.getUsername());
view.setUserNumber(user.getUserNumber());
view.setUserId(user.getId());
}
} else if (roleAndPreView.getIsDep() == 1) {
XdapDepartments department = businessDatabase.getSystemDatabase()
.eq("id", roleAndPreView.getUserOrDep())
.doQueryFirst(XdapDepartments.class);
if (department == null) {
view.setDepartment("未知部门-" + roleAndPreView.getUserOrDep());
} else {
view.setDepartment(department.getName());
view.setDepartmentId(department.getId());
if (!userDeparts.isEmpty()) {
String usernames = userDeparts.stream()
.filter(userDepart -> userDepart.getDepartmentIds() != null)
.filter(userDepart -> userDepart.getDepartmentIds().contains(department.getId()))
.map(UserDeptItem::getUsername)
.collect(Collectors.joining(""));
view.setUsername(usernames);
}
}
}
view.setRoleId(roleAndPreView.getRoleId());
view.setRoleName(roleAndPreView.getRoleName());
view.setRoleDescription(roleAndPreView.getRoleDescription());
if (roleAndPreView.getParameterPer() != null) {
if (roleAndPreView.getParameterPer() == 1) {
view.setQueryPerms(roleAndPreView.getPermissionPath());
} else if (roleAndPreView.getParameterPer() == 2) {
view.setEditPerms(roleAndPreView.getPermissionPath());
}
}
resultTemp.add(view);
});
// 构建聚合返回
List<RoleInfoView> result = new ArrayList<>();
Map<String, List<RoleInfoView>> userGroup = resultTemp.stream()
.filter(item ->
item.getUserId() != null && !item.getUserId().isEmpty())
.collect(Collectors.groupingBy(item -> item.getRoleId() + "_" + item.getUserId()));
Map<String, List<RoleInfoView>> deptGroup = resultTemp.stream()
.filter(item ->
item.getDepartmentId() != null && !item.getDepartmentId().isEmpty())
.collect(Collectors.groupingBy(item -> item.getRoleId() + "_" + item.getDepartmentId()));
for (Map.Entry<String, List<RoleInfoView>> entry : userGroup.entrySet()) {
RoleInfoView view = getRoleInfoView(entry);
result.add(view);
}
for (Map.Entry<String, List<RoleInfoView>> entry : deptGroup.entrySet()) {
RoleInfoView view = getRoleInfoView(entry);
result.add(view);
}
if (result.isEmpty()) {
return new ArrayList<>();
}
result.forEach(item -> {
if (Objects.equals(item.getRoleName(), "超级管理员")) {
item.setEditPerms("全部权限");
item.setQueryPerms("全部权限");
}
});
result.sort(Comparator.comparing(RoleInfoView::getRoleName, Collator.getInstance(Locale.CHINESE)));
return result;
}
}

View File

@ -87,8 +87,11 @@ public class ParameterServiceImpl implements ParameterService {
public TemplateInfoView maintenanceParameters(UpdateParameterForm form) {
// 公式格式检查
for (ParameterForm parameter : form.getParameterForms()) {
if (parameter.getOperation() == null || parameter.getOperation().isEmpty()) {
continue;
}
if ("数据平台手工录入".equals(parameter.getParameterSource()) && parameter.getDepartment() == null) {
if ("数据平台手工录入".equals(parameter.getParameterSource()) && (parameter.getDepartment() == null || parameter.getDepartment().isEmpty())) {
throw new CommonException(String.format("参数'%s'部门不能为空", parameter.getParameterName()));
}
if (parameter.getPartsName() == null || parameter.getPartsName().isEmpty()) {

View File

@ -217,8 +217,9 @@ public class XdapDeptUsersServiceImpl implements XdapDeptUsersService {
if (depts.isEmpty() || commonDept == null) {
return userInfoView;
}
List<String> deptIds = depts.stream().map(XdapDeptUsers::getDepartmentId).collect(Collectors.toList());
List<XdapDepartments> xdapDepartments = bd.getSystemDatabase()
.in("id", depts)
.in("id", deptIds)
.eq("parent_id", commonDept.getId())
.doQuery(XdapDepartments.class);
if (xdapDepartments.isEmpty()) {