提交流程提交相关代码

release_1.0.0
liu 8 months ago
parent 4d18d7f31e
commit e34786f505

@ -66,8 +66,8 @@ public class KnowledgeManageController {
@Operation(summary = "撤回知识库")
@GetMapping("recallKnowledge")
public void recallKnowledge(String knowledgeId) {
knowledgeManageService.recallKnowledge(knowledgeId);
public void recallKnowledge(String knowledgeId,String remark) {
knowledgeManageService.recallKnowledge(knowledgeId,remark);
}
@Operation(summary = "查看知识的详细信息")

@ -38,8 +38,9 @@ public class UserController {
if (user.isEmpty() || !UserUtil.checkUserPassword(reqVO.getPassword(), user.get().getUserPd())) {
throw new BusinessException("用户名或密码有误!");
}
UserInfo userInfoToken = BeanUtil.copyProperties(user.get(), UserInfo.class);
// 更新用户最近的登录时间
String token = TokenUtil.creatToken(JSONUtil.toJsonStr(user.get()));
String token = TokenUtil.creatToken(JSONUtil.toJsonStr(userInfoToken));
LoginResVO loginResVO = BeanUtil.toBean(user.get(), LoginResVO.class);
loginResVO.setToken(token);

@ -47,6 +47,9 @@ public class SaveKnowledgeReqVO {
@Schema(description = "发文时间")
private DateTime publishDate;
@Schema(description = "提交审批的备注")
private String remark;
@Schema(description = "知识的基础信息")

@ -19,6 +19,7 @@ public enum FlowTypeEnum {
return flowType;
}
public String getDesc() {
return desc;
}
}

@ -1,6 +1,8 @@
package com.supervision.knowsub.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.knowsub.enums.FlowTypeEnum;
import com.supervision.knowsub.model.Knowledge;
import com.supervision.knowsub.model.KnowledgeFlowRecord;
import com.supervision.knowsub.vo.knowledge.KnowledgeFlowResVO;
import org.springframework.web.bind.annotation.RequestParam;
@ -13,4 +15,6 @@ public interface KnowledgeFlowService {
IPage<KnowledgeFlowResVO> queryKnowledgeFlowPage(Integer processStatus,String title, String publishDeptId, String baseId, String submittedDeptId, Instant flowType,
LocalDateTime publishDateBegin, LocalDateTime publishDateEnd,
Integer pageNum, Integer pageSize);
void submitFlowProcess(Knowledge knowledge, FlowTypeEnum flowTypeEnum, String userId, String deptId, String remark);
}

@ -25,9 +25,9 @@ public interface KnowledgeManageService {
void updateKnowledge(ModifyKnowledgeReqVO reqVO);
void recallKnowledge(String knowledgeId);
void recallKnowledge(String knowledgeId,String remark);
KnowledgeDetailResVO queryKnowledgeDetail(String knowledgeId);
void deleteKnowledge(String knowledgeId);
void deleteKnowledge(String knowledgeId,String remark);
}

@ -1,19 +1,25 @@
package com.supervision.knowsub.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.supervision.knowsub.enums.FlowTypeEnum;
import com.supervision.knowsub.exception.BusinessException;
import com.supervision.knowsub.mapper.KnowledgeFlowRecordMapper;
import com.supervision.knowsub.model.KnowledgeFlowRecord;
import com.supervision.knowsub.service.KnowledgeFlowRecordService;
import com.supervision.knowsub.service.KnowledgeFlowService;
import com.supervision.knowsub.model.*;
import com.supervision.knowsub.service.*;
import com.supervision.knowsub.vo.knowledge.KnowledgeFlowResVO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
@Slf4j
@Service
@ -22,6 +28,12 @@ public class KnowledgeFlowServiceImpl implements KnowledgeFlowService {
private final KnowledgeFlowRecordService knowledgeFlowRecordService;
private final SystemFlowTypeRelationService systemFlowTypeRelationService;
private final SystemFlowRuleService systemFlowRuleService;
private final SystemFlowRuleUserService systemFlowRuleUserService;
@Override
public IPage<KnowledgeFlowResVO> queryKnowledgeFlowPage(Integer processStatus, String title, String publishDeptId, String baseId,
String submittedDeptId, Instant flowType,
@ -39,4 +51,68 @@ public class KnowledgeFlowServiceImpl implements KnowledgeFlowService {
}
throw new BusinessException("不支持的状态类型");
}
/**
*
*/
@Transactional(rollbackFor = Exception.class)
public void submitFlowProcess(Knowledge knowledge, FlowTypeEnum flowTypeEnum, String userId, String deptId, String remark) {
// 首先查询到知识对应的子库
String baseId = knowledge.getBaseId();
if (StrUtil.isBlank(baseId)) {
throw new BusinessException("未找到对应的子库");
}
// 首先找到对应的审批流
Optional<SystemFlowTypeRelation> systemFlowTypeRelationOpt = systemFlowTypeRelationService.lambdaQuery()
.eq(SystemFlowTypeRelation::getBaseId, baseId)
.eq(SystemFlowTypeRelation::getFlowType, flowTypeEnum.getFlowType())
.last(" limit 1").oneOpt();
SystemFlowTypeRelation systemFlowTypeRelation = systemFlowTypeRelationOpt.orElseThrow(() -> new BusinessException("未找到审批流程,请联系管理员配置审批流程"));
List<SystemFlowRule> ruleList = systemFlowRuleService.lambdaQuery().eq(SystemFlowRule::getFlowId, systemFlowTypeRelation.getFlowId()).list();
if (CollUtil.isEmpty(ruleList)) {
throw new BusinessException("审批流节点为空,请联系管理员配置审批流节点");
}
// 根据rule_order进行升序排序
List<SystemFlowRule> orderList = ruleList.stream().sorted(Comparator.comparingInt(SystemFlowRule::getRuleOrder)).toList();
// 应该最少有两个节点,一个是起始节点,一个是审批节点才行
if (orderList.size() < 2) {
throw new BusinessException("审批流节点数量不足,请联系管理员确认审批流节点是否正确");
}
// 首先获取第一个节点,校验当前用户是否有权限提交
SystemFlowRule firstRule = orderList.get(0);
Optional<SystemFlowRuleUser> systemFlowRuleUserOpt = systemFlowRuleUserService.lambdaQuery().eq(SystemFlowRuleUser::getFlowId, firstRule.getId())
.eq(SystemFlowRuleUser::getUserId, userId).eq(SystemFlowRuleUser::getRuleId, firstRule.getId()).oneOpt();
if (systemFlowRuleUserOpt.isEmpty()) {
throw new BusinessException("当前用户没有权限提交:" + flowTypeEnum.getDesc() + " 流程,请联系管理员确认");
}
// 然后找到下一个节点
SystemFlowRule nextRule = orderList.get(1);
List<SystemFlowRuleUser> nextRuleUserList = systemFlowRuleUserService.lambdaQuery().eq(SystemFlowRuleUser::getFlowId, nextRule.getId()).eq(SystemFlowRuleUser::getRuleId, nextRule.getId()).list();
if (CollUtil.isEmpty(nextRuleUserList)) {
throw new BusinessException("审批节点未配置审批用户,流程提交失败");
}
// 创建审批记录的对象
KnowledgeFlowRecord knowledgeFlowRecord = KnowledgeFlowRecord.builder()
.type(1)
.knowledgeId(knowledge.getId())
.flowId(systemFlowTypeRelation.getFlowId())
.flowType(flowTypeEnum.getFlowType())
.flowRuleId(firstRule.getId())
.processName(firstRule.getRuleName())
.remark(remark)
.submitUserId(userId)
.submitDeptId(deptId)
.build();
knowledgeFlowRecordService.save(knowledgeFlowRecord);
// 生成下一个节点的TODO
for (SystemFlowRuleUser todoUser : nextRuleUserList) {
KnowledgeFlowTodo todo = new KnowledgeFlowTodo();
todo.setFlowId(nextRule.getFlowId());
todo.setFlowType(flowTypeEnum.getFlowType());
todo.setKnowledgeId(knowledge.getId());
todo.setRuleId(nextRule.getId());
todo.setTodoUserId(todoUser.getUserId());
todo.insert();
}
}
}

@ -2,11 +2,14 @@ package com.supervision.knowsub.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.knowsub.domain.UserInfo;
import com.supervision.knowsub.entity.vo.knowledge.KnowledgeDetailResVO;
import com.supervision.knowsub.entity.vo.knowledge.KnowledgeLinkVO;
import com.supervision.knowsub.entity.vo.knowledge.ModifyKnowledgeReqVO;
import com.supervision.knowsub.entity.vo.knowledge.SaveKnowledgeReqVO;
import com.supervision.knowsub.enums.FlowTypeEnum;
import com.supervision.knowsub.enums.StatusEnum;
import com.supervision.knowsub.exception.BusinessException;
import com.supervision.knowsub.model.*;
@ -17,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.Instant;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@ -41,6 +45,8 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
private final FileService fileService;
private final KnowledgeFlowService knowledgeFlowService;
@Override
public IPage<Knowledge> queryKnowledgePage(Integer status,
@ -57,7 +63,7 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
@Override
@Transactional(rollbackFor = Exception.class)
public void saveKnowledge(SaveKnowledgeReqVO reqVO) {
Assert.notBlank(reqVO.getBaseId(),"应用子库不能为空");
Assert.notBlank(reqVO.getBaseId(), "应用子库不能为空");
var context = new KnowledgeContext();
context.setContext(reqVO.getContent());
knowledgeContextService.save(context);
@ -98,7 +104,9 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
}
// 这里需要进行判断,如果状态为2,说明要走流程
if (1 != reqVO.getOperate()) {
// TODO 这里需要走流程
// 这里需要走流程
UserInfo user = UserUtil.getUser();
knowledgeFlowService.submitFlowProcess(knowledge, FlowTypeEnum.SUBMIT, user.getId(), user.getDeptId(), reqVO.getRemark());
}
@ -109,7 +117,7 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
*/
@Override
public void updateKnowledge(ModifyKnowledgeReqVO reqVO) {
Assert.notBlank(reqVO.getBaseId(),"应用子库不能为空");
Assert.notBlank(reqVO.getBaseId(), "应用子库不能为空");
Knowledge knowledge = knowledgeService.getOptById(reqVO.getKnowledgeId()).orElseThrow(() -> new BusinessException("未找到知识"));
// 首先校验状态,草稿/已撤回/已失效/驳回,才能修改(通过的,要先撤回才能修改)
Set<Integer> canModifyStatusSet = Set.of(StatusEnum.DRAFT.getStatus(), StatusEnum.RECALL.getStatus(), StatusEnum.INVALID.getStatus(), StatusEnum.REJECT.getStatus());
@ -153,7 +161,8 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
updateKnowledgeLink(reqVO, knowledge);
// 这里需要进行判断,如果状态为2,说明要走流程
if (1 != reqVO.getOperate()) {
// TODO 这里需要走流程
UserInfo user = UserUtil.getUser();
knowledgeFlowService.submitFlowProcess(knowledge, FlowTypeEnum.SUBMIT, user.getId(), user.getDeptId(), reqVO.getRemark());
}
}
@ -207,15 +216,16 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
}
@Override
public void recallKnowledge(String knowledgeId) {
public void recallKnowledge(String knowledgeId, String remark) {
Knowledge knowledge = knowledgeService.getOptById(knowledgeId).orElseThrow(() -> new BusinessException("未找到知识"));
// 只有通过状态或已失效状态才支持撤回
Set<Integer> canRecallStatusSet = Set.of(StatusEnum.PASS.getStatus(), StatusEnum.INVALID.getStatus());
if (!canRecallStatusSet.contains(knowledge.getStatus())) {
throw new BusinessException("该知识状态不能撤回");
}
// TODO 走撤回流程
// 走撤回流程
UserInfo user = UserUtil.getUser();
knowledgeFlowService.submitFlowProcess(knowledge, FlowTypeEnum.RECALL, user.getId(), user.getDeptId(), remark);
}
@Override
@ -232,7 +242,7 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteKnowledge(String knowledgeId) {
public void deleteKnowledge(String knowledgeId, String remark) {
// 删除是逻辑删除,如果当前状态是草稿,且没有走过审批流程,则可以直接删除
Knowledge knowledge = knowledgeService.getOptById(knowledgeId).orElseThrow(() -> new BusinessException("未找到知识"));
if (Objects.equals(StatusEnum.DRAFT.getStatus(), knowledge.getStatus())) {
@ -256,12 +266,15 @@ public class KnowledgeManageServiceImpl implements KnowledgeManageService {
// 如果非草稿,则校验是否是通过/驳回/已失效状态,如果是,则需要走审批流程进行删除
Set<Integer> canDeleteStatusSet = Set.of(StatusEnum.PASS.getStatus(), StatusEnum.REJECT.getStatus(), StatusEnum.INVALID.getStatus());
if (canDeleteStatusSet.contains(knowledge.getStatus())) {
// TODO 这时需要走审批流程进行删除
// 这时需要走审批流程进行删除
UserInfo user = UserUtil.getUser();
knowledgeFlowService.submitFlowProcess(knowledge, FlowTypeEnum.DELETE, user.getId(), user.getDeptId(), remark);
} else {
throw new BusinessException("审批中的知识不支持删除");
}
}
}

@ -7,5 +7,23 @@ public class UserInfo {
private String id;
private String name;
/**
* ID
*/
private String roleId;
/**
*
*/
private String username;
/**
*
*/
private String account;
/**
* ID
*/
private String deptId;
}

@ -4,7 +4,11 @@ import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
@ -12,6 +16,9 @@ import lombok.Data;
*/
@TableName(value ="ks_knowledge_flow_record")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class KnowledgeFlowRecord implements Serializable {
/**
* ID
@ -19,6 +26,11 @@ public class KnowledgeFlowRecord implements Serializable {
@TableId
private String id;
/**
* 1 2
*/
private Integer type;
/**
* ID(submitted_id)
*/

@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
/**
@ -14,7 +16,7 @@ import lombok.Data;
*/
@TableName(value ="ks_knowledge_flow_todo")
@Data
public class KnowledgeFlowTodo implements Serializable {
public class KnowledgeFlowTodo extends Model<KnowledgeFlowTodo> implements Serializable {
/**
*
*/

@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
/**

@ -6,6 +6,7 @@
<resultMap id="BaseResultMap" type="com.supervision.knowsub.model.KnowledgeFlowRecord">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="type" column="type" jdbcType="VARCHAR"/>
<result property="knowledgeId" column="knowledge_id" jdbcType="VARCHAR"/>
<result property="flowId" column="flow_id" jdbcType="VARCHAR"/>
<result property="flowType" column="flow_type" jdbcType="INTEGER"/>
@ -22,6 +23,7 @@
<sql id="Base_Column_List">
id
,type,
,knowledge_id,flow_id,flow_type,
process_name,process_user_id,process_time,
remark,create_user_id,create_time,

Loading…
Cancel
Save