Activiti6.0 转办(记录当前操作记录)

620 阅读1分钟

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>