优化,分页查询状态由后端提供

release_1.0.0
liu 10 months ago
parent 4a874e3191
commit 4a4ae22e18

@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.knowsub.domain.UserInfo;
import com.supervision.knowsub.dto.base.UserBaseOperateAuthDTO;
import com.supervision.knowsub.entity.vo.knowledge.*;
import com.supervision.knowsub.enums.FlowTypeEnum;
import com.supervision.knowsub.enums.StatusEnum;
@ -15,6 +16,7 @@ import com.supervision.knowsub.util.UserUtil;
import com.supervision.knowsub.vo.knowledge.KnowledgePageResVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -78,10 +80,62 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
node.setPublishDeptName(deptMap.getOrDefault(knowledge.getPublishDeptId(), "未知部门"));
return node;
}).toList();
// 进行只是的标记操作
markKnowledgeOperationFlag(list, status);
knowledgeIPage.setRecords(list);
return knowledgeIPage;
}
/**
*
*/
private void markKnowledgeOperationFlag(List<KnowledgePageResVO> list, Integer status) {
// 获取用户所有子库的操作权限
UserInfo user = UserUtil.getUser();
List<UserBaseOperateAuthDTO> baseOperateAuthDTOList = systemBaseService.queryUserBaseOperateAuth(user.getId());
Map<String, Set<Integer>> baseOperateAuthMap = baseOperateAuthDTOList.stream()
.collect(Collectors.groupingBy(UserBaseOperateAuthDTO::getBaseId, Collectors.mapping(UserBaseOperateAuthDTO::getFlowType, Collectors.toSet())));
// 首先需要看用户对这个子库的权限是什么,如果用户有该子库的对应的操作权限,则允许进行对应操作
for (KnowledgePageResVO knowledgePageResVO : list) {
String baseId = knowledgePageResVO.getBaseId();
if (ObjectUtils.isEmpty(status)) {
// 如果为空,查询是否具有撤回权限
if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.RECALL.getFlowType())) {
knowledgePageResVO.setRecallFlag(1);
}
} else if (StatusEnum.DRAFT.getStatus().equals(status)) {
// 如果是草稿,就只允许编辑和删除
knowledgePageResVO.setModifyFlag(1);
knowledgePageResVO.setDeleteFlag(1);
} else if (StatusEnum.PASS.getStatus().equals(status)) {
// 如果是已发布,就只允许撤回.需要有该子库权限
if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.RECALL.getFlowType())) {
knowledgePageResVO.setRecallFlag(1);
}
} else if (StatusEnum.REJECT.getStatus().equals(status)) {
// 如果是驳回,就可以支持编辑和删除,但是需要校验是否需要有权限
if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.SUBMIT.getFlowType())) {
knowledgePageResVO.setModifyFlag(1);
}
if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.DELETE.getFlowType())) {
knowledgePageResVO.setDeleteFlag(1);
}
} else if (StatusEnum.INVALID.getStatus().equals(status)) {
// 如果是已失效,支持编辑撤回删除,但是需要校验是否有对应的权限
if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.SUBMIT.getFlowType())) {
knowledgePageResVO.setModifyFlag(1);
}
if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.RECALL.getFlowType())) {
knowledgePageResVO.setRecallFlag(1);
}
if (baseOperateAuthMap.containsKey(baseId) && baseOperateAuthMap.get(baseId).contains(FlowTypeEnum.DELETE.getFlowType())) {
knowledgePageResVO.setDeleteFlag(1);
}
}
// 其他状态就全部置灰
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void saveKnowledge(SaveKnowledgeReqVO reqVO) {
@ -138,6 +192,8 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
// 这里需要走流程
UserInfo user = UserUtil.getUser();
knowledgeFlowService.submitFlowProcess(knowledge, FlowTypeEnum.SUBMIT, user.getId(), user.getDeptId(), reqVO.getRemark());
// 如果提交了审批,就把草稿所属人置为空
knowledgeService.lambdaUpdate().set(Knowledge::getDraftBelongUserId, null).eq(Knowledge::getId, knowledge.getId()).update();
}
@ -202,6 +258,8 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
if (1 != reqVO.getOperate()) {
UserInfo user = UserUtil.getUser();
knowledgeFlowService.submitFlowProcess(knowledge, FlowTypeEnum.SUBMIT, user.getId(), user.getDeptId(), reqVO.getRemark());
// 如果提交了审批,就把草稿所属人置为空
knowledgeService.lambdaUpdate().set(Knowledge::getDraftBelongUserId, null).eq(Knowledge::getId, knowledge.getId()).update();
}
}
@ -305,8 +363,9 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
knowledgeAttachmentService.lambdaUpdate().eq(KnowledgeAttachment::getKnowledgeId, knowledgeId).remove();
} else {
// 如果有过审批记录,则直接修改状态为逻辑删除
knowledge.setStatus(StatusEnum.DELETE.getStatus());
knowledgeService.updateById(knowledge);
knowledgeService.lambdaUpdate().set(Knowledge::getStatus, StatusEnum.DELETE.getStatus())
.set(Knowledge::getDraftBelongUserId, null)
.eq(Knowledge::getId, knowledge.getId()).update();
}
} else if (canDeleteStatusSet.contains(knowledge.getStatus())) {
// 这时需要走审批流程进行删除

@ -0,0 +1,11 @@
package com.supervision.knowsub.dto.base;
import lombok.Data;
@Data
public class UserBaseOperateAuthDTO {
private String baseId;
private Integer flowType;
}

@ -2,12 +2,15 @@ package com.supervision.knowsub.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.supervision.knowsub.dto.base.UserBaseOperateAuthDTO;
import com.supervision.knowsub.model.SystemBase;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.supervision.knowsub.vo.sublibrary.SubLibraryReqVo;
import com.supervision.knowsub.vo.sublibrary.SubLibraryResVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Administrator
* @description ks_system_base()Mapper
@ -24,6 +27,8 @@ public interface SystemBaseMapper extends BaseMapper<SystemBase> {
* @return
*/
IPage<SubLibraryResVo> listSubLibrary(@Param("subLibrary") SubLibraryReqVo subLibraryReqVo, @Param("page") Page<SystemBase> page);
List<UserBaseOperateAuthDTO> queryUserBaseOperateAuth(@Param("userId") String userId);
}

@ -1,11 +1,14 @@
package com.supervision.knowsub.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.knowsub.dto.base.UserBaseOperateAuthDTO;
import com.supervision.knowsub.model.SystemBase;
import com.baomidou.mybatisplus.extension.service.IService;
import com.supervision.knowsub.vo.sublibrary.SubLibraryReqVo;
import com.supervision.knowsub.vo.sublibrary.SubLibraryResVo;
import java.util.List;
/**
* @author Administrator
* @description ks_system_base()Service
@ -14,4 +17,10 @@ import com.supervision.knowsub.vo.sublibrary.SubLibraryResVo;
public interface SystemBaseService extends IService<SystemBase> {
IPage<SubLibraryResVo> listSubLibrary(SubLibraryReqVo subLibraryReqVo, Integer pageNum, Integer pageSize);
/**
*
* @param userId ID
*/
List<UserBaseOperateAuthDTO> queryUserBaseOperateAuth(String userId);
}

@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.knowsub.dto.base.UserBaseOperateAuthDTO;
import com.supervision.knowsub.dto.dept.BaseDeptRelationDTO;
import com.supervision.knowsub.model.SystemBase;
import com.supervision.knowsub.service.SystemBaseDeptRelationService;
@ -64,6 +65,11 @@ public class SystemBaseServiceImpl extends ServiceImpl<SystemBaseMapper, SystemB
});
}
@Override
public List<UserBaseOperateAuthDTO> queryUserBaseOperateAuth(String userId) {
return this.baseMapper.queryUserBaseOperateAuth(userId);
}
}

@ -15,4 +15,13 @@ public class KnowledgePageResVO extends Knowledge {
private String submitDeptName;
@Schema(description = "发文部门名称")
private String publishDeptName;
@Schema(description = "是否支持删除 0不支持 1支持")
private Integer deleteFlag = 0;
@Schema(description = "是否支持修改 0不支持 1支持")
private Integer modifyFlag = 0;
@Schema(description = "是否支持撤回 0不支持 1支持")
private Integer recallFlag = 0;
}

@ -42,7 +42,7 @@
where 1 = 1
<choose>
<when test="status == null">
-- 如果为空,是查全部通过的
-- 如果为空,是查全部通过的,不分人
and ( status = 2)
</when>
<when test="status == 1">

@ -46,4 +46,13 @@
</if>
</where>
</select>
<select id="queryUserBaseOperateAuth" resultType="com.supervision.knowsub.dto.base.UserBaseOperateAuthDTO">
select distinct t1.base_id as baseId, t1.flow_type as flowType
from ks_system_flow_type_relation t1
left join (select distinct flow_id
from ks_system_flow_rule_user
where user_id = #{userId}) t2
on t1.flow_id = t2.flow_id
</select>
</mapper>

Loading…
Cancel
Save