You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
382 lines
14 KiB
382 lines
14 KiB
3 years ago
|
using learun.iapplication;
|
||
|
using learun.util;
|
||
|
using Microsoft.AspNetCore.Mvc;
|
||
|
using System.Threading.Tasks;
|
||
|
|
||
|
namespace learun.webapi.Controllers
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 版 本 Learun-ADMS-Core 力软管理后台
|
||
|
/// Copyright (c) 2019-present 力软信息技术(苏州)有限公司
|
||
|
/// 创建人:tobin
|
||
|
/// 日 期:2020.04.17
|
||
|
/// 描 述:流程api
|
||
|
/// </summary>
|
||
|
[Route("newwf/[action]")]
|
||
|
public class NewWorkFlowController : MvcControllerBase
|
||
|
{
|
||
|
private readonly NWFSchemeIBLL _nWFSchemeIBLL;
|
||
|
private readonly NWFProcessIBLL _nWFProcessIBLL;
|
||
|
private readonly FormSchemeIBLL _formSchemeIBLL;
|
||
|
/// <summary>
|
||
|
/// 初始化
|
||
|
/// </summary>
|
||
|
/// <param name="nWFSchemeIBLL">流程模板</param>
|
||
|
/// <param name="nWFProcessIBLL">流程实例</param>
|
||
|
/// <param name="formSchemeIBLL">表单模板</param>
|
||
|
public NewWorkFlowController(NWFSchemeIBLL nWFSchemeIBLL, NWFProcessIBLL nWFProcessIBLL, FormSchemeIBLL formSchemeIBLL)
|
||
|
{
|
||
|
_nWFSchemeIBLL = nWFSchemeIBLL;
|
||
|
_nWFProcessIBLL = nWFProcessIBLL;
|
||
|
_formSchemeIBLL = formSchemeIBLL;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取我的流程实例信息
|
||
|
/// </summary>
|
||
|
/// <param name="pagination">分页参数</param>
|
||
|
/// <param name="queryJson">查询条件</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpGet]
|
||
|
public async Task<IActionResult> MyProcessList(Pagination pagination, string queryJson)
|
||
|
{
|
||
|
var list = await _nWFProcessIBLL.GetMyPageList(pagination, queryJson);
|
||
|
var jsonData = new
|
||
|
{
|
||
|
rows = list,
|
||
|
pagination.total,
|
||
|
pagination.page,
|
||
|
pagination.records
|
||
|
};
|
||
|
return Success(jsonData);
|
||
|
}
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// /获取我的任务列表
|
||
|
/// </summary>
|
||
|
/// <param name="pagination">分页参数</param>
|
||
|
/// <param name="queryJson">查询条件</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpGet]
|
||
|
public async Task<IActionResult> MyTaskList(Pagination pagination, string queryJson)
|
||
|
{
|
||
|
var list = await _nWFProcessIBLL.GetMyTaskPageList(pagination, queryJson);
|
||
|
var jsonData = new
|
||
|
{
|
||
|
rows = list,
|
||
|
pagination.total,
|
||
|
pagination.page,
|
||
|
pagination.records
|
||
|
};
|
||
|
return Success(jsonData);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取我已处理的任务列表
|
||
|
/// </summary>
|
||
|
/// <param name="pagination">分页参数</param>
|
||
|
/// <param name="queryJson">查询条件</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpGet]
|
||
|
public async Task<IActionResult> MyMakeTaskList(Pagination pagination, string queryJson)
|
||
|
{
|
||
|
var list = await _nWFProcessIBLL.GetMyFinishTaskPageList(pagination, queryJson);
|
||
|
var jsonData = new
|
||
|
{
|
||
|
rows = list,
|
||
|
pagination.total,
|
||
|
pagination.page,
|
||
|
pagination.records
|
||
|
};
|
||
|
return Success(jsonData);
|
||
|
}
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取流程模板
|
||
|
/// </summary>
|
||
|
/// <param name="pagination">分页参数</param>
|
||
|
/// <param name="queryJson">查询条件</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpGet]
|
||
|
public async Task<IActionResult> SchemePageList(Pagination pagination, string queryJson)
|
||
|
{
|
||
|
var list = await _nWFSchemeIBLL.GetAppInfoPageList(pagination, queryJson);
|
||
|
var jsonData = new
|
||
|
{
|
||
|
rows = list,
|
||
|
pagination.total,
|
||
|
pagination.page,
|
||
|
pagination.records
|
||
|
};
|
||
|
return Success(jsonData);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取流程模板
|
||
|
/// </summary>
|
||
|
/// <param name="code">流程编码</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpGet]
|
||
|
public async Task<IActionResult> SchemeByCode(string code)
|
||
|
{
|
||
|
var schemeInfo = await _nWFSchemeIBLL.GetInfoEntityByCode(code);
|
||
|
if (schemeInfo != null)
|
||
|
{
|
||
|
var data = await _nWFSchemeIBLL.GetSchemeEntity(schemeInfo.F_SchemeId);
|
||
|
return Success(data);
|
||
|
}
|
||
|
return Fail("找不到该流程模板");
|
||
|
}
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// 获取流程下一节点审核人员
|
||
|
/// </summary>
|
||
|
/// <param name="code">流程编码</param>
|
||
|
/// <param name="processId">流程进程主键</param>
|
||
|
/// <param name="taskId">任务主键</param>
|
||
|
/// <param name="nodeId">节点ID</param>
|
||
|
/// <param name="operationCode">操作编码</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpGet]
|
||
|
public async Task<IActionResult> NextAuditors(string code, string processId, string taskId, string nodeId, string operationCode)
|
||
|
{
|
||
|
var data = await _nWFProcessIBLL.GetNextAuditors(code, processId, taskId, nodeId, operationCode);
|
||
|
return Success(data);
|
||
|
}
|
||
|
/// <summary>
|
||
|
/// 获取流程进程信息
|
||
|
/// </summary>
|
||
|
/// <param name="processId">进程主键</param>
|
||
|
/// <param name="taskId">任务主键</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpGet]
|
||
|
public async Task<IActionResult> ProcessDetails(string processId, string taskId)
|
||
|
{
|
||
|
var data = await _nWFProcessIBLL.GetProcessDetails(processId, taskId);
|
||
|
if (!string.IsNullOrEmpty(data.childProcessId))
|
||
|
{
|
||
|
processId = data.childProcessId;
|
||
|
}
|
||
|
|
||
|
var taskNode = await _nWFProcessIBLL.GetTaskUserList(processId);
|
||
|
|
||
|
var jsonData = new
|
||
|
{
|
||
|
info = data,
|
||
|
task = taskNode
|
||
|
};
|
||
|
|
||
|
return Success(jsonData);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 创建流程实例
|
||
|
/// </summary>
|
||
|
/// <param name="code">流程模板编码</param>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <param name="title">流程标题</param>
|
||
|
/// <param name="level">流程等级</param>
|
||
|
/// <param name="auditors">下一节点审核人信息</param>
|
||
|
/// <param name="formreq">自定义表单请求参数</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> Create([FromForm]string code, [FromForm]string processId, [FromForm]string title, [FromForm]int level, [FromForm]string auditors, [FromForm]string formreq)
|
||
|
{
|
||
|
await SaveForm(formreq);
|
||
|
await _nWFProcessIBLL.CreateFlow(code, processId, title, level, auditors, this.GetUserId());
|
||
|
return this.SuccessInfo("创建成功");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 重新创建流程
|
||
|
/// </summary>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <param name="formreq">自定义表单请求参数</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> AgainCreateFlow([FromForm]string processId, [FromForm]string formreq)
|
||
|
{
|
||
|
await SaveForm(formreq);
|
||
|
await _nWFProcessIBLL.AgainCreateFlow(processId);
|
||
|
return SuccessInfo("重新创建成功");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 创建流程(子流程)
|
||
|
/// </summary>
|
||
|
/// <param name="code">流程模板编码</param>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <param name="parentProcessId">父级流程实例主键</param>
|
||
|
/// <param name="parentTaskId">父级流程任务主键</param>
|
||
|
/// <param name="formreq">表单请求数据</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> CreateChildFlow([FromForm]string code, [FromForm]string processId, [FromForm]string parentProcessId, [FromForm]string parentTaskId, [FromForm]string formreq)
|
||
|
{
|
||
|
await SaveForm(formreq);
|
||
|
await _nWFProcessIBLL.CreateChildFlow(code, processId, parentProcessId, parentTaskId);
|
||
|
return SuccessInfo("子流程创建成功");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 保存草稿(流程)
|
||
|
/// </summary>
|
||
|
/// <param name="code">流程模板编码</param>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <param name="formreq">表单请求数据</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> SaveDraft([FromForm]string code, [FromForm]string processId, [FromForm]string formreq)
|
||
|
{
|
||
|
await SaveForm(formreq);
|
||
|
if (!string.IsNullOrEmpty(processId))
|
||
|
{
|
||
|
await _nWFProcessIBLL.SaveDraft(processId, code, this.GetUserId());
|
||
|
}
|
||
|
return SuccessInfo("保存成功");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 删除草稿
|
||
|
/// </summary>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> DeleteDraft([FromForm]string processId)
|
||
|
{
|
||
|
await _nWFProcessIBLL.DeleteDraft(processId);
|
||
|
return SuccessInfo("草稿删除成功");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 审批流程
|
||
|
/// </summary>
|
||
|
/// <param name="operationCode">审核编码</param>
|
||
|
/// <param name="operationName">审核编码中文意思</param>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <param name="taskId">任务主键</param>
|
||
|
/// <param name="des">审核备注信息</param>
|
||
|
/// <param name="auditors">下一节点审核人信息</param>
|
||
|
/// <param name="signUrl">审核人签名信息</param>
|
||
|
/// <param name="formreq">自定义表单信息</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> AuditFlow([FromForm]string operationCode, [FromForm]string operationName, [FromForm]string processId, [FromForm]string taskId, [FromForm]string des, [FromForm]string auditors, [FromForm]string signUrl, [FromForm]string formreq)
|
||
|
{
|
||
|
|
||
|
await SaveForm(formreq);
|
||
|
await _nWFProcessIBLL.AuditFlow(operationCode, operationName, processId, taskId, des, auditors, "", signUrl);
|
||
|
return SuccessInfo("审批成功");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 流程加签
|
||
|
/// </summary>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <param name="taskId">任务主键</param>
|
||
|
/// <param name="des">审核备注信息</param>
|
||
|
/// <param name="userId">加签人ID</param>
|
||
|
/// <param name="formreq">自定义表单信息</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> SignFlow([FromForm]string processId, [FromForm]string taskId, [FromForm]string des, [FromForm]string userId, [FromForm]string formreq)
|
||
|
{
|
||
|
await SaveForm(formreq);
|
||
|
await _nWFProcessIBLL.SignFlow(processId, taskId, userId, des);
|
||
|
return SuccessInfo("加签成功");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 流程加签审核
|
||
|
/// </summary>
|
||
|
/// <param name="operationCode">审核码</param>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <param name="taskId">任务主键</param>
|
||
|
/// <param name="des">审核备注信息</param>
|
||
|
/// <param name="userId">加签人ID</param>
|
||
|
/// <param name="formreq">自定义表单信息</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> SignAuditFlow([FromForm]string operationCode, [FromForm]string processId, [FromForm]string taskId, [FromForm]string des, [FromForm]string userId, [FromForm]string formreq)
|
||
|
{
|
||
|
await SaveForm(formreq);
|
||
|
await _nWFProcessIBLL.SignAuditFlow(operationCode, processId, taskId, des);
|
||
|
return SuccessInfo("加签审批成功");
|
||
|
}
|
||
|
|
||
|
|
||
|
/// <summary>
|
||
|
/// 催办流程
|
||
|
/// </summary>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> UrgeFlow([FromForm]string processId)
|
||
|
{
|
||
|
await _nWFProcessIBLL.UrgeFlow(processId);
|
||
|
return SuccessInfo("催办成功");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 撤销流程(只有在该流程未被处理的情况下)
|
||
|
/// </summary>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> RevokeFlow([FromForm]string processId)
|
||
|
{
|
||
|
await _nWFProcessIBLL.RevokeFlow(processId);
|
||
|
return SuccessInfo("撤销成功");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 确认阅读
|
||
|
/// </summary>
|
||
|
/// <param name="processId">流程实例主键</param>
|
||
|
/// <param name="taskId">任务主键</param>
|
||
|
/// <returns></returns>
|
||
|
[HttpPost]
|
||
|
public async Task<IActionResult> ReferFlow([FromForm]string processId, [FromForm]string taskId)
|
||
|
{
|
||
|
await _nWFProcessIBLL.ReferFlow(processId, taskId);
|
||
|
return SuccessInfo("确认成功");
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 保存自定义表单数据
|
||
|
/// </summary>
|
||
|
/// <param name="formreq">请求参数</param>
|
||
|
private async Task SaveForm(string formreq)
|
||
|
{
|
||
|
FormParam formParam = formreq.ToObject<FormParam>();
|
||
|
await _formSchemeIBLL.SaveInstanceForm(formParam.schemeInfoId, formParam.processIdName, formParam.keyValue, formParam.formData);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// 自定义表单提交参数
|
||
|
/// </summary>
|
||
|
private class FormParam
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// 流程模板id
|
||
|
/// </summary>
|
||
|
public string schemeInfoId { get; set; }
|
||
|
/// <summary>
|
||
|
/// 关联字段名称
|
||
|
/// </summary>
|
||
|
public string processIdName { get; set; }
|
||
|
/// <summary>
|
||
|
/// 数据主键值
|
||
|
/// </summary>
|
||
|
public string keyValue { get; set; }
|
||
|
/// <summary>
|
||
|
/// 表单数据
|
||
|
/// </summary>
|
||
|
public string formData { get; set; }
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|