任务分配模块

This commit is contained in:
furongxin 2024-05-22 16:32:41 +08:00
parent 96b6d2102a
commit beda9fc933
16 changed files with 535 additions and 108 deletions

View File

@ -7,9 +7,9 @@ import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmPro
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
import cn.iocoder.yudao.module.bpm.service.definition.BpmProcessDefinitionService;
import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
@ -18,8 +18,8 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@ -45,7 +45,10 @@ public class BpmProcessDefinitionController {
// @PreAuthorize("@ss.hasPermission('bpm:process-definition:query')")
public CommonResult<List<BpmProcessDefinitionRespVO>> getProcessDefinitionList(
BpmProcessDefinitionListReqVO listReqVO) {
return success(bpmDefinitionService.getProcessDefinitionList(listReqVO));
List<BpmProcessDefinitionRespVO> respVOS = bpmDefinitionService.getProcessDefinitionList(listReqVO);
respVOS = respVOS.stream().filter(data -> !data.getId().contains("oa_work_task")).collect(Collectors.toList());
return success(respVOS);
}
@GetMapping ("/get-bpmn-xml")

View File

@ -2,17 +2,17 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeaveCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeavePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeaveRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskRespVO;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOALeaveConvert;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAWorkTaskConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOALeaveService;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAWorkTaskService;
import cn.iocoder.yudao.module.bpm.service.task.BpmTaskService;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@ -22,8 +22,6 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@ -42,6 +40,15 @@ public class BpmOAWorkTaskController {
@Resource
private BpmOAWorkTaskService workTaskService;
@Resource
private AdminUserApi userApi;
@Resource
private DeptApi deptApi;
@Resource
private BpmTaskService taskService;
@PostMapping("/create")
@Operation(summary = "创建任务分配")
public CommonResult<Long> createLeave(@Valid @RequestBody BpmOAWorkTaskReqVO createReqVO) {
@ -51,23 +58,64 @@ public class BpmOAWorkTaskController {
@GetMapping("/get")
@Operation(summary = "获得任务分配")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<BpmOAWorkTaskRespVO> getLeave(@RequestParam("id") Long id) {
public CommonResult<BpmOAWorkTaskRespVO> getTask(@RequestParam("id") Long id) {
BpmOAWorkTaskDO workTask = workTaskService.getWorkTask(id);
return success(BpmOAWorkTaskConvert.INSTANCE.convert(workTask));
//获得 责任人用户信息
AdminUserRespDTO userRespDTO = userApi.getUser(workTask.getReceiverUserId()).getCheckedData();
//获得 责任人部门信息
DeptRespDTO deptRespDTO = deptApi.getDept(userRespDTO.getDeptId()).getCheckedData();
String taskId = null;
if (workTask.getWorkTaskStatus() != 3) {
//获得TASK
taskId = taskService.getCurrentTaskIdByProcessInstanceId(workTask.getProcessInstanceId());
}
return success(BpmOAWorkTaskConvert.INSTANCE.convert(workTask, userRespDTO, deptRespDTO, taskId));
}
@PostMapping("/add")
@GetMapping("/getByProcessInstanceId")
@Operation(summary = "获得任务分配")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<BpmOAWorkTaskDO> getTask(@RequestParam("id") String processInstanceId) {
BpmOAWorkTaskDO workTask = workTaskService.getWorkTaskByProcessInstanceId(processInstanceId);
return success(workTask);
}
@PutMapping("/add")
@Operation(summary = "添加任务跟踪数据【全量传】")
public CommonResult<Boolean> addTrackInfo(@RequestBody List<BpmOAWorkTaskRespVO.TrackInfo> trackInfos) {
workTaskService.addTrackInfo(getLoginUserId(), trackInfos) ;
public CommonResult<Boolean> addTrackInfo(@RequestBody BpmOAWorkTaskReqVO updateReqVO) {
workTaskService.addTrackInfo(updateReqVO) ;
return success(true);
}
@PostMapping("/update")
@Operation(summary = "更新工作任务的状态和进度")
public CommonResult<Boolean> updateWorkTask(@RequestBody BpmOAWorkTaskReqVO createReqVO) {
workTaskService.updateWorkTask(getLoginUserId(), createReqVO) ;
workTaskService.updateWorkTask(createReqVO) ;
return success(true);
}
@GetMapping("/page")
@Operation(summary = "获得工作任务分页")
public CommonResult<PageResult<BpmOAWorkTaskRespVO>> getPage(@Valid BpmOAWorkTaskPageReqVO pageVO) {
PageResult<BpmOAWorkTaskRespVO> pageResult = workTaskService.getPage(getLoginUserId(), pageVO);
return success(pageResult);
}
@GetMapping("/my-page")
@Operation(summary = "获得我的任务分页")
public CommonResult<PageResult<BpmOAWorkTaskRespVO>> getMyPage(@Valid BpmOAWorkTaskPageReqVO pageVO) {
PageResult<BpmOAWorkTaskRespVO> pageResult = workTaskService.getMyPage(getLoginUserId(), pageVO);
return success(pageResult);
}
}

View File

@ -0,0 +1,45 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 任务分配分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmOAWorkTaskPageReqVO extends PageParam {
@Schema(description = "发起人用户ID")
private Long fromUserId;
@Schema(description = "用户ID")
private Long userId;
@Schema(description = "部门编号")
private Long deptId;
@Schema(description = "用户ID列表")
private List<Long> userIdList;
@Schema(description = "状态")
private Integer workTaskStatus;
@Schema(description = "任务名称")
private String taskName;
@Schema(description = "是否查看我的任务分配标识 | 1我的 2全部")
private Integer isMyTask;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@Schema(description = "申请时间")
private LocalDateTime[] createTime;
}

View File

@ -3,17 +3,13 @@ package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 工作任务 创建 Request VO
@ -22,10 +18,11 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
*/
@Schema(description = "管理后台 - 工作任务分配 Request VO")
@Data
@EqualsAndHashCode()
@ToString(callSuper = true)
public class BpmOAWorkTaskReqVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED)
private Long id;
@Schema(description = "任务名称", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "任务名称不能为空")
private String taskName;
@ -34,15 +31,19 @@ public class BpmOAWorkTaskReqVO {
@NotNull(message = "任务内容不能为空")
private String taskContent;
@Schema(description = "任务级别", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "任务级别不能为空")
private Integer level;
@Schema(description = "任务的开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "截止时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime startTime;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate startTime;
@Schema(description = "任务的截止时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "截止时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime endTime;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate endTime;
@Schema(description = "责任人ID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "责任人不能为空")
@ -54,6 +55,20 @@ public class BpmOAWorkTaskReqVO {
@Schema(description = "工作任务状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1:待启动2:进行中3.已完成4.延期, 5.搁置")
private Integer workTaskStatus ;
@Schema(description = "搁置或延期原因")
private String reason;
@Schema(description = "搁置后 任务开始日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate shelveStartTime;
@Schema(description = "搁置后 任务结束日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate shelveEndTime;
@Schema(description = "上传文件", requiredMode = Schema.RequiredMode.REQUIRED)
private List<UploadUserFile> fileItems;
@Schema(description = "跟踪内容集合")
private BpmOAWorkTaskTrackInfo trackInfos;
}

View File

@ -1,7 +1,6 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.BpmOABaseRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.reimbursement.ReimbursementDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -9,10 +8,11 @@ import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 报销响应数据 Response VO")
@ -29,23 +29,39 @@ public class BpmOAWorkTaskRespVO extends BpmOABaseRespVO {
@NotNull(message = "任务内容不能为空")
private String taskContent;
@Schema(description = "任务级别", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "任务级别不能为空")
private Integer level;
@Schema(description = "任务的开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "截止时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime startTime;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate startTime;
@Schema(description = "任务的截止时间", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "截止时间不能为空")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime endTime;
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate endTime;
@Schema(description = "发起人用户ID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "责任名称不能为空")
private Long fromUserId;
@Schema(description = "发起人名称", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "责任名称不能为空")
private String fromUserName;
@Schema(description = "责任人用户ID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "责任名称不能为空")
private Long receiverUserId;
@Schema(description = "责任人名称", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "责任名称不能为空")
private Long userName;
private String userName;
@Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED)
@Schema(description = "责任人部门名称", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "部门名称不能为空")
private Long deptName;
private String deptName;
@Schema(description = "任务进度百分比", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "任务进度百分比")
@ -55,22 +71,24 @@ public class BpmOAWorkTaskRespVO extends BpmOABaseRespVO {
@NotNull(message = "工作任务状态")
private Integer workTaskStatus ;
@Schema(description = "搁置或延期原因")
private String reason;
@Schema(description = "搁置后 任务开始日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate shelveStartTime;
@Schema(description = "搁置后 任务结束日期")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY)
private LocalDate shelveEndTime;
@Schema(description = "跟踪内容集合")
private List<TrackInfo> trackInfos ;
@Schema(description = "任务跟踪信息")
@Data
public static class TrackInfo {
@Schema(description = "跟踪人", example = "126")
private Long TrackUserId;
@Schema(description = "跟踪内容", example = "11111112122222")
private String TrackContent;
@Schema(description = "跟踪内容提交时间", example = "2024-05-12 12:00:44")
private LocalDateTime trackTime;
}
private List<BpmOAWorkTaskTrackInfo> trackInfo;
@Schema(description = "更新时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime updateTime;
@Schema(description = "TaskId")
private String taskId;
}

View File

@ -0,0 +1,15 @@
package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Schema(description = "管理后台 - 跟踪内容集合 VO")
@Data
public class BpmOAWorkTaskTrackInfo {
@Schema(description = "跟踪内容", example = "11111112122222")
private String trackContent;
@Schema(description = "跟踪内容提交时间", example = "2024-05-12 12:00:44")
private String trackTime;
}

View File

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.bpm.convert.message;
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
import cn.iocoder.yudao.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
import cn.iocoder.yudao.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO;
import cn.iocoder.yudao.module.system.api.subscribe.dto.MsgData;
@ -37,7 +38,8 @@ public interface BpmMessageConvert {
* @param miniProgramState 小程序的状态
* @return
*/
default SubscribeMessageReqDTO convertApprovalResultNotification(String openId, String processInstanceName, String time, String result, String reason, String processInstanceId,
default SubscribeMessageReqDTO convertApprovalResultNotification(String openId, String processInstanceName,
String time, String result, String reason, String processInstanceId,
String miniProgramState) {
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
message.setToUser(openId);
@ -91,7 +93,8 @@ public interface BpmMessageConvert {
* @param miniProgramState 小程序的状态
* @return
*/
default SubscribeMessageReqDTO convertProcessToDoReminder(String openId, String processInstanceName, String startUserNickname, String time, String schedule, String processInstanceId, String miniProgramState) {
default SubscribeMessageReqDTO convertProcessToDoReminder(String openId, String processInstanceName,
String startUserNickname, String time, String schedule, String processInstanceId, String miniProgramState) {
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
message.setToUser(openId);
message.setTemplateId("3cP4btlFSSiZk65qVewN_WoT_bh0OfUkYzzTsADOrR4");
@ -123,4 +126,56 @@ public interface BpmMessageConvert {
message.setPage("pages/bpm/task/todo/examineApprove?id=" + processInstanceId);
return message;
}
/**
* @param openId 微信小程序唯一id
* @param workTaskDO 任务对象
* @param nickname 发布人姓名
* @param miniProgramState 小程序的状态
* @return
*/
default SubscribeMessageReqDTO convertWorkTask(String openId, String processInstanceName, BpmOAWorkTaskDO workTaskDO,
String nickname, String time, String miniProgramState, Boolean isFlag) {
SubscribeMessageReqDTO message = new SubscribeMessageReqDTO();
message.setToUser(openId);
message.setTemplateId("fH29xjNb8pe-7onQ-wE3QrBAC-y8aaC_oosYZKNMtzM");
//消息类型
MsgData noticeType = new MsgData();
noticeType.setName("phrase8");
noticeType.setValue(processInstanceName);
message.addData(noticeType);
//发送人
MsgData publishMan = new MsgData();
publishMan.setName("thing16");
publishMan.setValue(nickname);
message.addData(publishMan);
//发送时间
MsgData createTime = new MsgData();
createTime.setName("time3");
createTime.setValue(time);
message.addData(createTime);
//消息内容
MsgData content = new MsgData();
content.setName("thing2");
if (isFlag) {
content.setValue("你分配的任务已完成!");
}else {
content.setValue("你收到了一个新的任务!");
}
message.addData(content);
message.setMiniprogramState(miniProgramState);
if (isFlag) {
message.setPage("subPages/task/taskAssignment?userId=" + workTaskDO.getReceiverUserId());
}else {
message.setPage("subPages/task/taskDispose?id=" + workTaskDO.getId());
}
return message;
}
}

View File

@ -1,14 +1,14 @@
package cn.iocoder.yudao.module.bpm.convert.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskRespVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
/**
* 分配任务 Convert
*
@ -21,10 +21,14 @@ public interface BpmOAWorkTaskConvert {
BpmOAWorkTaskDO convert(BpmOAWorkTaskReqVO bean);
BpmOAWorkTaskRespVO convert(BpmOAWorkTaskDO bean);
default BpmOAWorkTaskRespVO convert(BpmOAWorkTaskDO workTask, AdminUserRespDTO userRespDTO, DeptRespDTO deptRespDTO, String taskId) {
List<BpmOAWorkTaskRespVO> convertList(List<BpmOAWorkTaskDO> list);
BpmOAWorkTaskRespVO respVO = BeanUtils.toBean(workTask, BpmOAWorkTaskRespVO.class);
PageResult<BpmOAWorkTaskRespVO> convertPage(PageResult<BpmOAWorkTaskDO> page);
respVO.setUserName(userRespDTO.getNickname());
respVO.setDeptName(deptRespDTO.getName());
respVO.setTaskId(taskId);
return respVO;
}
}

View File

@ -1,7 +1,7 @@
package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskTrackInfo;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import com.baomidou.mybatisplus.annotation.TableField;
@ -10,7 +10,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.*;
import java.time.LocalDateTime;
import java.time.LocalDate;
import java.util.List;
/**
@ -39,6 +39,11 @@ public class BpmOAWorkTaskDO extends BaseDO {
*/
private Long fromUserId;
/**
* 发起人部门编号
*/
private Long fromDeptId;
/**
* 接受人
*/
@ -52,22 +57,40 @@ public class BpmOAWorkTaskDO extends BaseDO {
* 任务内容
*/
private String taskContent;
/**
* 任务级别
* 字典值 参考 bpm_oa_work_task_type
*/
private Integer level;
/**
* 开始时间
*/
private LocalDateTime startTime;
private LocalDate startTime;
/**
* 截止时间
*/
private LocalDateTime endTime;
private LocalDate endTime;
/**
* 任务进度 百分比
*/
private Long schedule;
/**
* 任务的状态 任务自身的状态 1:待启动2:进行中3.已完成4.延期, 5.搁置
* 字典值 参考 bpm_oa_work_task_status
*/
private Integer workTaskStatus ;
/**
* 搁置或延期 原因
*/
private String reason;
/**
* 搁置后 任务开始日期
*/
private LocalDate shelveStartTime;
/**
* 搁置后 任务结束日期
*/
private LocalDate shelveEndTime;
/**
* 任务分配BPM流程的结果
@ -94,6 +117,6 @@ public class BpmOAWorkTaskDO extends BaseDO {
* 任务跟踪信息
*/
@TableField(typeHandler = JacksonTypeHandler.class)
private List<BpmOAWorkTaskRespVO.TrackInfo> trackInfos ;
private List<BpmOAWorkTaskTrackInfo> trackInfo;
}

View File

@ -1,6 +1,9 @@
package cn.iocoder.yudao.module.bpm.dal.mysql.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskPageReqVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
import org.apache.ibatis.annotations.Mapper;
@ -13,8 +16,31 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BpmOAWorkTaskMapper extends BaseMapperX<BpmOAWorkTaskDO> {
default BpmOAWorkTaskDO selectByProcessInstanceId(String processInstanceId) {
return selectOne(BpmOAWorkTaskDO::getProcessInstanceId, processInstanceId);
default PageResult<BpmOAWorkTaskDO> selectPage(Long userId, BpmOAWorkTaskPageReqVO reqVO) {
if (reqVO.getIsMyTask() == 2) {
userId = null;
}
return selectPage(reqVO, new LambdaQueryWrapperX<BpmOAWorkTaskDO>()
.eqIfPresent(BpmOAWorkTaskDO::getFromUserId, reqVO.getFromUserId())
.inIfPresent(BpmOAWorkTaskDO::getReceiverUserId, reqVO.getUserIdList())
.eqIfPresent(BpmOAWorkTaskDO::getReceiverUserId, reqVO.getUserId())
.likeIfPresent(BpmOAWorkTaskDO::getTaskName, reqVO.getTaskName())
.eqIfPresent(BpmOAWorkTaskDO::getWorkTaskStatus, reqVO.getWorkTaskStatus())
.betweenIfPresent(BpmOAWorkTaskDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(BpmOAWorkTaskDO::getFromUserId, userId)
.orderByDesc(BpmOAWorkTaskDO::getId));
}
default PageResult<BpmOAWorkTaskDO> selectMyPage(Long userId, BpmOAWorkTaskPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<BpmOAWorkTaskDO>()
.eqIfPresent(BpmOAWorkTaskDO::getFromUserId, reqVO.getFromUserId())
.likeIfPresent(BpmOAWorkTaskDO::getTaskName, reqVO.getTaskName())
.eqIfPresent(BpmOAWorkTaskDO::getWorkTaskStatus, reqVO.getWorkTaskStatus())
.betweenIfPresent(BpmOAWorkTaskDO::getCreateTime, reqVO.getCreateTime())
.eq(BpmOAWorkTaskDO::getReceiverUserId, userId)
.orderByDesc(BpmOAWorkTaskDO::getId));
}
}

View File

@ -3,8 +3,6 @@ package cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.impl
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.SetUtils;
import cn.iocoder.yudao.module.bpm.controller.admin.task.vo.task.BpmTaskRespVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAWorkTaskMapper;
import cn.iocoder.yudao.module.bpm.enums.definition.BpmTaskRuleScriptEnum;
import cn.iocoder.yudao.module.bpm.framework.flowable.core.behavior.script.BpmTaskAssignScript;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
@ -15,17 +13,16 @@ import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Set;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import static java.util.Collections.emptySet;
@Component
public class BpmTaskWorkTaskReceiverUserScript implements BpmTaskAssignScript {
@Resource
private BpmOAWorkTaskMapper bpmOAWorkTaskMapper;
@Resource
@Lazy // 解决循环依赖
private BpmProcessInstanceService bpmProcessInstanceService;
@ -33,6 +30,10 @@ public class BpmTaskWorkTaskReceiverUserScript implements BpmTaskAssignScript {
@Resource
@Lazy // 解决循环依赖
private BpmTaskService bpmTaskService ;
@Resource
private HttpSession session;
@Override
public Set<Long> calculateTaskCandidateUsers(DelegateExecution execution) {
@ -43,9 +44,7 @@ public class BpmTaskWorkTaskReceiverUserScript implements BpmTaskAssignScript {
return emptySet();
}
//根据流程实例ID 取到分配工作的流程表单
BpmOAWorkTaskDO workTask = bpmOAWorkTaskMapper.selectByProcessInstanceId(processInstance.getProcessInstanceId());
return SetUtils.asSet(workTask.getReceiverUserId());
return SetUtils.asSet((Long) session.getAttribute(getLoginUserId().toString()));
}
@Override

View File

@ -2,15 +2,16 @@ package cn.iocoder.yudao.module.bpm.service.message;
import cn.iocoder.yudao.framework.web.config.WebProperties;
import cn.iocoder.yudao.module.bpm.convert.message.BpmMessageConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.task.BpmProcessInstanceExtDO;
import cn.iocoder.yudao.module.bpm.enums.message.BpmMessageEnum;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceApproveReqDTO;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenProcessInstanceRejectReqDTO;
import cn.iocoder.yudao.module.bpm.service.message.dto.BpmMessageSendWhenTaskCreatedReqDTO;
import cn.iocoder.yudao.module.bpm.service.oa.BpmOAWorkTaskService;
import cn.iocoder.yudao.module.bpm.service.task.BpmProcessInstanceService;
import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi;
import cn.iocoder.yudao.module.system.api.sms.SmsSendApi;
import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
@ -36,7 +37,7 @@ import java.util.regex.Pattern;
public class BpmMessageServiceImpl implements BpmMessageService {
@Resource
private SmsSendApi smsSendApi;
private AdminUserApi userApi;
@Resource
private NotifyMessageSendApi notifyMessageSendApi;
@ -51,6 +52,9 @@ public class BpmMessageServiceImpl implements BpmMessageService {
@Lazy // 解决循环依赖
private BpmProcessInstanceService bpmProcessInstanceService;
@Resource
private BpmOAWorkTaskService workTaskService;
@Override
public void sendMessageWhenProcessInstanceApprove(BpmMessageSendWhenProcessInstanceApproveReqDTO reqDTO) {
//审批通过
@ -67,14 +71,27 @@ public class BpmMessageServiceImpl implements BpmMessageService {
//发送审批结果通知至微信
String openId = getUserOpenId(reqDTO.getStartUserId());
if (openId != null) {
subscribeMessageSendApi.sendApprovalResultNotification(
BpmMessageConvert.INSTANCE.convertApprovalResultNotification(
openId, reqDTO.getProcessInstanceName(), reqDTO.getCreateTime(), "通过", reqDTO.getReason(),
reqDTO.getProcessInstanceId(),
/**
* 跳转小程序类型developer为开发版trial为体验版formal为正式版默认为正式版
*/
"formal"));
// 获得任务分配数据
BpmOAWorkTaskDO workTaskDO = workTaskService.getWorkTaskByProcessInstanceId(reqDTO.getProcessInstanceId());
if (workTaskDO != null) {
String nickName = userApi.getUser(workTaskDO.getReceiverUserId()).getCheckedData().getNickname();
subscribeMessageSendApi.sendWorkLogComment(BpmMessageConvert.INSTANCE.convertWorkTask(
openId, reqDTO.getProcessInstanceName(), workTaskDO, nickName, reqDTO.getCreateTime(),
"formal", true));
}else {
subscribeMessageSendApi.sendApprovalResultNotification(
BpmMessageConvert.INSTANCE.convertApprovalResultNotification(
openId, reqDTO.getProcessInstanceName(), reqDTO.getCreateTime(), "通过", reqDTO.getReason(),
reqDTO.getProcessInstanceId(),
/**
* 跳转小程序类型developer为开发版trial为体验版formal为正式版默认为正式版
*/
"formal"));
}
}
//当流程全部审批通过
@ -147,6 +164,7 @@ public class BpmMessageServiceImpl implements BpmMessageService {
// templateParams.put("taskName", reqDTO.getTaskName());
templateParams.put("startUserNickname", reqDTO.getStartUserNickname());
templateParams.put("detailUrl", getProcessInstanceDetailUrl(reqDTO.getProcessInstanceId()));
//短信
// smsSendApi.sendSingleSmsToAdmin(BpmMessageConvert.INSTANCE.convert(reqDTO.getAssigneeUserId(),
// BpmMessageEnum.TASK_ASSIGNED.getSmsTemplateCode(), templateParams));
@ -158,10 +176,21 @@ public class BpmMessageServiceImpl implements BpmMessageService {
//发送OA流程待办提醒
String openId = getUserOpenId(assigneeUserId); //只有在微信小程序登陆过用户才会有openid
if (openId != null) {
subscribeMessageSendApi.sendProcessToDoReminder(BpmMessageConvert.INSTANCE.convertProcessToDoReminder(
openId, reqDTO.getProcessInstanceName(), reqDTO.getStartUserNickname(), reqDTO.getCreateTime(), reqDTO.getSchedule(),
reqDTO.getProcessInstanceId(),
"formal"));
// 获得任务分配数据
BpmOAWorkTaskDO workTaskDO = workTaskService.getWorkTaskByProcessInstanceId(reqDTO.getProcessInstanceId());
if (workTaskDO != null) {
subscribeMessageSendApi.sendWorkLogComment(BpmMessageConvert.INSTANCE.convertWorkTask(
openId, reqDTO.getProcessInstanceName(), workTaskDO, reqDTO.getStartUserNickname(), reqDTO.getCreateTime(),
"formal", false));
}else {
subscribeMessageSendApi.sendProcessToDoReminder(BpmMessageConvert.INSTANCE.convertProcessToDoReminder(
openId, reqDTO.getProcessInstanceName(), reqDTO.getStartUserNickname(), reqDTO.getCreateTime(), reqDTO.getSchedule(),
reqDTO.getProcessInstanceId(),
"formal"));
}
}
}
}

View File

@ -2,15 +2,12 @@ package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeaveCreateReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.leave.BpmOALeavePageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskRespVO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOALeaveDO;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
import javax.validation.Valid;
import java.util.List;
/**
* 任务分配 Service 接口
@ -41,18 +38,41 @@ public interface BpmOAWorkTaskService {
* 获得工作任务详情
*
* @param id 编号
* @return 请假申请
* @return 任务分配
*/
BpmOAWorkTaskDO getWorkTask(Long id);
/**
* 获得工作任务详情
*
* @param processInstanceId 流程实例编号
* @return 任务分配
*/
BpmOAWorkTaskDO getWorkTaskByProcessInstanceId(String processInstanceId);
/**
* 更新 工作跟踪日志数据
* 因为是所有数据是存储在一个字段所以是全量更新
* @param id
* @param trackInfos
* @param updateReqVO
*
*/
void addTrackInfo(Long id, List<BpmOAWorkTaskRespVO.TrackInfo> trackInfos) ;
void addTrackInfo(BpmOAWorkTaskReqVO updateReqVO) ;
void updateWorkTask( Long id, BpmOAWorkTaskReqVO createReqVO) ;
void updateWorkTask(BpmOAWorkTaskReqVO createReqVO) ;
/**
* 获得 任务分配分页
* @param loginUserId 用户编号
* @param pageVO 分页条件
* @return 任务分配分页
*/
PageResult<BpmOAWorkTaskRespVO> getPage(Long loginUserId, BpmOAWorkTaskPageReqVO pageVO);
/**
* 获得 我的任务分页
* @param loginUserId 用户编号
* @param pageVO 分页条件
* @return 任务分配分页
*/
PageResult<BpmOAWorkTaskRespVO> getMyPage(Long loginUserId, BpmOAWorkTaskPageReqVO pageVO);
}

View File

@ -1,24 +1,40 @@
package cn.iocoder.yudao.module.bpm.service.oa;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskPageReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskReqVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskRespVO;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.worktask.BpmOAWorkTaskTrackInfo;
import cn.iocoder.yudao.module.bpm.controller.admin.upload.UploadUserFile;
import cn.iocoder.yudao.module.bpm.convert.oa.BpmOAWorkTaskConvert;
import cn.iocoder.yudao.module.bpm.dal.dataobject.oa.BpmOAWorkTaskDO;
import cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAWorkTaskMapper;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
import static cn.iocoder.yudao.module.bpm.enums.ErrorCodeConstants.OA_WORK_TASK_NOT_EXISTS;
/**
@ -42,11 +58,28 @@ public class BpmOAWorkTaskServiceImpl extends BpmOABaseService implements BpmOAW
@Resource
private BpmProcessInstanceApi processInstanceApi;
@Resource
private HttpSession session;
@Resource
private AdminUserApi userApi;
@Resource
private DeptApi deptApi;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createWorkTask(Long userId, BpmOAWorkTaskReqVO createReqVO) {
//设置 责任人Id
session.setAttribute(userId.toString(), createReqVO.getUserId());
// 获取当前登录用户得信息
AdminUserRespDTO userRespDTO = userApi.getUser(userId).getCheckedData();
BpmOAWorkTaskDO workTask = BpmOAWorkTaskConvert.INSTANCE.convert(createReqVO)
.setFromUserId(userId)
.setFromDeptId(userRespDTO.getDeptId())
.setWorkTaskStatus(1) //默认待启动状态
.setReceiverUserId(createReqVO.getUserId())
.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
@ -73,13 +106,17 @@ public class BpmOAWorkTaskServiceImpl extends BpmOABaseService implements BpmOAW
public void updateWorkTaskResult(Long id, Integer result) {
validateLeaveExists(id);
//bpm流程设置成已完成需要将任务自生的状态设置成已完成
workTaskMapper.updateById(new BpmOAWorkTaskDO().setId(id).setResult(result).setWorkTaskStatus(3));
workTaskMapper.updateById(new BpmOAWorkTaskDO().setId(id).setResult(result).setWorkTaskStatus(3).setSchedule(100L));
}
private void validateLeaveExists(Long id) {
if (workTaskMapper.selectById(id) == null) {
private BpmOAWorkTaskDO validateLeaveExists(Long id) {
BpmOAWorkTaskDO taskDO = workTaskMapper.selectById(id);
if (taskDO == null) {
throw exception(OA_WORK_TASK_NOT_EXISTS);
}
return taskDO;
}
@Override
@ -88,15 +125,91 @@ public class BpmOAWorkTaskServiceImpl extends BpmOABaseService implements BpmOAW
}
@Override
public void addTrackInfo(Long id, List<BpmOAWorkTaskRespVO.TrackInfo> trackInfos) {
validateLeaveExists(id);
workTaskMapper.updateById(new BpmOAWorkTaskDO().setId(id).setTrackInfos(trackInfos));
public BpmOAWorkTaskDO getWorkTaskByProcessInstanceId(String processInstanceId) {
return workTaskMapper.selectOne(BpmOAWorkTaskDO::getProcessInstanceId, processInstanceId);
}
@Override
public void updateWorkTask(Long id, BpmOAWorkTaskReqVO createReqVO) {
validateLeaveExists(id);
public void addTrackInfo(BpmOAWorkTaskReqVO updateReqVO) {
//设置 跟踪任务创建时间
BpmOAWorkTaskTrackInfo taskTrackInfo = updateReqVO.getTrackInfos();
taskTrackInfo.setTrackTime(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
BpmOAWorkTaskDO taskDO = validateLeaveExists(updateReqVO.getId());
List<BpmOAWorkTaskTrackInfo> info = taskDO.getTrackInfo();
if (info == null) {
info = new ArrayList<>();
}
info.add(taskTrackInfo);
BpmOAWorkTaskDO updateDo = new BpmOAWorkTaskDO();
updateDo.setId(updateReqVO.getId());
updateDo.setTrackInfo(info);
workTaskMapper.updateById(updateDo);
}
@Override
public void updateWorkTask(BpmOAWorkTaskReqVO createReqVO) {
BpmOAWorkTaskDO taskDO = validateLeaveExists(createReqVO.getId());
if (taskDO.getWorkTaskStatus() == 5 && createReqVO.getWorkTaskStatus() == 2) {
Long daysDifference = ChronoUnit.DAYS.between(taskDO.getStartTime(), taskDO.getEndTime());
createReqVO.setShelveStartTime(LocalDate.now());
createReqVO.setShelveEndTime(LocalDate.now().plusDays(daysDifference));
}
taskDO = BeanUtils.toBean(createReqVO, BpmOAWorkTaskDO.class);
//更新任务进度 任务状态
workTaskMapper.updateById(new BpmOAWorkTaskDO().setId(id).setWorkTaskStatus(createReqVO.getWorkTaskStatus()).setSchedule(createReqVO.getSchedule()));
workTaskMapper.updateById(taskDO);
}
@Override
public PageResult<BpmOAWorkTaskRespVO> getPage(Long loginUserId, BpmOAWorkTaskPageReqVO pageVO) {
PageResult<BpmOAWorkTaskDO> pageResult = workTaskMapper.selectPage(loginUserId, pageVO);
// 获得责任人 用户Id
List<Long> userIds = pageResult.getList().stream().map(BpmOAWorkTaskDO::getReceiverUserId).collect(Collectors.toList());
// 获得责任人用户信息列表
List<AdminUserRespDTO> userRespDTOS = userApi.getUserList(userIds).getCheckedData();
Map<Long, AdminUserRespDTO> userMap = convertMap(userRespDTOS, AdminUserRespDTO::getId);
//获得部门信息map
Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(userRespDTOS.stream().map(AdminUserRespDTO::getDeptId).collect(Collectors.toSet()));
//获得发起人用户信息列表
List<Long> fromUserIds = pageResult.getList().stream().map(BpmOAWorkTaskDO::getFromUserId).collect(Collectors.toList());
Map<Long, AdminUserRespDTO> fromUserMap = userApi.getUserMap(fromUserIds);
PageResult<BpmOAWorkTaskRespVO> dataPage = BeanUtils.toBean(pageResult, BpmOAWorkTaskRespVO.class);
dataPage.getList().forEach(data -> {
data.setFromUserName(fromUserMap.get(data.getFromUserId()).getNickname());
data.setUserName(userMap.get(data.getReceiverUserId()).getNickname());
data.setDeptName(deptMap.get(userMap.get(data.getReceiverUserId()).getDeptId()).getName());
});
return dataPage;
}
@Override
public PageResult<BpmOAWorkTaskRespVO> getMyPage(Long loginUserId, BpmOAWorkTaskPageReqVO pageVO) {
PageResult<BpmOAWorkTaskDO> pageResult = workTaskMapper.selectMyPage(loginUserId, pageVO);
//获得发起人用户信息列表
List<Long> fromUserIds = pageResult.getList().stream().map(BpmOAWorkTaskDO::getFromUserId).collect(Collectors.toList());
Map<Long, AdminUserRespDTO> fromUserMap = userApi.getUserMap(fromUserIds);
PageResult<BpmOAWorkTaskRespVO> dataPage = BeanUtils.toBean(pageResult, BpmOAWorkTaskRespVO.class);
dataPage.getList().forEach(data -> {
data.setFromUserName(fromUserMap.get(data.getFromUserId()).getNickname());
});
return dataPage;
}
}

View File

@ -64,6 +64,14 @@ public interface BpmTaskService {
*/
List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds);
/**
* 获得流程任务列表
*
* @param processInstanceId 流程实例的编号
* @return 流程任务列表
*/
List<Task> getTasksByProcessInstanceId(String processInstanceId);
/**
* 获得指令流程实例的流程任务列表包括所有状态的
*

View File

@ -283,6 +283,12 @@ public class BpmTaskServiceImpl implements BpmTaskService {
return taskService.createTaskQuery().processInstanceIdIn(processInstanceIds).list();
}
@Override
public List<Task> getTasksByProcessInstanceId(String processInstanceId) {
return taskService.createTaskQuery().processInstanceId(processInstanceId).orderByTaskCreateTime().desc().list();
}
@Override
public List<BpmTaskRespVO> getTaskListByProcessInstanceId(String processInstanceId) {
// 获得任务列表