//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 GetBatchOperationData(string taskOperatorId) // { // var taskOperatorEntity = await _flowTaskRepository.GetTaskOperatorInfo(taskOperatorId); // var taskEntity = await _flowTaskRepository.GetTaskInfo(taskOperatorEntity.TaskId); // var flowEngine = await _flowTaskRepository.GetEngineInfo(taskEntity.FlowId); // if (flowEngine.FormType == 1) // { // return taskEntity.FlowFormContentJson.ToObject(); // } // else // { // return new { flowId = taskEntity.Id, data = taskEntity.FlowFormContentJson, id = taskEntity.Id }; // } // } // /// // /// 详情操作验证. // /// // /// 经办id. // /// // public async Task Validation(string taskOperatorId) // { // var taskOperator = await _flowTaskRepository.GetTaskOperatorInfo(taskOperatorId); // if (taskOperator.IsNullOrEmpty() || taskOperator.Completion != 0 || taskOperator.State == "-1") // throw Oops.Oh(ErrorCode.WF0030); // var task = await _flowTaskRepository.GetTaskInfo(taskOperator.TaskId); // if (task.IsNullOrEmpty() || task.Status != 1 || task.DeleteMark.IsNotEmptyOrNull()) // throw Oops.Oh(ErrorCode.WF0030); // if (taskOperator.HandleId != _userManager.UserId) // { // var toUserId = _flowTaskRepository.GetToUserId(taskOperator.HandleId, task.FlowId); // if (!toUserId.Contains(_userManager.UserId)) // throw Oops.Oh(ErrorCode.WF0030); // } // } // /// // /// 变更/复活. // /// // /// 变更/复活参数. // /// // public async Task Change(FlowHandleModel flowHandleModel) // { // FlowTaskEntity flowTaskEntity = await _flowTaskRepository.GetTaskInfo(flowHandleModel.taskId); // FlowEngineEntity flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowTaskEntity.FlowId); // //流程所有节点 // List flowTaskNodeEntityList = await _flowTaskRepository.GetTaskNodeList(x => x.State == "0" && x.TaskId == flowTaskEntity.Id); // try // { // _db.BeginTran(); // // 当前待办节点是子流程不允许操作 // if (flowTaskNodeEntityList.Any(x => flowTaskEntity.ThisStepId.Contains(x.NodeCode) && FlowTaskNodeTypeEnum.subFlow.ParseToString().Equals(x.NodeType))) // throw Oops.Oh(ErrorCode.WF0036); // if (flowTaskEntity.Status != FlowTaskStatusEnum.Adopt.ParseToInt() && flowHandleModel.resurgence) // throw Oops.Oh(ErrorCode.WF0034); // // 开始节点 // var startNode = flowTaskNodeEntityList.Find(x => FlowTaskNodeTypeEnum.start.ParseToString().Equals(x.NodeType)); // // 变更节点 // var changeNode = flowTaskNodeEntityList.Find(x => x.Id == flowHandleModel.taskNodeId); // if (changeNode.DraftData.IsNullOrEmpty() && flowHandleModel.resurgence) // throw Oops.Oh(ErrorCode.WF0034); // // 递归获取变更节点下级所有节点 // var changeNodeNextList = new List(); // await RecursiveNode(flowTaskNodeEntityList, changeNode.NodeCode, changeNodeNextList); // changeNodeNextList.Add(changeNode); // // 将非变更节点以及其下级节点全部已完成 // foreach (var item in flowTaskNodeEntityList) // { // if (changeNodeNextList.Select(x => x.Id).Contains(item.Id)) // { // item.Completion = 0; // } // else // { // item.Completion = 1; // } // } // // 清空变更/复活流程候选人数据 // _flowTaskRepository.DeleteFlowCandidates(x => x.TaskId == changeNode.TaskId); // await _flowTaskRepository.DeleteTaskOperatorRecord(x => x.TaskId == changeNode.TaskId); // foreach (var item in await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskEntity.Id)) // { // SpareTime.Cancel("CS_" + item.Id); // SpareTime.Cancel("TX_" + item.Id); // } // //变更节点经办数据 // var flowTaskOperatorEntityList = new List(); // List flowTaskCandidateModels = new List(); // var errUser = new List(); // if (flowHandleModel.errorRuleUserList.IsNotEmptyOrNull() && flowHandleModel.errorRuleUserList.ContainsKey(changeNode.NodeCode)) // { // errUser = flowHandleModel.errorRuleUserList[changeNode.NodeCode]; // } // await AddFlowTaskOperatorEntityByAssigneeType(flowTaskEntity, flowTaskOperatorEntityList, flowTaskNodeEntityList, startNode, changeNode, flowTaskCandidateModels, flowTaskEntity.CreatorUserId, flowTaskEntity.FlowFormContentJson, errUser, 3); // if (flowTaskCandidateModels.Count > 0) // { // _db.RollbackTran(); // return flowTaskCandidateModels; // } // var oldOperatorList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == changeNode.TaskId); // foreach (var item in oldOperatorList) // { // item.State = "-1"; // } // await _flowTaskRepository.UpdateTaskOperator(oldOperatorList); // await _flowTaskRepository.CreateTaskOperator(flowTaskOperatorEntityList); // await _flowTaskRepository.UpdateTaskNode(flowTaskNodeEntityList); // await AdjustNodeByCon(flowEngineEntity, flowTaskEntity.FlowFormContentJson, new FlowTaskOperatorEntity { TaskId = changeNode.TaskId, NodeCode = changeNode.NodeCode }, true); // #region 更新流程任务 // flowTaskEntity.ThisStepId = changeNode.NodeCode; // flowTaskEntity.ThisStep = changeNode.NodeName; // if (flowHandleModel.resurgence) // { // flowTaskEntity.Completion = changeNode.NodePropertyJson.ToObject().progress.ParseToInt(); // flowTaskEntity.Status = FlowTaskStatusEnum.Handle.ParseToInt(); // flowTaskEntity.ParentId = "0"; // flowTaskEntity.IsAsync = 0; // flowTaskEntity.TaskNodeId = changeNode.Id; // } // await _flowTaskRepository.UpdateTask(flowTaskEntity); // #endregion // #region 流程经办记录 // FlowTaskOperatorRecordEntity flowTaskOperatorRecordEntity = new FlowTaskOperatorRecordEntity(); // flowTaskOperatorRecordEntity.HandleId = _userManager.UserId; // flowTaskOperatorRecordEntity.HandleTime = DateTime.Now; // flowTaskOperatorRecordEntity.HandleStatus = flowHandleModel.resurgence ? 9 : 8; // flowTaskOperatorRecordEntity.NodeCode = changeNode.NodeCode; // flowTaskOperatorRecordEntity.NodeName = changeNode.NodeName; // flowTaskOperatorRecordEntity.TaskId = flowTaskEntity.Id; // flowTaskOperatorRecordEntity.Status = 0; // flowTaskOperatorRecordEntity.HandleOpinion = flowHandleModel.handleOpinion; // await _flowTaskRepository.CreateTaskOperatorRecord(flowTaskOperatorRecordEntity); // #endregion // _db.CommitTran(); // #region 消息提醒 // var messageDic = GroupByOperator(flowTaskOperatorEntityList); // var approversProperties = changeNode.NodePropertyJson.ToObject(); // var startApproversProperties = startNode.NodePropertyJson.ToObject(); // //审批 // 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(); // var bodyDic = GetMesBodyText(flowEngineEntity, item, userList, messageDic[item], 2); // await StationLetterMsg(flowTaskEntity.FullName, userList, 0, bodyDic); // if (approversProperties.approveMsgConfig.IsNotEmptyOrNull()) // { // approversProperties.approveMsgConfig = approversProperties.approveMsgConfig.on == 2 ? startApproversProperties.approveMsgConfig : approversProperties.approveMsgConfig; // } // await Alerts(approversProperties.approveMsgConfig, userList, flowTaskEntity.FlowFormContentJson); // // 超时提醒 // await TimeoutOrRemind(flowTaskEntity, item, messageDic[item], flowEngineEntity, startApproversProperties, flowTaskEntity.FlowFormContentJson); // } // #endregion // return flowTaskCandidateModels; // } // catch (AppFriendlyException ex) // { // _db.RollbackTran(); // throw Oops.Oh(ex.ErrorCode); // } // } // #endregion // #region PrivateMethod // #region 流程模板解析 // /// // /// 递归获取流程模板数组. // /// // /// 流程模板. // /// 流程模板数组. // private void GetFlowTemplateList(FlowTemplateJsonModel template, List templateList) // { // if (template.IsNotEmptyOrNull()) // { // var haschildNode = template.childNode.IsNotEmptyOrNull(); // var hasconditionNodes = template.conditionNodes.IsNotEmptyOrNull() && template.conditionNodes.Count > 0; // templateList.Add(template); // if (hasconditionNodes) // { // foreach (var conditionNode in template.conditionNodes) // { // GetFlowTemplateList(conditionNode, templateList); // } // } // if (haschildNode) // { // GetFlowTemplateList(template.childNode, templateList); // } // } // } // /// // /// 递归获取流程模板最外层childNode中所有nodeid. // /// // /// 流程模板实例. // /// 子节点id. // private void GetChildNodeIdList(FlowTemplateJsonModel template, List childNodeIdList) // { // if (template.IsNotEmptyOrNull() && template.childNode.IsNotEmptyOrNull()) // { // childNodeIdList.Add(template.childNode.nodeId); // GetChildNodeIdList(template.childNode, childNodeIdList); // } // } // /// // /// 递归审批模板获取所有节点. // /// // /// 当前审批流程json. // /// 流程节点数组. // /// 流程模板数组. // private void GetFlowTemplateAll(FlowTemplateJsonModel template, List nodeList, List templateList, List childNodeIdList, string taskId = "") // { // try // { // if (template.IsNotEmptyOrNull()) // { // var taskNodeModel = template.Adapt(); // taskNodeModel.taskId = taskId; // taskNodeModel.propertyJson = GetPropertyByType(template.type, template.properties); // if (taskNodeModel.isBranchFlow) // { // taskNodeModel.propertyJson.isBranchFlow = taskNodeModel.isBranchFlow; // } // var haschildNode = template.childNode.IsNotEmptyOrNull(); // var hasconditionNodes = template.conditionNodes.IsNotEmptyOrNull() && template.conditionNodes.Count > 0; // List nextNodeIdList = new List { string.Empty }; // if (templateList.Count > 1) // { // nextNodeIdList = GetNextNodeIdList(templateList, template, childNodeIdList); // } // taskNodeModel.nextNodeId = string.Join(',', nextNodeIdList.ToArray()); // nodeList.Add(taskNodeModel); // if (hasconditionNodes) // { // foreach (var conditionNode in template.conditionNodes) // { // GetFlowTemplateAll(conditionNode, nodeList, templateList, childNodeIdList, taskId); // } // } // if (haschildNode) // { // taskNodeModel.childNodeId = template.childNode.nodeId; // GetFlowTemplateAll(template.childNode, nodeList, templateList, childNodeIdList, taskId); // } // } // } // catch (AppFriendlyException ex) // { // throw Oops.Oh(ex.ErrorCode); // } // } // /// // /// 根据类型获取不同属性对象. // /// // /// 属性类型. // /// 数据. // /// // private dynamic GetPropertyByType(string type, JObject jd) // { // switch (type) // { // case "approver": // return jd.ToObject(); // case "timer": // return jd.ToObject(); // case "start": // return jd.ToObject(); // case "condition": // return jd.ToObject(); // case "subFlow": // return jd.ToObject(); // default: // return jd; // } // } // /// // /// 获取当前模板的下一节点 // /// 下一节点数据来源:conditionNodes和childnode (conditionNodes优先级大于childnode) // /// conditionNodes非空:下一节点则为conditionNodes数组中所有nodeID // /// conditionNodes非空childNode非空:下一节点则为childNode的nodeId // /// conditionNodes空childNode空则为最终节点(两种情况:当前模板属于conditionNodes的最终节点或childNode的最终节点) // /// conditionNodes的最终节点:下一节点为与conditionNodes同级的childNode的nodeid,没有则继续递归,直到最外层的childNode // /// childNode的最终节点直接为"". // /// // /// 模板数组 // /// 当前模板 // /// 最外层childnode的nodeid集合 // /// // private List GetNextNodeIdList(List templateList, FlowTemplateJsonModel template, List childNodeIdList) // { // List nextNodeIdList = new List(); // if (template.conditionNodes.IsNotEmptyOrNull() && template.conditionNodes.Count > 0) // { // nextNodeIdList = template.conditionNodes.Select(x => x.nodeId).ToList(); // } // else // { // if (template.childNode.IsNotEmptyOrNull()) // { // nextNodeIdList.Add(template.childNode.nodeId); // } // else // { // //判断是否是最外层的节点 // if (childNodeIdList.Contains(template.nodeId)) // { // nextNodeIdList.Add(string.Empty); // } // else // { // //conditionNodes中最终节点 // nextNodeIdList.Add(GetChildId(templateList, template, childNodeIdList)); // } // } // } // return nextNodeIdList; // } // /// // /// 递归获取conditionNodes最终节点下一节点. // /// // /// 流程模板数组. // /// 当前模板. // /// 最外层childNode的节点数据. // /// // private string GetChildId(List templateList, FlowTemplateJsonModel template, List childNodeIdList) // { // var prevModel = new FlowTemplateJsonModel(); // if (template.prevId.IsNotEmptyOrNull()) // { // prevModel = templateList.Find(x => x.nodeId.Equals(template.prevId)); // if (prevModel.childNode.IsNotEmptyOrNull() && prevModel.childNode.nodeId != template.nodeId) // { // return prevModel.childNode.nodeId; // } // if (childNodeIdList.Contains(prevModel.nodeId)) // { // return prevModel.childNode.IsNullOrEmpty() ? string.Empty : prevModel.childNode.nodeId; // } // else // { // return GetChildId(templateList, prevModel, childNodeIdList); // } // } // else // { // return string.Empty; // } // } // /// // /// 删除条件节点 // /// 将条件的上非条件的节点的nextnode替换成当前条件的nextnode. // /// // /// 所有节点数据. // /// 填写表单数据. // /// 任务id. // /// // private void DeleteConditionTaskNodeModel(List taskNodeModelList, string formDataJson, string taskId) // { // var conditionTaskNodeModelList = taskNodeModelList.FindAll(x => FlowTaskNodeTypeEnum.condition.ParseToString().Equals(x.type)); // var dic = new Dictionary>(); // foreach (var item in conditionTaskNodeModelList.GroupBy(x => x.upNodeId)) // { // dic.Add(item.Key, taskNodeModelList.FindAll(x => x.upNodeId == item.Key && FlowTaskNodeTypeEnum.condition.ParseToString().Equals(x.type))); // } // //条件的默认情况判断(同层条件的父节点是一样的,只要非默认的匹配成功则不需要走默认的) // var isDefault = new List(); // foreach (var nodeId in dic.Keys) // { // foreach (var item in dic[nodeId]) // { // //条件节点的父节点且为非条件的节点 // var upTaskNodeModel = taskNodeModelList.Find(x => x.nodeId == nodeId); // if (FlowTaskNodeTypeEnum.condition.ParseToString().Equals(upTaskNodeModel.type)) // { // upTaskNodeModel = GetUpTaskNodeModelIsNotCondition(taskNodeModelList, upTaskNodeModel); // // 如果父节点下一节点存在某个审批节点则不需要判断了 // if (taskNodeModelList.Where(x => upTaskNodeModel.nextNodeId.Contains(x.nodeId)).Any(y => FlowTaskNodeTypeEnum.approver.ParseToString().Equals(y.type))) // { // break; // } // } // if (!item.propertyJson.isDefault && ConditionNodeJudge(formDataJson, item.propertyJson, taskId)) // { // upTaskNodeModel.nextNodeId = item.nextNodeId; // isDefault.Add(item.upNodeId); // break; // } // else // { // if (!isDefault.Contains(item.upNodeId) && item.propertyJson.isDefault) // { // upTaskNodeModel.nextNodeId = item.nextNodeId; // } // else // { // upTaskNodeModel.nextNodeId = upTaskNodeModel.childNodeId.IsNotEmptyOrNull() ? upTaskNodeModel.childNodeId : FlowTaskNodeTypeEnum.end.ParseToString(); // } // } // } // } // if (formDataJson.IsNotEmptyOrNull()) // { // taskNodeModelList.RemoveAll(x => FlowTaskNodeTypeEnum.condition.ParseToString().Equals(x.type)); // } // } // /// // /// 向上递获取非条件的节点. // /// // /// 所有节点数据. // /// 当前节点. // /// // private TaskNodeModel GetUpTaskNodeModelIsNotCondition(List taskNodeModelList, TaskNodeModel taskNodeModel) // { // var preTaskNodeModel = taskNodeModelList.Find(x => x.nodeId == taskNodeModel.upNodeId); // if (FlowTaskNodeTypeEnum.condition.ParseToString().Equals(preTaskNodeModel.type)) // { // return GetUpTaskNodeModelIsNotCondition(taskNodeModelList, preTaskNodeModel); // } // else // { // return preTaskNodeModel; // } // } // /// // /// 条件判断. // /// // /// 表单填写数据. // /// 条件属性. // /// 任务id. // /// // private bool ConditionNodeJudge(string formDataJson, ConditionProperties conditionPropertie, string taskId) // { // try // { // bool flag = false; // StringBuilder expression = new StringBuilder(); // expression.AppendFormat("select * from base_user where "); // var formData = formDataJson.ToObject(); // int i = 0; // foreach (ConditionsItem flowNodeWhereModel in conditionPropertie.conditions) // { // var logic = flowNodeWhereModel.logic; // var symbol = flowNodeWhereModel.symbol.Equals("==") ? "=" : flowNodeWhereModel.symbol; // // 条件值 // var formValue = GetConditionValue(flowNodeWhereModel.fieldType.ParseToInt(), formData, flowNodeWhereModel.field, taskId, flowNodeWhereModel.jnpfKey); // // 匹配值 // var value = " "; // if (flowNodeWhereModel.fieldValueType.ParseToInt() == 2) // { // //数组类型控件 // var jnpfKeyList = new List() { "cascader", "comSelect", "address", "currOrganize" }; // if (jnpfKeyList.Contains(flowNodeWhereModel.jnpfKey) && flowNodeWhereModel.fieldValue.Count > 0) // { // if (flowNodeWhereModel.jnpfKey.Equals("currOrganize")) // { // value = flowNodeWhereModel.fieldValue[flowNodeWhereModel.fieldValue.Count - 1]; // } // else // { // value = string.Join(",", flowNodeWhereModel.fieldValue); // } // } // else // { // value = flowNodeWhereModel.fieldValue.ToString(); // } // if ("currentUser".Equals(value)) // { // value = _userManager.UserId; // } // if ("time".Equals(flowNodeWhereModel.jnpfKey)) // { // formValue = formValue.Replace(":", string.Empty); // value = value.Replace(":", string.Empty); // } // } // else // { // value = GetConditionValue(flowNodeWhereModel.fieldValueType.ParseToInt(), formData, flowNodeWhereModel.fieldValue, taskId, flowNodeWhereModel.jnpfKey); // } // if (symbol.Equals("=") || symbol.Equals("<>")) // { // expression.AppendFormat("('{0}'{1}'{2}')", formValue, symbol, value); // } // else if (symbol.Equals("like")) // { // if (formValue.Length > value.Length) // { // expression.AppendFormat("('{0}' {1} '%{2}%')", formValue, symbol, value); // } // else // { // expression.AppendFormat("('{0}' {1} '%{2}%')", value, symbol, formValue); // } // } // else if (symbol.Equals("notLike")) // { // if (formValue.Length > value.Length) // { // expression.AppendFormat("('{0}' {1} '%{2}%')", formValue, "not like", value); // } // else // { // expression.AppendFormat("('{0}' {1} '%{2}%')", value, "not like", formValue); // } // } // else // { // if (string.IsNullOrWhiteSpace(formValue) || string.IsNullOrWhiteSpace(value)) // { // expression.Append("(1=2)"); // } // else // { // expression.AppendFormat("({0}{1}{2})", formValue, symbol, value); // } // } // if (logic.IsNotEmptyOrNull() && i != conditionPropertie.conditions.Count - 1) // { // expression.Append(" " + logic.Replace("&&", " and ").Replace("||", " or ") + " "); // } // i++; // } // flag = _dataBaseManager.WhereDynamicFilter(null, expression.ToString()); // return flag; // } // catch (Exception e) // { // return false; // } // } // /// // /// 获取条件匹配值. // /// // /// 条件类型 1、字段 2、自定义 3、聚合函数. // /// 表单数据. // /// 关联字段. // /// 任务id. // /// 控件key. // /// // private string GetConditionValue(int type, JObject formData, string field, string taskId, string jnpfKey) // { // var conditionValue = " "; // if (type == 1) // { // if (formData.ContainsKey(field)) // { // if (formData[field] is JArray) // { // try // { // var jar = formData[field].ToObject>(); // if (jar.Count > 0) // { // conditionValue = string.Join(",", jar); // } // } // catch (Exception e) // { // var arr = formData[field].ToObject>>(); // conditionValue = string.Join(",", arr.Select(x => string.Join(",", x)).ToList()); // } // } // else // { // if (formData[field].IsNotEmptyOrNull()) // { // conditionValue = formData[field].ToString(); // SysWidgetFormValue(taskId, jnpfKey, ref conditionValue); // } // } // } // } // else // { // // 获取聚合函数要替换的参数key // foreach (var item in field.Substring3()) // { // if (formData.ContainsKey(item)) // { // field = field.Replace("{" + item + "}", "'" + formData[item] + "'"); // } // // 子表字段 // if (item.Contains("tableField") && item.Contains("-")) // { // var fields = item.Split("-").ToList(); // var tableField = fields[0]; // var keyField = fields[1]; // if (formData.ContainsKey(tableField) && formData[tableField] is JArray) // { // var jar = formData[tableField] as JArray; // var tableValue = jar.Where(x => x.ToObject().ContainsKey(keyField)).Select(x => x.ToObject()[keyField]).ToObject>(); // var valueStr = string.Join("','", tableValue); // field = field.Replace("{" + item + "}", "'" + valueStr + "'"); // } // } // } // // 执行函数获取值 // conditionValue = JsEngineUtil.AggreFunction(field).ToString(); // } // return conditionValue; // } // /// // /// 系统控件条件匹配数据转换. // /// // /// 任务id // /// 条件匹配字段类型 // /// 条件匹配值 // private void SysWidgetFormValue(string taskId, string jnpfKey, ref string formValue) // { // var taskEntity = _flowTaskRepository.GetTaskFirstOrDefault(taskId); // if (taskEntity.IsNotEmptyOrNull()) // { // var creatorUser = _usersService.GetInfoByUserId(taskEntity.CreatorUserId); // switch (jnpfKey) // { // case "createUser": // formValue = taskEntity.CreatorUserId; // break; // case "modifyUser": // if (taskEntity.LastModifyUserId.IsNotEmptyOrNull()) // { // formValue = _userManager.UserId; // } // break; // case "currOrganize": // if (creatorUser.OrganizeId.IsNotEmptyOrNull()) // { // formValue = creatorUser.OrganizeId; // } // break; // case "createTime": // formValue = ((DateTime)taskEntity.CreatorTime).ParseToUnixTime().ToString(); // break; // case "modifyTime": // if (taskEntity.LastModifyTime.IsNotEmptyOrNull()) // { // formValue = DateTime.Now.ParseToUnixTime().ToString(); // } // break; // case "currPosition": // if (creatorUser.PositionId.IsNotEmptyOrNull()) // { // formValue = creatorUser.PositionId; // } // break; // } // } // else // { // switch (jnpfKey) // { // case "createUser": // formValue = _userManager.UserId; // break; // case "modifyUser": // formValue = " "; // break; // case "currOrganize": // if (_userManager.User.OrganizeId.IsNotEmptyOrNull()) // { // formValue = _userManager.User.OrganizeId; // } // break; // case "createTime": // formValue = DateTime.Now.ParseToUnixTime().ToString(); // break; // case "modifyTime": // formValue = "0"; // break; // case "currPosition": // if (_userManager.User.PositionId.IsNotEmptyOrNull()) // { // formValue = _userManager.User.PositionId; // } // break; // } // } // } // /// // /// 删除定时器. // /// // /// 所有节点 // private void DeleteTimerTaskNode(List flowTaskNodeEntityList) // { // foreach (var item in flowTaskNodeEntityList) // { // if ("timer".Equals(item.NodeType)) // { // // 下一节点为Timer类型节点的节点集合 // var taskNodeList = flowTaskNodeEntityList.FindAll(x => x.NodeNext.Contains(item.NodeCode)); // // Timer类型节点的下节点集合 // var nextTaskNodeList = flowTaskNodeEntityList.FindAll(x => item.NodeNext.Contains(x.NodeCode)); // // 保存定时器节点的上节点编码到属性中 // var timerProperties = item.NodePropertyJson.ToObject(); // timerProperties.upNodeCode = string.Join(",", taskNodeList.Select(x => x.NodeCode).ToArray()); // item.NodePropertyJson = timerProperties.ToJsonString(); // // 上节点替换NodeNext // foreach (var taskNode in taskNodeList) // { // var flowTaskNodeEntity = flowTaskNodeEntityList.Where(x => x.NodeCode == taskNode.NodeCode).FirstOrDefault(); // flowTaskNodeEntity.NodeNext = item.NodeNext; // } // // 下节点添加定时器属性 // nextTaskNodeList.ForEach(nextNode => // { // var flowTaskNodeEntity = flowTaskNodeEntityList.Where(x => x.NodeCode == nextNode.NodeCode).FirstOrDefault(); // if (FlowTaskNodeTypeEnum.approver.ParseToString().Equals(flowTaskNodeEntity.NodeType)) // { // var properties = flowTaskNodeEntity.NodePropertyJson.ToObject(); // properties.timerList.Add(item.NodePropertyJson.ToObject()); // flowTaskNodeEntity.NodePropertyJson = JsonHelper.ToJsonString(properties); // } // }); // } // } // flowTaskNodeEntityList.RemoveAll(x => FlowTaskNodeTypeEnum.timer.ParseToString().Equals(x.NodeType)); // UpdateNodeSort(flowTaskNodeEntityList); // } // /// // /// 根据选择分支变更节点. // /// // /// 所有节点. // /// 选择分支节点编码. // /// 当前节点id. // private async Task ChangeNodeListByBranch(List flowTaskNodeEntities, List branchList, string nodeId) // { // if (branchList.IsNotEmptyOrNull() && branchList.Count > 0) // { // flowTaskNodeEntities.RemoveAll(x => FlowTaskNodeTypeEnum.end.ParseToString().Equals(x.NodeCode)); // foreach (var item in flowTaskNodeEntities) // { // if (nodeId.IsNotEmptyOrNull() && nodeId.Equals(item.Id)) // { // item.NodeNext = string.Join(",", branchList); // } // item.State = "1"; // item.SortCode = null; // } // UpdateNodeSort(flowTaskNodeEntities); // await _flowTaskRepository.UpdateTaskNode(flowTaskNodeEntities); // } // } // #endregion // #region 审批人员 // /// // /// 获取流程人员id. // /// // /// 发起人id. // /// 流程人员类型. // /// 主管层级. // /// 表单数据. // /// 变量控件. // /// 变量控件类型. // /// 任务节点list. // /// 环节节点编码. // /// 下一节点实体. // /// 接口地址. // /// 指定用户. // /// 指定角色. // /// 指定岗位. // /// // public async Task> GetFlowUserId( // string userId, // int type, // int managerLevel, // int departmentLevel, // string formData, // string formField, // int formFieldType, // List flowTaskNodeEntities, // string linkNodeCode, // FlowTaskNodeEntity nextFlowTaskNodeEntity, // string url, // List assign, // List assignRole, // List assignPos, // string extraRule) // { // var userIdList = new List(); // // 获取全部用户id // var userList1 = await _usersService.GetUserListByExp(x => x.DeleteMark == null && x.EnabledMark == 1, u => new UserEntity() { Id = u.Id }); // // 发起者本人. // var userEntity = _usersService.GetInfoByUserId(userId); // switch (type) // { // // 发起者主管 // case (int)FlowTaskOperatorEnum.LaunchCharge: // var crDirector = await GetManagerByLevel(userEntity.ManagerId, managerLevel); // if (crDirector.IsNotEmptyOrNull()) // userIdList.Add(crDirector); // break; // // 发起者本人 // case (int)FlowTaskOperatorEnum.InitiatorMe: // userIdList.Add(userEntity.Id); // break; // // 部门主管 // case (int)FlowTaskOperatorEnum.DepartmentCharge: // var organizeEntity = await _organizeService.GetInfoById(userEntity.OrganizeId); // if (organizeEntity.IsNotEmptyOrNull() && organizeEntity.OrganizeIdTree.IsNotEmptyOrNull()) // { // var orgTree = organizeEntity.OrganizeIdTree.Split(",").Reverse().ToList(); // if (orgTree.Count >= departmentLevel) // { // var orgId = orgTree[departmentLevel - 1]; // var organize = await _organizeService.GetInfoById(orgId); // if (organize.IsNotEmptyOrNull() && organize.ManagerId.IsNotEmptyOrNull()) // { // userIdList.Add(organize.ManagerId); // } // } // } // break; // // 表单变量 // case (int)FlowTaskOperatorEnum.VariableApprover: // var jd = formData.ToObject(); // var fieldValueList = new List(); // if (jd.ContainsKey(formField)) // { // if (jd[formField] is JArray) // { // fieldValueList = jd[formField].ToObject>(); // } // else // { // fieldValueList = jd[formField].ToString().Split(",").ToList(); // } // } // if (formFieldType == 2) // { // // 获取指定部门下所有用户id // fieldValueList = _userRelationService.GetUserId(fieldValueList, "Organize"); // } // // 利用list交集方法过滤非用户数据 // userIdList = fieldValueList; // break; // // 环节(提交时下个节点是环节就跳过,审批则看环节节点是否是当前节点的上级) // case (int)FlowTaskOperatorEnum.LinkApprover: // if (flowTaskNodeEntities.Any(x => x.NodeCode.Equals(linkNodeCode) && x.SortCode < nextFlowTaskNodeEntity.SortCode)) // { // // 环节节点所有经办人(过滤掉加签人) // userIdList = (await _flowTaskRepository.GetTaskOperatorRecordList(x => // x.TaskId == nextFlowTaskNodeEntity.TaskId && !SqlFunc.IsNullOrEmpty(x.NodeCode) // && x.NodeCode.Equals(linkNodeCode) && x.HandleStatus == 1 && x.Status == 0)) // .Where(x => HasFreeApprover(x.TaskOperatorId).Result).Where(x => x.HandleId.IsNotEmptyOrNull()).Select(x => x.HandleId).Distinct().ToList(); // } // break; // // 接口(接口结构为{"code":200,"data":{"handleId":"admin"},"msg":""}) // case (int)FlowTaskOperatorEnum.ServiceApprover: // try // { // var Token = _userManager.ToKen.IsNotEmptyOrNull() ? _userManager.ToKen : _cacheManager.Get>(CommonConst.CACHEKEYONLINEUSER + _userManager.TenantId).Find(x => x.userId == _userManager.UserId).token; // var data = await url.SetHeaders(new { Authorization = Token }).GetAsStringAsync(); // var result = data.ToObject>(); // if (result.IsNotEmptyOrNull()) // { // var resultJobj = result.data.ToObject(); // if (result.code == 200) // { // var handleId = resultJobj["handleId"].ToString(); // var handleIdList = handleId.Split(",").ToList(); // var userList2 = await _usersService.GetUserListByExp(x => x.DeleteMark == null, u => new UserEntity() { Id = u.Id }); // // 利用list交集方法过滤非用户数据 // userIdList = userList2.Select(x => x.Id).Intersect(handleIdList).ToList(); // } // } // } // catch (AppFriendlyException ex) // { // break; // } // break; // // 候选人 // case (int)FlowTaskOperatorEnum.CandidateApprover: // userIdList = _flowTaskRepository.GetFlowCandidates(nextFlowTaskNodeEntity.Id); // break; // default: // userIdList = GetUserDefined(assign, assignRole, assignPos).ToList(); // var flowUserEntity = _flowTaskRepository.GetFlowUserEntity(nextFlowTaskNodeEntity.TaskId); // switch (extraRule) // { // case "2": // userIdList = _userRelationService.GetUserId("Organize", flowUserEntity.OrganizeId).Intersect(userIdList).ToList(); // break; // case "3": // userIdList = _userRelationService.GetUserId("Position", flowUserEntity.PositionId).Intersect(userIdList).ToList(); // break; // case "4": // userIdList = new List { flowUserEntity.ManagerId }.Intersect(userIdList).ToList(); // break; // case "5": // userIdList = flowUserEntity.Subordinate.ToObject>().Intersect(userIdList).ToList(); // break; // } // break; // } // userIdList = userList1.Select(x => x.Id).Intersect(userIdList).ToList();// 过滤掉作废人员和非用户人员 // if (userIdList.Count == 0) // { // userIdList = _flowTaskRepository.GetFlowCandidates(nextFlowTaskNodeEntity.Id); // } // return userIdList.Distinct().ToList(); // } // /// // /// 根据类型获取审批人. // /// // /// 审批人集合. // /// 所有节点. // /// 当前审批节点数据. // /// 下个审批节点数据. // /// 发起人. // /// 表单数据. // /// 操作标识(0:提交,1:审批,3:变更). // /// // private async Task AddFlowTaskOperatorEntityByAssigneeType( // FlowTaskEntity flowTaskEntity, // List flowTaskOperatorEntityList, // List flowTaskNodeEntitieList, // FlowTaskNodeEntity flowTaskNodeEntity, // FlowTaskNodeEntity nextFlowTaskNodeEntity, // List flowTaskCandidateModels, // string creatorUserId, // string formData, // List errorUserId, // int type = 1, // bool isShuntNodeCompletion = true // ) // { // try // { // if (!FlowTaskNodeTypeEnum.subFlow.ParseToString().Equals(nextFlowTaskNodeEntity.NodeType) && !FlowTaskNodeTypeEnum.end.ParseToString().Equals(nextFlowTaskNodeEntity.NodeCode)) // { // var approverPropertiers = nextFlowTaskNodeEntity.NodePropertyJson.ToObject(); // var startProperties = flowTaskNodeEntitieList.FirstOrDefault().NodePropertyJson.ToObject(); // if (type == 3) // { // startProperties.errorRule = "3"; // } // // 创建人 // var userId = type == 0 ? _userManager.UserId : creatorUserId; // var handleIds = await GetFlowUserId(userId, approverPropertiers.assigneeType, approverPropertiers.managerLevel, approverPropertiers.departmentLevel, formData, approverPropertiers.formField, // approverPropertiers.formFieldType, flowTaskNodeEntitieList, approverPropertiers.nodeId, nextFlowTaskNodeEntity, approverPropertiers.getUserUrl, // approverPropertiers.approvers, approverPropertiers.approverRole, approverPropertiers.approverPos, approverPropertiers.extraRule); // if (handleIds.Count == 0) // { // switch (startProperties.errorRule) // { // case "1": // handleIds.Add("admin"); // break; // case "2": // if ((await _usersService.GetUserListByExp(x => startProperties.errorRuleUser.Contains(x.Id) && x.DeleteMark == null && x.EnabledMark == 1)).Any()) // { // handleIds = startProperties.errorRuleUser; // } // else // { // handleIds.Add("admin"); // } // break; // case "3": // if (errorUserId.IsNotEmptyOrNull() && errorUserId.Count > 0) // { // handleIds = errorUserId; // } // else // { // if (!flowTaskCandidateModels.Select(x => x.nodeId).Contains(nextFlowTaskNodeEntity.NodeCode)) // { // flowTaskCandidateModels.Add(new FlowTaskCandidateModel { nodeId = nextFlowTaskNodeEntity.NodeCode, nodeName = nextFlowTaskNodeEntity.NodeName }); // } // } // break; // case "4": // // 异常节点下一节点是否存在候选人节点. // var falag = flowTaskNodeEntitieList. // Any(x => nextFlowTaskNodeEntity.NodeNext.Split(",").Contains(x.NodeCode) // && FlowTaskNodeTypeEnum.approver.ParseToString().Equals(x.NodeType) // && x.NodePropertyJson.ToObject().assigneeType == 7); // if (falag) // { // handleIds.Add("admin"); // } // else // { // if (isShuntNodeCompletion) // { // handleIds.Add("jnpf"); // } // } // break; // case "5": // throw Oops.Oh(ErrorCode.WF0035); // } // } // var index = 0; // var isAnyOperatorUser = !_flowTaskRepository.AnyTaskOperatorUser(x => x.TaskNodeId == nextFlowTaskNodeEntity.Id);// 不存在依次审批插入. // var OperatorUserList = new List(); // foreach (var item in handleIds) // { // if (item.IsNotEmptyOrNull()) // { // if (approverPropertiers.counterSign == 2 && isAnyOperatorUser) // { // FlowTaskOperatorUserEntity flowTaskOperatorUserEntity = new FlowTaskOperatorUserEntity(); // flowTaskOperatorUserEntity.Id = SnowflakeIdHelper.NextId(); // flowTaskOperatorUserEntity.HandleType = approverPropertiers.assigneeType.ToString(); // flowTaskOperatorUserEntity.NodeCode = nextFlowTaskNodeEntity.NodeCode; // flowTaskOperatorUserEntity.NodeName = nextFlowTaskNodeEntity.NodeName; // flowTaskOperatorUserEntity.TaskNodeId = nextFlowTaskNodeEntity.Id; // flowTaskOperatorUserEntity.TaskId = nextFlowTaskNodeEntity.TaskId; // flowTaskOperatorUserEntity.CreatorTime = DateTime.Now; // flowTaskOperatorUserEntity.Completion = 0; // flowTaskOperatorUserEntity.State = "0"; // flowTaskOperatorUserEntity.Description = GetTimerDate(approverPropertiers, flowTaskNodeEntity.NodeCode); // flowTaskOperatorUserEntity.Type = approverPropertiers.assigneeType.ToString(); // flowTaskOperatorUserEntity.HandleId = item; // flowTaskOperatorUserEntity.SortCode = index++; // OperatorUserList.Add(flowTaskOperatorUserEntity); // if (index == 1) // { // flowTaskOperatorEntityList.Add(OperatorUserList.FirstOrDefault().Adapt()); // } // } // else // { // FlowTaskOperatorEntity flowTaskOperatorEntity = new FlowTaskOperatorEntity(); // flowTaskOperatorEntity.Id = SnowflakeIdHelper.NextId(); // flowTaskOperatorEntity.HandleType = approverPropertiers.assigneeType.ToString(); // flowTaskOperatorEntity.NodeCode = nextFlowTaskNodeEntity.NodeCode; // flowTaskOperatorEntity.NodeName = nextFlowTaskNodeEntity.NodeName; // flowTaskOperatorEntity.TaskNodeId = nextFlowTaskNodeEntity.Id; // flowTaskOperatorEntity.TaskId = nextFlowTaskNodeEntity.TaskId; // flowTaskOperatorEntity.CreatorTime = DateTime.Now; // flowTaskOperatorEntity.Completion = 0; // flowTaskOperatorEntity.State = "0"; // flowTaskOperatorEntity.Description = GetTimerDate(approverPropertiers, flowTaskNodeEntity.NodeCode); // flowTaskOperatorEntity.Type = approverPropertiers.assigneeType.ToString(); // flowTaskOperatorEntity.HandleId = item; // flowTaskOperatorEntity.SortCode = index++; // flowTaskOperatorEntityList.Add(flowTaskOperatorEntity); // } // } // } // await _flowTaskRepository.CreateTaskOperatorUser(OperatorUserList); // } // } // catch (AppFriendlyException ex) // { // throw Oops.Oh(ex.ErrorCode); // } // } // /// // /// 判断经办记录人是否加签且加签是否完成. // /// // /// 经办id. // /// // private async Task HasFreeApprover(string id) // { // var entityList = await GetOperator(id, new List()); // if (entityList.Count == 0) // { // return true; // } // else // { // return !entityList.Any(x => x.HandleStatus.IsEmpty() || x.HandleStatus == 0); // } // } // /// // /// 获取抄送人. // /// // /// 节点属性. // /// 经办. // /// 抄送list. // /// 自定义抄送. // /// 审批状态. // private async Task GetflowTaskCirculateEntityList(ApproversProperties approverPropertiers, FlowTaskOperatorEntity flowTaskOperatorEntity, List flowTaskCirculateEntityList, string copyIds, int hanlderState = 1) // { // var circulateUserList = copyIds.IsNotEmptyOrNull() ? copyIds.Split(",").ToList() : new List(); // #region 抄送人 // if (hanlderState == 1) // { // var userList = GetUserDefined(approverPropertiers.circulateUser, approverPropertiers.circulateRole, approverPropertiers.circulatePosition); // var flowUserEntity = _flowTaskRepository.GetFlowUserEntity(flowTaskOperatorEntity.TaskId); // if (flowUserEntity.IsNullOrEmpty()) // { // switch (approverPropertiers.extraCopyRule) // { // case "2": // userList = _userRelationService.GetUserId("Organize", _userManager.User.OrganizeId).Intersect(userList).ToList(); // break; // case "3": // userList = _userRelationService.GetUserId("Position", _userManager.User.PositionId).Intersect(userList).ToList(); // break; // case "4": // userList = new List { _userManager.User.ManagerId }.Intersect(circulateUserList).ToList(); // break; // case "5": // userList = (await _usersService.GetUserListByExp(u => u.EnabledMark == 1 && u.DeleteMark == null && u.ManagerId == _userManager.UserId)).Select(u => u.Id).ToList().Intersect(userList).ToList(); // break; // } // } // else // { // switch (approverPropertiers.extraCopyRule) // { // case "2": // userList = _userRelationService.GetUserId("Organize", flowUserEntity.OrganizeId).Intersect(userList).ToList(); // break; // case "3": // userList = _userRelationService.GetUserId("Position", flowUserEntity.PositionId).Intersect(userList).ToList(); // break; // case "4": // userList = new List { flowUserEntity.ManagerId }.Intersect(userList).ToList(); // break; // case "5": // userList = flowUserEntity.Subordinate.ToObject>().Intersect(userList).ToList(); // break; // } // } // circulateUserList = circulateUserList.Union(userList).ToList(); // } // foreach (var item in circulateUserList.Distinct()) // { // flowTaskCirculateEntityList.Add(new FlowTaskCirculateEntity() // { // Id = SnowflakeIdHelper.NextId(), // ObjectType = flowTaskOperatorEntity.HandleType, // ObjectId = item, // NodeCode = flowTaskOperatorEntity.NodeCode, // NodeName = flowTaskOperatorEntity.NodeName, // TaskNodeId = flowTaskOperatorEntity.TaskNodeId, // TaskId = flowTaskOperatorEntity.TaskId, // CreatorTime = DateTime.Now, // }); // } // #endregion // } // /// // /// 获取自定义人员. // /// // /// 指定人. // /// 指定角色. // /// 指定岗位. // /// // private List GetUserDefined(List userList, List roleList, List posList) // { // if (posList.IsNotEmptyOrNull() && posList.Count > 0) // { // foreach (var item in posList) // { // var userPosition = _userRelationService.GetUserId("Position", item); // userList = userList.Union(userPosition).ToList(); // } // } // if (roleList.IsNotEmptyOrNull() && roleList.Count > 0) // { // foreach (var item in roleList) // { // var userRole = _userRelationService.GetUserId("Role", item); // userList = userList.Union(userRole).ToList(); // } // } // return userList; // } // /// // /// 获取自定义人员名称. // /// // /// 指定人. // /// 指定角色. // /// 指定岗位. // /// 用户名. // /// // private async Task GetUserNameDefined(List userList, List roleList, List posList, List userNameList) // { // userList = GetUserDefined(userList, roleList, posList).Distinct().ToList(); // foreach (var item in userList) // { // var name = await _usersService.GetUserName(item); // if (name.IsNotEmptyOrNull()) // userNameList.Add(name); // } // } // /// // /// 获取候选人节点信息. // /// // /// 返回参数. // /// 下一节点集合. // /// 所有节点. // /// // private async Task GetCandidates(List flowTaskCandidateModels, List nextNodeEntities, List nodeEntities) // { // foreach (var item in nextNodeEntities) // { // if (FlowTaskNodeTypeEnum.approver.ParseToString().Equals(item.NodeType)) // { // var candidateItem = new FlowTaskCandidateModel(); // var approverPropertiers = item.NodePropertyJson.ToObject(); // var objIds = approverPropertiers.approverPos.Union(approverPropertiers.approverRole).ToList(); // if (approverPropertiers.assigneeType == 7 || approverPropertiers.isBranchFlow) // { // candidateItem.nodeId = item.NodeCode; // candidateItem.nodeName = item.NodeName; // candidateItem.isBranchFlow = approverPropertiers.isBranchFlow; // candidateItem.isCandidates = approverPropertiers.assigneeType == 7; // var flag = false; // var input = new UserConditionInput() // { // departIds = objIds, // userIds = approverPropertiers.approvers, // pagination = new PageInputBase() // }; // _userRelationService.GetUserPage(input, ref flag); // candidateItem.hasCandidates = flag; // flowTaskCandidateModels.Add(candidateItem); // } // } // else if (FlowTaskNodeTypeEnum.subFlow.ParseToString().Equals(item.NodeType)) // { // var subFlowNextNodes = nodeEntities.FindAll(m => item.NodeNext.Contains(m.NodeCode)); // await GetCandidates(flowTaskCandidateModels, subFlowNextNodes, nodeEntities); // } // } // } // /// // /// 候选人员列表. // /// // /// // /// // /// // private dynamic GetCandidateItems(FlowTaskNodeEntity nextNodeEntity, FlowHandleModel flowHandleModel, bool hasCandidates = true) // { // var approverPropertiers = nextNodeEntity.NodePropertyJson.ToObject(); // var objIds = approverPropertiers.approverPos.Union(approverPropertiers.approverRole).ToList(); // var input = new UserConditionInput() // { // departIds = objIds, // userIds = approverPropertiers.approvers, // pagination = flowHandleModel // }; // return _userRelationService.GetUserPage(input, ref hasCandidates); // } // /// // /// 获取子流程下异常节点信息. // /// // /// 返回参数. // /// 下一节点集合. // /// 所有节点. // /// // private async Task GetErrorNode(List flowTaskCandidateModels, List nextNodeEntities, List nodeEntities, StartProperties startProperties, string userId, string formData) // { // try // { // foreach (var item in nextNodeEntities) // { // if (FlowTaskNodeTypeEnum.approver.ParseToString().Equals(item.NodeType)) // { // var approverPropertiers = item.NodePropertyJson.ToObject(); // var list = await GetFlowUserId(userId, approverPropertiers.assigneeType, approverPropertiers.managerLevel, approverPropertiers.departmentLevel, formData, approverPropertiers.formField, // approverPropertiers.formFieldType, nodeEntities, approverPropertiers.nodeId, item, approverPropertiers.getUserUrl, // approverPropertiers.approvers, approverPropertiers.approverRole, approverPropertiers.approverPos, approverPropertiers.extraRule); // if (list.Count == 0) // { // if (startProperties.errorRule == "3" && !flowTaskCandidateModels.Select(x => x.nodeId).Contains(item.NodeCode)) // { // var candidateItem = new FlowTaskCandidateModel(); // candidateItem.nodeId = item.NodeCode; // candidateItem.nodeName = item.NodeName; // flowTaskCandidateModels.Add(candidateItem); // } // if (startProperties.errorRule == "5") // throw Oops.Oh(ErrorCode.WF0035); // } // } // else if (FlowTaskNodeTypeEnum.subFlow.ParseToString().Equals(item.NodeType)) // { // var subFlowNextNodes = nodeEntities.FindAll(m => item.NodeNext.Contains(m.NodeCode)); // await GetErrorNode(flowTaskCandidateModels, subFlowNextNodes, nodeEntities, startProperties, userId, formData); // } // } // } // catch (AppFriendlyException ex) // { // throw Oops.Oh(ex.ErrorCode); // } // } // /// // /// 获取级别主管 // /// // /// 主管id // /// 级别 // /// // private async Task GetManagerByLevel(string managerId, int level) // { // --level; // if (level == 0) // { // return managerId; // } // else // { // var manager = await _usersService.GetInfoByUserIdAsync(managerId); // return manager.IsNullOrEmpty() ? string.Empty : await GetManagerByLevel(manager.ManagerId, level); // } // } // /// // /// 获取子流程发起人. // /// // /// // /// // /// // /// // /// // /// // /// // /// // /// // private async Task> GetSubFlowCrUser( // ChildTaskProperties childTaskProperties, string flowTaskCrUser, // List flowTaskNodeEntities, FlowTaskNodeEntity flowTaskNodeEntity, // string formData) // { // var childTaskCrUserList = await GetFlowUserId(flowTaskCrUser, childTaskProperties.initiateType, childTaskProperties.managerLevel, childTaskProperties.departmentLevel, // formData, childTaskProperties.formField, childTaskProperties.formFieldType, flowTaskNodeEntities, childTaskProperties.nodeId, // flowTaskNodeEntity, childTaskProperties.getUserUrl, childTaskProperties.initiator, // childTaskProperties.initiateRole, childTaskProperties.initiatePos, "1"); // if (childTaskCrUserList.Count == 0) // { // switch (childTaskProperties.errorRule) // { // case "2": // if ((await _usersService.GetUserListByExp(x => childTaskProperties.errorRuleUser.Contains(x.Id) && x.DeleteMark == null && x.EnabledMark == 1)).Any()) // { // childTaskCrUserList = childTaskProperties.errorRuleUser; // } // else // { // childTaskCrUserList.Add("admin"); // } // break; // case "6": // childTaskCrUserList.Add(flowTaskCrUser); // break; // default: // childTaskCrUserList.Add("admin"); // break; // } // } // return childTaskCrUserList; // } // /// // /// 获取审批人名称. // /// // /// 当前节点. // /// 任务. // /// 表单数据. // /// 所有节点. // /// // private async Task GetApproverUserName(FlowTaskNodeModel flowTaskNodeModel, FlowTaskEntity flowTaskEntity, string formData, List flowTaskNodeEntities, List flowTaskOperatorEntities) // { // var userNameList = new List(); // var creatorUser = await _usersService.GetInfoByUserIdAsync(flowTaskEntity.CreatorUserId); // var userName = await _usersService.GetUserName(creatorUser.Id); // if (flowTaskNodeModel.nodeType.Equals(FlowTaskNodeTypeEnum.start.ParseToString())) // { // var startProperties = flowTaskNodeModel.nodePropertyJson.ToObject(); // if (startProperties.initiator.Count > 0 || startProperties.initiateRole.Count > 0 || startProperties.initiatePos.Count > 0) // { // await GetUserNameDefined(startProperties.initiator, startProperties.initiateRole, startProperties.initiatePos, userNameList); // } // else // { // userNameList.Add(userName); // } // } // else if (flowTaskNodeModel.nodeType.Equals(FlowTaskNodeTypeEnum.subFlow.ParseToString())) // { // var subFlowProperties = flowTaskNodeModel.nodePropertyJson.ToObject(); // var userIdList = (await _flowTaskRepository.GetTaskList(x => subFlowProperties.childTaskId.Contains(x.Id))).Select(x => x.CreatorUserId).ToList(); // if (userIdList.Count == 0) // { // userIdList = await GetFlowUserId(creatorUser.Id, subFlowProperties.initiateType, subFlowProperties.managerLevel, subFlowProperties.departmentLevel, // formData, subFlowProperties.formField, subFlowProperties.formFieldType, flowTaskNodeEntities, subFlowProperties.nodeId, // flowTaskNodeModel.Adapt(), subFlowProperties.getUserUrl, subFlowProperties.initiator, // subFlowProperties.initiateRole, subFlowProperties.initiatePos, "1"); // } // await GetUserNameDefined(userIdList, null, null, userNameList); // } // else // { // var approverProperties = flowTaskNodeModel.nodePropertyJson.ToObject(); // var userIdList = (await _flowTaskRepository.GetTaskOperatorList(x => x.TaskNodeId == flowTaskNodeModel.id && SqlFunc.IsNullOrEmpty(x.ParentId) && !x.State.Equals("-1"))).Select(x => x.HandleId).ToList(); // if (approverProperties.counterSign == 2) // { // userIdList = (await _flowTaskRepository.GetTaskOperatorUserList(x => x.TaskId == flowTaskNodeModel.taskId && x.TaskNodeId == flowTaskNodeModel.id)).Select(x => x.HandleId).ToList(); // } // if (!userIdList.Any()) // { // userIdList = await GetFlowUserId(creatorUser.Id, approverProperties.assigneeType, approverProperties.managerLevel, approverProperties.departmentLevel, // formData, approverProperties.formField, approverProperties.formFieldType, flowTaskNodeEntities, approverProperties.nodeId, // flowTaskNodeModel.Adapt(), approverProperties.getUserUrl, approverProperties.approvers, // approverProperties.approverRole, approverProperties.approverPos, approverProperties.extraRule); // } // await GetUserNameDefined(userIdList, null, null, userNameList); // } // return string.Join(",", userNameList.Distinct()); // } // /// // /// 获取定时器节点定时结束时间. // /// // /// 定时器节点属性. // /// 定时器节点编码. // /// // private string GetTimerDate(ApproversProperties approverPropertiers, string nodeCode) // { // var nowTime = DateTime.Now; // if (approverPropertiers.timerList.Count > 0) // { // string upNodeStr = string.Join(",", approverPropertiers.timerList.Select(x => x.upNodeCode).ToArray()); // if (upNodeStr.Contains(nodeCode)) // { // foreach (var item in approverPropertiers.timerList) // { // var result = DateTime.Now.AddDays(item.day).AddHours(item.hour).AddMinutes(item.minute).AddSeconds(item.second); // if (result > nowTime) // { // nowTime = result; // } // } // return nowTime.ToString(); // } // else // { // return null; // } // } // else // { // return null; // } // } // #endregion // #region 节点处理 // /// // /// 判断分流节点是否完成 // /// (因为分流节点最终只能是一个 所以只需判断下一节点中的其中一个的上节点完成情况). // /// // /// 所有节点. // /// 下一个节点编码. // /// 当前节点. // /// // private bool IsShuntNodeCompletion(List flowTaskNodeEntityList, string nextNodeCode, FlowTaskNodeEntity flowTaskNodeEntity) // { // var shuntNodeCodeList = flowTaskNodeEntityList.FindAll(x => x.NodeNext.IsNotEmptyOrNull() && // x.NodeCode != flowTaskNodeEntity.NodeCode && x.NodeNext.Contains(nextNodeCode) && x.Completion == 0); // return shuntNodeCodeList.Count == 0; // } // /// // /// 替换审批同意任务当前节点. // /// // /// 所有节点. // /// 替换数据. // /// 源数据. // /// // private string GetThisStepId(List flowTaskNodeEntityList, List nextNodeCodeList, string thisStepId) // { // var replaceNodeCodeList = new List(); // nextNodeCodeList.ForEach(item => // { // var nodeCode = new List(); // var nodeEntityList = flowTaskNodeEntityList.FindAll(x => x.NodeNext.IsNotEmptyOrNull() && x.NodeNext.Contains(item)); // nodeCode = nodeEntityList.Select(x => x.NodeCode).ToList(); // replaceNodeCodeList = replaceNodeCodeList.Union(nodeCode).ToList(); // }); // var thisNodeList = new List(); // if (thisStepId.IsNotEmptyOrNull()) // { // thisNodeList = thisStepId.Split(",").ToList(); // } // //去除当前审批节点并添加下个节点 // var list = thisNodeList.Except(replaceNodeCodeList).Union(nextNodeCodeList); // return string.Join(",", list.ToArray()); // } // /// // /// 替换审批撤回当前任务节点. // /// // /// 下一节点编码. // /// 当前待处理节点. // /// // private string GetRecallThisStepId(List nextNodeCodeList, string thisStepId) // { // var replaceNodeCodeList = new List(); // foreach (var item in nextNodeCodeList) // { // var nodeCode = item.NodeNext.Split(",").ToList(); // replaceNodeCodeList = replaceNodeCodeList.Union(nodeCode).ToList(); // } // var thisNodeList = new List(); // if (thisStepId.IsNotEmptyOrNull()) // { // thisNodeList = thisStepId.Split(",").ToList(); // } // //去除当前审批节点并添加下个节点 // var list = thisNodeList.Except(replaceNodeCodeList).Union(nextNodeCodeList.Select(x => x.NodeCode)); // return string.Join(",", list.ToArray()); // } // /// // /// 驳回替换任务当前节点. // /// // /// 驳回节点下所有节点. // /// 当前节点. // /// 当前待处理节点. // /// // private string GetRejectThisStepId(List flowTaskNodeEntityList, List upNodeCodes, string thisStepId) // { // // 驳回节点下所有节点编码 // var removeNodeCodeList = flowTaskNodeEntityList.Select(x => x.NodeCode).ToList(); // var ids = thisStepId.Split(",").ToList(); // var thisNodes = ids.Except(removeNodeCodeList).Union(upNodeCodes).ToList(); // return string.Join(",", thisNodes); // } // /// // /// 根据当前节点编码获取节点名称. // /// // /// 所有节点. // /// 当前待处理节点. // /// // private string GetThisStep(List flowTaskNodeEntityList, string thisStepId) // { // var ids = thisStepId.Split(",").ToList(); // var nextNodeNameList = new List(); // foreach (var item in ids) // { // var name = flowTaskNodeEntityList.Find(x => x.NodeCode.Equals(item)).NodeName; // nextNodeNameList.Add(name); // } // return string.Join(",", nextNodeNameList); // } // /// // /// 获取驳回节点. // /// // /// 所有节点. // /// 当前节点. // /// 当前节点属性. // /// // private List GetRejectFlowTaskOperatorEntity(List flowTaskNodeEntityList, FlowTaskNodeEntity flowTaskNodeEntity, ApproversProperties approversProperties) // { // //驳回节点 // var upflowTaskNodeEntityList = new List(); // if (flowTaskNodeEntity.NodeUp == "1") // { // upflowTaskNodeEntityList = flowTaskNodeEntityList.FindAll(x => x.NodeNext.IsNotEmptyOrNull() && x.NodeNext.Contains(flowTaskNodeEntity.NodeCode)); // } // else // { // var upflowTaskNodeEntity = flowTaskNodeEntityList.Find(x => x.NodeCode == approversProperties.rejectStep); // upflowTaskNodeEntityList = flowTaskNodeEntityList.FindAll(x => x.SortCode == upflowTaskNodeEntity.SortCode); // } // return upflowTaskNodeEntityList; // } // /// // /// 修改节点完成状态. // /// // /// 修改节点. // /// 状态. // /// // private async Task RejectUpdateTaskNode(List taskNodeList, int state) // { // foreach (var item in taskNodeList) // { // item.Completion = state; // await _flowTaskRepository.UpdateTaskNode(item); // } // } // /// // /// 处理并保存节点. // /// // /// 节点list. // private void UpdateNodeSort(List entitys) // { // var startNodes = entitys.FindAll(x => x.NodeType.Equals("start")); // if (startNodes.Count > 0) // { // var startNode = startNodes[0].NodeCode; // long num = 0L; // long maxNum = 0L; // var max = new List(); // var _treeList = new List(); // NodeList(entitys, startNode, _treeList, num, max); // max.Sort(); // if (max.Count > 0) // { // maxNum = max[max.Count - 1]; // } // var nodeNext = "end"; // foreach (var item in entitys) // { // var type = item.NodeType; // var node = _treeList.Find(x => x.NodeCode.Equals(item.NodeCode)); // if (item.NodeNext.IsEmpty()) // { // item.NodeNext = nodeNext; // } // if (node.IsNotEmptyOrNull()) // { // item.SortCode = node.SortCode; // item.State = "0"; // if (item.NodeNext.IsEmpty()) // { // item.NodeNext = nodeNext; // } // } // } // entitys.Add(new FlowTaskNodeEntity() // { // Id = SnowflakeIdHelper.NextId(), // NodeCode = nodeNext, // NodeName = "结束", // Completion = 0, // CreatorTime = DateTime.Now, // SortCode = maxNum + 1, // TaskId = _treeList[0].TaskId, // NodePropertyJson = startNodes[0].NodePropertyJson, // NodeType = "endround", // State = "0" // }); // } // } // /// // /// 递归获取经过的节点. // /// // /// // /// // /// // /// // /// // private void NodeList(List dataAll, string nodeCode, List _treeList, long num, List max) // { // num++; // max.Add(num); // foreach (var item in dataAll) // { // if (item.NodeCode.Contains(nodeCode)) // { // item.SortCode = num; // item.State = "0"; // _treeList.Add(item); // foreach (var nodeNext in item.NodeNext.Split(",")) // { // long nums = _treeList.FindAll(x => x.NodeCode.Equals(nodeNext)).Count; // if (nodeNext.IsNotEmptyOrNull() && nums == 0) // { // NodeList(dataAll, nodeNext, _treeList, num, max); // } // } // } // } // } // /// // /// 递归节点下所有节点. // /// // /// 所有节点. // /// 下一节点. // /// 指定节点下所有节点. // private async Task GetAllNextNode(List flowTaskNodeList, string nodeNext, List flowTaskNodeEntities) // { // var nextNodes = nodeNext.Split(",").ToList(); // var flowTaskNodeEntityList = flowTaskNodeList.FindAll(x => nextNodes.Contains(x.NodeCode)); // flowTaskNodeEntities.AddRange(flowTaskNodeEntityList); // foreach (var item in flowTaskNodeEntityList) // { // if (!FlowTaskNodeTypeEnum.end.ParseToString().Equals(item.NodeCode)) // { // await GetAllNextNode(flowTaskNodeList, item.NodeNext, flowTaskNodeEntities); // } // } // } // /// // /// 递归节点. // /// // /// 所有节点. // /// 当前节点. // /// 指定节点下所有节点. // /// 向上递归. // private async Task RecursiveNode(List flowTaskNodeList, string nodeCode, List flowTaskNodeEntities, bool isUp = false) // { // var thisNodeEntity = flowTaskNodeList.Find(x => x.NodeCode == nodeCode); // if (isUp) // { // var flowTaskNodeEntityList = flowTaskNodeList.FindAll(x => !FlowTaskNodeTypeEnum.end.ParseToString().Equals(x.NodeCode) && x.NodeNext.Contains(nodeCode)); // flowTaskNodeEntities.AddRange(flowTaskNodeEntityList); // foreach (var item in flowTaskNodeEntityList) // { // if (!FlowTaskNodeTypeEnum.start.ParseToString().Equals(item.NodeCode)) // { // await RecursiveNode(flowTaskNodeList, item.NodeCode, flowTaskNodeEntities, isUp); // } // } // } // else // { // var nextNodes = thisNodeEntity.NodeNext.Split(",").ToList(); // var flowTaskNodeEntityList = flowTaskNodeList.FindAll(x => nextNodes.Contains(x.NodeCode)); // flowTaskNodeEntities.AddRange(flowTaskNodeEntityList); // foreach (var item in flowTaskNodeEntityList) // { // if (!FlowTaskNodeTypeEnum.end.ParseToString().Equals(item.NodeCode)) // { // await RecursiveNode(flowTaskNodeList, item.NodeCode, flowTaskNodeEntities, isUp); // } // } // } // } // /// // /// 根据表单数据解析模板获取流程节点. // /// // /// 流程实例. // /// 表单数据. // /// 任务id. // /// // public List ParsingTemplateGetNodeList(FlowEngineEntity flowEngineEntity, string formData, string taskId) // { // var flowTaskNodeEntityList = new List(); // var taskNodeList = GetTaskNodeModelList(flowEngineEntity, taskId); // DeleteConditionTaskNodeModel(taskNodeList, formData, taskId); // foreach (var item in taskNodeList) // { // var flowTaskNodeEntity = new FlowTaskNodeEntity(); // flowTaskNodeEntity.Id = SnowflakeIdHelper.NextId(); // 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"; // flowTaskNodeEntityList.Add(flowTaskNodeEntity); // } // DeleteTimerTaskNode(flowTaskNodeEntityList); // return flowTaskNodeEntityList; // } // /// // /// 解析流程. // /// // /// 流程实例. // /// 任务id. // /// // private List GetTaskNodeModelList(FlowEngineEntity flowEngineEntity, string taskId) // { // var taskNodeList = new List(); // var flowTemplateJsonModel = flowEngineEntity.FlowTemplateJson.ToObject(); // #region 流程模板所有节点 // var flowTemplateJsonModelList = new List(); // var childNodeIdList = new List(); // GetChildNodeIdList(flowTemplateJsonModel, childNodeIdList); // GetFlowTemplateList(flowTemplateJsonModel, flowTemplateJsonModelList); // #endregion // GetFlowTemplateAll(flowTemplateJsonModel, taskNodeList, flowTemplateJsonModelList, childNodeIdList, taskId); // return taskNodeList; // } // #endregion // #region 经办处理 // /// // /// 根据不同节点类型修改经办数据. // /// // /// 当前经办. // /// 当前节点所有经办. // /// 当前节点属性. // /// 审批类型(0:拒绝,1:同意). // /// 加签人. // /// // private async Task UpdateFlowTaskOperator(FlowTaskOperatorEntity flowTaskOperatorEntity, // List thisFlowTaskOperatorEntityList, ApproversProperties aspproversProperties, // int handleStatus, string freeApprover) // { // if (aspproversProperties.counterSign == 0) // { // if (freeApprover.IsNullOrEmpty()) // { // //未审批经办 // var notCompletion = GetNotCompletion(thisFlowTaskOperatorEntityList); // await _flowTaskRepository.UpdateTaskOperator(notCompletion); // } // } // else // { // if (IsAchievebilProportion(thisFlowTaskOperatorEntityList, handleStatus, (int)aspproversProperties.countersignRatio, freeApprover.IsEmpty())) // { // //未审批经办 // var notCompletion = GetNotCompletion(thisFlowTaskOperatorEntityList); // await _flowTaskRepository.UpdateTaskOperator(notCompletion); // } // } // await UpdateThisOperator(flowTaskOperatorEntity, handleStatus); // } // /// // /// 根据当前审批节点插入下一节点经办. // /// // /// 所有节点. // /// 当前节点. // /// 当前节点属性. // /// 当前节点所有经办. // /// 审批状态. // /// 流程任务. // /// 加签人. // /// 经办数据. // /// 表单数据. // /// 审批详情. // /// 单据类型. // /// // private async Task CreateNextFlowTaskOperator(List flowTaskNodeEntityList, FlowTaskNodeEntity flowTaskNodeEntity, // ApproversProperties approversProperties, List thisFlowTaskOperatorEntityList, int handleStatus, FlowTaskEntity flowTaskEntity, string freeApproverUserId, // List nextFlowTaskOperatorEntityList, List flowTaskCandidateModels, string formData, FlowHandleModel flowHandleModel, int formType) // { // try // { // var nextNodeCodeList = new List(); // var nextNodeCompletion = new List(); // var errUser = new List(); // var isInsert = false; // //下个节点集合 // List nextNodeEntity = flowTaskNodeEntityList.FindAll(m => flowTaskNodeEntity.NodeNext.Contains(m.NodeCode)); // var nextNode = nextNodeEntity.FirstOrDefault(); // var isShuntNodeCompletion = IsShuntNodeCompletion(flowTaskNodeEntityList, nextNode.NodeCode, flowTaskNodeEntity); // if (handleStatus == 0) // { // if (approversProperties.counterSign == 0) // { // await GetNextOperatorByNo( // flowTaskNodeEntity, flowTaskEntity, flowTaskNodeEntityList, approversProperties, // nextFlowTaskOperatorEntityList, formData, flowTaskCandidateModels, flowHandleModel.errorRuleUserList); // } // else // { // if (IsAchievebilProportion(thisFlowTaskOperatorEntityList, handleStatus, (int)approversProperties.countersignRatio, freeApproverUserId.IsEmpty())) // { // await GetNextOperatorByNo( // flowTaskNodeEntity, flowTaskEntity, flowTaskNodeEntityList, approversProperties, // nextFlowTaskOperatorEntityList, formData, flowTaskCandidateModels, flowHandleModel.errorRuleUserList); // } // } // } // else // { // foreach (var item in nextNodeEntity) // { // if (flowHandleModel.errorRuleUserList.IsNotEmptyOrNull() && flowHandleModel.errorRuleUserList.ContainsKey(item.NodeCode)) // { // errUser = flowHandleModel.errorRuleUserList[item.NodeCode]; // } // if (approversProperties.counterSign == 0) // { // isInsert = true; // await GetNextOperatorByYes(flowTaskNodeEntity, item, nextNodeCodeList, nextNodeCompletion, // nextFlowTaskOperatorEntityList, flowTaskNodeEntityList, flowTaskEntity, formData, // flowTaskCandidateModels, errUser, isShuntNodeCompletion); // } // else if (approversProperties.counterSign == 1) // { // if (IsAchievebilProportion(thisFlowTaskOperatorEntityList, handleStatus, (int)approversProperties.countersignRatio, freeApproverUserId.IsEmpty())) // { // isInsert = true; // await GetNextOperatorByYes(flowTaskNodeEntity, item, nextNodeCodeList, nextNodeCompletion, // nextFlowTaskOperatorEntityList, flowTaskNodeEntityList, flowTaskEntity, formData, // flowTaskCandidateModels, errUser, isShuntNodeCompletion); // } // } // else // { // // 依次审批 // if (IsAchievebilProportion(thisFlowTaskOperatorEntityList, handleStatus, 100, freeApproverUserId.IsEmpty())) // { // isInsert = true; // await GetNextOperatorByYes(flowTaskNodeEntity, item, nextNodeCodeList, nextNodeCompletion, // nextFlowTaskOperatorEntityList, flowTaskNodeEntityList, flowTaskEntity, formData, // flowTaskCandidateModels, errUser, isShuntNodeCompletion); // } // else // { // // 当前所有经办(包含当前)的第二个为下一经办数据 // nextFlowTaskOperatorEntityList.Add(thisFlowTaskOperatorEntityList.Where(x => x.Completion == 0).OrderBy(x => x.SortCode).ToList()[1]); // break; // } // } // if (FlowTaskNodeTypeEnum.subFlow.ParseToString().Equals(item.NodeType)) // { // var startProperties = flowTaskNodeEntityList.FirstOrDefault().NodePropertyJson.ToObject(); // await GetErrorNode(flowTaskCandidateModels, flowTaskNodeEntityList.FindAll(m => item.NodeNext.Contains(m.NodeCode)), flowTaskNodeEntityList, startProperties, flowTaskEntity.CreatorUserId, formData); // } // } // #region 判断是否插入下个节点数据 // //下一节点是分流必定有审批人 // if (nextNodeEntity.Count > 1) // { // flowTaskEntity.ThisStepId = GetThisStepId(flowTaskNodeEntityList, nextNodeCodeList, flowTaskEntity.ThisStepId); // flowTaskEntity.ThisStep = GetThisStep(flowTaskNodeEntityList, flowTaskEntity.ThisStepId); // flowTaskEntity.Completion = nextNodeCompletion.Count == 0 ? flowTaskEntity.Completion : nextNodeCompletion.Min(); // await _flowTaskRepository.CreateTaskOperator(nextFlowTaskOperatorEntityList); // } // else // { // //判断当前节点在不在分流当中且是否为分流的最后审批节点 // if (nextFlowTaskOperatorEntityList.Count > 0) // { // if (isShuntNodeCompletion) // { // flowTaskEntity.ThisStepId = GetThisStepId(flowTaskNodeEntityList, nextNodeCodeList, flowTaskEntity.ThisStepId); // flowTaskEntity.ThisStep = GetThisStep(flowTaskNodeEntityList, flowTaskEntity.ThisStepId); // flowTaskEntity.Completion = nextNodeCompletion.Count == 0 ? flowTaskEntity.Completion : nextNodeCompletion.Min(); // await _flowTaskRepository.CreateTaskOperator(nextFlowTaskOperatorEntityList); // } // else // { // if (FlowTaskNodeTypeEnum.end.ParseToString().Equals(nextNode.NodeCode)) // { // flowTaskEntity.Status = FlowTaskStatusEnum.Adopt.ParseToInt(); // flowTaskEntity.Completion = 100; // flowTaskEntity.EndTime = DateTime.Now; // flowTaskEntity.ThisStepId = FlowTaskNodeTypeEnum.end.ParseToString(); // flowTaskEntity.ThisStep = "结束"; // } // else // { // var thisStepIds = flowTaskEntity.ThisStepId.Split(",").ToList(); // thisStepIds.Remove(flowTaskNodeEntity.NodeCode); // flowTaskEntity.ThisStepId = string.Join(",", thisStepIds.ToArray()); // flowTaskEntity.ThisStep = GetThisStep(flowTaskNodeEntityList, flowTaskEntity.ThisStepId); // } // } // } // else // { // //下一节点没有审批人(1.当前会签节点没结束,2.结束节点,3.子流程) // if (isShuntNodeCompletion) // { // var isLastEndNode = flowTaskNodeEntityList.FindAll(x => // x.NodeNext.IsNotEmptyOrNull() && x.NodeNext.Equals(FlowTaskNodeTypeEnum.end.ParseToString()) // && !x.NodeCode.Equals(flowTaskNodeEntity.NodeCode) && x.Completion == 0).Count == 0; // //下一节点是子流程 // if (FlowTaskNodeTypeEnum.subFlow.ParseToString().Equals(nextNode.NodeType) && isInsert) // { // flowTaskEntity.ThisStepId = GetThisStepId(flowTaskNodeEntityList, nextNodeCodeList, flowTaskEntity.ThisStepId); // flowTaskEntity.ThisStep = GetThisStep(flowTaskNodeEntityList, flowTaskEntity.ThisStepId); // flowTaskEntity.Completion = nextNodeCompletion.Count == 0 ? flowTaskEntity.Completion : nextNodeCompletion.Min(); // var childTaskPro = nextNode.NodePropertyJson.ToObject(); // var childFLowEngine = await _flowTaskRepository.GetEngineInfo(childTaskPro.flowId); // if (childFLowEngine.IsNullOrEmpty()) // throw Oops.Oh(ErrorCode.WF0026); // if (flowHandleModel.errorRuleUserList.IsNotEmptyOrNull() && flowHandleModel.errorRuleUserList.ContainsKey(nextNode.NodeCode)) // { // errUser = flowHandleModel.errorRuleUserList[nextNode.NodeCode]; // } // var childTaskCrUserList = await GetSubFlowCrUser(childTaskPro, flowTaskEntity.CreatorUserId, flowTaskNodeEntityList, nextNode, formData); // var isSysTable = childFLowEngine.FormType == 1; // var childFormData = await GetSubFlowFormData(childTaskPro, formData); // childTaskPro.childTaskId = await CreateSubProcesses(childTaskPro, childFormData, flowTaskEntity.Id, childTaskCrUserList); // childTaskPro.formData = formData; // nextNode.NodePropertyJson = childTaskPro.ToJsonString(); // //将子流程id保存到主流程的子流程节点属性上 // nextNode.Completion = childTaskPro.isAsync ? 1 : 0; // await _flowTaskRepository.UpdateTaskNode(nextNode); // await Alerts(childTaskPro.launchMsgConfig, childTaskCrUserList, formData); // if (childTaskPro.isAsync) // { // flowTaskNodeEntityList.Remove(nextNodeEntity.FirstOrDefault()); // flowTaskNodeEntityList.Add(nextNode); // await CreateNextFlowTaskOperator(flowTaskNodeEntityList, nextNode, // nextNode.NodePropertyJson.ToObject(), new List(), // handleStatus, flowTaskEntity, freeApproverUserId, nextFlowTaskOperatorEntityList, flowTaskCandidateModels, formData, // flowHandleModel, formType); // } // } // else if (FlowTaskNodeTypeEnum.end.ParseToString().Equals(nextNode.NodeCode) && isLastEndNode && isInsert) // { // flowTaskEntity.Status = FlowTaskStatusEnum.Adopt.ParseToInt(); // flowTaskEntity.Completion = 100; // flowTaskEntity.EndTime = DateTime.Now; // flowTaskEntity.ThisStepId = "end"; // flowTaskEntity.ThisStep = "结束"; // } // else // { // flowTaskEntity.ThisStepId = GetThisStepId(flowTaskNodeEntityList, nextNodeCodeList, flowTaskEntity.ThisStepId); // flowTaskEntity.ThisStep = GetThisStep(flowTaskNodeEntityList, flowTaskEntity.ThisStepId); // flowTaskEntity.Completion = nextNodeCompletion.Count == 0 ? flowTaskEntity.Completion : nextNodeCompletion.Min(); // } // } // else // { // if (FlowTaskNodeTypeEnum.end.ParseToString().Equals(nextNode.NodeCode) && isShuntNodeCompletion && isInsert) // { // flowTaskEntity.Status = FlowTaskStatusEnum.Adopt.ParseToInt(); // flowTaskEntity.Completion = 100; // flowTaskEntity.EndTime = DateTime.Now; // flowTaskEntity.ThisStepId = "end"; // flowTaskEntity.ThisStep = "结束"; // } // else // { // var thisStepIds = flowTaskEntity.ThisStepId.Split(",").ToList(); // thisStepIds.Remove(flowTaskNodeEntity.NodeCode); // flowTaskEntity.Completion = nextNodeCompletion.Count == 0 ? flowTaskEntity.Completion : nextNodeCompletion.Min(); // flowTaskEntity.ThisStepId = string.Join(",", thisStepIds.ToArray()); // flowTaskEntity.ThisStep = GetThisStep(flowTaskNodeEntityList, flowTaskEntity.ThisStepId); // } // } // } // } // #endregion // } // } // catch (AppFriendlyException ex) // { // throw Oops.Oh(ex.ErrorCode); // } // } // /// // /// 修改当前经办以及所属委托经办. // /// // /// 经办实体. // /// 审批意见. // /// // private async Task UpdateThisOperator(FlowTaskOperatorEntity entity, int handleStatus) // { // entity.HandleStatus = handleStatus; // entity.Completion = 1; // entity.HandleTime = DateTime.Now; // await _flowTaskRepository.UpdateTaskOperator(entity); // } // /// // /// 获取未审经办并修改完成状态. // /// // /// 当前节点所有经办. // /// // private List GetNotCompletion(List thisFlowTaskOperatorEntityList) // { // var notCompletion = thisFlowTaskOperatorEntityList.FindAll(x => x.Completion == 0); // notCompletion.ForEach(item => // { // item.Completion = 1; // }); // return notCompletion; // } // /// // /// 获取驳回节点经办. // /// // /// 当前节点. // /// 当前任务. // /// 所有节点. // /// 当前节点属性. // /// 下个节点存储list. // /// 表单数据. // /// // private async Task GetNextOperatorByNo( // FlowTaskNodeEntity flowTaskNodeEntity, FlowTaskEntity flowTaskEntity, List flowTaskNodeEntityList, // ApproversProperties approversProperties, List nextFlowTaskOperatorEntityList, string formData, // List flowTaskCandidateModels, Dictionary> errorUserId) // { // if (flowTaskNodeEntity.NodeUp == "0") // { // flowTaskEntity.ThisStepId = flowTaskNodeEntityList.Find(x => FlowTaskNodeTypeEnum.start.ParseToString().Equals(x.NodeType)).NodeCode; // flowTaskEntity.ThisStep = "开始"; // flowTaskEntity.Completion = 0; // flowTaskEntity.FlowUrgent = 0; // flowTaskEntity.Status = FlowTaskStatusEnum.Reject.ParseToInt(); // } // else // { // // 驳回节点(合流驳回多个节点) // var upflowTaskNodeEntityList = GetRejectFlowTaskOperatorEntity(flowTaskNodeEntityList, flowTaskNodeEntity, approversProperties); // if (upflowTaskNodeEntityList.Count == 0) // { // throw Oops.Oh(ErrorCode.WF0032); // } // foreach (var item in upflowTaskNodeEntityList) // { // var errUser = new List(); // if (errorUserId.IsNotEmptyOrNull() && errorUserId.ContainsKey(item.NodeCode)) // { // errUser = errorUserId[item.NodeCode]; // } // await AddFlowTaskOperatorEntityByAssigneeType(flowTaskEntity, // nextFlowTaskOperatorEntityList, flowTaskNodeEntityList, // flowTaskNodeEntity, item, flowTaskCandidateModels, // flowTaskEntity.CreatorUserId, formData, errUser, 1, true); // } // // 驳回节点下所有节点. // var rejectNodeNextAllList = new List(); // flowTaskEntity.Completion = upflowTaskNodeEntityList.Select(x => x.NodePropertyJson.ToObject().progress.ParseToInt()).ToList().Min(); // await GetAllNextNode(flowTaskNodeEntityList, upflowTaskNodeEntityList.FirstOrDefault().NodeNext, rejectNodeNextAllList); // if (flowTaskNodeEntity.NodeUp == "1") // { // // 驳回上级节点 // flowTaskEntity.ThisStepId = GetRejectThisStepId(rejectNodeNextAllList, upflowTaskNodeEntityList.Select(x => x.NodeCode).ToList(), flowTaskEntity.ThisStepId); // flowTaskEntity.ThisStep = GetThisStep(flowTaskNodeEntityList, flowTaskEntity.ThisStepId); // if (flowTaskEntity.ThisStep.Equals("开始")) // { // flowTaskEntity.Completion = 0; // flowTaskEntity.Status = FlowTaskStatusEnum.Reject.ParseToInt(); // nextFlowTaskOperatorEntityList.Clear(); // } // //清空当前节点的候选人 // _flowTaskRepository.DeleteFlowCandidates(x => x.TaskNodeId == flowTaskNodeEntity.Id); // } // else // { // // 驳回任意节点 // flowTaskEntity.ThisStep = string.Join(",", upflowTaskNodeEntityList.Select(x => x.NodeName).ToArray()); // flowTaskEntity.ThisStepId = string.Join(",", upflowTaskNodeEntityList.Select(x => x.NodeCode).ToArray()); // //清空驳回指定节点下所有节点的候选人 // var candidateDelNodeIds = rejectNodeNextAllList.FindAll(x => !x.NodeCode.Equals(approversProperties.rejectStep)).Select(x => x.Id).ToList(); // _flowTaskRepository.DeleteFlowCandidates(x => candidateDelNodeIds.Contains(x.TaskNodeId)); // } // var rejectNodeIds = upflowTaskNodeEntityList.Union(rejectNodeNextAllList).ToList().Select(x => x.Id).ToList(); // await RejectUpdateTaskNode(upflowTaskNodeEntityList.Union(rejectNodeNextAllList).ToList(), 0); // // 删除驳回节点下所有经办 // var rejectList = (await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskEntity.Id && rejectNodeIds.Contains(x.TaskNodeId))).OrderBy(x => x.HandleTime).Select(x => x.Id).ToList(); // await _flowTaskRepository.DeleteTaskOperator(rejectList); // //删除驳回节点经办记录 // var rejectRecodeList = (await _flowTaskRepository.GetTaskOperatorRecordList(x => x.TaskId == flowTaskEntity.Id && rejectNodeIds.Contains(x.TaskNodeId))).OrderBy(x => x.HandleTime).Select(x => x.Id).ToList(); // await _flowTaskRepository.DeleteTaskOperatorRecord(rejectRecodeList); // } // } // /// // /// 获取同意节点经办. // /// // /// 当前节点. // /// 下个节点. // /// 下个节点编码list. // /// 下个节点完成度list. // /// 下个节点经办list. // /// 所有节点. // /// 当前任务. // /// 表单数据. // /// // private async Task GetNextOperatorByYes( // FlowTaskNodeEntity flowTaskNodeEntity, FlowTaskNodeEntity nextNode, // List nextNodeCodeList, List nextNodeCompletion, // List nextFlowTaskOperatorEntityList, // List flowTaskNodeEntityList, // FlowTaskEntity flowTaskEntity, string formData, // List flowTaskCandidateModels, // List errorUserId, bool isShuntNodeCompletion) // { // flowTaskNodeEntity.Completion = 1; // flowTaskNodeEntity.DraftData = formData; // nextNodeCodeList.Add(nextNode.NodeCode); // if (nextNode.NodePropertyJson.ToObject().progress.ParseToInt() != 0) // { // nextNodeCompletion.Add(nextNode.NodePropertyJson.ToObject().progress.ParseToInt()); // } // await AddFlowTaskOperatorEntityByAssigneeType(flowTaskEntity, nextFlowTaskOperatorEntityList, flowTaskNodeEntityList, flowTaskNodeEntity, nextNode, flowTaskCandidateModels, flowTaskEntity.CreatorUserId, formData, errorUserId, 1, isShuntNodeCompletion); // } // /// // /// 递归获取加签人. // /// // /// 经办id. // /// 所有经办. // /// // private async Task> GetOperator(string id, List flowTaskOperatorEntities) // { // var childEntity = await _flowTaskRepository.GetTaskOperatorInfo(x => x.ParentId == id && !x.State.Equals("-1")); // if (childEntity.IsNotEmptyOrNull()) // { // childEntity.State = "-1"; // flowTaskOperatorEntities.Add(childEntity); // return await GetOperator(childEntity.Id, flowTaskOperatorEntities); // } // else // { // return flowTaskOperatorEntities; // } // } // /// // /// 对审批人节点分组. // /// // /// 所有经办. // /// // private Dictionary> GroupByOperator(List flowTaskOperatorEntities) // { // var dic = new Dictionary>(); // foreach (var item in flowTaskOperatorEntities.GroupBy(x => x.TaskNodeId)) // { // dic.Add(item.Key, flowTaskOperatorEntities.FindAll(x => x.TaskNodeId == item.Key)); // } // return dic; // } // /// // /// 保存当前未完成节点下个候选人节点的候选人. // /// // /// 所有节点. // /// 候选人. // /// 0:发起节点,其他:审批节点. // private List SaveNodeCandidates(List nodeEntityList, Dictionary> candidateList, string taskOperatorId) // { // var flowCandidateList = new List(); // if (candidateList.IsNotEmptyOrNull()) // { // foreach (var item in candidateList.Keys) // { // var node = nodeEntityList.Find(x => x.NodeCode == item); // if (node != null) // { // flowCandidateList.Add(new FlowCandidatesEntity() // { // Id = SnowflakeIdHelper.NextId(), // TaskId = node.TaskId, // TaskNodeId = node.Id, // HandleId = _userManager.UserId, // Account = _userManager.Account, // Candidates = string.Join(",", candidateList[item]), // TaskOperatorId = taskOperatorId // }); // } // } // _flowTaskRepository.CreateFlowCandidates(flowCandidateList); // } // return flowCandidateList; // } // #endregion // #region 子流程处理 // /// // /// 创建子流程任务. // /// // /// 子流程节点属性. // /// 表单数据. // /// 子任务父id. // /// 子任务创建人. // private async Task> CreateSubProcesses(ChildTaskProperties childTaskPro, object formData, string parentId, List childTaskCrUsers) // { // var childFLowEngine = await _flowTaskRepository.GetEngineInfo(childTaskPro.flowId); // var isSysTable = childFLowEngine.FormType == 1; // var childTaskId = new List(); // var bodyDic = new Dictionary(); // foreach (var item in childTaskCrUsers) // { // var prossId = isSysTable ? SnowflakeIdHelper.NextId() : null; // var title = isSysTable ? _usersService.GetUserName(item, false) + "的" + childFLowEngine.FullName : null; // var flowTaskSubmitModel = new FlowTaskSubmitModel // { // id = null, // flowId = childTaskPro.flowId, // processId = isSysTable ? SnowflakeIdHelper.NextId() : null, // flowTitle = isSysTable ? _usersService.GetUserName(item, false) + "的" + childFLowEngine.FullName : null, // flowUrgent = 0, // billNo = null, // formData = formData, // status = 1, // approvaUpType = 0, // isSysTable = isSysTable, // parentId = parentId, // isDev = false, // crUser = item, // isAsync = childTaskPro.isAsync // }; // var childTaskEntity = await this.Save(flowTaskSubmitModel); // childTaskId.Add(childTaskEntity.Id); // globalTaskEntity = childTaskEntity; // if (isSysTable) // { // GetSysTableFromService(childFLowEngine.EnCode, formData, childTaskEntity.Id, 1); // } // bodyDic.Add(item, new // { // enCode = childFLowEngine.EnCode, // flowId = childFLowEngine.Id, // formType = childFLowEngine.FormType, // status = 0, // processId = childTaskEntity.Id, // taskNodeId = string.Empty, // taskOperatorId = string.Empty, // type = 1 // }); // await StationLetterMsg(childTaskEntity.FullName, new List() { item }, 4, bodyDic); // } // return childTaskId; // } // /// // /// 获取子流程继承父流程的表单数据. // /// // /// 子流程属性 // /// 表单数据. // /// // private async Task GetSubFlowFormData(ChildTaskProperties childTaskProperties, string formData) // { // var childFlowEngine = _flowTaskRepository.GetEngineFirstOrDefault(childTaskProperties.flowId); // var parentDic = formData.ToObject().ToObject>(); // var isSysTable = childFlowEngine.FormType == 1; // var childDic = new Dictionary(); // if (isSysTable) // { // childDic["flowId"] = childTaskProperties.flowId; // } // else // { // // 解析表单模板 // var formTemplateBase = new TemplateParsingBase(childFlowEngine.FormTemplateJson, childFlowEngine.Tables, true); // foreach (var item in formTemplateBase.SingleFormData) // { // childDic[item.__vModel__] = string.Empty; // } // } // //foreach (var item in childTaskProperties.assignList) // //{ // // childDic[item.childField] = parentDic.ContainsKey(item.parentField) ? parentDic[item.parentField] : null; // //} // return childDic; // } // /// // /// 插入子流程. // /// // /// 子流程. // /// // private async Task InsertSubFlowNextNode(FlowTaskEntity childFlowTaskEntity) // { // try // { // //所有子流程(不包括当前流程) // var childFlowTaskAll = (await _flowTaskRepository.GetTaskList()).FindAll(x => x.ParentId == childFlowTaskEntity.ParentId && x.Id != childFlowTaskEntity.Id && x.IsAsync == 0); // //父流程 // var parentFlowTask = await _flowTaskRepository.GetTaskInfo(childFlowTaskEntity.ParentId); // // 父流程所有节点 // var flowTaskNodeEntityList = await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == parentFlowTask.Id && x.State == "0"); // //子流程所属父流程节点 // var parentSubFlowNode = (await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == parentFlowTask.Id && FlowTaskNodeTypeEnum.subFlow.ParseToString().Equals(x.NodeType) && x.Completion == 0)).Find(x => x.NodePropertyJson.ToObject().childTaskId.Contains(childFlowTaskEntity.Id)); // //判断该父流程子流程节点下的子流程是否完成 // var list = parentSubFlowNode.NodePropertyJson.ToObject().childTaskId; // if (!childFlowTaskAll.Any(x => x.Status != FlowTaskStatusEnum.Adopt.ParseToInt() && list.Contains(x.Id))) // { // parentSubFlowNode.Completion = 1; // await _flowTaskRepository.UpdateTaskNode(parentSubFlowNode); // } // // 判断是否插入子流程节点下一节点数据 // var subFlowNextNode = flowTaskNodeEntityList.Find(m => parentSubFlowNode.NodeNext.Contains(m.NodeCode)); // var isShuntNodeCompletion = IsShuntNodeCompletion(flowTaskNodeEntityList, subFlowNextNode.NodeCode, parentSubFlowNode); // if (parentSubFlowNode.Completion == 1) // { // // 分流合流完成则插入,反之则修改父流程当前节点 // if (isShuntNodeCompletion) // { // var subFlowOperator = parentSubFlowNode.Adapt(); // subFlowOperator.Id = null; // subFlowOperator.TaskNodeId = parentSubFlowNode.Id; // var flowEngine = await _flowTaskRepository.GetEngineInfo(parentFlowTask.FlowId); // var childData = parentSubFlowNode.NodePropertyJson.ToObject().formData; // var handleModel = new FlowHandleModel(); // if (flowEngine.FormType.ParseToInt() == 2) // { // var dic = new Dictionary(); // dic.Add("data", childData); // handleModel.formData = dic; // } // else // { // handleModel.formData = childData.ToObject(); // } // await this.Audit(parentFlowTask, subFlowOperator, handleModel, flowEngine); // } // else // { // var thisStepIds = parentFlowTask.ThisStepId.Split(",").ToList(); // thisStepIds.Remove(parentSubFlowNode.NodeCode); // parentFlowTask.ThisStepId = string.Join(",", thisStepIds.ToArray()); // parentFlowTask.ThisStep = GetThisStep(flowTaskNodeEntityList, parentFlowTask.ThisStepId); // await _flowTaskRepository.UpdateTask(parentFlowTask); // } // } // } // catch (AppFriendlyException ex) // { // throw Oops.Oh(ex.ErrorCode); // } // } // #endregion // #region 其他 // /// // /// 获取流程任务名称. // /// // /// // /// // private async Task GetFlowTitle(FlowTaskSubmitModel flowTaskSubmitModel) // { // var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowTaskSubmitModel.flowId); // var flowTemplateJsonModel = flowEngineEntity.FlowTemplateJson.ToObject(); // var startProp = flowTemplateJsonModel.properties.ToObject(); // var userName = flowTaskSubmitModel.crUser.IsNotEmptyOrNull() ? await _usersService.GetUserName(flowTaskSubmitModel.crUser, false) : _userManager.User.RealName; // if (startProp.titleType == 1 && flowTaskSubmitModel.status == 0) // { // var formDataDic = flowTaskSubmitModel.formData.ToObject>(); // formDataDic.Add("@flowFullName", flowEngineEntity.FullName); // formDataDic.Add("@flowFullCode", flowEngineEntity.EnCode); // formDataDic.Add("@launchUserName", userName); // formDataDic.Add("@launchTime", DateTime.Now.ToString("yyyy-MM-dd")); // var fieldList = startProp.titleContent.Substring3(); // foreach (var item in fieldList) // { // if (formDataDic.ContainsKey(item) && formDataDic[item] != null) // { // startProp.titleContent = startProp.titleContent?.Replace("{" + item + "}", formDataDic[item].ToString()); // } // else // { // startProp.titleContent = startProp.titleContent?.Replace("{" + item + "}", string.Empty); // } // } // return startProp.titleContent; // } // else // { // return string.Format("{0}的{1}", userName, flowEngineEntity.FullName); // } // } // /// // /// 自动同意审批. // /// // /// // /// // /// // /// // /// // private async Task AutoAudit( // FlowTaskEntity flowTaskEntity, List flowTaskNodeEntityList, string formData, // string thisNodeId, Dictionary> candidateList = null, bool isTimeOut = false) // { // try // { // var flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowTaskEntity.FlowId); // var flowTaskOperatorEntityList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskEntity.Id && x.Completion == 0 && x.State != "-1"); // var startProperties = flowTaskNodeEntityList.FirstOrDefault().NodePropertyJson.ToObject(); // foreach (var item in flowTaskOperatorEntityList) // { // var flowTaskCandidateModels = new List(); // var nextTaskNodeEntity = flowTaskNodeEntityList.Find(m => m.Id.Equals(item.TaskNodeId)); // var approverPropertiers = nextTaskNodeEntity.NodePropertyJson.ToObject(); // // 看下个审批节点是否是候选人或异常节点 // await GetErrorNode(flowTaskCandidateModels, flowTaskNodeEntityList.FindAll(m => nextTaskNodeEntity.NodeNext.Contains(m.NodeCode)), flowTaskNodeEntityList, startProperties, flowTaskEntity.CreatorUserId, formData); // await GetCandidates(flowTaskCandidateModels, flowTaskNodeEntityList.FindAll(m => nextTaskNodeEntity.NodeNext.Contains(m.NodeCode)), flowTaskNodeEntityList); // var falag = flowTaskCandidateModels.Count == 0; // var isCom = (await _flowTaskRepository.GetTaskOperatorInfo(x => x.Id == item.Id && x.Completion == 0)).IsNotEmptyOrNull(); // if (isCom && falag && approverPropertiers.hasAgreeRule) // { // var isAuto = false; // var upNodeList = flowTaskNodeEntityList.FindAll(x => !x.NodeCode.Equals("end") && x.NodeNext.Contains(item.NodeCode)).Select(x => x.Id).ToList(); // foreach (var agreeRule in approverPropertiers.agreeRules) // { // switch (agreeRule) // { // case "2": // isAuto = item.HandleId == flowTaskEntity.CreatorUserId; // break; // case "3": // isAuto = (await _flowTaskRepository.GetTaskOperatorRecordInfo(x => x.TaskId == item.TaskId && upNodeList.Contains(x.TaskNodeId) && x.HandleId == item.HandleId && x.HandleStatus == 1 && x.Status >= 0)).IsNotEmptyOrNull(); // break; // case "4": // isAuto = (await _flowTaskRepository.GetTaskOperatorRecordInfo(x => x.TaskId == item.TaskId && x.HandleId == item.HandleId && x.HandleStatus == 1 && x.Status >= 0)).IsNotEmptyOrNull(); // break; // } // } // if (isAuto || item.HandleId.Equals("jnpf") || isTimeOut) // { // var handleModel = new FlowHandleModel(); // handleModel.handleOpinion = item.HandleId.Equals("jnpf") ? "默认审批通过" : "自动审批通过"; // handleModel.handleOpinion = isTimeOut ? "超时审批通过" : handleModel.handleOpinion; // if (flowEngineEntity.FormType == 2) // { // var dic = new Dictionary(); // dic.Add("data", formData); // handleModel.formData = dic; // handleModel.candidateList = candidateList; // } // else // { // handleModel.formData = formData.ToObject(); // handleModel.candidateList = candidateList; // } // await this.Audit(flowTaskEntity, item, handleModel, flowEngineEntity, true); // } // } // } // } // catch (Exception ex) // { // } // } // /// // /// 自定义表单数据处理(保存或提交). // /// // /// 主键id(通过空值判断是修改还是新增). // /// 流程id. // /// 实例id. // /// 流程任务名. // /// 紧急程度(自定义默认为1). // /// 单据规则. // /// 表单填写的数据. // /// 子流程发起人. // /// 是否功能设计. // /// // private async Task FlowDynamicDataManage(string id, string flowId, string processId, string flowTitle, int? flowUrgent, string billNo, object formData, string crUser, bool isDev) // { // try // { // FlowEngineEntity flowEngineEntity = await _flowTaskRepository.GetEngineInfo(flowId); // billNo = "单据规则不存在"; // processId = processId.IsNullOrEmpty() ? SnowflakeIdHelper.NextId() : processId; // // 解析表单模板 // var formTemplateBase = new TemplateParsingBase(flowEngineEntity.FormTemplateJson, flowEngineEntity.Tables, true); // // 待保存表单数据 // Dictionary formDataDic = formData.ToObject>(); // // 有表无表 // bool isTable = flowEngineEntity.Tables.Equals("[]"); // // 新增或修改 // bool type = id.IsEmpty(); // if (!type) // { // var entity = await _flowTaskRepository.GetTaskInfo(id); // processId = id; // billNo = entity.EnCode; // } // #region 待保存表单数据 // VisualDevEntity visualdevEntity = new VisualDevEntity() { Id = processId, WebType = 3, FormData = flowEngineEntity.FormTemplateJson, Tables = flowEngineEntity.Tables, DbLinkId = flowEngineEntity.DbLinkId }; // VisualDevModelDataCrInput visualdevModelDataCrForm = new VisualDevModelDataCrInput() { data = formData.ToJsonString() }; // var dbLink = await _flowTaskRepository.GetLinkInfo(flowEngineEntity.DbLinkId) ?? _dataBaseManager.GetTenantDbLink(_userManager.TenantId, _userManager.TenantDbName); // #endregion // if (!isTable) // { // if (!isDev) // { // if (type) // { // var dicSql = await _runService.CreateHaveTableSql(visualdevEntity, visualdevModelDataCrForm, processId); // // 主表自增长Id. // if (dicSql.ContainsKey("MainTableReturnIdentity")) dicSql.Remove("MainTableReturnIdentity"); // foreach (var item in dicSql) await _dataBaseManager.ExecuteSql(dbLink, item.Key, item.Value); // } // else // { // var sql = await _runService.UpdateHaveTableSql(visualdevEntity, visualdevModelDataCrForm.Adapt(), id); // foreach (var item in sql) await _dataBaseManager.ExecuteSql(dbLink, item); // } // } // } // else // { // // 获取旧数据 // if (!type) // { // var oldEntity = await _flowTaskRepository.GetTaskInfo(id); // var oldAllDataMap = oldEntity.FlowFormContentJson.ToObject>(); // // 当前组织和当前岗位不做修改 // foreach (var item in formTemplateBase.SingleFormData) // { // if (item.__config__.jnpfKey == "currOrganize" || item.__config__.jnpfKey == "currPosition") // { // // 当前组织和当前岗位不做修改 // formDataDic[item.__vModel__] = oldAllDataMap[item.__vModel__]; // } // } // } // // 无表处理后待保存数据 // formData = await _runService.GenerateFeilds(formTemplateBase.SingleFormData.ToJsonString(), formDataDic, type); // // 修改时单据规则不做修改 // if (formTemplateBase.SingleFormData.Any(x => "billRule".Equals(x.__config__.jnpfKey)) && type) // { // string ruleKey = formTemplateBase.SingleFormData.Where(x => "billRule".Equals(x.__config__.jnpfKey)).FirstOrDefault().__config__.rule; // billNo = await _billRullService.GetBillNumber(ruleKey, true); // } // } // var flowTaskEntity = new FlowTaskEntity(); // flowTaskEntity.Id = id; // flowTaskEntity.FlowId = flowId; // flowTaskEntity.ProcessId = processId; // flowTaskEntity.FlowName = flowTitle; // flowTaskEntity.FlowUrgent = flowUrgent; // flowTaskEntity.EnCode = billNo; // flowTaskEntity.FlowFormContentJson = formData.ToJsonString(); // return flowTaskEntity; // } // catch (AppFriendlyException ex) // { // throw Oops.Oh(ex.ErrorCode); // } // } // /// // /// 添加经办记录. // /// // /// 当前经办. // /// 审批数据. // /// 审批状态. // /// // private async Task CreateOperatorRecode(FlowTaskOperatorEntity flowTaskOperatorEntity, FlowHandleModel flowHandleModel, int hanldState) // { // FlowTaskOperatorRecordEntity flowTaskOperatorRecordEntity = new FlowTaskOperatorRecordEntity(); // flowTaskOperatorRecordEntity.HandleOpinion = flowHandleModel.handleOpinion; // flowTaskOperatorRecordEntity.HandleId = flowTaskOperatorEntity.Id.IsNotEmptyOrNull() ? flowTaskOperatorEntity.HandleId : string.Empty; // flowTaskOperatorRecordEntity.HandleTime = DateTime.Now; // flowTaskOperatorRecordEntity.HandleStatus = hanldState; // flowTaskOperatorRecordEntity.NodeCode = flowTaskOperatorEntity.NodeCode; // flowTaskOperatorRecordEntity.NodeName = flowTaskOperatorEntity.NodeName; // flowTaskOperatorRecordEntity.TaskOperatorId = flowTaskOperatorEntity.Id; // flowTaskOperatorRecordEntity.TaskNodeId = flowTaskOperatorEntity.TaskNodeId; // flowTaskOperatorRecordEntity.TaskId = flowTaskOperatorEntity.TaskId; // flowTaskOperatorRecordEntity.SignImg = flowHandleModel.signImg; // flowTaskOperatorRecordEntity.Status = flowTaskOperatorEntity.ParentId.IsNotEmptyOrNull() ? 1 : 0; // await _flowTaskRepository.CreateTaskOperatorRecord(flowTaskOperatorRecordEntity); // } // /// // /// 判断会签人数是否达到会签比例. // /// // /// 当前节点所有审批人(已剔除加签人). // /// 审批状态. // /// 比例. // /// 是否有加签(true:没有,flase:有). // /// // private bool IsAchievebilProportion(List thisFlowTaskOperatorEntityList, int handStatus, int index, bool hasFreeApprover) // { // if (thisFlowTaskOperatorEntityList.Count == 0) // return true; // if (handStatus == 0) // index = 100 - index; // //完成人数(加上当前审批人) // var comIndex = thisFlowTaskOperatorEntityList.FindAll(x => x.HandleStatus == handStatus && x.Completion == 1 && x.State == "0").Count.ParseToDouble(); // if (hasFreeApprover) // { // ++comIndex; // } // //完成比例 // var comProportion = (comIndex / thisFlowTaskOperatorEntityList.Count.ParseToDouble() * 100).ParseToInt(); // return comProportion >= index; // } // /// // /// 事件请求. // /// // /// 事件配置. // /// 表单数据. // /// // private async Task RequestEvents(FuncConfig funcConfig, string formdata) // { // if (funcConfig.IsNotEmptyOrNull() && funcConfig.on && funcConfig.interfaceId.IsNotEmptyOrNull()) // { // var parameters = GetMsgContent(funcConfig.templateJson, formdata, new MessageTemplateEntity()); // await _dataInterfaceService.GetResponseByType(funcConfig.interfaceId, 3, _userManager.TenantId, null, parameters); // } // } // #region 消息推送 // /// // /// 站内消息推送. // /// // /// 任务名. // /// 通知人员. // /// 消息类型【0.审批,1.同意,2.拒绝,3.抄送,4.子流程,5.结束,6.超时,7.提醒】. // /// 详情跳转json. // /// // private async Task StationLetterMsg(string fullName, List users, int msgType, Dictionary pairs) // { // var msgTemplateEntity = new MessageTemplateEntity(); // switch (msgType) // { // case 1: // msgTemplateEntity.Title = fullName + "已被【同意】"; // break; // case 2: // msgTemplateEntity.Title = fullName + "已被【拒绝】"; // break; // case 3: // msgTemplateEntity.Title = fullName + "已被【抄送】"; // break; // case 4: // msgTemplateEntity.Title = fullName + "请发起【子流程】"; // break; // case 5: // msgTemplateEntity.Title = fullName + "已【结束】"; // break; // case 6: // msgTemplateEntity.Title = fullName + "已【超时】"; // break; // case 7: // msgTemplateEntity.Title = fullName + "请尽快【审批】"; // break; // default: // msgTemplateEntity.Title = fullName; // break; // } // await _messageTemplateService.SendNodeMessage(new List() { "1" }, msgTemplateEntity, users, null, pairs); // } // /// // /// 通过消息模板获取消息通知. // /// // /// 消息配置. // /// 通知人员. // /// 表单数据. // private async Task Alerts(MsgConfig msgConfig, List users, string formdata) // { // if (msgConfig.IsNotEmptyOrNull() && msgConfig.on != 0 && msgConfig.msgId.IsNotEmptyOrNull()) // { // var msgTemplateEntity = await _messageTemplateService.GetInfo(msgConfig.msgId); // var typeList = new List(); // var parameters = GetMsgContent(msgConfig.templateJson, formdata, msgTemplateEntity); // if (msgTemplateEntity.IsEmail == 1) // typeList.Add("2"); // if (msgTemplateEntity.IsSms == 1) // typeList.Add("3"); // if (msgTemplateEntity.IsDingTalk == 1) // typeList.Add("4"); // if (msgTemplateEntity.IsWeCom == 1) // typeList.Add("5"); // await _messageTemplateService.SendNodeMessage(typeList, msgTemplateEntity, users, parameters, null); // } // } // /// // /// 获取消息模板内容. // /// // /// 消息模板json. // /// 表单数据. // /// 消息模板. // private Dictionary GetMsgContent(List templateJsonItems, string formData, MessageTemplateEntity messageTemplateEntity) // { // var jObj = formData.ToObject(); // var dic = new Dictionary(); // var taskEntity = _flowTaskRepository.GetTaskFirstOrDefault(globalTaskId); // if (taskEntity.IsNullOrEmpty()) // { // taskEntity = globalTaskEntity; // } // foreach (var item in templateJsonItems) // { // var value = string.Empty; // if (item.relationField.Equals("@flowOperatorUserId")) // { // value = _userManager.UserId; // } // else if (item.relationField.Equals("@taskId")) // { // value = globalTaskId; // } // else if (item.relationField.Equals("@taskNodeId")) // { // value = globalTaskNodeId; // } // else if (item.relationField.Equals("@taskFullName")) // { // value = taskEntity.FullName; // } // else if (item.relationField.Equals("@launchUserId")) // { // value = taskEntity.CreatorUserId; // } // else if (item.relationField.Equals("@launchUserName")) // { // value = _usersService.GetInfoByUserId(taskEntity.CreatorUserId).RealName; // } // else if (item.relationField.Equals("@flowOperatorUserName")) // { // value = _userManager.User.RealName; // } // else if (item.relationField.Equals("@flowId")) // { // value = taskEntity.FlowId; // } // else if (item.relationField.Equals("@flowFullName")) // { // value = taskEntity.FlowName; // } // else // { // if (item.isSubTable) // { // var fields = item.relationField.Split("-").ToList(); // // 子表键值 // var tableField = fields[0]; // // 子表字段键值 // var keyField = fields[1]; // if (jObj.ContainsKey(tableField) && jObj[tableField] is JArray) // { // var jar = jObj[tableField] as JArray; // value = jar.Where(x => x.ToObject().ContainsKey(keyField)).Select(x => x.ToObject()[keyField]).ToJsonString(); // } // } // else // { // value = jObj.ContainsKey(item.relationField) ? jObj[item.relationField].ToString() : string.Empty; // } // } // messageTemplateEntity.Title = messageTemplateEntity.Title.Replace("{" + item.field + "}", value); // messageTemplateEntity.Content = messageTemplateEntity.Content.Replace("{" + item.field + "}", value); // dic.Add(item.field, value); // } // return dic; // } // /// // /// 组装消息跳转详情参数. // /// // /// 流程实例 // /// 节点id. // /// 通知人员. // /// 经办实例. // /// 1:发起,2:待办,3:抄送 // /// // /// // private Dictionary GetMesBodyText(FlowEngineEntity flowEngineEntity, string taskNodeId, List userList, List flowTaskOperatorEntities, int type, string taskOperatorId = "", string bz = "") // { // var dic = new Dictionary(); // if (flowTaskOperatorEntities.IsNotEmptyOrNull() && flowTaskOperatorEntities.Count > 0) // { // foreach (var item in flowTaskOperatorEntities) // { // var value = new // { // enCode = flowEngineEntity.EnCode, // flowId = flowEngineEntity.Id, // formType = flowEngineEntity.FormType, // status = type == 1 ? 0 : 1, // processId = item.TaskId, // taskNodeId = item.TaskNodeId, // taskOperatorId = item.Id, // type = type, // bz = bz // }; // dic.Add(item.HandleId, value); // var toUserId = _flowTaskRepository.GetToUserId(item.HandleId, flowEngineEntity.Id); // toUserId.ForEach(u => dic[u] = value); // } // } // else // { // var value = new // { // enCode = flowEngineEntity.EnCode, // flowId = flowEngineEntity.Id, // formType = flowEngineEntity.FormType, // status = type == 1 ? 0 : 1, // processId = globalTaskId, // taskNodeId = taskNodeId, // taskOperatorId = taskOperatorId, // type = type, // bz = bz // }; // userList.ForEach(u => dic.Add(u, value)); // } // return dic; // } // #endregion // #endregion // #region 系统表单 // /// // /// 系统表单操作. // /// // /// // /// // /// // /// // private async void GetSysTableFromService(string enCode, object data, string id, int type) // { // Scoped.Create((_, scope) => // { // switch (enCode.ToLower()) // { // case "salesorder": // var SalesOrder = App.GetService(); // SalesOrder.Save(id, data, type); // break; // case "leaveapply": // var LeaveApply = App.GetService(); // LeaveApply.Save(id, data, type); // break; // } // }); // } // #endregion // #region 超时处理 // /// // /// 超时/提醒. // /// // /// 任务. // /// 处理节点id. // /// 处理节点经办. // /// 处理节点人员. // /// 开始节点属性. // /// 表单数据. // /// 跳转数据. // /// // private async Task TimeoutOrRemind(FlowTaskEntity flowTaskEntity, string nodeId, List flowTaskOperatorEntities, FlowEngineEntity flowEngineEntity, StartProperties startProp, string formData) // { // var flowNode = await _flowTaskRepository.GetTaskNodeInfo(nodeId); // var nodeProp = flowNode?.NodePropertyJson?.ToObject(); // nodeProp.timeLimitConfig = nodeProp.timeLimitConfig.on == 2 ? startProp.timeLimitConfig : nodeProp.timeLimitConfig;//限时配置 // nodeProp.noticeConfig = nodeProp.noticeConfig.on == 2 ? startProp.noticeConfig : nodeProp.noticeConfig;//提醒配置 // nodeProp.overTimeConfig = nodeProp.overTimeConfig.on == 2 ? startProp.overTimeConfig : nodeProp.overTimeConfig;//超时配置 // if (nodeProp.timeLimitConfig.on > 0) // { // // 起始时间 // var startingTime = GetStartingTime(nodeProp.timeLimitConfig, (DateTime)flowTaskOperatorEntities.FirstOrDefault().CreatorTime, (DateTime)flowTaskEntity.CreatorTime, formData); // // 创建限时提醒 // if (nodeProp.noticeConfig.on > 0) // { // var cron = GetCron(nodeProp.noticeConfig.overTimeDuring, startingTime, 1); // 参数1换成0即可切换成小时 // //var startTime = startingTime.AddHours(nodeProp.noticeConfig.firstOver); // 提醒开始时间 // //var endTime = startingTime.AddHours(nodeProp.overTimeConfig.duringDeal); // 提醒结束时间 // // 分钟 // var startTime = startingTime.AddMinutes(nodeProp.noticeConfig.firstOver); // 提醒开始时间 // var endTime = startingTime.AddMinutes(nodeProp.timeLimitConfig.duringDeal); // 提醒结束时间 // nodeProp.noticeMsgConfig = nodeProp.noticeMsgConfig.on == 2 ? startProp.noticeMsgConfig : nodeProp.noticeMsgConfig; // if (startTime < endTime && DateTime.Now < endTime) // { // Console.WriteLine("提醒cron表达式:" + cron); // Console.WriteLine("提醒开始时间:" + startTime.ToString("yyyy-MM-dd HH:mm:ss")); // Console.WriteLine("提醒结束时间:" + endTime.ToString("yyyy-MM-dd HH:mm:ss")); // var interval = 1;//第一次执行间隔 // var runCount = 0;// 已执行次数 // if (DateTime.Now < startTime) // { // interval = (startTime - DateTime.Now).TotalMilliseconds.ParseToInt(); // } // else if (startTime < DateTime.Now && DateTime.Now < endTime && nodeProp.noticeConfig.overTimeDuring > 0) // { // runCount = (DateTime.Now - startTime).TotalMinutes.ParseToInt() / nodeProp.noticeConfig.overTimeDuring; // } // SpareTime.DoOnce(interval, async (timer, count) => await NotifyEvent(nodeProp.noticeMsgConfig, nodeProp.noticeFuncConfig, nodeProp.noticeConfig, formData, nodeId, flowTaskEntity, flowEngineEntity, runCount + 1, false), "OnceTx_" + nodeId); // if (nodeProp.noticeConfig.overTimeDuring > 0) // { // await MsgOrRequest(nodeProp.noticeMsgConfig, nodeProp.noticeFuncConfig, nodeProp.noticeConfig, formData, startTime, endTime, cron, nodeId, flowTaskEntity, flowEngineEntity, runCount + 1); // } // } // } // // 创建超时提醒 // if (nodeProp.overTimeConfig.on > 0) // { // var cron = GetCron(nodeProp.overTimeConfig.overTimeDuring, startingTime, 1);// 参数1换成0即可切换成小时 // //var startTime = startingTime.AddHours(nodeProp.overTimeConfig.duringDeal + nodeProp.overTimeConfig.firstOver); // 超时开始时间 // // 分钟 // var startTime = startingTime.AddMinutes(nodeProp.timeLimitConfig.duringDeal + nodeProp.overTimeConfig.firstOver); // 超时开始时间 // nodeProp.overTimeMsgConfig = nodeProp.overTimeMsgConfig.on == 2 ? startProp.overTimeMsgConfig : nodeProp.overTimeMsgConfig; // Console.WriteLine("超时cron表达式:" + cron); // Console.WriteLine("超时开始时间:" + startTime.ToString("yyyy-MM-dd HH:mm:ss")); // var interval = 1;//第一次执行间隔 // var runCount = 0;// 已执行次数 // if (DateTime.Now < startTime) // { // interval = (startTime - DateTime.Now).TotalMilliseconds.ParseToInt(); // } // else // { // if (nodeProp.overTimeConfig.overTimeDuring > 0) // { // runCount = (DateTime.Now - startTime).TotalMinutes.ParseToInt() / nodeProp.overTimeConfig.overTimeDuring; // } // } // SpareTime.DoOnce(interval, async (timer, count) => await NotifyEvent(nodeProp.noticeMsgConfig, nodeProp.noticeFuncConfig, nodeProp.noticeConfig, formData, nodeId, flowTaskEntity, flowEngineEntity, runCount + 1, true), "OnceCs_" + nodeId); // if (nodeProp.noticeConfig.overTimeDuring > 0) // { // await MsgOrRequest(nodeProp.noticeMsgConfig, nodeProp.noticeFuncConfig, nodeProp.noticeConfig, formData, startTime, null, cron, nodeId, flowTaskEntity, flowEngineEntity, runCount + 1); // } // } // } // } // /// // /// 执行超时提醒配置. // /// // /// // /// // /// // /// // /// // /// // /// // /// // /// // /// // private async Task NotifyEvent( // MsgConfig msgConfig, FuncConfig funcConfig, TimeOutConfig timeOutConfig, // string formData, string nodeId, FlowTaskEntity flowTaskEntity, // FlowEngineEntity flowEngineEntity, int count, bool isTimeOut) // { // var index = isTimeOut ? 6 : 7; // var str = isTimeOut ? "超时" : "提醒"; // // 通知 // if (timeOutConfig.overNotice) // { // var operatorList = await _flowTaskRepository.GetTaskOperatorList(x => x.TaskId == flowTaskEntity.Id && x.TaskNodeId == nodeId && x.Completion == 0 && x.State != "-1"); // var userList = operatorList.Select(x => x.HandleId).ToList(); // var bz = string.Format("现在时间:{3},节点{0}:第{1}次{2}通知", nodeId, count, str, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); // Console.WriteLine(bz); // var bodyDic = GetMesBodyText(flowEngineEntity, nodeId, userList, operatorList, 2, "", bz); // await StationLetterMsg(flowTaskEntity.FullName, userList, index, bodyDic); // if (msgConfig.on > 0) // { // await Alerts(msgConfig, userList, formData); // } // } // // 事件 // if (funcConfig.on && timeOutConfig.overEvent && timeOutConfig.overEventTime == count) // { // Console.WriteLine(string.Format("开始执行{0}事件,现在时间:{1}", str, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))); // await RequestEvents(funcConfig, formData); // } // //自动审批 // if (isTimeOut && timeOutConfig.overAutoApproveTime == count && timeOutConfig.overAutoApprove) // { // Console.WriteLine("开始自动审批,现在时间:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); // var nodeList = await _flowTaskRepository.GetTaskNodeList(x => x.TaskId == flowTaskEntity.Id && x.State == "0"); // await AutoAudit(flowTaskEntity, nodeList, formData, nodeId, null, true); // } // } // /// // /// 定时任务执行超时提醒. // /// // /// // /// // /// // /// // /// // /// // /// // /// // /// // /// // /// // private async Task MsgOrRequest( // MsgConfig msgConfig, FuncConfig funcConfig, TimeOutConfig timeOutConfig, // string formData, DateTime startTime, DateTime? endTime, string cron, // string nodeId, FlowTaskEntity flowTaskEntity, FlowEngineEntity flowEngineEntity, int zxCount = 1) // { // // 提醒(false)/超时(true) // var isTimeOut = endTime.IsNullOrEmpty(); // var workerName = isTimeOut ? "CS_" + nodeId : "TX_" + nodeId; // SpareTime.Do( // () => // { // var isZx = isTimeOut ? DateTime.Now >= startTime : DateTime.Now >= startTime && DateTime.Now < endTime; // //Console.WriteLine(workerName + "是否开始执行:" + isZx); // if (isZx) // { // return SpareTime.GetCronNextOccurrence(cron); // } // else // { // return null; // } // }, // async (_, count) => // { // await NotifyEvent(msgConfig, funcConfig, timeOutConfig, formData, nodeId, flowTaskEntity, flowEngineEntity, count.ParseToInt() + zxCount, isTimeOut); // }, workerName, string.Empty, cancelInNoneNextTime: false); // } // /// // /// 获取cron表达式. // /// // /// 间隔. // /// 起始时间. // /// 0:小时 1:分钟. // /// // private string GetCron(int overTimeDuring, DateTime startingTime, int type = 0) // { // if (type == 0) // { // return string.Format("{0} {1} 0/{2} * * ?", startingTime.Second, startingTime.Minute, overTimeDuring); // } // else // { // return string.Format("{0} 0/{1} * * * ?", startingTime.Second, overTimeDuring); // } // } // /// // /// 获取起始时间. // /// // /// 限时配置. // /// 接收时间. // /// 发起时间. // /// 表单数据. // /// // private DateTime GetStartingTime(TimeOutConfig timeOutConfig, DateTime receiveTime, DateTime createTime, string formData) // { // var dt = DateTime.Now; // switch (timeOutConfig.nodeLimit) // { // case 0: // dt = receiveTime; // break; // case 1: // dt = createTime; // break; // case 2: // var jobj = formData.ToObject(); // if (jobj.ContainsKey(timeOutConfig.formField)) // { // try // { // if (jobj[timeOutConfig.formField] is long) // { // dt = jobj[timeOutConfig.formField].ParseToLong().TimeStampToDateTime(); // } // else // { // dt = jobj[timeOutConfig.formField].ToString().ParseToDateTime(); // } // } // catch (Exception) // { // break; // } // } // break; // } // return dt; // } // #endregion // #endregion //}