//using System.Text;
//using JNPF.Common.Const;
//using JNPF.Common.Core.Manager;
//using JNPF.Common.Dtos.VisualDev;
//using JNPF.Common.Enums;
//using JNPF.Common.Extension;
//using JNPF.Common.Filter;
//using JNPF.Common.Manager;
//using JNPF.Common.Models.User;
//using JNPF.Common.Models.WorkFlow;
//using JNPF.Common.Security;
//using JNPF.DependencyInjection;
//using JNPF.Extras.Thirdparty.JSEngine;
//using JNPF.FriendlyException;
//using JNPF.RemoteRequest.Extensions;
//using JNPF.Systems.Entitys.Dto.User;
//using JNPF.Systems.Entitys.Permission;
//using JNPF.Systems.Entitys.System;
//using JNPF.Systems.Interfaces.Permission;
//using JNPF.Systems.Interfaces.System;
//using JNPF.TaskScheduler;
//using JNPF.UnifyResult;
//using JNPF.VisualDev.Engine;
//using JNPF.VisualDev.Engine.Core;
//using JNPF.VisualDev.Entitys;
//using JNPF.VisualDev.Interfaces;
//using JNPF.WorkFlow.Entitys.Dto.FlowBefore;
//using JNPF.WorkFlow.Entitys.Dto.FlowTask;
//using JNPF.WorkFlow.Entitys.Entity;
//using JNPF.WorkFlow.Entitys.Enum;
//using JNPF.WorkFlow.Entitys.Model;
//using JNPF.WorkFlow.Entitys.Model.Conifg;
//using JNPF.WorkFlow.Entitys.Model.Item;
//using JNPF.WorkFlow.Entitys.Model.Properties;
//using JNPF.WorkFlow.Interfaces.Manager;
//using JNPF.WorkFlow.Interfaces.Repository;
//using JNPF.WorkFlow.Interfaces.Service;
//using Mapster;
//using Newtonsoft.Json.Linq;
//using SqlSugar;
//namespace JNPF.WorkFlow.Manager;
//public class FlowTaskManagerOld : ITransient
//{
// private readonly IFlowTaskRepository _flowTaskRepository;
// private readonly IUsersService _usersService;
// private readonly IBillRullService _billRullService;
// private readonly IOrganizeService _organizeService;
// private readonly IUserRelationService _userRelationService;
// private readonly IMessageTemplateService _messageTemplateService;
// private readonly IDataInterfaceService _dataInterfaceService;
// private readonly IRunService _runService;
// private readonly IUserManager _userManager;
// private readonly IDataBaseManager _dataBaseManager;
// private readonly ICacheManager _cacheManager;
// private readonly ITenant _db;
// private string globalTaskId = string.Empty;
// private string globalTaskNodeId = string.Empty;
// private FlowTaskEntity globalTaskEntity = new FlowTaskEntity();
// public FlowTaskManagerOld(
// IFlowTaskRepository flowTaskRepository,
// IUsersService usersService,
// IBillRullService billRullService,
// IOrganizeService organizeService,
// IUserRelationService userRelationService,
// IMessageTemplateService messageTemplateService,
// IDataInterfaceService dataInterfaceService,
// IRunService runService,
// IUserManager userManager,
// IDataBaseManager dataBaseManager,
// ICacheManager cacheManager,
// ISqlSugarClient context)
// {
// _flowTaskRepository = flowTaskRepository;
// _usersService = usersService;
// _billRullService = billRullService;
// _organizeService = organizeService;
// _userRelationService = userRelationService;
// _messageTemplateService = messageTemplateService;
// _dataInterfaceService = dataInterfaceService;
// _runService = runService;
// _userManager = userManager;
// _dataBaseManager = dataBaseManager;
// _cacheManager = cacheManager;
// _db = context.AsTenant();
// }
// #region PublicMethod
// ///
// /// 获取任务详情.
// ///
// /// 任务id.
// /// 节点id.
// /// 经办id.
// ///
// public async Task GetFlowBeforeInfo(string id, string taskNodeId, string taskOperatorId = null)
// {
// try
// {
// var output = new FlowBeforeInfoOutput();
// var flowTaskEntity = await _flowTaskRepository.GetTaskInfo(id);
// if (flowTaskEntity.IsNullOrEmpty())
// throw Oops.Oh(ErrorCode.WF0026);
// var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowTaskEntity.FlowId);
// var flowTaskNodeEntityList = await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskEntity.Id && "0".Equals(x.State), x => x.SortCode);
// var flowTaskNodeList = flowTaskNodeEntityList.Adapt>().OrderBy(x => x.sortCode).ToList();
// var flowTaskOperatorList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskEntity.Id && "0".Equals(x.State));
// var flowTaskOperatorRecordList = (await _flowTaskRepository.GetTaskOperatorRecordList(flowTaskEntity.Id)).Adapt>();
// var colorFlag = true;
// foreach (var item in flowTaskOperatorRecordList)
// {
// item.userName = await _usersService.GetUserName(item.handleId);
// item.operatorId = await _usersService.GetUserName(item.operatorId);
// }
// foreach (var item in flowTaskNodeList)
// {
// if (colorFlag || item.completion == 1)
// {
// item.type = "0";
// }
// if (flowTaskEntity.ThisStepId.Contains(item.nodeCode))
// {
// item.type = "1";
// colorFlag = false;
// }
// if (FlowTaskNodeTypeEnum.end.ParseToString().Equals(flowTaskEntity.ThisStepId))
// {
// item.type = "0";
// }
// item.userName = await GetApproverUserName(item, flowTaskEntity, flowTaskEntity.FlowFormContentJson, flowTaskNodeEntityList, flowTaskOperatorList);
// }
// var thisNode = await _flowTaskRepository.GetTaskNodeInfo(x => x.TaskId == flowTaskEntity.Id && x.Id == taskNodeId);
// if (thisNode.IsNotEmptyOrNull())
// {
// var thisNodeProperties = thisNode.NodePropertyJson.ToObject();
// output.approversProperties = thisNodeProperties;
// //output.formOperates = thisNodeProperties.formOperates.Adapt>();
// }
// //output.flowFormInfo = flowTaskEntity.FlowForm;
// //output.flowTaskInfo = flowTaskEntity.Adapt();
// //output.flowTaskInfo.appFormUrl = flowEngineEntity.AppFormUrl;
// //output.flowTaskInfo.formUrl = flowEngineEntity.FormUrl;
// //output.flowTaskInfo.type = flowEngineEntity.Type;
// //output.flowTaskNodeList = flowTaskNodeList;
// //output.flowTaskOperatorList = flowTaskOperatorList.Adapt>();
// //output.flowTaskOperatorRecordList = flowTaskOperatorRecordList;
// if (taskOperatorId.IsNotEmptyOrNull())
// {
// var flowTaskOperator = flowTaskOperatorList.Find(x => x.Id == taskOperatorId);
// if (flowTaskOperator.IsNotEmptyOrNull() && flowTaskOperator.DraftData.IsNotEmptyOrNull())
// {
// output.draftData = flowTaskOperator.DraftData.ToObject();
// }
// }
// if (flowTaskEntity.TaskNodeId.IsNotEmptyOrNull())
// {
// output.draftData = flowTaskNodeEntityList.Find(x => x.Id == flowTaskEntity.TaskNodeId)?.DraftData?.ToObject();
// }
// return output;
// }
// catch (AppFriendlyException ex)
// {
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 详情查看表单数据根据控件转换.
// ///
// /// 任务实例.
// ///
// public async Task GetFlowDynamicDataManage(FlowTaskEntity entity)
// {
// try
// {
// var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(entity.FlowId);
// var flowEngineTablesModelList = flowEngineEntity.Tables.ToObject>();
// FlowTaskInfoOutput output = entity.Adapt();
// var visualDevEntity = flowEngineEntity.Adapt();
// visualDevEntity.FormData = flowEngineEntity.FormTemplateJson;
// visualDevEntity.WebType = 3;
// if (flowEngineTablesModelList.Count > 0)
// {
// output.data = (await _runService.GetHaveTableInfo(entity.Id, visualDevEntity)).ToJsonString();
// }
// else
// {
// //真实表单数据
// //Dictionary formDataDic = entity.FlowFormContentJson.ToObject>();
// //output.data = (await _runService.GetIsNoTableInfo(visualDevEntity, entity.FlowFormContentJson)).ToJsonString();
// }
// return output;
// }
// catch (AppFriendlyException ex)
// {
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 保存.
// ///
// /// 任务主键id(通过空值判断是修改还是新增).
// /// 引擎id.
// /// 关联id.
// /// 任务名.
// /// 紧急程度(自定义默认为1).
// /// 单据规则.
// /// 表单数据.
// /// 状态 1:保存,0提交.
// /// 审批修改权限1:可写,0:可读.
// /// true:系统表单,false:自定义表单.
// /// 任务父id.
// /// 子流程发起人.
// /// 是否功能设计.
// /// 是否异步.
// ///
// public async Task Save(FlowTaskSubmitModel flowTaskSubmitModel)
// {
// try
// {
// var flowTaskEntity = new FlowTaskEntity();
// flowTaskSubmitModel.flowTitle = await GetFlowTitle(flowTaskSubmitModel);
// if (!flowTaskSubmitModel.isSysTable)
// {
// var flowTaskEntityDynamic = await FlowDynamicDataManage(flowTaskSubmitModel.id, flowTaskSubmitModel.flowId, flowTaskSubmitModel.processId, flowTaskSubmitModel.flowTitle, flowTaskSubmitModel.flowUrgent, flowTaskSubmitModel.billNo, flowTaskSubmitModel.formData, flowTaskSubmitModel.crUser, flowTaskSubmitModel.isDev);
// flowTaskSubmitModel.processId = flowTaskEntityDynamic.ProcessId;
// flowTaskSubmitModel.flowTitle = flowTaskEntityDynamic.FlowName;
// flowTaskSubmitModel.flowUrgent = flowTaskEntityDynamic.FlowUrgent;
// flowTaskSubmitModel.billNo = flowTaskEntityDynamic.EnCode;
// flowTaskSubmitModel.formData = flowTaskEntityDynamic.FlowFormContentJson.ToObject();
// }
// if (flowTaskSubmitModel.id.IsEmpty())
// {
// FlowEngineEntity flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowTaskSubmitModel.flowId);
// flowTaskEntity.Id = flowTaskSubmitModel.processId;
// flowTaskEntity.ProcessId = flowTaskSubmitModel.processId;
// flowTaskEntity.EnCode = flowTaskSubmitModel.billNo;
// flowTaskEntity.FullName = flowTaskSubmitModel.parentId.Equals("0") ? flowTaskSubmitModel.flowTitle : flowTaskSubmitModel.flowTitle + "(子流程)";
// flowTaskEntity.FlowUrgent = flowTaskSubmitModel.flowUrgent;
// flowTaskEntity.FlowId = flowEngineEntity.Id;
// flowTaskEntity.FlowCode = flowEngineEntity.EnCode;
// flowTaskEntity.FlowName = flowEngineEntity.FullName;
// flowTaskEntity.FlowType = flowEngineEntity.Type;
// flowTaskEntity.FlowCategory = flowEngineEntity.Category;
// flowTaskEntity.FlowForm = flowEngineEntity.FormTemplateJson;
// flowTaskEntity.FlowFormContentJson = flowTaskSubmitModel.formData.IsNullOrEmpty() ? string.Empty : flowTaskSubmitModel.formData.ToJsonString();
// flowTaskEntity.FlowTemplateJson = flowEngineEntity.FlowTemplateJson;
// flowTaskEntity.FlowVersion = flowEngineEntity.Version;
// flowTaskEntity.Status = FlowTaskStatusEnum.Draft.ParseToInt();
// flowTaskEntity.Completion = 0;
// flowTaskEntity.ThisStep = "开始";
// flowTaskEntity.CreatorTime = DateTime.Now;
// flowTaskEntity.CreatorUserId = flowTaskSubmitModel.crUser.IsEmpty() ? _userManager.UserId : flowTaskSubmitModel.crUser;
// flowTaskEntity.ParentId = flowTaskSubmitModel.parentId;
// flowTaskEntity.IsAsync = flowTaskSubmitModel.isAsync ? 1 : 0;
// if (flowTaskSubmitModel.status == 0)
// {
// flowTaskEntity.Status = FlowTaskStatusEnum.Handle.ParseToInt();
// flowTaskEntity.EnabledMark = FlowTaskStatusEnum.Handle.ParseToInt();
// flowTaskEntity.StartTime = DateTime.Now;
// flowTaskEntity.CreatorTime = DateTime.Now;
// }
// _flowTaskRepository.CreateFlowUser(flowTaskEntity.CreatorUserId, flowTaskEntity.Id);
// await _flowTaskRepository.CreateTask(flowTaskEntity);
// }
// else
// {
// flowTaskEntity = await _flowTaskRepository.GetTaskInfo(flowTaskSubmitModel.id);
// if (flowTaskEntity.Status == FlowTaskStatusEnum.Handle.ParseToInt() && flowTaskSubmitModel.approvaUpType == 0)
// throw Oops.Oh(ErrorCode.WF0031);
// if (flowTaskSubmitModel.status == 0)
// {
// flowTaskEntity.Status = FlowTaskStatusEnum.Handle.ParseToInt();
// flowTaskEntity.StartTime = DateTime.Now;
// flowTaskEntity.LastModifyTime = DateTime.Now;
// flowTaskEntity.LastModifyUserId = _userManager.UserId;
// }
// if (flowTaskSubmitModel.approvaUpType == 0)
// {
// flowTaskEntity.FullName = flowTaskSubmitModel.parentId.Equals("0") ? flowTaskSubmitModel.flowTitle : flowTaskSubmitModel.flowTitle + "(子流程)";
// flowTaskEntity.FlowUrgent = flowTaskSubmitModel.flowUrgent;
// }
// if (flowTaskSubmitModel.formData != null)
// {
// flowTaskEntity.FlowFormContentJson = flowTaskSubmitModel.formData.ToJsonString();
// }
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// }
// return flowTaskEntity;
// }
// catch (AppFriendlyException ex)
// {
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 提交.
// ///
// /// 主键id(通过空值判断是修改还是新增).
// /// 引擎id.
// /// 关联id.
// /// 任务名.
// /// 紧急程度(自定义默认为1).
// /// 单据规则.
// /// 表单数据.
// /// 状态 1:保存,0提交.
// /// 审批修改权限1:可写,0:可读.
// /// true:系统表单,false:自定义表单.
// /// 是否功能设计.
// /// 候选人.
// ///
// public async Task Submit(FlowTaskSubmitModel flowTaskSubmitModel)
// {
// try
// {
// _db.BeginTran();
// // 流程引擎
// FlowEngineEntity flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowTaskSubmitModel.flowId);
// // 流程任务
// FlowTaskEntity flowTaskEntity = await this.Save(flowTaskSubmitModel);
// // 流程节点
// List flowTaskNodeEntityList = ParsingTemplateGetNodeList(flowEngineEntity, flowTaskSubmitModel.formData.ToJsonString(), flowTaskEntity.Id);
// SaveNodeCandidates(flowTaskNodeEntityList, flowTaskSubmitModel.candidateList, "0");
// SaveNodeCandidates(flowTaskNodeEntityList, flowTaskSubmitModel.errorRuleUserList, "0");
// await ChangeNodeListByBranch(flowTaskNodeEntityList, flowTaskSubmitModel.branchList, flowTaskNodeEntityList.FirstOrDefault().Id);
// await _flowTaskRepository.CreateTaskNode(flowTaskNodeEntityList);
// List flowTaskOperatorEntityList = new List();
// // 流程抄送
// List flowTaskCirculateEntityList = new List();
// // 开始节点
// var startTaskNodeEntity = flowTaskNodeEntityList.Find(m => FlowTaskNodeTypeEnum.start.ParseToString().Equals(m.NodeType));
// var startApproversProperties = startTaskNodeEntity.NodePropertyJson.ToObject();
// flowTaskEntity.IsBatch = startApproversProperties.isBatchApproval ? 1 : 0;
// var nextTaskNodeIdList = startTaskNodeEntity.NodeNext.Split(",");
// if (FlowTaskNodeTypeEnum.end.ParseToString().Equals(nextTaskNodeIdList.FirstOrDefault()))
// {
// flowTaskEntity.Status = FlowTaskStatusEnum.Adopt.ParseToInt();
// flowTaskEntity.Completion = 100;
// flowTaskEntity.EndTime = DateTime.Now;
// flowTaskEntity.ThisStepId = FlowTaskNodeTypeEnum.end.ParseToString();
// flowTaskEntity.ThisStep = "结束";
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// // 子流程结束回到主流程下一节点
// if (flowTaskEntity.ParentId != "0" && flowTaskEntity.IsAsync == 0)
// {
// await InsertSubFlowNextNode(flowTaskEntity);
// }
// }
// else
// {
// #region 流程经办
// // 任务流程当前节点名
// var ThisStepList = new List();
// // 任务流程当前完成度
// var CompletionList = new List();
// // 验证异常审批人由上一节点选择
// var errorNodeList = new List();
// var isAsync = false;
// var erruser = new List();
// foreach (var item in nextTaskNodeIdList)
// {
// var nextTaskNodeEntity = flowTaskNodeEntityList.Find(m => m.NodeCode.Equals(item));
// var approverPropertiers = nextTaskNodeEntity.NodePropertyJson.ToObject();
// if (FlowTaskNodeTypeEnum.subFlow.ParseToString().Equals(nextTaskNodeEntity.NodeType))
// {
// await GetErrorNode(errorNodeList, flowTaskNodeEntityList.FindAll(m => nextTaskNodeEntity.NodeNext.Contains(m.NodeCode)), flowTaskNodeEntityList, startApproversProperties, flowTaskEntity.CreatorUserId, flowTaskSubmitModel.formData.ToJsonString());
// var childTaskPro = nextTaskNodeEntity.NodePropertyJson.ToObject();
// var childTaskCrUserList = await GetSubFlowCrUser(childTaskPro, flowTaskEntity.CreatorUserId, flowTaskNodeEntityList, nextTaskNodeEntity, flowTaskSubmitModel.formData.ToJsonString());
// var childFormData = await GetSubFlowFormData(childTaskPro, flowTaskSubmitModel.formData.ToJsonString());
// childTaskPro.childTaskId = await CreateSubProcesses(childTaskPro, childFormData, flowTaskEntity.Id, childTaskCrUserList);
// childTaskPro.formData = flowTaskSubmitModel.formData.ToJsonString();
// nextTaskNodeEntity.NodePropertyJson = childTaskPro.ToJsonString();
// // 将子流程id保存到主流程的子流程节点属性上
// nextTaskNodeEntity.Completion = childTaskPro.isAsync ? 1 : 0;
// await _flowTaskRepository.UpdateTaskNode(nextTaskNodeEntity);
// await Alerts(childTaskPro.launchMsgConfig, childTaskCrUserList, flowTaskSubmitModel.formData.ToJsonString());
// if (childTaskPro.isAsync)
// {
// isAsync = true;
// flowTaskNodeEntityList.Remove(flowTaskNodeEntityList.Find(m => m.NodeCode.Equals(item)));
// flowTaskNodeEntityList.Add(nextTaskNodeEntity);
// flowTaskNodeEntityList = flowTaskNodeEntityList.FindAll(x => x.State == "0");
// await CreateNextFlowTaskOperator(flowTaskNodeEntityList, nextTaskNodeEntity,
// nextTaskNodeEntity.NodePropertyJson.ToObject(), new List(),
// 1, flowTaskEntity, string.Empty, flowTaskOperatorEntityList, errorNodeList, flowTaskSubmitModel.formData.ToJsonString(),
// new FlowHandleModel(), flowEngineEntity.FormType.ParseToInt());
// }
// }
// else
// {
// if (flowTaskSubmitModel.errorRuleUserList.IsNotEmptyOrNull() && flowTaskSubmitModel.errorRuleUserList.ContainsKey(item))
// {
// erruser = flowTaskSubmitModel.errorRuleUserList[item];
// }
// await AddFlowTaskOperatorEntityByAssigneeType(flowTaskEntity, flowTaskOperatorEntityList, flowTaskNodeEntityList, startTaskNodeEntity, nextTaskNodeEntity, errorNodeList, flowTaskEntity.CreatorUserId, flowTaskSubmitModel.formData.ToJsonString(), erruser, 0);
// }
// ThisStepList.Add(nextTaskNodeEntity.NodeName);
// CompletionList.Add(approverPropertiers.progress.ParseToInt());
// }
// if (errorNodeList.Count > 0)
// {
// _db.RollbackTran();
// return errorNodeList;
// }
// if (!isAsync)
// {
// await _flowTaskRepository.CreateTaskOperator(flowTaskOperatorEntityList);
// }
// #endregion
// #region 更新流程任务
// if (isAsync)
// {
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// }
// else
// {
// flowTaskEntity.ThisStepId = startTaskNodeEntity.NodeNext;
// flowTaskEntity.ThisStep = string.Join(",", ThisStepList);
// flowTaskEntity.Completion = CompletionList.Min();
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// }
// #endregion
// }
// #region 更新当前抄送
// var flowTaskOperatorEntity = startTaskNodeEntity.Adapt();
// flowTaskOperatorEntity.TaskId = startTaskNodeEntity.TaskId;
// flowTaskOperatorEntity.TaskNodeId = startTaskNodeEntity.Id;
// flowTaskOperatorEntity.Id = SnowflakeIdHelper.NextId();
// await GetflowTaskCirculateEntityList(startApproversProperties.ToObject(), flowTaskOperatorEntity, flowTaskCirculateEntityList, flowTaskSubmitModel.copyIds);
// await _flowTaskRepository.CreateTaskCirculate(flowTaskCirculateEntityList);
// #endregion
// #region 流程经办记录
// FlowTaskOperatorRecordEntity flowTaskOperatorRecordEntity = new FlowTaskOperatorRecordEntity();
// flowTaskOperatorRecordEntity.HandleId = _userManager.UserId;
// flowTaskOperatorRecordEntity.HandleTime = DateTime.Now;
// flowTaskOperatorRecordEntity.HandleStatus = 2;
// flowTaskOperatorRecordEntity.NodeName = "开始";
// flowTaskOperatorRecordEntity.TaskId = flowTaskEntity.Id;
// flowTaskOperatorRecordEntity.Status = 0;
// await _flowTaskRepository.CreateTaskOperatorRecord(flowTaskOperatorRecordEntity);
// #endregion
// _db.CommitTran();
// #region 开始事件
// globalTaskId = startTaskNodeEntity.TaskId;
// globalTaskNodeId = startTaskNodeEntity.Id;
// await RequestEvents(startApproversProperties.initFuncConfig, flowTaskSubmitModel.formData.ToJsonString());
// #endregion
// #region 消息提醒
// // 审批消息
// var messageDic = GroupByOperator(flowTaskOperatorEntityList);
// var bodyDic = new Dictionary();
// //抄送
// var userIdList = flowTaskCirculateEntityList.Select(x => x.ObjectId).ToList();
// if (userIdList.Count > 0)
// {
// bodyDic = GetMesBodyText(flowEngineEntity, startTaskNodeEntity.Id, userIdList, null, 3, flowTaskOperatorEntity.Id);
// await StationLetterMsg(flowTaskEntity.FullName, userIdList, 3, bodyDic);
// startApproversProperties.copyMsgConfig = startApproversProperties.copyMsgConfig.on == 2 ? startApproversProperties.copyMsgConfig : startApproversProperties.copyMsgConfig;
// await Alerts(startApproversProperties.copyMsgConfig, userIdList, flowTaskSubmitModel.formData.ToJsonString());
// }
// foreach (var item in messageDic.Keys)
// {
// var userList = messageDic[item].Select(x => x.HandleId).ToList();
// // 委托人
// var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowEngineEntity.Id);
// userList = userList.Union(delegateUserIds).ToList();
// bodyDic = GetMesBodyText(flowEngineEntity, item, userList, messageDic[item], 2);
// await StationLetterMsg(flowTaskEntity.FullName, userList, 0, bodyDic);
// await Alerts(startApproversProperties.waitMsgConfig, userList, flowTaskSubmitModel.formData.ToJsonString());
// // 超时提醒
// await TimeoutOrRemind(flowTaskEntity, item, messageDic[item], flowEngineEntity, startApproversProperties, flowTaskSubmitModel.formData.ToJsonString());
// }
// // 结束消息
// if (flowTaskEntity.Status == FlowTaskStatusEnum.Adopt.ParseToInt())
// {
// #region 结束事件
// await RequestEvents(startApproversProperties.endFuncConfig, flowTaskSubmitModel.formData.ToJsonString());
// #endregion
// bodyDic = GetMesBodyText(flowEngineEntity, string.Empty, new List() { flowTaskEntity.CreatorUserId }, null, 1);
// await StationLetterMsg(flowTaskEntity.FullName, new List() { flowTaskEntity.CreatorUserId }, 5, bodyDic);
// await Alerts(startApproversProperties.endMsgConfig, new List() { flowTaskEntity.CreatorUserId }, flowTaskSubmitModel.formData.ToJsonString());
// }
// #endregion
// #region 自动审批
// await AutoAudit(flowTaskEntity, flowTaskNodeEntityList, flowTaskSubmitModel.formData.ToJsonString(), startTaskNodeEntity.Id, flowTaskSubmitModel.candidateList);
// #endregion
// return new List();
// }
// catch (AppFriendlyException ex)
// {
// _db.RollbackTran();
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 审批(同意).
// ///
// /// 任务实例.
// /// 经办实例.
// /// 审批参数.
// /// 表单类型.
// ///
// public async Task Audit(FlowTaskEntity flowTaskEntity, FlowTaskOperatorEntity flowTaskOperatorEntity, FlowHandleModel flowHandleModel, FlowEngineEntity flowEngineEntity, bool isAuto = false)
// {
// List flowTaskNodeEntityList = await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskEntity.Id);
// //流程所有节点
// flowTaskNodeEntityList = await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskEntity.Id && x.State == "0");
// var candidates = SaveNodeCandidates(flowTaskNodeEntityList, flowHandleModel.candidateList, flowTaskOperatorEntity.Id);
// var errorRuleUserList = SaveNodeCandidates(flowTaskNodeEntityList, flowHandleModel.errorRuleUserList, flowTaskOperatorEntity.Id);
// try
// {
// _db.BeginTran();
// await ChangeNodeListByBranch(flowTaskNodeEntityList, flowHandleModel.branchList, flowTaskOperatorEntity.TaskNodeId);
// var startApproversProperties = flowTaskNodeEntityList.Find(x => FlowTaskNodeTypeEnum.start.ParseToString().Equals(x.NodeType)).NodePropertyJson.ToObject();
// // 当前节点
// FlowTaskNodeEntity flowTaskNodeEntity = flowTaskNodeEntityList.Find(m => m.Id == flowTaskOperatorEntity.TaskNodeId);
// // 当前节点属性
// ApproversProperties approversProperties = flowTaskNodeEntity.NodePropertyJson.ToObject();
// // 当前节点所有审批人
// var thisFlowTaskOperatorEntityList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskNodeEntity.TaskId && x.TaskNodeId == flowTaskNodeEntity.Id && x.State == "0");
// // 依次审批当前节点所有审批人
// if (approversProperties.counterSign == 2)
// {
// var operatorUserEntities = (await _flowTaskRepository.GetTaskOperatorUserList(x => x.TaskId == flowTaskNodeEntity.TaskId && x.TaskNodeId == flowTaskNodeEntity.Id && x.State == "0")).Adapt>();
// // 取比当前节点审批人排序码大的与所有审批人员差集再加上当前节点审批人
// thisFlowTaskOperatorEntityList = operatorUserEntities.Where(x => x.SortCode > flowTaskOperatorEntity.SortCode).Union(thisFlowTaskOperatorEntityList).ToList();
// }
// // 下一节点流程经办
// List flowTaskOperatorEntityList = new List();
// // 流程抄送
// List flowTaskCirculateEntityList = new List();
// // 异常节点数据
// var errorNodeList = new List();
// // 表单数据
// var formData = flowEngineEntity.FormType == 2 ? flowHandleModel.formData.ToJsonString().ToObject()["data"].ToString() : flowHandleModel.formData.ToJsonString();
// if (flowTaskOperatorEntity.Id.IsNotEmptyOrNull())
// {
// #region 更新当前经办数据
// await UpdateFlowTaskOperator(flowTaskOperatorEntity, thisFlowTaskOperatorEntityList, approversProperties, 1, flowHandleModel.freeApproverUserId);
// #endregion
// #region 更新当前抄送
// await GetflowTaskCirculateEntityList(approversProperties, flowTaskOperatorEntity, flowTaskCirculateEntityList, flowHandleModel.copyIds);
// await _flowTaskRepository.CreateTaskCirculate(flowTaskCirculateEntityList);
// #endregion
// }
// #region 更新经办记录
// await CreateOperatorRecode(flowTaskOperatorEntity, flowHandleModel, 1);
// #endregion
// #region 更新下一节点经办
// var freeApproverOperatorEntity = new FlowTaskOperatorEntity();
// if (flowHandleModel.freeApproverUserId.IsNotEmptyOrNull())
// {
// // 加签审批人
// freeApproverOperatorEntity.Id = SnowflakeIdHelper.NextId();
// freeApproverOperatorEntity.ParentId = flowTaskOperatorEntity.Id;
// freeApproverOperatorEntity.HandleType = "6";
// freeApproverOperatorEntity.HandleId = flowHandleModel.freeApproverUserId;
// freeApproverOperatorEntity.NodeCode = flowTaskOperatorEntity.NodeCode;
// freeApproverOperatorEntity.NodeName = flowTaskOperatorEntity.NodeName;
// freeApproverOperatorEntity.Description = flowTaskOperatorEntity.Description;
// freeApproverOperatorEntity.CreatorTime = DateTime.Now;
// freeApproverOperatorEntity.TaskNodeId = flowTaskOperatorEntity.TaskNodeId;
// freeApproverOperatorEntity.TaskId = flowTaskOperatorEntity.TaskId;
// freeApproverOperatorEntity.Type = flowTaskOperatorEntity.Type;
// freeApproverOperatorEntity.State = flowTaskOperatorEntity.State;
// freeApproverOperatorEntity.Completion = 0;
// freeApproverOperatorEntity.SortCode = flowTaskOperatorEntity.SortCode;
// await _flowTaskRepository.CreateTaskOperator(freeApproverOperatorEntity);
// // 当前审批人state改为1
// flowTaskOperatorEntity.State = "1";
// await _flowTaskRepository.UpdateTaskOperator(flowTaskOperatorEntity);
// #region 流转记录
// var flowTaskOperatorRecordEntity = new FlowTaskOperatorRecordEntity();
// flowTaskOperatorRecordEntity.HandleOpinion = flowHandleModel.handleOpinion;
// flowTaskOperatorRecordEntity.HandleId = _userManager.UserId;
// flowTaskOperatorRecordEntity.HandleTime = DateTime.Now;
// flowTaskOperatorRecordEntity.HandleStatus = 6;
// flowTaskOperatorRecordEntity.NodeName = flowTaskOperatorEntity.NodeName;
// flowTaskOperatorRecordEntity.TaskId = flowTaskOperatorEntity.TaskId;
// flowTaskOperatorRecordEntity.TaskNodeId = flowTaskOperatorEntity.TaskNodeId;
// flowTaskOperatorRecordEntity.TaskOperatorId = flowTaskOperatorEntity.Id;
// flowTaskOperatorRecordEntity.Status = 0;
// flowTaskOperatorRecordEntity.OperatorId = flowHandleModel.freeApproverUserId;
// await _flowTaskRepository.CreateTaskOperatorRecord(flowTaskOperatorRecordEntity);
// #endregion
// }
// else
// {
// await CreateNextFlowTaskOperator(flowTaskNodeEntityList, flowTaskNodeEntity, approversProperties,
// thisFlowTaskOperatorEntityList, 1, flowTaskEntity, flowHandleModel.freeApproverUserId,
// flowTaskOperatorEntityList, errorNodeList, formData, flowHandleModel, flowEngineEntity.FormType.ParseToInt());
// if (errorNodeList.Count > 0)
// {
// _db.RollbackTran();
// return errorNodeList;
// }
// foreach (var item in flowTaskOperatorEntityList)
// {
// var nextTaskNodeEntity = flowTaskNodeEntityList.Find(m => m.Id.Equals(item.TaskNodeId));
// var approverPropertiers = nextTaskNodeEntity.NodePropertyJson.ToObject();
// if (approverPropertiers.assigneeType == FlowTaskOperatorEnum.CandidateApprover.ParseToInt() && isAuto)
// {
// _db.RollbackTran();
// return new List();
// }
// }
// }
// #endregion
// #region 更新节点
// await _flowTaskRepository.UpdateTaskNode(flowTaskNodeEntity);
// #endregion
// #region 更新任务
// globalTaskId = flowTaskNodeEntity.TaskId;
// globalTaskNodeId = flowTaskNodeEntity.Id;
// if (flowTaskNodeEntity.Completion > 0)
// {
// if (flowTaskEntity.Status == FlowTaskStatusEnum.Adopt.ParseToInt())
// {
// #region 子流程结束回到主流程下一节点
// if (flowTaskEntity.ParentId != "0" && flowTaskEntity.IsAsync == 0)
// {
// await InsertSubFlowNextNode(flowTaskEntity);
// }
// #endregion
// }
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// }
// if (flowTaskEntity.TaskNodeId.IsNotEmptyOrNull())
// {
// flowTaskEntity.TaskNodeId = null;
// await _flowTaskRepository.UpdateTask(flowTaskEntity, x => x.TaskNodeId);
// }
// #endregion
// if (!isAuto)
// {
// await ApproveBefore(await _flowTaskRepository.GetEngineInfo(flowTaskEntity.FlowId), flowTaskEntity, flowHandleModel);
// }
// _db.CommitTran();
// #region 消息与事件
// var bodyDic = new Dictionary();
// //加签
// if (flowHandleModel.freeApproverUserId.IsNotEmptyOrNull())
// {
// bodyDic = GetMesBodyText(flowEngineEntity, freeApproverOperatorEntity.TaskNodeId, new List() { flowHandleModel.freeApproverUserId }, new List() { freeApproverOperatorEntity }, 2);
// await StationLetterMsg(flowTaskEntity.FullName, new List() { flowHandleModel.freeApproverUserId }, 0, bodyDic);
// await Alerts(startApproversProperties.waitMsgConfig, new List() { flowHandleModel.freeApproverUserId }, formData);
// }
// //抄送
// var userIdList = flowTaskCirculateEntityList.Select(x => x.ObjectId).ToList();
// if (userIdList.Count > 0)
// {
// bodyDic = GetMesBodyText(flowEngineEntity, flowTaskNodeEntity.Id, userIdList, null, 3, flowTaskOperatorEntity.Id);
// await StationLetterMsg(flowTaskEntity.FullName, userIdList, 3, bodyDic);
// approversProperties.copyMsgConfig = approversProperties.copyMsgConfig.on == 2 ? startApproversProperties.copyMsgConfig : approversProperties.copyMsgConfig;
// await Alerts(approversProperties.copyMsgConfig, userIdList, formData);
// }
// if (flowTaskNodeEntity.Completion > 0)
// {
// // 关闭当前节点超时提醒任务
// SpareTime.Cancel("CS_" + flowTaskNodeEntity.Id);
// SpareTime.Cancel("TX_" + flowTaskNodeEntity.Id);
// #region 审批事件
// await RequestEvents(approversProperties.approveFuncConfig, formData);
// #endregion
// #region 消息提醒
// var messageDic = GroupByOperator(flowTaskOperatorEntityList);
// //审批
// foreach (var item in messageDic.Keys)
// {
// var userList = messageDic[item].Select(x => x.HandleId).ToList();
// //委托人
// var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowEngineEntity.Id);
// userList = userList.Union(delegateUserIds).ToList();
// bodyDic = GetMesBodyText(flowEngineEntity, item, userList, messageDic[item], 2);
// await StationLetterMsg(flowTaskEntity.FullName, userList, 0, bodyDic);
// await StationLetterMsg(flowTaskEntity.FullName, userList, 1, bodyDic);
// await Alerts(startApproversProperties.waitMsgConfig, userList, formData);
// if (approversProperties.approveMsgConfig.IsNotEmptyOrNull())
// {
// approversProperties.approveMsgConfig = approversProperties.approveMsgConfig.on == 2 ? startApproversProperties.approveMsgConfig : approversProperties.approveMsgConfig;
// }
// await Alerts(approversProperties.approveMsgConfig, userList, formData);
// // 超时提醒
// await TimeoutOrRemind(flowTaskEntity, item, messageDic[item], flowEngineEntity, startApproversProperties, formData);
// }
// #endregion
// if (flowTaskEntity.Status == FlowTaskStatusEnum.Adopt.ParseToInt())
// {
// #region 结束事件
// await RequestEvents(startApproversProperties.endFuncConfig, formData);
// #endregion
// //结束
// bodyDic = GetMesBodyText(flowEngineEntity, flowTaskNodeEntity.Id, new List() { flowTaskEntity.CreatorUserId }, null, 1);
// await StationLetterMsg(flowTaskEntity.FullName, new List() { flowTaskEntity.CreatorUserId }, 5, bodyDic);
// await Alerts(startApproversProperties.endMsgConfig, new List() { flowTaskEntity.CreatorUserId }, formData);
// }
// }
// #endregion
// #region 自动审批
// await AutoAudit(flowTaskEntity, flowTaskNodeEntityList, formData, flowTaskOperatorEntity.TaskNodeId, flowHandleModel.candidateList);
// #endregion
// return new List();
// }
// catch (AppFriendlyException ex)
// {
// var ids = candidates.Select(x => x.Id).ToArray();
// var ids1 = errorRuleUserList.Select(x => x.Id).ToArray();
// _flowTaskRepository.DeleteFlowCandidates(x => ids.Union(ids1).Contains(x.Id));
// _db.RollbackTran();
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 审批(拒绝).
// ///
// /// 任务实例.
// /// 经办实例.
// /// 审批参数.
// /// 表单类型.
// ///
// public async Task Reject(FlowTaskEntity flowTaskEntity, FlowTaskOperatorEntity flowTaskOperatorEntity, FlowHandleModel flowHandleModel, FlowEngineEntity flowEngineEntity)
// {
// try
// {
// _db.BeginTran();
// //流程所有节点
// List flowTaskNodeEntityList = await _flowTaskRepository.GetTaskNodeList(x => x.State == "0" && x.TaskId == flowTaskEntity.Id);
// //当前节点
// FlowTaskNodeEntity flowTaskNodeEntity = flowTaskNodeEntityList.Find(m => m.Id == flowTaskOperatorEntity.TaskNodeId);
// var startApproversProperties = flowTaskNodeEntityList.Find(x => FlowTaskNodeTypeEnum.start.ParseToString().Equals(x.NodeType)).NodePropertyJson.ToObject();
// //当前节点属性
// ApproversProperties approversProperties = flowTaskNodeEntity.NodePropertyJson.ToObject();
// //当前节点所有审批人
// var thisFlowTaskOperatorEntityList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskNodeId == flowTaskNodeEntity.Id && x.State == "0" && x.TaskId == flowTaskNodeEntity.TaskId);
// //表单数据
// var formData = flowTaskEntity.FlowFormContentJson;
// //驳回节点流程经办
// List flowTaskOperatorEntityList = new List();
// #region 更新当前经办数据
// await UpdateFlowTaskOperator(flowTaskOperatorEntity, thisFlowTaskOperatorEntityList, approversProperties, 0, flowHandleModel.freeApproverUserId);
// #endregion
// #region 自定义抄送
// var flowTaskCirculateEntityList = new List();
// // 异常节点数据
// var errorNodeList = new List();
// await GetflowTaskCirculateEntityList(approversProperties, flowTaskOperatorEntity, flowTaskCirculateEntityList, flowHandleModel.copyIds, 0);
// await _flowTaskRepository.CreateTaskCirculate(flowTaskCirculateEntityList);
// #endregion
// #region 更新驳回经办
// await CreateNextFlowTaskOperator(flowTaskNodeEntityList, flowTaskNodeEntity, approversProperties,
// thisFlowTaskOperatorEntityList, 0, flowTaskEntity, flowHandleModel.freeApproverUserId,
// flowTaskOperatorEntityList, errorNodeList, formData, flowHandleModel, flowEngineEntity.FormType.ParseToInt());
// if (errorNodeList.Count > 0)
// {
// _db.RollbackTran();
// return errorNodeList;
// }
// #endregion
// #region 更新流程任务
// if (flowTaskEntity.Status == FlowTaskStatusEnum.Reject.ParseToInt())
// {
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// await _flowTaskRepository.DeleteFlowTaskAllData(flowTaskEntity.Id);
// }
// else
// {
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// await _flowTaskRepository.CreateTaskOperator(flowTaskOperatorEntityList);
// foreach (var item in flowTaskOperatorEntityList)
// {
// await AdjustNodeByCon(flowEngineEntity, formData, item, true);
// }
// }
// if (flowTaskEntity.TaskNodeId.IsNotEmptyOrNull())
// {
// flowTaskEntity.TaskNodeId = null;
// await _flowTaskRepository.UpdateTask(flowTaskEntity, x => x.TaskNodeId);
// }
// #endregion
// #region 更新经办记录
// await CreateOperatorRecode(flowTaskOperatorEntity, flowHandleModel, 0);
// #endregion
// _db.CommitTran();
// #region 消息与事件
// globalTaskId = flowTaskNodeEntity.TaskId;
// globalTaskNodeId = flowTaskNodeEntity.Id;
// await RequestEvents(approversProperties.rejectFuncConfig, formData);
// var bodyDic = new Dictionary();
// if (flowTaskOperatorEntityList.Count > 0)
// {
// SpareTime.Cancel("CS_" + flowTaskNodeEntity.Id);
// SpareTime.Cancel("TX_" + flowTaskNodeEntity.Id);
// #region 审批事件
// await RequestEvents(approversProperties.approveFuncConfig, formData);
// #endregion
// #region 消息提醒
// var messageDic = GroupByOperator(flowTaskOperatorEntityList);
// //审批
// foreach (var item in messageDic.Keys)
// {
// var userList = messageDic[item].Select(x => x.HandleId).ToList();
// //委托人
// var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowEngineEntity.Id);
// userList = userList.Union(delegateUserIds).ToList();
// bodyDic = GetMesBodyText(flowEngineEntity, item, userList, messageDic[item], 2);
// await StationLetterMsg(flowTaskEntity.FullName, userList, 0, bodyDic);
// await StationLetterMsg(flowTaskEntity.FullName, userList, 2, bodyDic);
// await Alerts(startApproversProperties.waitMsgConfig, userList, formData);
// if (approversProperties.rejectMsgConfig.IsNotEmptyOrNull())
// {
// approversProperties.rejectMsgConfig = approversProperties.rejectMsgConfig.on == 2 ? startApproversProperties.rejectMsgConfig : approversProperties.rejectMsgConfig;
// }
// await Alerts(approversProperties.rejectMsgConfig, userList, formData);
// // 超时提醒
// await TimeoutOrRemind(flowTaskEntity, item, messageDic[item], flowEngineEntity, startApproversProperties, formData);
// }
// #endregion
// }
// //抄送
// var userIdList = flowTaskCirculateEntityList.Select(x => x.ObjectId).ToList();
// if (userIdList.Count > 0)
// {
// bodyDic = GetMesBodyText(flowEngineEntity, flowTaskNodeEntity.Id, userIdList, null, 3, flowTaskOperatorEntity.Id);
// await StationLetterMsg(flowTaskEntity.FullName, userIdList, 3, bodyDic);
// approversProperties.copyMsgConfig = approversProperties.copyMsgConfig.on == 2 ? startApproversProperties.copyMsgConfig : approversProperties.copyMsgConfig;
// await Alerts(approversProperties.copyMsgConfig, userIdList, formData);
// }
// if (flowTaskEntity.Status == FlowTaskStatusEnum.Reject.ParseToInt())
// {
// bodyDic = GetMesBodyText(flowEngineEntity, flowTaskNodeEntity.Id, new List { flowTaskEntity.CreatorUserId }, null, 2, flowTaskOperatorEntity.Id);
// await StationLetterMsg(flowTaskEntity.FullName, new List { flowTaskEntity.CreatorUserId }, 2, bodyDic);
// if (approversProperties.rejectMsgConfig.IsNotEmptyOrNull())
// {
// approversProperties.rejectMsgConfig = approversProperties.rejectMsgConfig.on == 2 ? startApproversProperties.rejectMsgConfig : approversProperties.rejectMsgConfig;
// }
// await Alerts(approversProperties.rejectMsgConfig, new List { flowTaskEntity.CreatorUserId }, formData);
// }
// #endregion
// return new List();
// }
// catch (AppFriendlyException ex)
// {
// _db.RollbackTran();
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 审批(撤回).
// ///
// /// 经办id.
// /// 撤回参数.
// public async Task Recall(string id, FlowHandleModel flowHandleModel)
// {
// try
// {
// _db.BeginTran();
// //撤回经办记录
// var flowTaskOperatorRecordEntity = await _flowTaskRepository.GetTaskOperatorRecordInfo(id);
// if (flowTaskOperatorRecordEntity.Status == -1)
// throw Oops.Oh(ErrorCode.WF0011);
// //撤回经办
// var flowTaskOperatorEntity = await _flowTaskRepository.GetTaskOperatorInfo(flowTaskOperatorRecordEntity.TaskOperatorId);
// //撤回节点
// var flowTaskNodeEntity = await _flowTaskRepository.GetTaskNodeInfo(flowTaskOperatorRecordEntity.TaskNodeId);
// //撤回任务
// var flowTaskEntity = await _flowTaskRepository.GetTaskInfo(flowTaskOperatorRecordEntity.TaskId);
// //所有节点
// var flowTaskNodeEntityList = await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskOperatorRecordEntity.TaskId && x.State == "0");
// //所有经办
// var flowTaskOperatorEntityList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskOperatorRecordEntity.TaskId && x.State == "0");
// //撤回节点属性
// var recallNodeProperties = flowTaskNodeEntity.NodePropertyJson.ToObject();
// #region 撤回判断
// //拒绝不撤回
// if (flowTaskOperatorEntity.HandleStatus == 0)
// throw Oops.Oh(ErrorCode.WF0010);
// //任务待审状态才能撤回
// if (!(flowTaskEntity.EnabledMark == 1 && flowTaskEntity.Status == 1))
// throw Oops.Oh(ErrorCode.WF0011);
// //撤回节点下一节点已操作
// var recallNextOperatorList = flowTaskOperatorEntityList.FindAll(x => flowTaskNodeEntity.NodeNext.Contains(x.NodeCode));
// if (recallNextOperatorList.FindAll(x => x.Completion == 1 && x.HandleStatus == 1).Count > 0)
// throw Oops.Oh(ErrorCode.WF0011);
// #endregion
// #region 经办修改
// var delOperatorRecordIds = new List();
// //加签人
// var upOperatorList = await GetOperator(flowTaskOperatorEntity.Id, new List());
// flowTaskOperatorEntity.HandleStatus = null;
// flowTaskOperatorEntity.HandleTime = null;
// flowTaskOperatorEntity.Completion = 0;
// flowTaskOperatorEntity.State = "0";
// upOperatorList.Add(flowTaskOperatorEntity);
// // 撤回节点是依次审批
// if (recallNodeProperties.counterSign == 2)
// {
// var operatorUserList = await _flowTaskRepository.GetTaskOperatorUserList(x => x.TaskId == flowTaskOperatorEntity.TaskId && x.TaskNodeId == flowTaskOperatorEntity.TaskNodeId);
// var nextOperatorUser = operatorUserList.Find(x => x.SortCode == flowTaskOperatorEntity.SortCode + 1);
// if (nextOperatorUser.IsNotEmptyOrNull())
// {
// if (flowTaskOperatorEntityList.Any(x => x.Id == nextOperatorUser.Id && x.Completion == 1 && x.HandleStatus == 1))
// {
// throw Oops.Oh(ErrorCode.WF0011);
// }
// else
// {
// await _flowTaskRepository.DeleteTaskOperator(new List() { nextOperatorUser.Id });
// }
// }
// }
// foreach (var item in upOperatorList)
// {
// var operatorRecord = await _flowTaskRepository.GetTaskOperatorRecordInfo(x => x.TaskId == item.TaskId && x.TaskNodeId == item.TaskNodeId && x.TaskOperatorId == item.Id && x.Status != -1 && x.HandleStatus < 2);
// if (operatorRecord.IsNotEmptyOrNull())
// {
// delOperatorRecordIds.Add(operatorRecord.Id);
// }
// }
// //撤回节点是否完成
// if (flowTaskNodeEntity.Completion == 1)
// {
// //撤回节点下一节点经办删除
// await _flowTaskRepository.DeleteTaskOperator(recallNextOperatorList.Select(x => x.Id).ToList());
// //或签经办全部撤回,会签撤回未处理的经办
// //撤回节点未审批的经办
// var notHanleOperatorList = flowTaskOperatorEntityList.FindAll(x => x.TaskNodeId == flowTaskOperatorRecordEntity.TaskNodeId && x.HandleStatus == null
// && x.HandleTime == null);
// foreach (var item in notHanleOperatorList)
// {
// item.Completion = 0;
// }
// upOperatorList = upOperatorList.Union(notHanleOperatorList).ToList();
// #region 更新撤回节点
// flowTaskNodeEntity.Completion = 0;
// await _flowTaskRepository.UpdateTaskNode(flowTaskNodeEntity);
// #endregion
// #region 更新任务流程
// flowTaskEntity.ThisStepId = GetRecallThisStepId(new List() { flowTaskNodeEntity }, flowTaskEntity.ThisStepId);
// flowTaskEntity.ThisStep = GetThisStep(flowTaskNodeEntityList, flowTaskEntity.ThisStepId);
// flowTaskEntity.Completion = flowTaskNodeEntity.NodePropertyJson.ToObject().progress.ParseToInt();
// flowTaskEntity.Status = FlowTaskStatusEnum.Handle.ParseToInt();
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// #endregion
// }
// if (flowTaskOperatorRecordEntity.Status == 0)
// {
// var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowTaskEntity.FlowId);
// await AdjustNodeByCon(flowEngineEntity, flowTaskEntity.FlowFormContentJson, flowTaskOperatorEntity, true);
// }
// var userList = upOperatorList.Select(x => x.HandleId).ToList();
// var idList = upOperatorList.Select(x => x.Id).ToList();
// foreach (var item in flowTaskNodeEntityList)
// {
// if (flowTaskNodeEntity.NodeNext.Contains(item.NodeCode))
// {
// _flowTaskRepository.DeleteFlowCandidates(x => x.TaskNodeId == item.Id && userList.Contains(x.HandleId) && idList.Contains(x.TaskOperatorId));
// SpareTime.Cancel("CS_" + item.Id);
// SpareTime.Cancel("TX_" + item.Id);
// }
// }
// await _flowTaskRepository.UpdateTaskOperator(upOperatorList);
// #endregion
// #region 删除经办记录
// delOperatorRecordIds.Add(flowTaskOperatorRecordEntity.Id);
// await _flowTaskRepository.DeleteTaskOperatorRecord(delOperatorRecordIds);
// #endregion
// #region 撤回记录
// flowTaskOperatorRecordEntity.HandleId = _userManager.UserId;
// flowTaskOperatorRecordEntity.HandleOpinion = flowHandleModel.handleOpinion;
// flowTaskOperatorRecordEntity.HandleTime = DateTime.Now;
// flowTaskOperatorRecordEntity.HandleStatus = 3;
// flowTaskOperatorRecordEntity.NodeName = flowTaskNodeEntity.NodeName;
// flowTaskOperatorRecordEntity.TaskId = flowTaskEntity.Id;
// flowTaskOperatorRecordEntity.TaskNodeId = flowTaskOperatorRecordEntity.TaskNodeId;
// flowTaskOperatorRecordEntity.TaskOperatorId = flowTaskOperatorRecordEntity.Id;
// flowTaskOperatorRecordEntity.Status = 0;
// flowTaskOperatorRecordEntity.SignImg = flowHandleModel.signImg;
// await _flowTaskRepository.CreateTaskOperatorRecord(flowTaskOperatorRecordEntity);
// #endregion
// _db.CommitTran();
// #region 撤回事件
// globalTaskId = flowTaskNodeEntity.TaskId;
// globalTaskNodeId = flowTaskNodeEntity.Id;
// await RequestEvents(recallNodeProperties.recallFuncConfig, flowTaskEntity.FlowFormContentJson);
// #endregion
// }
// catch (AppFriendlyException ex)
// {
// _db.RollbackTran();
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 流程撤回.
// ///
// /// 流程实例.
// /// 流程经办.
// public async Task Revoke(FlowTaskEntity flowTaskEntity, FlowHandleModel flowHandleModel)
// {
// try
// {
// _db.BeginTran();
// var starProperty = (await _flowTaskRepository.GetTaskNodeInfo(x => FlowTaskNodeTypeEnum.start.ParseToString().Equals(x.NodeType) && x.State == "0" && x.TaskId == flowTaskEntity.Id)).NodePropertyJson?.ToObject();
// #region 撤回数据
// await _flowTaskRepository.DeleteFlowTaskAllData(new List() { flowTaskEntity.Id }, false);
// foreach (var item in await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskEntity.Id))
// {
// SpareTime.Cancel("CS_" + item.Id);
// SpareTime.Cancel("TX_" + item.Id);
// }
// #endregion
// #region 更新实例
// flowTaskEntity.ThisStepId = string.Empty;
// flowTaskEntity.ThisStep = "开始";
// flowTaskEntity.Completion = 0;
// flowTaskEntity.FlowUrgent = 0;
// flowTaskEntity.Status = FlowTaskStatusEnum.Revoke.ParseToInt();
// flowTaskEntity.StartTime = null;
// flowTaskEntity.EndTime = null;
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// #endregion
// #region 撤回记录
// FlowTaskOperatorRecordEntity flowTaskOperatorRecordEntity = new FlowTaskOperatorRecordEntity();
// flowTaskOperatorRecordEntity.HandleOpinion = flowHandleModel.handleOpinion;
// flowTaskOperatorRecordEntity.HandleId = _userManager.UserId;
// flowTaskOperatorRecordEntity.HandleTime = DateTime.Now;
// flowTaskOperatorRecordEntity.HandleStatus = 3;
// flowTaskOperatorRecordEntity.NodeName = "开始";
// flowTaskOperatorRecordEntity.TaskId = flowTaskEntity.Id;
// flowTaskOperatorRecordEntity.Status = 0;
// flowTaskOperatorRecordEntity.SignImg = flowHandleModel.signImg;
// await _flowTaskRepository.CreateTaskOperatorRecord(flowTaskOperatorRecordEntity);
// #endregion
// #region 撤回子流程任务
// var childTask = await _flowTaskRepository.GetTaskList(x => flowTaskEntity.Id == x.ParentId && x.DeleteMark == null);
// foreach (var item in childTask)
// {
// if (item.Status == 1)
// {
// await this.Revoke(item, flowHandleModel);
// }
// await _flowTaskRepository.DeleteTask(item);
// }
// #endregion
// _db.CommitTran();
// #region 撤回事件
// globalTaskId = flowTaskEntity.Id;
// globalTaskNodeId = string.Empty;
// await RequestEvents(starProperty.flowRecallFuncConfig, flowTaskEntity.FlowFormContentJson);
// #endregion
// }
// catch (AppFriendlyException ex)
// {
// _db.RollbackTran();
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 终止.
// ///
// /// 流程实例.
// /// 流程经办.
// public async Task Cancel(FlowTaskEntity flowTaskEntity, FlowHandleModel flowHandleModel)
// {
// try
// {
// _db.BeginTran();
// #region 更新实例
// flowTaskEntity.Status = FlowTaskStatusEnum.Cancel.ParseToInt();
// flowTaskEntity.EndTime = DateTime.Now;
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// foreach (var item in await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskEntity.Id))
// {
// SpareTime.Cancel("CS_" + item.Id);
// SpareTime.Cancel("TX_" + item.Id);
// }
// #endregion
// #region 作废记录
// FlowTaskOperatorRecordEntity flowTaskOperatorRecordEntity = new FlowTaskOperatorRecordEntity();
// flowTaskOperatorRecordEntity.HandleOpinion = flowHandleModel.handleOpinion;
// flowTaskOperatorRecordEntity.HandleId = _userManager.UserId;
// flowTaskOperatorRecordEntity.HandleTime = DateTime.Now;
// flowTaskOperatorRecordEntity.HandleStatus = 4;
// flowTaskOperatorRecordEntity.NodeName = flowTaskEntity.ThisStep;
// flowTaskOperatorRecordEntity.TaskId = flowTaskEntity.Id;
// flowTaskOperatorRecordEntity.Status = 0;
// flowTaskOperatorRecordEntity.SignImg = flowHandleModel.signImg;
// await _flowTaskRepository.CreateTaskOperatorRecord(flowTaskOperatorRecordEntity);
// #endregion
// _db.CommitTran();
// var flowEngineEntity = _flowTaskRepository.GetEngineFirstOrDefault(flowTaskEntity.FlowId);
// var nodeCodeList = flowTaskEntity.ThisStepId.Split(",").ToList();
// var flowTaskNodeEntity = await _flowTaskRepository.GetTaskNodeInfo(x => x.TaskId == flowTaskEntity.Id && nodeCodeList.Contains(x.NodeCode) && x.State == "0");
// var startApproversProperties = (await _flowTaskRepository.GetTaskNodeInfo(x => x.TaskId == flowTaskEntity.Id && x.NodeType == "start" && x.State == "0")).NodePropertyJson.ToObject();
// globalTaskId = flowTaskNodeEntity.TaskId;
// globalTaskNodeId = flowTaskNodeEntity.Id;
// //结束
// var bodyDic = GetMesBodyText(flowEngineEntity, flowTaskNodeEntity.Id, new List() { flowTaskEntity.CreatorUserId }, null, 1);
// await StationLetterMsg(flowTaskEntity.FullName, new List() { flowTaskEntity.CreatorUserId }, 5, bodyDic);
// await Alerts(startApproversProperties.endMsgConfig, new List() { flowTaskEntity.CreatorUserId }, flowTaskEntity.FlowFormContentJson);
// }
// catch (AppFriendlyException ex)
// {
// _db.RollbackTran();
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 指派.
// ///
// /// 任务id.
// /// 指派参数.
// ///
// public async Task Assigned(string id, FlowHandleModel flowHandleModel)
// {
// try
// {
// var flowOperatorEntityList = await _flowTaskRepository.GetTaskOperatorList(x => x.State == "0" && x.NodeCode == flowHandleModel.nodeCode && x.TaskId == id);
// await _flowTaskRepository.DeleteTaskOperator(flowOperatorEntityList.Select(x => x.Id).ToList());
// var entity = new FlowTaskOperatorEntity()
// {
// Id = SnowflakeIdHelper.NextId(),
// HandleId = flowHandleModel.freeApproverUserId,
// HandleType = flowOperatorEntityList.FirstOrDefault().HandleType,
// NodeCode = flowOperatorEntityList.FirstOrDefault().NodeCode,
// NodeName = flowOperatorEntityList.FirstOrDefault().NodeName,
// CreatorTime = DateTime.Now,
// TaskId = flowOperatorEntityList.FirstOrDefault().TaskId,
// TaskNodeId = flowOperatorEntityList.FirstOrDefault().TaskNodeId,
// Type = flowOperatorEntityList.FirstOrDefault().Type,
// Completion = 0,
// State = "0"
// };
// var isOk = await _flowTaskRepository.CreateTaskOperator(entity);
// if (!isOk)
// throw Oops.Oh(ErrorCode.WF0008);
// #region 流转记录
// var flowTaskOperatorRecordEntity = new FlowTaskOperatorRecordEntity();
// flowTaskOperatorRecordEntity.HandleOpinion = flowHandleModel.handleOpinion;
// flowTaskOperatorRecordEntity.HandleId = _userManager.UserId;
// flowTaskOperatorRecordEntity.HandleTime = DateTime.Now;
// flowTaskOperatorRecordEntity.HandleStatus = 5;
// flowTaskOperatorRecordEntity.NodeName = entity.NodeName;
// flowTaskOperatorRecordEntity.TaskId = entity.TaskId;
// flowTaskOperatorRecordEntity.Status = 0;
// flowTaskOperatorRecordEntity.OperatorId = flowHandleModel.freeApproverUserId;
// flowTaskOperatorRecordEntity.SignImg = flowHandleModel.signImg;
// await _flowTaskRepository.CreateTaskOperatorRecord(flowTaskOperatorRecordEntity);
// #endregion
// _db.CommitTran();
// var flowTaskEntity = await _flowTaskRepository.GetTaskInfo(entity.TaskId);
// var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowTaskEntity.FlowId);
// globalTaskId = flowTaskEntity.Id;
// globalTaskNodeId = entity.TaskNodeId;
// SpareTime.Cancel("CS_" + globalTaskNodeId);
// SpareTime.Cancel("TX_" + globalTaskNodeId);
// var startApproversProperties = (await _flowTaskRepository.GetTaskNodeInfo(x => FlowTaskNodeTypeEnum.start.ParseToString().Equals(x.NodeType) && x.TaskId == entity.TaskId)).NodePropertyJson.ToObject();
// var userList = new List() { flowHandleModel.freeApproverUserId };
// //委托人
// var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowEngineEntity.Id);
// userList = userList.Union(delegateUserIds).ToList();
// var bodyDic = GetMesBodyText(flowEngineEntity, entity.TaskNodeId, userList, new List() { entity }, 2);
// await StationLetterMsg(flowTaskEntity.FullName, userList, 0, bodyDic);
// await Alerts(startApproversProperties.waitMsgConfig, userList, flowTaskEntity.FlowFormContentJson);
// // 超时提醒
// await TimeoutOrRemind(flowTaskEntity, entity.TaskNodeId, new List() { entity }, flowEngineEntity, startApproversProperties, flowTaskEntity.FlowFormContentJson);
// }
// catch (AppFriendlyException ex)
// {
// _db.RollbackTran();
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 转办.
// ///
// /// 经办id.
// /// 转办参数.
// ///
// public async Task Transfer(string id, FlowHandleModel flowHandleModel)
// {
// try
// {
// _db.BeginTran();
// var flowOperatorEntity = await _flowTaskRepository.GetTaskOperatorInfo(id);
// if (flowOperatorEntity == null)
// throw Oops.Oh(ErrorCode.COM1005);
// flowOperatorEntity.HandleId = flowHandleModel.freeApproverUserId;
// var isOk = await _flowTaskRepository.UpdateTaskOperator(flowOperatorEntity);
// if (!isOk)
// throw Oops.Oh(ErrorCode.WF0007);
// #region 流转记录
// var flowTaskOperatorRecordEntity = new FlowTaskOperatorRecordEntity();
// flowTaskOperatorRecordEntity.HandleOpinion = flowHandleModel.handleOpinion;
// flowTaskOperatorRecordEntity.HandleId = _userManager.UserId;
// flowTaskOperatorRecordEntity.HandleTime = DateTime.Now;
// flowTaskOperatorRecordEntity.HandleStatus = 7;
// flowTaskOperatorRecordEntity.NodeName = flowOperatorEntity.NodeName;
// flowTaskOperatorRecordEntity.TaskId = flowOperatorEntity.TaskId;
// flowTaskOperatorRecordEntity.Status = 0;
// flowTaskOperatorRecordEntity.OperatorId = flowHandleModel.freeApproverUserId;
// flowTaskOperatorRecordEntity.SignImg = flowHandleModel.signImg;
// await _flowTaskRepository.CreateTaskOperatorRecord(flowTaskOperatorRecordEntity);
// #endregion
// _db.CommitTran();
// globalTaskId = flowOperatorEntity.TaskId;
// globalTaskNodeId = flowOperatorEntity.TaskNodeId;
// var flowTaskEntity = await _flowTaskRepository.GetTaskInfo(flowOperatorEntity.TaskId);
// var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowTaskEntity.FlowId);
// var flowTaskNodeEntityList = await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskOperatorRecordEntity.TaskId && x.State == "0");
// var startTaskNodeEntity = await _flowTaskRepository.GetTaskNodeInfo(x => FlowTaskNodeTypeEnum.start.ParseToString().Equals(x.NodeType) && x.TaskId == flowOperatorEntity.TaskId);
// var startApproversProperties = startTaskNodeEntity.NodePropertyJson.ToObject();
// var userList = new List() { flowHandleModel.freeApproverUserId };
// //委托人
// var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowEngineEntity.Id);
// userList = userList.Union(delegateUserIds).ToList();
// var bodyDic = GetMesBodyText(flowEngineEntity, flowOperatorEntity.TaskNodeId, userList, new List() { flowOperatorEntity }, 2);
// await StationLetterMsg(flowTaskEntity.FullName, userList, 0, bodyDic);
// await Alerts(startApproversProperties.waitMsgConfig, userList, flowTaskEntity.FlowFormContentJson);
// // 超时提醒
// await TimeoutOrRemind(flowTaskEntity, globalTaskNodeId, new List() { flowOperatorEntity }, flowEngineEntity, startApproversProperties, flowTaskEntity.FlowFormContentJson);
// #region 自动审批
// await AutoAudit(flowTaskEntity, flowTaskNodeEntityList, flowTaskEntity.FlowFormContentJson, startTaskNodeEntity.Id, flowHandleModel.candidateList);
// #endregion
// }
// catch (AppFriendlyException ex)
// {
// _db.RollbackTran();
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 催办.
// ///
// /// 任务id.
// ///
// public async Task Press(string id)
// {
// try
// {
// _db.BeginTran();
// var flowTaskEntity = await _flowTaskRepository.GetTaskInfo(id);
// var flowTaskOperatorEntityList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == id && x.Completion == 0 && x.State == "0");
// if (flowTaskOperatorEntityList.Any(x => x.HandleId.IsNullOrEmpty()))
// throw Oops.Oh(ErrorCode.WF0009);
// _db.CommitTran();
// globalTaskId = flowTaskEntity.Id;
// var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowTaskEntity.FlowId);
// var bodyDic = new Dictionary();
// var messageDic = GroupByOperator(flowTaskOperatorEntityList);
// var startApproversProperties = (await _flowTaskRepository.GetTaskNodeInfo(x => FlowTaskNodeTypeEnum.start.ParseToString().Equals(x.NodeType) && x.TaskId == flowTaskEntity.Id)).NodePropertyJson.ToObject();
// foreach (var item in messageDic.Keys)
// {
// var node = await _flowTaskRepository.GetTaskNodeInfo(item);
// globalTaskNodeId = node.Id;
// var nodeProperties = node.NodePropertyJson.ToObject();
// var userList = messageDic[item].Select(x => x.HandleId).ToList();
// //委托人
// var delegateUserIds = await _flowTaskRepository.GetDelegateUserIds(userList, flowEngineEntity.Id);
// userList = userList.Union(delegateUserIds).ToList();
// bodyDic = GetMesBodyText(flowEngineEntity, node.Id, userList, messageDic[item], 2);
// await StationLetterMsg(flowTaskEntity.FullName, userList, 0, bodyDic);
// await Alerts(startApproversProperties.waitMsgConfig, userList, flowTaskEntity.FlowFormContentJson);
// }
// }
// catch (AppFriendlyException ex)
// {
// _db.RollbackTran();
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 审批事前操作.
// ///
// /// 流程实例.
// /// 任务实例.
// /// 审批参数.
// ///
// public async Task ApproveBefore(FlowEngineEntity flowEngineEntity, FlowTaskEntity flowTaskEntity, FlowHandleModel flowHandleModel)
// {
// try
// {
// if (flowEngineEntity.FormType == 2)
// {
// var data = (flowHandleModel.formData.ToObject())["data"].ToString().ToObject();
// var devData = (flowHandleModel.formData.ToObject())["data"].ToString();
// var devEntity = await _flowTaskRepository.GetVisualDevInfo(flowEngineEntity.Id);
// var upInput = new VisualDevModelDataUpInput() { id = flowTaskEntity.Id, data = devData, status = 1 };
// var flowTaskSubmitModel = new FlowTaskSubmitModel
// {
// id = flowTaskEntity.Id,
// flowId = flowTaskEntity.FlowId,
// processId = flowTaskEntity.ProcessId,
// flowTitle = flowTaskEntity.FullName,
// flowUrgent = flowTaskEntity.FlowUrgent,
// billNo = flowTaskEntity.EnCode,
// formData = devData.ToObject(),
// status = 1,
// approvaUpType = 1,
// isSysTable = false,
// parentId = "0",
// isDev = devEntity.IsNotEmptyOrNull()
// };
// await Save(flowTaskSubmitModel);
// if (devEntity.IsNotEmptyOrNull())
// {
// //await _runService.Update(flowTaskEntity.Id, devEntity, upInput);
// var dbLink = await _flowTaskRepository.GetLinkInfo(flowEngineEntity.DbLinkId) ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName);
// var sql = await _runService.UpdateHaveTableSql(devEntity, upInput, flowTaskEntity.Id);
// foreach (var item in sql) await _dataBaseManager.ExecuteSql(dbLink, item);
// }
// }
// else
// {
// flowTaskEntity.FlowFormContentJson = flowHandleModel.formData.ToJsonString();
// await _flowTaskRepository.UpdateTask(flowTaskEntity);
// await _flowTaskRepository.GetSysTableFromService(flowHandleModel.enCode, flowHandleModel.formData, flowTaskEntity.Id, 0);
// //GetSysTableFromService(flowHandleModel.enCode, flowHandleModel.formData, flowTaskEntity.Id, 0);
// }
// }
// catch (AppFriendlyException ex)
// {
// throw Oops.Oh(ex.ErrorCode);
// }
// }
// ///
// /// 获取候选人.
// ///
// /// 经办id.
// /// 审批参数.
// /// 0:候选节点编码,1:候选人.
// ///
// public async Task GetCandidateModelList(string id, FlowHandleModel flowHandleModel, int type = 0)
// {
// var output = new List();
// //所有节点
// List flowTaskNodeEntityList = new List();
// //下个节点集合
// List nextNodeEntityList = new List();
// //指定下个节点
// FlowTaskNodeEntity nextNodeEntity = new FlowTaskNodeEntity();
// var jobj = flowHandleModel.formData.ToJsonString().ToObject();
// if (!jobj.ContainsKey("flowId"))
// {
// return output;
// }
// var flowId = jobj["flowId"].ToString();
// var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowId);
// var formData = flowEngineEntity.FormType == 2 ? jobj["data"].ToString().ToObject() : flowHandleModel.formData;
// // 是否达到会签比例
// var isCom = false;
// if (id == "0")
// {
// //所有节点
// flowTaskNodeEntityList = ParsingTemplateGetNodeList(flowEngineEntity, formData.ToJsonString(), string.Empty);
// var startTaskNodeEntity = flowTaskNodeEntityList.Find(m => FlowTaskNodeTypeEnum.start.ParseToString().Equals(m.NodeType));
// nextNodeEntityList = flowTaskNodeEntityList.FindAll(m => startTaskNodeEntity.NodeNext.Contains(m.NodeCode));
// isCom = true;
// }
// else
// {
// var flowTaskOperator = await _flowTaskRepository.GetTaskOperatorInfo(id);
// if (flowTaskOperator.ParentId.IsNotEmptyOrNull() && type == 0)
// {
// return output;
// }
// var flowTaskOperatorList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskOperator.TaskId && x.TaskNodeId == flowTaskOperator.TaskNodeId && x.State == "0" && SqlFunc.IsNullOrEmpty(x.ParentId));
// var flowTaskNodeEntity = await _flowTaskRepository.GetTaskNodeInfo(flowTaskOperator.TaskNodeId);
// flowTaskNodeEntityList = await _flowTaskRepository.GetTaskNodeList(x => x.State == "0" && x.TaskId == flowTaskOperator.TaskId);
// var taskNodeList = GetTaskNodeModelList(flowEngineEntity, flowTaskOperator.TaskId);
// if (taskNodeList.Any(m => flowTaskNodeEntity.NodeNext.Contains(m.nodeId) && m.isBranchFlow))
// {
// flowTaskNodeEntity.NodeNext = taskNodeList.Find(x => x.nodeId == flowTaskNodeEntity.NodeCode).nextNodeId;
// }
// nextNodeEntityList = flowTaskNodeEntityList.FindAll(m => flowTaskNodeEntity.NodeNext.Contains(m.NodeCode));
// if (flowTaskNodeEntity.NodePropertyJson.ToObject().counterSign == 0)
// {
// isCom = true;
// }
// else
// {
// isCom = IsAchievebilProportion(flowTaskOperatorList, 1, flowTaskNodeEntity.NodePropertyJson.ToObject().countersignRatio.ParseToInt(), flowHandleModel.freeApproverUserId.IsNullOrEmpty());
// }
// }
// nextNodeEntity = flowTaskNodeEntityList.Find(x => x.NodeCode.Equals(flowHandleModel.nodeCode));
// if (type == 1)
// {
// return GetCandidateItems(nextNodeEntity, flowHandleModel);
// }
// await GetCandidates(output, nextNodeEntityList, flowTaskNodeEntityList);
// //return output;
// // 弹窗类型 1:条件分支弹窗(包含候选人) 2:候选人弹窗 3:无弹窗
// var branchType = output.Count > 0 ? (output.Any(x => x.isBranchFlow) ? 1 : 2) : 3;
// if (!isCom && branchType == 1)
// {
// branchType = 3;
// }
// return new { list = output, type = branchType };
// }
// ///
// /// 批量审批节点列表.
// ///
// /// 流程id.
// ///
// public async Task NodeSelector(string flowId)
// {
// var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowId);
// var taskNodeList = ParsingTemplateGetNodeList(flowEngineEntity, null, string.Empty);
// return taskNodeList.FindAll(x => FlowTaskNodeTypeEnum.approver.ParseToString().Equals(x.NodeType)).Select(x => new { id = x.NodeCode, fullName = x.NodePropertyJson.ToObject().title }).ToList();
// }
// ///
// /// 获取批量审批候选人.
// ///
// /// 流程id.
// /// 经办id.
// ///
// public async Task GetBatchCandidate(string flowId, string flowTaskOperatorId)
// {
// //所有节点
// var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowId);
// var taskNodeList = ParsingTemplateGetNodeList(flowEngineEntity, null, string.Empty);
// var flowTaskOperator = await _flowTaskRepository.GetTaskOperatorInfo(flowTaskOperatorId);
// // 当前经办节点实例
// var node = await _flowTaskRepository.GetTaskNodeInfo(flowTaskOperator.TaskNodeId);
// var ids = node.NodeNext.Split(",").ToList();
// // 判断当前节点下节点是否属于条件之下
// var flag1 = taskNodeList.Any(x => FlowTaskNodeTypeEnum.condition.ParseToString().Equals(x.NodeType) && ids.Intersect(x.NodeNext.Split(",").ToList()).ToList().Count > 0);
// // 判断当前节点下节点是否包含候选人节点
// var flag2 = taskNodeList.Any(x => ids.Contains(x.NodeCode) && FlowTaskNodeTypeEnum.approver.ParseToString().Equals(x.NodeType) && x.NodePropertyJson.ToObject().assigneeType == 7);
// if (flag1 && flag2)
// {
// throw Oops.Oh(ErrorCode.WF0022);
// }
// var model = new FlowHandleModel
// {
// nodeCode = flowTaskOperator.NodeCode,
// formData = new { flowId = flowId, data = "{}", id = flowTaskOperator.TaskId }
// };
// return await GetCandidateModelList(flowTaskOperatorId, model);
// }
// ///
// /// 审批根据条件变更节点.
// ///
// /// 流程实例.
// /// 表单数据.
// /// 经办实例.
// ///
// public async Task AdjustNodeByCon(FlowEngineEntity flowEngineEntity, object formData, FlowTaskOperatorEntity flowTaskOperatorEntity, bool isBranchFlow = false)
// {
// var taskNodeList = GetTaskNodeModelList(flowEngineEntity, flowTaskOperatorEntity.TaskId);
// var flag = false;
// if (isBranchFlow)
// {
// // 下节点是否选择分支
// flag = taskNodeList.Any(x => x.upNodeId == flowTaskOperatorEntity.NodeCode && x.isBranchFlow);
// }
// else
// {
// // 下节点是否条件
// flag = taskNodeList.Any(x => x.upNodeId == flowTaskOperatorEntity.NodeCode && FlowTaskNodeTypeEnum.condition.ParseToString().Equals(x.type));
// }
// if (flag)
// {
// var data = flowEngineEntity.FormType == 2 && !isBranchFlow ? formData.ToJsonString().ToObject()["data"].ToString() : formData.ToJsonString();
// DeleteConditionTaskNodeModel(taskNodeList, data, flowTaskOperatorEntity.TaskId);
// var flowNodeList = new List();
// var oldNodeList = await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskOperatorEntity.TaskId && x.State != "-2");
// foreach (var item in taskNodeList)
// {
// var flowTaskNodeEntity = new FlowTaskNodeEntity();
// flowTaskNodeEntity.Id = oldNodeList.Find(x => x.NodeCode == item.nodeId)?.Id;
// flowTaskNodeEntity.CreatorTime = DateTime.Now;
// flowTaskNodeEntity.TaskId = item.taskId;
// flowTaskNodeEntity.NodeCode = item.nodeId;
// flowTaskNodeEntity.NodeType = item.type;
// flowTaskNodeEntity.Completion = FlowTaskNodeTypeEnum.start.ParseToString().Equals(item.type) ? 1 : 0;
// flowTaskNodeEntity.NodeName = FlowTaskNodeTypeEnum.start.ParseToString().Equals(item.type) ? "开始" : item.propertyJson.title;
// flowTaskNodeEntity.NodeUp = !FlowTaskNodeTypeEnum.approver.ParseToString().Equals(item.type) ? null : item.propertyJson.rejectStep;
// flowTaskNodeEntity.NodeNext = item.nextNodeId;
// flowTaskNodeEntity.NodePropertyJson = JsonHelper.ToJsonString(item.propertyJson);
// flowTaskNodeEntity.State = "1";
// flowNodeList.Add(flowTaskNodeEntity);
// }
// DeleteTimerTaskNode(flowNodeList);
// var nodeList = new List();
// RecursiveNode(oldNodeList, flowTaskOperatorEntity.NodeCode, nodeList);
// if (flowTaskOperatorEntity.TaskNodeId.IsNotEmptyOrNull())
// {
// nodeList.Add(oldNodeList.Find(x => x.NodeCode == flowTaskOperatorEntity.NodeCode));
// }
// foreach (var item in nodeList)
// {
// var node = flowNodeList.FirstOrDefault(x => x.NodeCode == item.NodeCode);
// item.NodeNext = node.NodeNext;
// item.SortCode = node.SortCode;
// item.State = node.State;
// }
// await _flowTaskRepository.UpdateTaskNode(nodeList);
// var nodeList1 = new List();
// RecursiveNode(flowNodeList, flowTaskOperatorEntity.NodeCode, nodeList1);
// foreach (var item in nodeList1)
// {
// var node = flowNodeList.FirstOrDefault(x => x.NodeCode == item.NodeCode);
// item.NodeNext = node.NodeNext;
// item.SortCode = node.SortCode;
// item.State = node.State;
// }
// await _flowTaskRepository.UpdateTaskNode(nodeList1);
// }
// }
// ///
// /// 判断驳回节点是否存在子流程.
// ///
// /// 经办实例.
// ///
// public async Task IsSubFlowUpNode(FlowTaskOperatorEntity flowTaskOperatorEntity)
// {
// var nodeList = await _flowTaskRepository.GetTaskNodeList(flowTaskOperatorEntity.TaskId);
// var nodeInfo = await _flowTaskRepository.GetTaskNodeInfo(flowTaskOperatorEntity.TaskNodeId);
// if (nodeInfo.NodeUp == "0")
// {
// return false;
// }
// else
// {
// var rejectNodeList = GetRejectFlowTaskOperatorEntity(nodeList, nodeInfo, nodeInfo.NodePropertyJson.ToObject());
// return rejectNodeList.Any(x => x.NodeType.Equals("subFlow"));
// }
// }
// ///
// /// 获取批量任务的表单数据.
// ///
// /// 经办id.
// ///
// public async Task