/// <summary> /// 网格数据处理 /// </summary> /// <param name="data"></param> /// <param name="otherParams"></param> /// <param name="currUser"></param> public bool PageGridDataHandle(List <Bpm_WorkToDoList> data, object[] otherParams = null, UserInfo currUser = null) { if (data != null && data.Count > 0) { string errMsg = string.Empty; foreach (Bpm_WorkToDoList todo in data) { todo.ModuleName = SystemOperate.GetModuleNameById(todo.ModuleId); if (!todo.Bpm_WorkFlowInstanceId.HasValue) { continue; } Bpm_WorkFlowInstance flowInst = BpmOperate.GetWorkflowInstanceById(todo.Bpm_WorkFlowInstanceId.Value); if (flowInst == null) { continue; } todo.StatusOfEnum = flowInst.StatusOfEnum; int status = (int)flowInst.StatusOfEnum; Bpm_WorkToDoList tempTodo = CommonOperate.GetEntity <Bpm_WorkToDoList>(x => x.Bpm_WorkFlowInstanceId == todo.Bpm_WorkFlowInstanceId.Value && x.Status == status, null, out errMsg); if (tempTodo != null && !string.IsNullOrEmpty(todo.NextNodeHandler)) { List <Guid> tempEmpIds = tempTodo.NextNodeHandler.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(x => x.ObjToGuid()).Where(x => x != Guid.Empty).ToList(); if (tempEmpIds.Count > 0) { todo.OrgM_EmpName = string.Join(",", tempEmpIds.Select(x => OrgMOperate.GetEmpNameContainsQuit(x)).Where(x => !string.IsNullOrEmpty(x))); } } } } return(false); }
/// <summary> /// 操作前验证,如果流程已经在运行则不能删除 /// </summary> /// <param name="operateType"></param> /// <param name="t"></param> /// <param name="errMsg"></param> /// <param name="otherParams"></param> /// <returns></returns> public bool BeforeOperateVerifyOrHandle(ModelRecordOperateType operateType, Bpm_WorkFlow t, out string errMsg, object[] otherParams = null) { errMsg = string.Empty; if (operateType == ModelRecordOperateType.Del) { //如果该流程存在流程实例则不允许删除 Bpm_WorkFlowInstance workflowInst = CommonOperate.GetEntity <Bpm_WorkFlowInstance>(x => x.Bpm_WorkFlowId == t.Id, null, out errMsg); if (workflowInst != null) { errMsg = "运行中的流程不允许删除!"; return(false); } } else if (operateType == ModelRecordOperateType.Add) { if (t.ValidEndTime != null && t.ValidEndTime.Value <= DateTime.Now) { errMsg = "结束时间必须大于今天!"; return(false); } if (t.ValidEndTime != null) { if (t.ValidStartTime == null) { errMsg = "设置了结束时间必须也要设置起始时间!"; return(false); } else if (t.ValidStartTime.Value < DateTime.Now) { errMsg = "起始时间必须大于等于今天!"; return(false); } } if (t.ValidStartTime == null && t.ValidEndTime == null) { if (BpmOperate.GetAllWorkflows(x => x.Sys_ModuleId == t.Sys_ModuleId && x.ValidStartTime == null && x.ValidEndTime == null).Count > 0) { errMsg = "该模块已经存在了默认流程(起始时间和结束时间为空),不允许再添加默认流程!"; return(false); } } } return(true); }
/// <summary> /// 添加后台系统任务 /// </summary> /// <param name="obj"></param> /// <param name="e"></param> public static void SysBackgroundTaskAdd(object obj, EventArgs e) { if (WebConfigHelper.GetAppSettingValue("IsRunBgTask") == "true") { try { #region 重建索引 //重建索引任务 BackgroundTask reBuildIndexTask = new BackgroundTask((args) => { if (DateTime.Now.Hour == 4 && DateTime.Now.Minute == 0) { SystemOperate.RebuildAllTableIndex(); } return(true); }, null, false, 45, false); AutoProcessTask.AddTask(reBuildIndexTask); #endregion #region 迁移历史审批数据 //审批完成后的数据迁移到待办历史数据表中,针对审批是迁移失败的处理 BackgroundTask todoStatusHandleTask = new BackgroundTask((args) => { if ((DateTime.Now.Hour == 3 && DateTime.Now.Minute == 0) || (DateTime.Now.Hour == 12 && DateTime.Now.Minute == 40)) { //审批完成数据迁移异常处理 try { string errMsg = string.Empty; int refuseStatus = (int)WorkFlowStatusEnum.Refused; int overStatus = (int)WorkFlowStatusEnum.Over; int obsoStatus = (int)WorkFlowStatusEnum.Obsoleted; List <Bpm_WorkFlowInstance> flowInsts = CommonOperate.GetEntities <Bpm_WorkFlowInstance>(out errMsg, x => x.Status == refuseStatus || x.Status == overStatus || x.Status == obsoStatus, null, false); if (flowInsts != null && flowInsts.Count > 0) { foreach (Bpm_WorkFlowInstance flowInst in flowInsts) { BpmOperate.TransferWorkToDoHistory(flowInst, null); } } } catch { } } return(true); }, null, false, 45, false); AutoProcessTask.AddTask(todoStatusHandleTask); #endregion #region 附件在线预览生成 BackgroundTask attachOnlineViewHandleTask = new BackgroundTask((args) => { if (DateTime.Now.Hour == 4 && DateTime.Now.Minute == 0) { string attachWeb = WebConfigHelper.GetAppSettingValue("AttachmentWeb"); if (!string.IsNullOrEmpty(attachWeb)) { if (!attachWeb.EndsWith("/")) { attachWeb += "/"; } string apiUrl = attachWeb + "api/AnnexApi/ExecCreateSwfTask.html"; DataMutual dataMutal = new DataMutual(apiUrl); dataMutal.Start(null); } } return(true); }, null, false, 45, false); AutoProcessTask.AddTask(attachOnlineViewHandleTask); #endregion #region 基于DB的失效分布式锁释放 BackgroundTask dbLockReleaseHandleTask = new BackgroundTask((args) => { if (WebConfigHelper.GetAppSettingValue("EnabledDistributeLock") == "true") //启用分布式锁 { string errMsg = string.Empty; double nowTimesamp = Globals.GetTimestamp(DateTime.Now);//当前时间戳 CommonOperate.DeleteRecordsByExpression <Other_DistributedLock>(x => x.Invalid_Timesamp < nowTimesamp, out errMsg); } return(true); }, null, false, 60, false); AutoProcessTask.AddTask(dbLockReleaseHandleTask); #endregion } catch { } } try { InitFactory factory = InitFactory.GetInstance(); if (factory != null) { factory.AddBackgroundTask(); } } catch { } }