任务分配模块
This commit is contained in:
parent
96b6d2102a
commit
beda9fc933
@ -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")
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -64,6 +64,14 @@ public interface BpmTaskService {
|
||||
*/
|
||||
List<Task> getTasksByProcessInstanceIds(List<String> processInstanceIds);
|
||||
|
||||
/**
|
||||
* 获得流程任务列表
|
||||
*
|
||||
* @param processInstanceId 流程实例的编号
|
||||
* @return 流程任务列表
|
||||
*/
|
||||
List<Task> getTasksByProcessInstanceId(String processInstanceId);
|
||||
|
||||
/**
|
||||
* 获得指令流程实例的流程任务列表,包括所有状态的
|
||||
*
|
||||
|
@ -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) {
|
||||
// 获得任务列表
|
||||
|
Loading…
Reference in New Issue
Block a user