diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java new file mode 100644 index 00000000..5bb3e70b --- /dev/null +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/constant/RecordConstants.java @@ -0,0 +1,35 @@ +package com.zt.plat.module.qms.resource.record.constant; + +/** + * 档案记录常量 + */ +public class RecordConstants { + + /** + * 权限目标类型 + */ + public static class TargetType { + /** key */ + public static final String TARGET_KEY = "文件记录授权类型"; + /** 用户 */ + public static final String USER = "用户"; + /** 角色 */ + public static final String ROLE = "角色"; + /** 部门 */ + public static final String DEPT = "部门"; + } + + /** + * 权限类型 + */ + public static class PermissionType { + /** key */ + public static final String PERMISSION_KEY = "file_record_permission type"; + /** 管理员 */ + public static final String ADMIN = "管理员"; + /** 查看 */ + public static final String VIEW = "可查看"; + /** 编辑 */ + public static final String EDIT = "可编辑"; + } +} diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordcategory/RecordCategoryController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordcategory/RecordCategoryController.java index ce50f900..6b61ed3f 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordcategory/RecordCategoryController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordcategory/RecordCategoryController.java @@ -62,6 +62,16 @@ public class RecordCategoryController extends AbstractFileUploadController imple @Operation(summary = "创建文件记录分类") //@PreAuthorize("@ss.hasPermission('qms:record-category:create')") public CommonResult createRecordCategory(@Valid @RequestBody RecordCategorySaveReqVO createReqVO) { + createReqVO.setParentId(0L); + createReqVO.setSortNo(1); + return success(recordCategoryService.createRecordCategory(createReqVO)); + } + + // 返回实体对象本身 + @PostMapping("/create-temp-data") + @Operation(summary = "创建文件记录分类临时数据") + public CommonResult createRecordTempCategory(@RequestBody RecordCategorySaveReqVO createReqVO) { +// RecordCategorySaveReqVO recordCategoryRespVO = new RecordCategorySaveReqVO(); return success(recordCategoryService.createRecordCategory(createReqVO)); } diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/RecordPermissionController.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/RecordPermissionController.java index 2364bf8e..fadd52f2 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/RecordPermissionController.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/RecordPermissionController.java @@ -38,7 +38,7 @@ import com.zt.plat.module.qms.resource.record.service.recordpermission.RecordPer @Tag(name = "管理后台 - 记录权限") @RestController -@RequestMapping("/qms/record-permission") +@RequestMapping("/qms/resource/record-permission") @Validated @DeptDataPermissionIgnore(enable = "true") @FileUploadController(source = "qms.recordpermission") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionPageReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionPageReqVO.java index daec89ff..3f44cfd5 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionPageReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionPageReqVO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.record.controller.admin.recordpermission.vo; +import com.alibaba.excel.annotation.ExcelProperty; import lombok.*; import java.util.*; import io.swagger.v3.oas.annotations.media.Schema; @@ -19,6 +20,9 @@ public class RecordPermissionPageReqVO extends PageParam { @Schema(description = "记录类型", example = "1") private String sourceType; + @Schema(description = "记录分类ID", example = "1") + private Long categoryId; + @Schema(description = "记录id", example = "1104") private Long sourceId; @@ -28,6 +32,9 @@ public class RecordPermissionPageReqVO extends PageParam { @Schema(description = "授权对象", example = "9264") private String targetId; + @Schema(description = "授权对象名称", example = "普通角色") + private String targetName; + @Schema(description = "权限类型") private String permission; diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionRespVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionRespVO.java index 38cfed03..c6441d8a 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionRespVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionRespVO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.record.controller.admin.recordpermission.vo; +import com.zt.plat.module.qms.core.aspect.annotation.Dict; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -24,6 +25,10 @@ public class RecordPermissionRespVO { @ExcelProperty("记录类型") private String sourceType; + @Schema(description = "记录分类ID", example = "1") + @ExcelProperty("记录分类ID") + private Long categoryId; + @Schema(description = "记录id", example = "1104") @ExcelProperty("记录id") private Long sourceId; @@ -36,8 +41,13 @@ public class RecordPermissionRespVO { @ExcelProperty("授权对象") private String targetId; + @Schema(description = "授权对象名称", example = "普通角色") + @ExcelProperty("授权对象名称") + private String targetName; + @Schema(description = "权限类型") @ExcelProperty("权限类型") + @Dict(dicCode = "file_record_permission type") private String permission; @Schema(description = "密级") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionSaveReqVO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionSaveReqVO.java index 1219ead4..72f3b8fb 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionSaveReqVO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/controller/admin/recordpermission/vo/RecordPermissionSaveReqVO.java @@ -1,5 +1,6 @@ package com.zt.plat.module.qms.resource.record.controller.admin.recordpermission.vo; +import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; @@ -20,16 +21,25 @@ public class RecordPermissionSaveReqVO { @Schema(description = "记录类型", example = "1") private String sourceType; + @Schema(description = "记录分类ID", example = "1") + private Long categoryId; + @Schema(description = "记录id", example = "1104") private Long sourceId; @Schema(description = "授权类型", example = "1") + @NotEmpty(message = "授权类型不能为空") private String targetType; @Schema(description = "授权对象", example = "9264") + @NotEmpty(message = "授权对象不能为空") private String targetId; + @Schema(description = "授权对象名称", example = "普通角色") + private String targetName; + @Schema(description = "权限类型") + @NotEmpty(message = "权限类型不能为空") private String permission; @Schema(description = "密级") diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dao/recordpermission/RecordPermissionMapper.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dao/recordpermission/RecordPermissionMapper.java index aa3bcd4f..4dc8b6e1 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dao/recordpermission/RecordPermissionMapper.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dao/recordpermission/RecordPermissionMapper.java @@ -18,6 +18,7 @@ public interface RecordPermissionMapper extends BaseMapperX default PageResult selectPage(RecordPermissionPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(RecordPermissionDO::getParentId, reqVO.getParentId()) + .eqIfPresent(RecordPermissionDO::getCategoryId, reqVO.getCategoryId()) .eqIfPresent(RecordPermissionDO::getSourceType, reqVO.getSourceType()) .eqIfPresent(RecordPermissionDO::getSourceId, reqVO.getSourceId()) .eqIfPresent(RecordPermissionDO::getTargetType, reqVO.getTargetType()) diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordpermission/RecordPermissionDO.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordpermission/RecordPermissionDO.java index a966a7c4..56c00405 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordpermission/RecordPermissionDO.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/dal/dataobject/recordpermission/RecordPermissionDO.java @@ -1,5 +1,7 @@ package com.zt.plat.module.qms.resource.record.dal.dataobject.recordpermission; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.util.*; import java.time.LocalDateTime; @@ -42,6 +44,11 @@ public class RecordPermissionDO extends BusinessBaseDO { */ @TableField("SRC_TP") private String sourceType; + /** + * 记录分类ID + */ + @TableField("CTGR_ID") + private Long categoryId; /** * 记录id */ @@ -57,6 +64,11 @@ public class RecordPermissionDO extends BusinessBaseDO { */ @TableField("TGT_ID") private String targetId; + /** + * 授权对象 + */ + @TableField("TGT_NAME") + private String targetName; /** * 权限类型 */ diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordcategory/RecordCategoryServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordcategory/RecordCategoryServiceImpl.java index f547cc57..9f5a467e 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordcategory/RecordCategoryServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordcategory/RecordCategoryServiceImpl.java @@ -2,17 +2,28 @@ package com.zt.plat.module.qms.resource.record.service.recordcategory; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.pojo.PageResult; import com.zt.plat.framework.common.util.object.BeanUtils; -import com.zt.plat.module.qms.resource.device.dal.dataobject.DeviceProductDO; +import com.zt.plat.framework.security.core.LoginUser; +import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; +import com.zt.plat.module.qms.common.dic.dal.dataobject.DictionaryBusinessDO; +import com.zt.plat.module.qms.common.dic.service.DictionaryBusinessService; +import com.zt.plat.module.qms.resource.record.constant.RecordConstants; import com.zt.plat.module.qms.resource.record.controller.admin.recordcategory.vo.RecordCategoryPageReqVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordcategory.vo.RecordCategoryRespVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordcategory.vo.RecordCategorySaveReqVO; import com.zt.plat.module.qms.resource.record.dal.dao.recordcategory.RecordCategoryMapper; import com.zt.plat.module.qms.resource.record.dal.dataobject.recordcategory.RecordCategoryDO; +import com.zt.plat.module.qms.resource.record.dal.dataobject.recordpermission.RecordPermissionDO; +import com.zt.plat.module.qms.resource.record.service.recordpermission.RecordPermissionService; +import com.zt.plat.module.system.api.dept.DeptApi; +import com.zt.plat.module.system.api.dept.dto.DeptRespDTO; +import com.zt.plat.module.system.api.permission.PermissionApi; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; @@ -20,6 +31,8 @@ import org.springframework.validation.annotation.Validated; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; import static com.zt.plat.framework.common.exception.util.ServiceExceptionUtil.exception; import static com.zt.plat.module.qms.enums.ErrorCodeConstants.RECORD_CATEGORY_NOT_EXISTS; @@ -35,11 +48,24 @@ import static com.zt.plat.module.qms.enums.ErrorCodeConstants.RECORD_FILE_EXISTS @Validated public class RecordCategoryServiceImpl implements RecordCategoryService { - private int id_path_update_level_limit = 7; @Resource private RecordCategoryMapper recordCategoryMapper; + @Resource + private PermissionApi permissionApi; + + @Resource + private RecordPermissionService recordPermissionService; + + @Resource + private DeptApi deptApi; + + @Autowired + private DictionaryBusinessService dictionaryBusinessService; // 字典服务 + + private List dictionaryBusinessDOS = new ArrayList<>(); + @Transactional(rollbackFor = Exception.class) @Override public RecordCategoryRespVO createRecordCategory(RecordCategorySaveReqVO createReqVO) { @@ -71,19 +97,23 @@ public class RecordCategoryServiceImpl implements RecordCategoryService { @Override public void updateRecordCategory(RecordCategorySaveReqVO updateReqVO) { // 校验存在 - validateRecordCategoryExists(updateReqVO.getId()); + RecordCategoryDO recordCategoryDO = validateRecordCategoryExists(updateReqVO.getId()); - Long parentId1 = updateReqVO.getParentId(); - if (parentId1 == null || parentId1 == 0L) throw exception(RECORD_CATEGORY_NOT_EXISTS); + // 子节点不能变成根节点 + Long parentId1 = recordCategoryDO.getParentId(); + if (parentId1 != null && parentId1 != 0L) { + if (updateReqVO.getParentId() != null && updateReqVO.getParentId() == 0L) + throw exception(RECORD_CATEGORY_NOT_EXISTS); + } // 获取更新前的旧数据 RecordCategoryDO oldObj = recordCategoryMapper.selectById(updateReqVO.getId()); String oldIdPath = oldObj.getIdPath(); - + // 更新 RecordCategoryDO updateObj = BeanUtils.toBean(updateReqVO, RecordCategoryDO.class); Long parentId = updateObj.getParentId(); - + // 构建新的idPath if (parentId == null || parentId == 0L) { // 父节点为null或0,则变成根节点 @@ -101,17 +131,17 @@ public class RecordCategoryServiceImpl implements RecordCategoryService { updateObj.setIdPath(parentCategory.getIdPath() + updateObj.getId() + "/"); } } - + // 更新当前数据 recordCategoryMapper.updateById(updateObj); - + // 更新当前数据的子节点 String currentNodePattern = "/" + updateObj.getId() + "/"; LambdaQueryWrapper query = new LambdaQueryWrapper<>(); query.like(RecordCategoryDO::getIdPath, "%" + currentNodePattern + "%"); query.ne(RecordCategoryDO::getId, updateObj.getId()); // 排除当前节点本身 List childList = recordCategoryMapper.selectList(query); - + if (!childList.isEmpty()) { List recordCategoryList = new ArrayList<>(); for (RecordCategoryDO childCategory : childList) { @@ -130,35 +160,6 @@ public class RecordCategoryServiceImpl implements RecordCategoryService { } } - public RecordCategoryDO getDeviceProduct(Long id) { - return recordCategoryMapper.selectById(id); - } - - public List listByParId(Long parId) { - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.eq(RecordCategoryDO::getParentId, parId); - query.orderByAsc(RecordCategoryDO::getSortNo); - return recordCategoryMapper.selectList(query); - } - - public CommonResult updateAllIdPath(Long parentId, Integer level) { - if (level > id_path_update_level_limit) - return CommonResult.success("更新完成(超出层数限制:" + id_path_update_level_limit + ")"); - List list = listByParId(parentId); - RecordCategoryDO parEntity = this.getDeviceProduct(parentId); - if (list.isEmpty()) - return CommonResult.success(""); - String parIdPath = "/0/"; - if (parEntity != null) - parIdPath = parEntity.getIdPath(); - for (RecordCategoryDO entity : list) { - entity.setIdPath(parIdPath + "/" + entity.getId() + "/"); - recordCategoryMapper.updateById(entity); - updateAllIdPath(entity.getId(), level + 1); - } - return CommonResult.success(""); - } - @Transactional(rollbackFor = Exception.class) @Override public void deleteRecordCategory(Long id) { @@ -201,10 +202,12 @@ public class RecordCategoryServiceImpl implements RecordCategoryService { } } - private void validateRecordCategoryExists(Long id) { - if (recordCategoryMapper.selectById(id) == null) { + private RecordCategoryDO validateRecordCategoryExists(Long id) { + RecordCategoryDO recordCategoryDO = recordCategoryMapper.selectById(id); + if (recordCategoryDO == null) { throw exception(RECORD_CATEGORY_NOT_EXISTS); } + return recordCategoryDO; } @Override @@ -217,16 +220,142 @@ public class RecordCategoryServiceImpl implements RecordCategoryService { return recordCategoryMapper.selectPage(pageReqVO); } + // 通过字典的key 获取对应的value值 + public String getDictValueByKey(List businessDOList, String targetKey) { + return businessDOList.stream() + .filter(item -> item.getKey().equals(targetKey)) + .findFirst() + .map(DictionaryBusinessDO::getValue) + .orElse(null); + } + + // 查询字典列表,通过key + public List selectDictByKey(String targetKey) { + return dictionaryBusinessDOS = dictionaryBusinessService.queryDictItemsByKey(targetKey); + } + @Override public List getRecordCategoryTree(RecordCategoryPageReqVO pageReqVO) { + // 判断权限 + //当前登录用户 + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + Long userId = loginUser.getId(); + //当前登录用户昵称 + Long currentDeptId = loginUser.getVisitDeptId(); + String currentDeptName = loginUser.getVisitDeptName(); + + Long tenantId = loginUser.getTenantId(); + + // 查询满足条件(1)的所以文件记录分类 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(RecordCategoryDO::getDeleted, 0);// 没有删除的数据 + queryWrapper.eq(RecordCategoryDO::getTenantId, tenantId); + queryWrapper.orderByAsc(RecordCategoryDO::getSortNo); // 升序 + String name = pageReqVO.getName(); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - if (!ObjectUtils.isEmpty(name)) { - queryWrapper.eq(RecordCategoryDO::getName, name); - queryWrapper.eq(RecordCategoryDO::getDeleted, 0); - queryWrapper.orderByAsc(RecordCategoryDO::getSortNo); // 升序 + if (!ObjectUtils.isEmpty(name)) queryWrapper.eq(RecordCategoryDO::getName, name); + + // 授权对象 + selectDictByKey(RecordConstants.TargetType.TARGET_KEY); + // 通过key 获取字典的值 + String targetUser = getDictValueByKey(dictionaryBusinessDOS, RecordConstants.TargetType.USER);// 用户权限 +// String targetDept = getDictValueByKey(dictionaryBusinessDOS, RecordConstants.TargetType.DEPT);// 部门权限 +// String targetRole = getDictValueByKey(dictionaryBusinessDOS, RecordConstants.TargetType.ROLE);// 部门权限 +// log.info( +// "当前登录用户ID: {}, 当前登录用户所在部门ID: {}, 当前登录用户所在部门名称: {}, 用户权限targetKey: {}, 用户权限targetValue: {}, 部门权限targetKey: {}, 部门权限targetValue: {}, 角色权限targetKey: {}, 角色权限targetValue: {}", +// userId, currentDeptId, currentDeptName, RecordConstants.TargetType.USER, targetUser, RecordConstants.TargetType.DEPT, targetDept, RecordConstants.TargetType.ROLE, targetRole +// ); + + // 管理权限 + List businessDOList = dictionaryBusinessService.queryDictItemsByKey(RecordConstants.PermissionType.PERMISSION_KEY); + String permissionAdmin = getDictValueByKey(businessDOList, RecordConstants.PermissionType.ADMIN);// 管理员权限 + + // 首先判断当前账户是不是管理员,如果是管理员,则直接查询所有数据返回 + RecordPermissionDO recordPermissionDO = new RecordPermissionDO(); + recordPermissionDO.setTargetType(targetUser); + recordPermissionDO.setTargetId(userId.toString()); + recordPermissionDO.setTenantId(tenantId); + recordPermissionDO.setPermission(permissionAdmin); + RecordPermissionDO permission = recordPermissionService.selectRecordPermission(recordPermissionDO); + if (!ObjectUtils.isEmpty(permission)) { + return recordCategoryMapper.selectList(queryWrapper); } - return recordCategoryMapper.selectList(queryWrapper); + + //通过DeptApi获取完整部门信息(包括父部门) + CommonResult deptResult = deptApi.getDept(currentDeptId); + DeptRespDTO currentDept = deptResult.getData(); + Long parentDeptId = currentDept.getParentId(); // 获取父部门ID + + // 如果需要递归获取所有父部门 + List parentDepts = new ArrayList<>(); + // 添加当前部门到父部门列表中 + parentDepts.add(currentDept); + Long tempParentId = parentDeptId; + while (tempParentId != null && tempParentId != 0) { + CommonResult parentResult = deptApi.getDept(tempParentId); + DeptRespDTO parentDept = parentResult.getData(); + parentDepts.add(parentDept); + tempParentId = parentDept.getParentId(); + } +// log.info( +// "当前登录用户ID: {}, 当前登录用户所在部门ID: {}, 当前登录用户所在部门名称: {}, 父部门ID: {}, 父部门列表: {}", +// userId, currentDeptId, currentDeptName, parentDeptId, parentDepts +// ); + + List recordCategoryDOS = new ArrayList<>(); + + // 获取所有权限数据,判断当前登录用户是否在授权范围内 + List recordPermissionDOS = recordPermissionService.selectAllList(); +// log.info( +// "权限记录列表数据:{}", +// recordPermissionDOS +// ); + List allPermissionList = getAllPermissionList(recordPermissionDOS, userId, parentDepts); +// log.info( +// "满足条件的权限数据列表:{}", +// allPermissionList +// ); + if (!ObjectUtils.isEmpty(allPermissionList)) { + // 查询满足条件的所以文件记录分类 + List categoryIds = allPermissionList.stream().map(RecordPermissionDO::getCategoryId).toList(); + if (!ObjectUtils.isEmpty(name)) queryWrapper.eq(RecordCategoryDO::getName, name); + queryWrapper.in(RecordCategoryDO::getId, categoryIds); + recordCategoryDOS = recordCategoryMapper.selectList(queryWrapper); + } + + return recordCategoryDOS; + } + + public List getAllPermissionList(List recordPermissionDOS, Long userId, List parentDepts) { + String targetUser = getDictValueByKey(dictionaryBusinessDOS, RecordConstants.TargetType.USER);// 用户权限 + String targetDept = getDictValueByKey(dictionaryBusinessDOS, RecordConstants.TargetType.DEPT);// 部门权限 + String targetRole = getDictValueByKey(dictionaryBusinessDOS, RecordConstants.TargetType.ROLE);// 部门权限 + List permissionDOList = new ArrayList<>(); + if (!ObjectUtils.isEmpty(recordPermissionDOS)) { + // 判断授权类型 + recordPermissionDOS.forEach(item -> { + // 1.用户 + if (item.getTargetType().equals(targetUser) && item.getTargetId().equals(userId.toString())) { + permissionDOList.add(item); + } + // 2.部门 --> 需要判断当前登录用户所在部门和父部门是否在授权范围内 + if (item.getTargetType().equals(targetDept)) { + parentDepts.forEach(it->{ +// log.info("部门:{},", it); + if (item.getTargetId().equals(it.getId().toString())) permissionDOList.add(item); + }); + } + // 3.角色 --> 需要查询当前登录用户的角色列表,判断是否在授权范围内 + if (item.getTargetType().equals(targetRole)) { + CommonResult> roleResult = permissionApi.getUserRoleIdListByUserId(userId); + Set roleIds = roleResult.getData(); + roleIds.forEach(roleId -> { + if (item.getTargetId().equals(roleId.toString())) permissionDOList.add(item); + }); + } + }); + } + return permissionDOList; } } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java index fb4da786..baa41abe 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionService.java @@ -61,4 +61,7 @@ public interface RecordPermissionService { */ PageResult getRecordPermissionPage(RecordPermissionPageReqVO pageReqVO); + List selectAllList(); + + RecordPermissionDO selectRecordPermission(RecordPermissionDO recordPermissionDO); } \ No newline at end of file diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java index 1f9cc37a..bbf8886b 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordpermission/RecordPermissionServiceImpl.java @@ -1,9 +1,14 @@ package com.zt.plat.module.qms.resource.record.service.recordpermission; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.zt.plat.framework.security.core.LoginUser; +import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils; import com.zt.plat.module.qms.resource.record.controller.admin.recordpermission.vo.RecordPermissionPageReqVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordpermission.vo.RecordPermissionRespVO; import com.zt.plat.module.qms.resource.record.controller.admin.recordpermission.vo.RecordPermissionSaveReqVO; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import jakarta.annotation.Resource; import org.springframework.validation.annotation.Validated; @@ -25,6 +30,7 @@ import static com.zt.plat.module.qms.enums.ErrorCodeConstants.*; * * @author 后台管理 */ +@Slf4j @Service @Validated public class RecordPermissionServiceImpl implements RecordPermissionService { @@ -32,6 +38,27 @@ public class RecordPermissionServiceImpl implements RecordPermissionService { @Resource private RecordPermissionMapper recordPermissionMapper; + + // 查询所有记录权限列表 + @Override + public List selectAllList() { + LoginUser loginUser = SecurityFrameworkUtils.getLoginUser(); + Long tenantId = loginUser.getTenantId();// 租户ID + return recordPermissionMapper.selectList(RecordPermissionDO::getTenantId, tenantId); + } + + // 查询管理员-- 单条数据 + @Override + public RecordPermissionDO selectRecordPermission(RecordPermissionDO recordPermissionDO) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery(); + queryWrapper.eq(RecordPermissionDO::getDeleted, false) + .eq(RecordPermissionDO::getTenantId, recordPermissionDO.getTenantId())// 租户ID + .eq(RecordPermissionDO::getTargetId, recordPermissionDO.getTargetId()) + .eq(RecordPermissionDO::getTargetType, recordPermissionDO.getTargetType()) + .eq(RecordPermissionDO::getPermission, recordPermissionDO.getPermission()); + return recordPermissionMapper.selectOne(queryWrapper); + } + @Override public RecordPermissionRespVO createRecordPermission(RecordPermissionSaveReqVO createReqVO) { // 插入 diff --git a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java index f151721c..31099426 100644 --- a/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java +++ b/zt-module-qms/zt-module-qms-server/src/main/java/com/zt/plat/module/qms/resource/record/service/recordrecord/RecordRecordServiceImpl.java @@ -53,18 +53,10 @@ public class RecordRecordServiceImpl implements RecordRecordService { private BusinessFileService businessFileService; // 验证分类ID 是否存在 - private void validateRecordCategoryIdExists(Long categoryId) { + private RecordCategoryDO validateRecordCategoryIdExists(Long categoryId) { RecordCategoryDO recordCategoryDO = recordCategoryMapper.selectById(categoryId); if (ObjectUtils.isEmpty(recordCategoryDO)) throw exception(RCD_CTGR_NOT_EXISTS); - } - - //处理附件参数 - private void handleFileParam(RecordRecordSaveReqVO reqVO){ - List files = reqVO.getFiles(); - if (files == null || files.isEmpty()) - return; - UploadFileVo uploadFileVo = files.get(0); -// reqVO.setSourceUrl(uploadFileVo.getUrl()); + else return recordCategoryDO; } @Override @@ -74,9 +66,11 @@ public class RecordRecordServiceImpl implements RecordRecordService { RecordRecordDO recordRecord = BeanUtils.toBean(createReqVO, RecordRecordDO.class); // 判断文件记录分类ID 是否存在 Long categoryId = recordRecord.getCategoryId(); - validateRecordCategoryIdExists(categoryId); + RecordCategoryDO recordCategoryDO = validateRecordCategoryIdExists(categoryId); + // 判断父级是否为根节点,是 --> 不允许创建记录明细 + Long parentId = recordCategoryDO.getParentId(); + if (parentId != null && parentId == 0) throw new RuntimeException("根节点不允许直接添加文件记录信息!"); recordRecord.setCurrentFlag(1);// 是否新版本 - handleFileParam(createReqVO); try { recordRecordMapper.insert(recordRecord); recordRecord.setMainId(recordRecord.getId()); @@ -92,7 +86,7 @@ public class RecordRecordServiceImpl implements RecordRecordService { RecordRecordDO recordRecordDO = BeanUtils.toBean(createReqVO, RecordRecordDO.class); recordRecordDO.setCurrentFlag(0); try { - LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); + LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(); lambdaQueryWrapper.eq(RecordRecordDO::getMainId,recordRecordDO.getMainId()); // 所以main_id 和 current_flag = 1 的数据 lambdaQueryWrapper.eq(RecordRecordDO::getCurrentFlag,1); // 0,旧版本 recordRecordMapper.update(recordRecordDO,lambdaQueryWrapper); @@ -115,7 +109,6 @@ public class RecordRecordServiceImpl implements RecordRecordService { public RecordRecordRespVO updateRecordRecord(RecordRecordSaveReqVO updateReqVO) { // 校验存在 validateRecordRecordExists(updateReqVO.getId()); - handleFileParam(updateReqVO); RecordRecordDO updateObj = BeanUtils.toBean(updateReqVO, RecordRecordDO.class); String newVersion = updateObj.getNewVersion();// 新版本 if (ObjectUtils.isEmpty(newVersion)) { // 不是新版本,直接更新 @@ -208,12 +201,6 @@ public class RecordRecordServiceImpl implements RecordRecordService { return recordRecordMapper.selectPage(pageReqVO, wrapper); } -// @Override -// public PageResult getRecordListByCategoryId(Long categoryId) { -// RecordRecordPageReqVO recordPageReqVO = new RecordRecordPageReqVO(); -// recordPageReqVO.setCategoryId(categoryId); -// return recordRecordMapper.selectPage(recordPageReqVO); -// } // 查询历史分页 @Override