知识管理添加工作流审批

This commit is contained in:
Pancaihua 2024-07-31 21:22:00 +08:00
parent 3d0af0127e
commit cbe4957f36
8 changed files with 79 additions and 21 deletions

View File

@ -4,10 +4,8 @@ import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.module.bpm.convert.knows.KnowledgeConvert; import cn.iocoder.yudao.module.bpm.convert.knows.KnowledgeConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.KnowtypeDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.KnowtypeDO;
import cn.iocoder.yudao.module.bpm.service.knows.KnowtypeService; import cn.iocoder.yudao.module.bpm.service.knows.KnowtypeService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO; import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import cn.iocoder.yudao.module.system.service.dept.DeptService; import cn.iocoder.yudao.module.system.service.dept.DeptService;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -30,11 +28,12 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import cn.iocoder.yudao.module.bpm.controller.admin.knows.vo.*; import cn.iocoder.yudao.module.bpm.controller.admin.knows.vo.*;
import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.KnowledgeDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.KnowledgeDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.CommentDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.CommentDO;
import cn.iocoder.yudao.module.bpm.service.knows.KnowledgeService; import cn.iocoder.yudao.module.bpm.service.knows.KnowledgeService;
@Tag(name = "管理后台 - 知识发布") @Tag(name = "管理后台 - 知识发布")
@RestController @RestController
@RequestMapping("/bpm/knowledge") @RequestMapping("/bpm/knowledge")
@ -47,14 +46,13 @@ public class KnowledgeController {
private DeptService deptService; private DeptService deptService;
@Resource @Resource
private KnowtypeService knowtypeService; private KnowtypeService knowtypeService;
@Resource
private AdminUserApi adminUserApi;
private AdminUserService userService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建知识发布") @Operation(summary = "创建知识发布")
@PreAuthorize("@ss.hasPermission('bpm:knowledge:create')") @PreAuthorize("@ss.hasPermission('bpm:knowledge:create')")
public CommonResult<Long> createKnowledge(@Valid @RequestBody KnowledgeSaveReqVO createReqVO) { public CommonResult<Long> createKnowledge(@Valid @RequestBody KnowledgeSaveReqVO createReqVO) {
return success(knowledgeService.createKnowledge(createReqVO)); // return success(knowledgeService.createKnowledge(createReqVO));
return success(knowledgeService.createKnowledge(getLoginUserId(),createReqVO));
} }
@PutMapping("/update") @PutMapping("/update")
@ -106,7 +104,24 @@ public class KnowledgeController {
// 转换并返回结果 // 转换并返回结果
return success(new PageResult<>(KnowledgeConvert.INSTANCE.convertList(pageResult.getList(), deptMap, knowTypeMap), pageResult.getTotal())); return success(new PageResult<>(KnowledgeConvert.INSTANCE.convertList(pageResult.getList(), deptMap, knowTypeMap), pageResult.getTotal()));
} }
@GetMapping("/page-user")
@Operation(summary = "获得知识发布分页")
@PreAuthorize("@ss.hasPermission('bpm:knowledge:query')")
public CommonResult<PageResult<KnowledgeRespVO>> getKnowledgePageUser(@Valid KnowledgePageReqVO pageReqVO) {
PageResult<KnowledgeDO> pageResult = knowledgeService.getKnowledgePage(getLoginUserId(),pageReqVO);
if (CollUtil.isEmpty(pageResult.getList())) {
return success(new PageResult<>(pageResult.getTotal()));
}
// 拼接数据
Map<Long, DeptDO> deptMap = deptService.getDeptMap(
convertList(pageResult.getList(), KnowledgeDO::getDeptId));
Map<Long, KnowtypeDO> knowTypeMap = knowtypeService.getKnowtypeMap(
convertList(pageResult.getList(), KnowledgeDO::getTypeId));
// 转换并返回结果
return success(new PageResult<>(KnowledgeConvert.INSTANCE.convertList(pageResult.getList(), deptMap, knowTypeMap), pageResult.getTotal()));
}
@GetMapping("/export-excel") @GetMapping("/export-excel")
@Operation(summary = "导出知识发布 Excel") @Operation(summary = "导出知识发布 Excel")
@PreAuthorize("@ss.hasPermission('bpm:knowledge:export')") @PreAuthorize("@ss.hasPermission('bpm:knowledge:export')")

View File

@ -63,4 +63,8 @@ public class KnowledgeRespVO {
@Schema(description = "作者", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") @Schema(description = "作者", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@ExcelProperty("作者") @ExcelProperty("作者")
private String userName; private String userName;
@Schema(description = "流程实例的编号", example = "20058")
@ExcelProperty("流程实例的编号")
private String processInstanceId;
} }

View File

@ -47,4 +47,7 @@ public class KnowledgeSaveReqVO {
@Schema(description = "作者", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三") @Schema(description = "作者", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
@NotNull(message = "作者不能为空") @NotNull(message = "作者不能为空")
private String userName; private String userName;
@Schema(description = "发起人自选审批人 Map", example = "{taskKey1: [1, 2]}")
private Map<String, List<Long>> startUserSelectAssignees;
} }

View File

@ -58,4 +58,11 @@ public class KnowledgeDO extends BaseDO {
* 作者的id * 作者的id
*/ */
private String userName; private String userName;
/**
* 对应的流程编号
*
* 关联 ProcessInstance id 属性
*/
private String processInstanceId;
private Long userId;
} }

View File

@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.KnowledgeDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.KnowledgeDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.bpm.controller.admin.knows.vo.*; import cn.iocoder.yudao.module.bpm.controller.admin.knows.vo.*;
@ -28,5 +29,16 @@ public interface KnowledgeMapper extends BaseMapperX<KnowledgeDO> {
.betweenIfPresent(KnowledgeDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(KnowledgeDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(KnowledgeDO::getId)); .orderByDesc(KnowledgeDO::getId));
} }
default PageResult<KnowledgeDO> selectPage(Long userId, KnowledgePageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<KnowledgeDO>()
.eqIfPresent(KnowledgeDO::getUserId, userId)
.eqIfPresent(KnowledgeDO::getTypeId, reqVO.getTypeId())
.eqIfPresent(KnowledgeDO::getDeptId, reqVO.getDeptId())
.eqIfPresent(KnowledgeDO::getKnowTitle, reqVO.getKnowTitle())
.eqIfPresent(KnowledgeDO::getContent, reqVO.getContent())
.eqIfPresent(KnowledgeDO::getStatus, reqVO.getStatus())
.eqIfPresent(KnowledgeDO::getFilePath, reqVO.getFilePath())
.betweenIfPresent(KnowledgeDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(KnowledgeDO::getId));
}
} }

View File

@ -2,10 +2,12 @@ package cn.iocoder.yudao.module.bpm.service.knows;
import java.util.*; import java.util.*;
import cn.iocoder.yudao.module.bpm.controller.admin.knows.vo.*; import cn.iocoder.yudao.module.bpm.controller.admin.knows.vo.*;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOALeavePageReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.KnowledgeDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.KnowledgeDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.CommentDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.CommentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO;
import javax.validation.Valid; import javax.validation.Valid;
@ -22,7 +24,7 @@ public interface KnowledgeService {
* @param createReqVO 创建信息 * @param createReqVO 创建信息
* @return 编号 * @return 编号
*/ */
Long createKnowledge(@Valid KnowledgeSaveReqVO createReqVO); Long createKnowledge(Long userId,@Valid KnowledgeSaveReqVO createReqVO);
/** /**
* 更新知识发布 * 更新知识发布
@ -53,6 +55,7 @@ public interface KnowledgeService {
* @return 知识发布分页 * @return 知识发布分页
*/ */
PageResult<KnowledgeDO> getKnowledgePage(KnowledgePageReqVO pageReqVO); PageResult<KnowledgeDO> getKnowledgePage(KnowledgePageReqVO pageReqVO);
PageResult<KnowledgeDO> getKnowledgePage(Long userId, KnowledgePageReqVO pageReqVO);
// ==================== 子表评论 ==================== // ==================== 子表评论 ====================
@ -64,4 +67,5 @@ public interface KnowledgeService {
*/ */
List<CommentDO> getCommentListByKnowId(Long knowId); List<CommentDO> getCommentListByKnowId(Long knowId);
} }

View File

@ -1,23 +1,19 @@
package cn.iocoder.yudao.module.bpm.service.knows; package cn.iocoder.yudao.module.bpm.service.knows;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
import cn.iocoder.yudao.module.bpm.controller.admin.knows.vo.*; import cn.iocoder.yudao.module.bpm.controller.admin.knows.vo.*;
import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.KnowledgeDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.KnowledgeDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.CommentDO; import cn.iocoder.yudao.module.bpm.dal.dataobject.knows.CommentDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.dal.mysql.knows.KnowledgeMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.knows.KnowledgeMapper;
import cn.iocoder.yudao.module.bpm.dal.mysql.knows.CommentMapper; import cn.iocoder.yudao.module.bpm.dal.mysql.knows.CommentMapper;
import javax.annotation.Resource; import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*; import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*;
@ -29,21 +25,30 @@ import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.*;
@Service @Service
@Validated @Validated
public class KnowledgeServiceImpl implements KnowledgeService { public class KnowledgeServiceImpl implements KnowledgeService {
public static final String PROCESS_KEY = "my-test-flow03";
@Resource @Resource
private KnowledgeMapper knowledgeMapper; private KnowledgeMapper knowledgeMapper;
@Resource @Resource
private CommentMapper commentMapper; private CommentMapper commentMapper;
@Resource
private BpmProcessInstanceApi processInstanceApi;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public Long createKnowledge(KnowledgeSaveReqVO createReqVO) { public Long createKnowledge(Long userId,KnowledgeSaveReqVO createReqVO) {
// 插入 // 插入
KnowledgeDO knowledge = BeanUtils.toBean(createReqVO, KnowledgeDO.class); KnowledgeDO knowledge = BeanUtils.toBean(createReqVO, KnowledgeDO.class);
knowledgeMapper.insert(knowledge); knowledgeMapper.insert(knowledge);
// 插入子表 // 插入子表
createCommentList(knowledge.getId(), createReqVO.getComments()); createCommentList(knowledge.getId(), createReqVO.getComments());
// 发起 BPM 流程
Map<String, Object> processInstanceVariables = new HashMap<>();
String processInstanceId = processInstanceApi.createProcessInstance(userId,
new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY)
.setVariables(processInstanceVariables).setBusinessKey(String.valueOf(knowledge.getId()))
.setStartUserSelectAssignees(createReqVO.getStartUserSelectAssignees()));
// 将工作流的编号更新到 OA 请假单中
knowledgeMapper.updateById(new KnowledgeDO().setId(knowledge.getId()).setProcessInstanceId(processInstanceId));
// 返回 // 返回
return knowledge.getId(); return knowledge.getId();
} }
@ -88,6 +93,10 @@ public class KnowledgeServiceImpl implements KnowledgeService {
public PageResult<KnowledgeDO> getKnowledgePage(KnowledgePageReqVO pageReqVO) { public PageResult<KnowledgeDO> getKnowledgePage(KnowledgePageReqVO pageReqVO) {
return knowledgeMapper.selectPage(pageReqVO); return knowledgeMapper.selectPage(pageReqVO);
} }
@Override
public PageResult<KnowledgeDO> getKnowledgePage(Long userId, KnowledgePageReqVO pageReqVO) {
return knowledgeMapper.selectPage(userId, pageReqVO);
}
// ==================== 子表评论 ==================== // ==================== 子表评论 ====================
@ -96,6 +105,8 @@ public class KnowledgeServiceImpl implements KnowledgeService {
return commentMapper.selectListByKnowId(knowId); return commentMapper.selectListByKnowId(knowId);
} }
private void createCommentList(Long knowId, List<CommentDO> list) { private void createCommentList(Long knowId, List<CommentDO> list) {
list.forEach(o -> o.setKnowId(knowId)); list.forEach(o -> o.setKnowId(knowId));
commentMapper.insertBatch(list); commentMapper.insertBatch(list);

View File

@ -34,6 +34,8 @@ public class BpmOALeaveServiceImpl implements BpmOALeaveService {
/** /**
* OA 请假对应的流程定义 KEY * OA 请假对应的流程定义 KEY
*/ */
// public static final String PROCESS_KEY = "oa_leave";
//my-test-flow02'
public static final String PROCESS_KEY = "my-test-flow02"; public static final String PROCESS_KEY = "my-test-flow02";
@Resource @Resource