You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

673 lines
21 KiB
C#

5 months ago
using Infrastructure;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using NetTaste;
using OpenAuth.App;
using OpenAuth.App.Config;
using OpenAuth.App.Interface;
using OpenAuth.App.Request;
using OpenAuth.App.Response;
using OpenAuth.Repository.Domain;
using System.Threading.Tasks;
using OpenAuth.App.BaseApp.WFTask;
namespace OpenAuth.WebApi.Controllers
{
/// <summary>
/// 流程实例
/// </summary>
[Route("api/[controller]/[action]")]
[ApiController]
public class WFProcessController : ControllerBase
{
WFSchemeInfoApp schemeInfoApp;
WFProcessApp processApp;
WFTaskApp taskApp;
IAuth auth;
public WFProcessController(
WFSchemeInfoApp schemeInfoApp,
WFProcessApp processApp,
WFTaskApp taskApp,
IAuth auth
)
{
this.schemeInfoApp = schemeInfoApp;
this.processApp = processApp;
this.taskApp = taskApp;
this.auth = auth;
}
#region 查询
#region 流程实例
/// <summary>
/// 获取流程信息
/// workflow/process/{id}
/// </summary>
/// <param name="id">任务id</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<WFTaskDto>> Get(string id)
{
var res = new WFTaskDto();
res.Process = await processApp.GetEntity(id);
res.Scheme = await schemeInfoApp.GetSchemeEntity(res.Process.SchemeId);
res.Logs = await taskApp.GetLogList(id);
res.Tasks = await taskApp.GetUnFinishTaskList(id);
return new Response<WFTaskDto>
{
Result = res,
Message = "success"
};
}
/// <summary>
/// 获取流程信息 适配 BPMN
/// workflow/process/{id}
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
public async Task<Response<BPMNWFTaskDto>> GetBPMN(string id)
{
var res = new BPMNWFTaskDto();
res.FlowViewer = new FlowUnit();
var process = await processApp.GetEntity(id);
res.Process = process;
var scheme = await schemeInfoApp.GetSchemeEntity(process.SchemeId);
res.Scheme = scheme;
res.FlowContent = scheme.FlowContent;
res.Logs = await taskApp.GetLogList(id);
var unfinishTasks = await taskApp.GetUnFinishTaskList(id);
res.Tasks = unfinishTasks;
res.FlowViewer.UnfinishedTaskSet = unfinishTasks.Select(a => a.UnitId).ToList();
List<string> unfids = new List<string>();
if (unfinishTasks.Count() > 0)
{
unfids = unfinishTasks.Select(r => r.Id).ToList();
}
var finishTasks = await taskApp.GetFinishTaskList(id, unfids);
res.FlowViewer.FinishedTaskSet = finishTasks.Select(a => a.UnitId).ToList();
return new Response<BPMNWFTaskDto>
{
Result = res,
Message = "success"
};
}
#endregion
#region 草稿实例
/// <summary>
/// 草稿实例
/// workflow/process/draft/{id}
/// </summary>
/// <param name="id">草稿id</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<WFTaskDto>> GetDraft(string id)
{
var res = new WFTaskDto();
res.Process = await processApp.GetEntity(id);
if(res.Process != null)
{
res.Scheme = await schemeInfoApp.GetSchemeEntity(res.Process.SchemeId);
}
return new Response<WFTaskDto>
{
Result = res,
Message = "success"
};
}
#endregion
#region 流程实例分页
/// <summary>
/// 获取流程列表
/// workflow/process/page
/// </summary>
/// <param name="PageReq">分页参数</param>
/// <param name="searchParams">查询参数</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<PageInfo<List<WFProcess>>>> LoadPage([FromQuery] PageReq pageReq, [FromQuery] WFProcessSearchDto searchParams)
{
var pageInfo = await processApp.GetPageList(pageReq, searchParams);
return new Response<PageInfo<List<WFProcess>>>
{
Result = pageInfo,
Message = "success"
};
}
#endregion
#region 我的流程
/// <summary>
/// 我的流程分页
/// workflow/process/mypage
/// </summary>
/// <param name="PageReq">分页参数</param>
/// <param name="searchParams">查询参数</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<PageInfo<List<WFProcess>>>> LoadMyPage([FromQuery] PageReq pageReq, [FromQuery] WFProcessSearchDto searchParams)
{
var pageInfo = await processApp.GetMyPageList(pageReq, searchParams, 1);
return new Response<PageInfo<List<WFProcess>>>
{
Result = pageInfo,
Message = "success"
};
}
#endregion
#region 我的草稿分页
/// <summary>
/// 我的草稿分页
/// "workflow/process/mydraftpage
/// </summary>
/// <param name="PageReq">分页参数</param>
/// <param name="searchParams">查询参数</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<PageInfo<List<WFProcess>>>> LoadMyDraftPage([FromQuery] PageReq pageReq, [FromQuery] WFProcessSearchDto searchParams)
{
var pageInfo = await processApp.GetMyPageList(pageReq, searchParams, 2);
return new Response<PageInfo<List<WFProcess>>>
{
Result = pageInfo,
Message = "success"
};
}
#endregion
#region 获取下一节点审核人
/// <summary>
/// 获取下一节点审核人
/// workflow/process/nextusers
/// </summary>
/// <param name="code">流程模板编码</param>
/// <param name="processId">流程进程主键</param>
/// <param name="nodeId">流程节点Id</param>
/// <param name="operationCode">流程操作代码</param>
/// <param name="userId">创建人</param>
/// <returns></returns>
[HttpGet]
public async Task<Response<Dictionary<string, List<WFUserInfo>>>> LoadNextAuditors(string code, string processId, string nodeId, string operationCode, string userId)
{
var data = await processApp.GetNextAuditors(code, processId, nodeId, operationCode, userId);
return new Response<Dictionary<string, List<WFUserInfo>>>
{
Result = data
};
}
#endregion
#endregion
#region 保存草稿
/// <summary>
/// 保存草稿
/// workflow/process/draft
/// </summary>
/// <param name="dto">提交参数</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> SaveDraft(WFProcessDto dto)
{
var result = new Response<bool>();
try
{
result = await processApp.SaveDraft(dto.ProcessId, dto.SchemeCode, dto.UserId, dto.InstanceInfo, dto.ParentProcessId, dto.ParentNodeId, dto.ParentTaskId, dto.IsChild, dto.Title);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
/// <summary>
/// 保存草稿
/// workflow/process/draft
/// </summary>
/// <param name="dto">提交参数</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> SaveDraftWithUser(WFProcessDto dto)
{
var result = new Response<bool>();
try
{
result = await processApp.SaveDraftWithUser(dto.ProcessId, dto.SchemeCode, dto.UserId, dto.InstanceInfo, dto.ParentProcessId, dto.ParentNodeId, dto.ParentTaskId, dto.IsChild, dto.Title);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 删除草稿
/// <summary>
/// 删除草稿
/// workflow/process/draft/{id}
/// </summary>
/// <param name="dto">提交参数</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> DeleteDraft(string id)
{
var result = new Response<bool>();
try
{
result = await processApp.DeleteDraft(id);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 创建流程
/// <summary>
/// 创建流程
/// workflow/process/create
/// </summary>
/// <param name="dto">提交参数</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> Create(WFProcessDto dto)
{
var result = new Response<bool>();
try
{
result = await processApp.Create(dto.ProcessId, dto.SchemeCode, dto.UserId, dto.NextUsers, dto.InstanceInfo, dto.Title);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
/// <summary>
/// 创建流程
/// workflow/process/create
/// </summary>
/// <param name="dto">提交参数</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> CreateWithUser(WFProcessDto dto)
{
var result = new Response<bool>();
try
{
result = await processApp.CreateWithUser(dto.ProcessId, dto.SchemeCode, dto.UserId, dto.NextUsers, dto.InstanceInfo, dto.Title);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 重新创建流程
/// <summary>
/// 重新创建流程
/// workflow/process/createAgain
/// </summary>
/// <param name="dto">提交参数</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> CreateAgain(WFProcessDto dto)
{
var result = new Response<bool>();
try
{
result = await processApp.CreateAgain(dto.ProcessId, dto.Des);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 撤销流程
/// <summary>
/// 撤销流程(只有在该流程未被处理的情况下)
/// workflow/process/revoke/{id}
/// </summary>
/// <param name="id">流程进程主键</param>
[HttpPost]
public async Task<Response<bool>> Revoke(string id)
{
var result = new Response<bool>();
try
{
result.Result = await processApp.RevokeFlow(id);
result.Message = "success";
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 作废流程
/// <summary>
/// 作废流程
/// workflow/process/{id}
/// </summary>
/// <param name="id">流程进程主键</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> Delete(string id)
{
var result = new Response<bool>();
try
{
result = await processApp.DeleteProcess(id);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 催办流程
/// <summary>
/// 催办流程
/// workflow/process/urge/{id}
/// </summary>
/// <param name="id">流程进程主键</param>
[HttpPost]
public async Task<Response<bool>> Urge(string id)
{
var result = new Response<bool>();
try
{
result = await processApp.UrgeFlow(id);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
/// <summary>
/// 督办流程
/// </summary>
/// <param name="id">流程id</param>
/// <param name="supervise">1 督办 0 取消督办</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> Supervise(string id,int supervise)
{
var result = new Response<bool>();
try
{
result = await processApp.Supervise(id,supervise);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 流程审核
/// <summary>
/// 流程审核-有问题
/// workflow/process/audit/{id}
/// </summary>
/// <param name="id">任务id</param>
[HttpPost]
public async Task<Response<bool>> Audit(string id, WFProcessDto dto)
{
var result = new Response<bool>();
try
{
await processApp.AuditFlow(id, dto.Code, dto.Name, dto.Des, dto.NextUsers, dto.StampImg, dto.StampPassWord, dto.NextId);
result.Result = true;
result.Message = "success";
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 流程撤回
/// <summary>
/// 流程撤回
/// workflow/process/Retract/{id}
/// </summary>
/// <param name="id">任务id</param>
[HttpPost]
public async Task<Response<bool>> Retract(string id, WFProcessDto dto)
{
var result = new Response<bool>();
try
{
await processApp.RetractFlow(id, dto.Code, dto.Name, dto.Des, dto.NextUsers, dto.StampImg, dto.StampPassWord, dto.NextId);
result.Result = true;
result.Message = "success";
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 流程批量审核
/// <summary>
/// 流程批量审核-有问题
/// workflow/process/audits/{code}
/// </summary>
/// <param name="id">任务id</param>
[HttpPost]
public async Task<Response<bool>> Audits(string code, List<string> taskList)
{
await processApp.AuditFlows(code, taskList);
return null;
}
#endregion
#region 撤销审核
/// <summary>
/// 撤销审核
/// workflow/process/audit/revoke/{id}
/// </summary>
/// <param name="id">流程实例主键</param>
/// <param name="taskId">流程任务主键</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> RevokeAudit(string id, string taskId)
{
var result = new Response<bool>();
try
{
result = await processApp.RevokeAudit(id, taskId);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 加签
/// <summary>
/// 加签
/// workflow/process/sign/{id}
/// </summary>
/// <param name="id">任务id</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> Sign(string id, WFProcessDto dto)
{
var result = new Response<bool>();
try
{
result = await processApp.SignFlow(id, dto.ToUserId, dto.Des);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 加签审核
/// <summary>
/// 加签审核
/// workflow/process/signaudit/{id}
/// </summary>
/// <param name="id">任务id</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> SignAudit(string id, WFProcessDto dto)
{
var result = new Response<bool>();
try
{
result = await processApp.SignAudit(id, dto.Code, dto.Name, dto.Des);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 确认阅读
/// <summary>
/// 确认阅读
/// workflow/process/read/{id}
/// </summary>
/// <param name="id">流程任务主键</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> ReadFlow(string id)
{
var result = new Response<bool>();
try
{
result = await processApp.ReadFlow(id);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 转移审核人
/// <summary>
/// 转移审核人
/// workflow/process/transfer/{id}
/// </summary>
/// <param name="id">流程任务主键</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> TransferUser(string id, WFProcessDto dto)
{
var result = new Response<bool>();
try
{
result = await processApp.TransferUser(id, dto.ToUserId, dto.Des);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
#region 指派流程审核人
/// <summary>
/// 指派流程审核人
/// workflow/process/point/{id}
/// </summary>
/// <param name="id">流程任务主键</param>
/// <returns></returns>
[HttpPost]
public async Task<Response<bool>> PointUser(string id, WFProcessPointDto dto)
{
var result = new Response<bool>();
try
{
result = await processApp.PointUser(id, dto.List);
}
catch (Exception ex)
{
result.Code = 500;
result.Message = ex.InnerException?.Message ?? ex.Message;
}
return result;
}
#endregion
}
}