1:转办他人 网上的文章很多都是直接指定执行人,但是业务要求生成一条审批记录,记录审批人为操作人
public BaseResult<String> turnDoProcess(TurnProcessParam param) {
String procInstId = param.getProcInstId();
String userId = SecurityUser.getUserId();
//查询当前审批节点
HistoricActivityInstance instance = historyService
.createHistoricActivityInstanceQuery()
.processInstanceId(param.getProcInstId())
.activityType("userTask")
.orderByHistoricActivityInstanceStartTime().desc().list().get(0);
Date startTime = instance.getStartTime();
long duration = DateUtil.between(startTime, DateUtil.date(), DateUnit.MS);
String id = IdUtil.simpleUUID();
String taskId = instance.getTaskId()+ IdUtil.simpleUUID();
String executionId = instance.getExecutionId();
//插入一条审批记录
ruprocdefRepository.addTurnProcessDetail(id,instance.getProcessDefinitionId(),
procInstId,executionId,instance.getActivityId(),
taskId,instance.getActivityName(),"old" + instance.getActivityType(),
startTime,duration,userId);
//更新历史节点表中当前节点的开始时间为当前时间,并指派任务
ruprocdefRepository.updateTurnProcessDetail(instance.getId(),
param.getApprovalId());
List<ActHiVarInstDto> dtoList = new ArrayList<>(2);
dtoList.add(new ActHiVarInstDto(IdUtil.simpleUUID(),executionId,taskId,
procInstId,Constants.APPROVER_KEY,userId));
//此处为自定义的审批意见字段
dtoList.add(new ActHiVarInstDto(IdUtil.simpleUUID(),executionId,taskId,
procInstId,Constants.APPROVAL_RESULT,",【意见】" + param.getOpinion()));
//记录审批意见
ruprocdefRepository.addTurnHiVarInst(dtoList);
//指定转办人为此任务执行人
taskService.setAssignee(param.getTaskId(),param.getApprovalId());
if (ruprocdefRepository.updateTurnApproval(param) > Constant.FAIL){
return new BaseResult<String>().ok("记录转办操作人成功");
}else{
return new BaseResult<String>().error("记录转办操作人失败");
}
}
@Data
@ApiModel("转办他人审批信息")
public class TurnProcessParam {
@ApiModelProperty("任务Id")
private String taskId;
@ApiModelProperty("流程实例id")
private String procInstId;
@ApiModelProperty("审核意见")
private String opinion;
@ApiModelProperty("转办人id")
private String approvalId;
@ApiModelProperty("转办人姓名")
private String approvalName;
}
下面为对应的xml文件
<insert id="addTurnProcessDetail">
INSERT INTO act_hi_actinst (ID_,PROC_DEF_ID_,PROC_INST_ID_,EXECUTION_ID_,ACT_ID_,TASK_ID_,
ACT_NAME_,ACT_TYPE_,ASSIGNEE_,START_TIME_,END_TIME_,DURATION_)
VALUES (#{id},#{processDefinitionId},#{processInstanceId},#{executionId},
#{activityId},#{taskId},#{activityName},#{activityType},#{userId},
#{startTime},NOW(), #{duration});
</insert>
<update id="updateTurnProcessDetail">
update act_hi_actinst set START_TIME_ = now(),ASSIGNEE_ = #{userId} where ID_ = #{id}
</update>
<update id="updateTurnApproval">
update act_hi_varinst set TEXT_ = #{param.approvalId}
where PROC_INST_ID_ = #{param.procInstId}
and TASK_ID_ = #{param.taskId} and NAME_ = 'approverId'
</update>
<insert id="addTurnHiVarInst">
INSERT INTO act_hi_varinst (ID_,PROC_INST_ID_,EXECUTION_ID_,TASK_ID_,NAME_,VAR_TYPE_,REV_,
TEXT_,CREATE_TIME_,LAST_UPDATED_TIME_)
VALUES
<foreach item="dto" collection="dtoList" separator=",">
(#{dto.id},#{dto.procInstId},#{dto.executionId},#{dto.taskId},#{dto.name}
,#{dto.varType},#{dto.rev},#{dto.text},NOW(),NOW())
</foreach>
</insert>