Example #1
0
        /// <summary>
        /// 任务设置终止状态
        /// </summary>
        /// <param name="taskId"></param>
        /// <param name="runner"></param>
        internal void End(string taskId, WfAppRunner runner)
        {
            WfTask task = _dataAccessor.Get <WfTask>(taskId, false);

            if (task != null)
            {
                task.TaskState    = WfTaskState.Ended;
                task.ApproveState = WfApproveState.None;
                task.ExecuteTime  = DateTimeUtils.CurrentDateTimeStr;
                task.UpdateBy     = runner.UserId;
                task.UpdateName   = runner.UserName;
                task.Suggestion   = runner.Comment;
                task.UpdateDate   = DateTimeUtils.CurrentDateTimeStr;
                Update(task);
            }
        }
Example #2
0
        /// <summary>
        /// 读取任务,设置任务为待处理状态
        /// </summary>
        /// <param name="taskID"></param>
        /// <param name="userID"></param>
        /// <param name="userName"></param>
        internal void SetNextTaskHandling(string activityInsUid, int seq)
        {
            DynamicParameters param = new DynamicParameters();

            param.Add("ActivityInsUid", activityInsUid);
            param.Add("Seq", seq);
            WfTask wfTask = _dataAccessor.QueryFirstOrDefaultWhere <WfTask>("ActivityInsUid=@ActivityInsUid and ApproverSort=@Seq", param, false);

            if (wfTask != null)
            {
                wfTask.TaskState = WfTaskState.Handling;
                _dataAccessor.Update <WfTask>(wfTask);
                var activityIns = _dataAccessor.Get <WfActivityInstance>(activityInsUid);
                SendMessage(activityIns, wfTask);
            }
        }
Example #3
0
        /// <summary>
        /// 更新单据表(完成时)
        /// </summary>
        /// <param name="billTableName"></param>
        /// <param name="billId"></param>
        internal void UpdateBillDataWhenComplete(string billTableName, string billId)
        {
            FapTable table = DbSession.Table(billTableName);

            if (table == null || string.IsNullOrWhiteSpace(table.TableFeature))
            {
                return;
            }

            if (("," + table.TableFeature + ",").IndexOf(",BillFeature,") >= 0)
            {
                //单据数据
                dynamic billData = DbSession.Get(billTableName, billId);
                if (billData == null)
                {
                    return;
                }

                DynamicParameters parameters = new DynamicParameters();
                parameters.Add("ProcessId", ProcessId);
                //WfProcessInstance process = DbSession.QueryFirstOrDefaultEntityByWhere<WfProcessInstance>("Fid=@ProcessId", parameters);
                //WfTask task = DbSession.QueryFirstOrDefaultEntityBySql<WfTask>("select top 1 * from WfTask where ProcessId=@ProcessId order by Fid desc", parameters);
                //WfTaskAdvice taskAdvice = DbSession.QueryFirstOrDefaultEntityBySql<WfTaskAdvice>("select top 1 * from WfTaskAdvice where TaskId='" + task.Fid + "' order by Fid desc");
                WfProcessInstance process = DbSession.Get <WfProcessInstance>(ProcessId);
                WfTask            task    = DbSession.Get <WfTask>(TaskId);
                //更新单据的字段数据
                billData.CurrApprover     = task.ExecutorEmpUid;
                billData.ApprovalTime     = task.ExecuteTime;
                billData.ApprovalComments = task.Suggestion;
                if (task.ApproveState == WfApproveState.Agree)
                {
                    billData.BillStatus = BillStatus.PASSED; //同意
                }
                else if (task.ApproveState == WfApproveState.Disagree)
                {
                    billData.BillStatus = BillStatus.REJECTED; //不同意
                }

                billData.EffectiveState = 0;
                //billData.EffectiveTime = PublicUtils.GetSysDateTimeStr();

                DbSession.UpdateDynamicData(billData);
            }
        }
Example #4
0
        /// <summary>
        /// 插入任务数据(创建任务)
        /// </summary>
        /// <param name="activity"></param>
        /// <param name="performerID"></param>
        /// <param name="performerName"></param>
        /// <param name="runnerID"></param>
        /// <param name="runnerName"></param>
        private void Insert(WfActivityInstance activityIns,
                            string performerID,
                            string performerName,
                            int sort,
                            string taskState = "Handling",
                            bool isSignTask  = false)
        {
            WfTask task = new WfTask();

            task.AppName          = activityIns.AppName;
            task.BillUid          = activityIns.BillUid;
            task.TaskName         = string.Format("{0}-{1}", activityIns.AppName, activityIns.NodeName);
            task.ActivityInsUid   = activityIns.Fid;
            task.ProcessUid       = activityIns.ProcessUid;
            task.ProcessInsUid    = activityIns.ProcessInsUid;
            task.NodeId           = activityIns.NodeId;
            task.NodeName         = activityIns.NodeName;
            task.TaskType         = WfTaskType.Manual;
            task.TaskActivityType = activityIns.ActivityType;
            task.ExecutorEmpUid   = performerID;
            task.ExecutorEmpName  = performerName;
            if ((activityIns.ActivityType == WfActivityType.TaskNode || activityIns.ActivityType == WfActivityType.TimerNode) && activityIns.ApproverMethod == ApproverMethodEnum.Queue.ToString() && sort > 1)
            {
                //当节点为普通节点审批方式为顺序完成的时候,第二个审批人需要等待
                taskState = WfTaskState.Waiting;
            }
            task.TaskState     = taskState; //1-办理状态
            task.TaskStartTime = DateTimeUtils.CurrentDateTimeStr;
            task.ApproverSort  = sort;
            task.RecordState   = 1;
            task.BusinessUid   = activityIns.BusinessUid;
            //task.BizName = activityInstance.BizName;
            task.AppEmpUid    = activityIns.AppEmpUid;
            task.AppStartTime = activityIns.AppStartTime;
            task.ProcessState = activityIns.ProcessState;
            task.IsSignTask   = isSignTask ? 1 : 0;
            //插入任务数据
            Insert(task);

            if (task.TaskState == WfTaskState.Handling)
            {
                SendMessage(activityIns, task);
            }
        }
Example #5
0
        /// <summary>
        /// 设置任务完成
        /// </summary>
        /// <param name="taskID">任务ID</param>
        /// <param name="runner"></param>
        /// <param name="wfLinqDataContext"></param>
        internal void Complete(string taskID,
                               WfAppRunner runner)
        {
            //完成任务
            WfTask task = GetTask(taskID);

            task.TaskState    = WfTaskState.Completed;
            task.TaskEndTime  = DateTimeUtils.CurrentDateTimeStr;
            task.ExecuteTime  = DateTimeUtils.CurrentDateTimeStr;
            task.ApproveState = runner.ApproveState;
            task.Suggestion   = runner.Comment;
            if (task.ExecutorEmpUid != runner.UserId)
            {
                //代理人审批
                task.AgentEmpUid  = runner.UserId;
                task.AgentEmpName = runner.UserName;
            }
            Update(task);

            //回写单据审批人
            WriteBackBill(task);
        }
Example #6
0
        internal void SetTaskState(string taskId,
                                   WfAppRunner runner,
                                   string taskState)
        {
            WfTask task = _dataAccessor.Get <WfTask>(taskId, false);

            if (task != null)
            {
                task.TaskState = taskState;
                if (task.TaskState == WfTaskState.Rejected ||
                    task.TaskState == WfTaskState.Revoked ||
                    task.TaskState == WfTaskState.Backed)
                {
                    task.ApproveState = WfApproveState.Disagree;
                }
                task.UpdateBy   = runner.UserId;
                task.UpdateName = runner.UserName;
                task.Suggestion = runner.Comment;
                task.UpdateDate = DateTimeUtils.CurrentDateTimeStr;
                Update(task);
            }
        }
Example #7
0
        internal void SetTaskState(string taskId,
                                   string userID,
                                   string userName,
                                   string taskState)
        {
            WfTask task = _dataAccessor.Get <WfTask>(taskId, false);

            if (task != null)
            {
                task.TaskState = taskState;
                if (task.TaskState == WfTaskState.Rejected ||
                    task.TaskState == WfTaskState.Revoked ||
                    task.TaskState == WfTaskState.Backed)
                {
                    task.ApproveState = WfApproveState.Disagree;
                }
                task.UpdateBy   = userID;
                task.UpdateName = userName;
                task.UpdateDate = DateTimeUtils.CurrentDateTimeStr;
                Update(task);
            }
        }
Example #8
0
        /// <summary>
        /// 完成任务实例
        /// </summary>
        /// <param name="taskView">任务视图</param>
        /// <param name="activityResource">活动资源</param>
        /// <param name="session">会话</param>
        internal bool CompleteWorkItem(WfTask taskView,
                                       WfAppRunner runner)
        {
            bool canContinueForwardCurrentNode = true;



            //流程强制拉取向前跳转时,没有运行人的任务实例
            if (taskView != null)
            {
                //完成本任务,返回任务已经转移到下一个会签任务,不继续执行其它节点
                base.TaskManager.Complete(taskView.Fid, runner);
            }
            //检查活动实例是否可以完成
            if (base.ActivityInstanceManager.IsComplete(base.Linker.FromActivityInstance.Fid))
            {
                //设置活动节点的状态为完成状态
                base.ActivityInstanceManager.Complete(base.Linker.FromActivityInstance.Fid, runner);

                base.Linker.FromActivityInstance.ActivityState = ActivityStateEnum.Completed.ToString();
            }
            else
            {
                canContinueForwardCurrentNode = false;
                //设置同一任务实例的下一个wftask
                if (base.Linker.FromActivityInstance.ActivityType != WfActivityType.SignNode && base.Linker.FromActivityInstance.ApproverMethod == ApproverMethodEnum.Queue.ToString())
                {
                    base.TaskManager.SetNextTaskHandling(taskView.ActivityInsUid, taskView.ApproverSort + 1);
                }
                //设置活动节点实例状态为运行态
                base.Linker.FromActivityInstance.ActivityState = ActivityStateEnum.Running.ToString();
                base.ActivityInstanceManager.Update(base.Linker.FromActivityInstance);
            }

            return(canContinueForwardCurrentNode);
        }
Example #9
0
        public bool AssignAgentTask(string taskId, WfAppRunner runner)
        {
            TaskManager tim  = new TaskManager(_dataAccessor, _loggerFactory);
            WfTask      task = tim.GetTask(taskId);

            if (task == null)
            {
                throw new FapException("任务不存在");
            }
            Performer agent = runner.Agents[0];

            TaskAdviceManager tam = new TaskAdviceManager(_dataAccessor, _applicationContext, _loggerFactory);

            tam.RecordWhenAssignAgentTask(runner.ProcessUid, runner.CurrNodeId, runner.Comment, agent.UserId, agent.UserName);

            task.AgentEmpUid  = agent.UserId;
            task.AgentEmpName = agent.UserName;
            task.UpdateBy     = runner.UserId;
            task.UpdateName   = runner.UserName;
            task.UpdateDate   = DateTimeUtils.CurrentDateTimeStr;
            tim.Update(task);

            return(true);
        }
Example #10
0
 /// <summary>
 /// 插入任务数据
 /// </summary>
 /// <param name="entity">任务实体</param>
 /// <param name="wfLinqDataContext">linq上下文</param>
 internal void Insert(WfTask entity)
 {
     _dataAccessor.Insert <WfTask>(entity);
 }
Example #11
0
 /// <summary>
 /// 更新任务数据
 /// </summary>
 /// <param name="entity"></param>
 /// <param name="wfLinqDataContext"></param>
 internal void Update(WfTask entity)
 {
     _dataAccessor.Update <WfTask>(entity);
 }
Example #12
0
        private void SendMessage(WfActivityInstance activityIns, WfTask task)
        {
            MessageManager msgManager = new MessageManager(_dataAccessor, _loggerFactory);

            msgManager.SendMessageWhenProcessing(activityIns, task);
        }
Example #13
0
        /// <summary>
        /// 更新单据表(处理中)
        /// </summary>
        /// <param name="billTableName"></param>
        /// <param name="billId"></param>
        internal void UpdateBillDataWhenProcessing(string billTableName, string billId)
        {
            FapTable table = DbSession.Table(billTableName);

            if (table == null || string.IsNullOrWhiteSpace(table.TableFeature))
            {
                return;
            }

            if (("," + table.TableFeature + ",").IndexOf(",BillFeature,") >= 0)
            {
                //单据数据
                dynamic billData = DbSession.Get(billTableName, billId);
                if (billData == null)
                {
                    return;
                }

                DynamicParameters parameters = new DynamicParameters();
                parameters.Add("ProcessId", ProcessId);
                //WfProcessInstance process = DbSession.QueryFirstOrDefaultEntityByWhere<WfProcessInstance>("Fid=@ProcessId", parameters);
                //WfTask task = DbSession.QueryFirstOrDefaultEntityBySql<WfTask>("select * from WfTask where ProcessId=@ProcessId order by Fid desc", parameters);
                //WfTask task = DbSession.QueryFirstOrDefaultEntityByWhere<WfTask>("ProcessId=@ProcessId",parameters,"Id desc");
                //order by  查不到事务中的数据
                //WfTaskAdvice taskAdvice = DbSession.QueryFirstOrDefaultEntityBySql<WfTaskAdvice>("select * from WfTaskAdvice where TaskId='" + task.Fid + "' order by Fid desc");
                WfProcessInstance process = DbSession.Get <WfProcessInstance>(ProcessId);
                //WfTask task = DbSession.Get<WfTask>(TaskId);
                IEnumerable <WfTask> tasks = DbSession.QueryWhere <WfTask>(" ProcessId=@ProcessId and TaskState='Handling'", parameters);

                WfTask task = tasks.FirstOrDefault();
                if (task == null)
                {
                    throw new Exception("不存在新任务");
                }
                //更新单据的字段数据
                if (process.ProcessState == WfProcessInstanceState.Running)
                {
                    billData.BillStatus       = BillStatus.PROCESSING;
                    billData.CurrApprover     = task.ExecutorEmpUid;
                    billData.ApprovalTime     = PublicUtils.CurrentDateTimeStr; //task.ExecuteTime;
                    billData.ApprovalComments = task.Suggestion;
                    DbSession.UpdateDynamicData(billData);
                }
                else if (process.ProcessState == WfProcessInstanceState.Canceled)
                {
                    billData.BillStatus       = BillStatus.CANCELED;
                    billData.CurrApprover     = task.ExecutorEmpUid;
                    billData.ApprovalTime     = PublicUtils.CurrentDateTimeStr;// task.ExecuteTime;
                    billData.ApprovalComments = task.Suggestion;
                    DbSession.UpdateDynamicData(billData);
                }
                else if (process.ProcessState == WfProcessInstanceState.Deleted)
                {
                    billData.BillStatus       = BillStatus.CLOSED;
                    billData.CurrApprover     = task.ExecutorEmpUid;
                    billData.ApprovalTime     = PublicUtils.CurrentDateTimeStr;// task.ExecuteTime;
                    billData.ApprovalComments = task.Suggestion;
                    DbSession.UpdateDynamicData(billData);
                }
                else if (process.ProcessState == WfProcessInstanceState.Ended)
                {
                    billData.BillStatus       = BillStatus.CLOSED;
                    billData.CurrApprover     = task.ExecutorEmpUid;
                    billData.ApprovalTime     = PublicUtils.CurrentDateTimeStr;// task.ExecuteTime;
                    billData.ApprovalComments = task.Suggestion;
                    DbSession.UpdateDynamicData(billData);
                }
                else if (process.ProcessState == WfProcessInstanceState.Suspended)
                {
                    billData.BillStatus       = BillStatus.SUSPENDED;
                    billData.CurrApprover     = task.ExecutorEmpUid;
                    billData.ApprovalTime     = PublicUtils.CurrentDateTimeStr;// task.ExecuteTime;
                    billData.ApprovalComments = task.Suggestion;
                    DbSession.UpdateDynamicData(billData);
                }
                else if (process.ProcessState == WfProcessInstanceState.Withdrawed)
                {
                    billData.BillStatus       = BillStatus.WITHDRAWED;
                    billData.CurrApprover     = task.ExecutorEmpUid;
                    billData.ApprovalTime     = PublicUtils.CurrentDateTimeStr;// task.ExecuteTime;
                    billData.ApprovalComments = task.Suggestion;
                    DbSession.UpdateDynamicData(billData);
                }
                else if (process.ProcessState == WfProcessInstanceState.Revoked)
                {
                    billData.BillStatus       = BillStatus.REVOKED;
                    billData.CurrApprover     = task.ExecutorEmpUid;
                    billData.ApprovalTime     = PublicUtils.CurrentDateTimeStr;// task.ExecuteTime;
                    billData.ApprovalComments = task.Suggestion;
                    DbSession.UpdateDynamicData(billData);
                }
            }
        }
Example #14
0
        /// <summary>
        /// 查看审批单
        /// </summary>
        /// <param name="BillUid"></param>
        /// <param name="BusinessUid"></param>
        /// <returns></returns>
        public IActionResult ApprovalViewBill(string billUid, string businessUid)
        {
            DynamicParameters param = new DynamicParameters();

            param.Add("BillUid", billUid);
            param.Add("BusinessUid", businessUid);
            string sql = $"select * from WfTask where  (ExecutorEmpUid='{_applicationContext.EmpUid}' or AgentEmpUid='{_applicationContext.EmpUid}') and BusinessUid=@BusinessUid and BillUid=@BillUid and TaskState in('Completed','Revoked')";

            WfTask wfTask = _dbContext.QueryFirstOrDefault <WfTask>(sql, param);

            if (wfTask == null)
            {
                return(Content("没有找到审批数据"));
            }
            string activityInsUid = wfTask.ActivityInsUid;
            //获取表单类型 以及模板,字段权限
            WfProcess          wfProcess          = _dbContext.Get <WfProcess>(wfTask.ProcessUid);
            WfActivityInstance wfActivityInstance = _dbContext.Get <WfActivityInstance>(activityInsUid);

            //表单模板
            ViewBag.FormTemplate = wfActivityInstance.FormTemplate;
            //表单表
            string tn = wfProcess.BillTable;

            ViewBag.Process   = wfProcess;
            ViewBag.FormPower = wfActivityInstance.FormPower;
            //权限字段解析
            int needEdit = 0;//存在需要编辑字段,审批的时候首先要保存

            if (wfActivityInstance.FormPower.IsPresent())
            {
                IList <FieldEntity> powers = JsonConvert.DeserializeObject <IList <FieldEntity> >(wfActivityInstance.FormPower);
                if (powers != null && powers.Any())
                {
                    var allColumns = _dbContext.Columns(tn);
                    foreach (var field in powers)
                    {
                        string colName = field.FieldName;
                        var    column  = allColumns.FirstOrDefault(col => col.ColName == colName);
                        if (column != null && column.CtrlType == FapColumn.CTRL_TYPE_REFERENCE)
                        {
                            field.FieldName += "MC";
                        }
                        field.FieldNameMC = column.ColComment;
                        if (field.Property == Fap.Workflow.Engine.Enums.FieldPropertyEnum.Editable)
                        {
                            needEdit = 1;
                        }
                    }
                    ViewBag.FormPower = powers.ToJsonIgnoreNullValue();
                }
            }
            else
            {
                ViewBag.FormPower = "undefined";
            }
            //是否编辑表单
            ViewBag.IsEdit = needEdit;
            //审批任务
            ViewBag.WfTask = wfTask;
            FormViewModel model = this.GetFormViewModel(tn, "frm-" + tn, billUid);

            model.FormStatus = AspNetCore.Controls.DataForm.FormStatus.View;
            return(View(model));
        }
Example #15
0
        /// <summary>
        /// 审批单
        /// </summary>
        /// <param name="BillUid"></param>
        /// <param name="BusinessUid"></param>
        /// <param name="agent"></param>
        /// <returns></returns>
        public IActionResult ApprovalBill(string billUid, string businessUid, int agent = 0)
        {
            DynamicParameters param = new DynamicParameters();

            param.Add("BillUid", billUid);
            param.Add("BusinessUid", businessUid);
            string sql = string.Empty;

            if (agent == 1)
            {
                //获取代理人
                var agents = _dbContext.QueryAll <WfAgentSetting>().Where(a => a.Agent == _applicationContext.EmpUid && a.State == 1);// _dbContext.QueryWhere<WfAgentSetting>($" Agent='{_applicationContext.EmpUid}' and [State]=1");
                if (agents.Any())
                {
                    sql = $"select WfTask.* from WfTask,WfActivityInstance where WfTask.ActivityInsUid=WfActivityInstance.Fid and  WfActivityInstance.ActivityState in('{WfActivityInstanceState.Running}','{WfActivityInstanceState.Ready}') and WfTask.ExecutorEmpUid in @Agent and WfTask.BusinessUid=@BusinessUid and WfTask.BillUid=@BillUid and WfTask.TaskState='Handling'";
                    param.Add("Agent", agents.Select(a => a.Principal));
                }
                else
                {
                    sql = $"select WfTask.* from WfTask where 1=2";
                }
            }
            else
            {
                sql = $"select WfTask.* from WfTask,WfActivityInstance where WfTask.ActivityInsUid=WfActivityInstance.Fid and  WfActivityInstance.ActivityState in('{WfActivityInstanceState.Running}','{WfActivityInstanceState.Ready}') and WfTask.ExecutorEmpUid='{_applicationContext.EmpUid}' and WfTask.BusinessUid=@BusinessUid and WfTask.BillUid=@BillUid and WfTask.TaskState='Handling'";
            }
            WfTask wfTask = _dbContext.QueryFirstOrDefault <WfTask>(sql, param);

            if (wfTask == null)
            {
                return(Content("没有找到要审批的任务"));
            }
            string activityInsUid = wfTask.ActivityInsUid;
            //获取表单类型 以及模板,字段权限
            WfProcess          wfProcess          = _dbContext.Get <WfProcess>(wfTask.ProcessUid);
            WfActivityInstance wfActivityInstance = _dbContext.Get <WfActivityInstance>(activityInsUid);

            //表单模板
            ViewBag.FormTemplate = wfActivityInstance.FormTemplate;
            //表单表
            string tn = wfProcess.BillTable;

            ViewBag.Process   = wfProcess;
            ViewBag.FormPower = wfActivityInstance.FormPower;
            //权限字段解析
            int needEdit = 0;//存在需要编辑字段,审批的时候首先要保存

            if (wfActivityInstance.FormPower.IsPresent())
            {
                IList <FieldEntity> powers = JsonConvert.DeserializeObject <IList <FieldEntity> >(wfActivityInstance.FormPower);
                if (powers != null && powers.Any())
                {
                    var allColumns = _dbContext.Columns(tn);
                    foreach (var field in powers)
                    {
                        string colName = field.FieldName;
                        var    column  = allColumns.FirstOrDefault(col => col.ColName == colName);
                        if (column != null && column.CtrlType == FapColumn.CTRL_TYPE_REFERENCE)
                        {
                            field.FieldName += "MC";
                        }
                        field.FieldNameMC = column.ColComment;
                        if (field.Property == Fap.Workflow.Engine.Enums.FieldPropertyEnum.Editable)
                        {
                            needEdit = 1;
                        }
                    }
                    ViewBag.FormPower = powers.ToJsonIgnoreNullValue();
                }
            }
            else
            {
                ViewBag.FormPower = "undefined";
            }
            //是否编辑表单
            ViewBag.IsEdit = needEdit;
            //审批任务
            ViewBag.WfTask = wfTask;
            FormViewModel model = this.GetFormViewModel(tn, "frm-" + tn, billUid);

            return(View(model));
        }
Example #16
0
 /// <summary>
 /// 创建任务执行上下文对象
 /// </summary>
 /// <param name="task"></param>
 /// <param name="processModel"></param>
 /// <param name="activityResource"></param>
 /// <returns></returns>
 internal static ActivityForwardContext CreateRunningContext(WfTask task,
                                                             IProcessModel processModel, WfProcessInstance processInstance, WfActivityInstance fromActivityInstance)
 {
     return(new ActivityForwardContext(task, processModel, processInstance, fromActivityInstance));
 }
Example #17
0
        /// <summary>
        /// 流程执行过程中,发送消息
        /// </summary>
        /// <param name="activityIns">活动实例</param>
        /// <param name="wfTask">任务</param>
        public void SendMessageWhenProcessing(WfActivityInstance activityIns, WfTask wfTask)
        {
            //$"{{'approver':1,'applicant':1,'mail':1,'message':1}";
            string messageSetting = activityIns.MessageSetting;
            bool noticeApplicant = false;//通知申请人
            bool noticeApprover = false;//通知审批人
            bool sendMessage = false;//发消息
            bool sendMail = false;//发邮件
            if (messageSetting.IsPresent())
            {
                var jmset = JObject.Parse(messageSetting);
                noticeApplicant = jmset.GetValue("applicant").ToBool();
                noticeApprover = jmset.GetValue("approver").ToBool();
                sendMail = jmset.GetValue("mail").ToBool();
                sendMessage = jmset.GetValue("message").ToBool();
            }
            //通知申请人
            if (noticeApplicant && activityIns.AppEmpUid.IsPresent())
            {
                Employee employee = _dataAccessor.Get<Employee>(activityIns.AppEmpUid);
                if (employee == null)
                {
                    return;
                }
                if (sendMail)
                {
                    string title = $"您的{activityIns.AppName}已经审批到[{wfTask.ExecutorEmpName}],请知晓。";
                    string content = title + "详情请登录系统查看。";
                    SendMailToAssignee(title, employee.EmpName, $"{employee.EmpName}<{employee.Mailbox}>", content);

                }
                if (sendMessage)
                {
                    SendInmsgToAssignee(employee.Fid, $"您的{activityIns.AppName}已经审批到[{wfTask.ExecutorEmpName}],请知晓。");
                }
            }
            //通知审批人
            if (noticeApprover && wfTask.ExecutorEmpUid.IsPresent())
            {
                Employee employee = _dataAccessor.Get<Employee>(wfTask.ExecutorEmpUid);
                if (employee == null)
                {
                    return;
                }
                if (sendMail)
                {
                    var biz = _dataAccessor.Get<WfBusiness>(activityIns.BusinessUid, false);
                    string title = $"有一份\"{activityIns.AppName}\"的待处理任务需要您处理!";
                    string where = "TableName='" + biz.BillEntity + "' and Enabled=1 and ModuleUid='BillMailTmpl'";
                    var emailTemplates = _dataAccessor.QueryWhere<CfgEmailTemplate>(where, null, false);
                    //流程中通知业务处理人模板
                    CfgEmailTemplate emailTemplate = emailTemplates.Where(t => t.Code == "NoticeApprover").FirstOrDefault();
                    string content = string.Empty;
                    if (emailTemplate != null)
                    {
                        var process = _dataAccessor.Get<WfProcessInstance>(activityIns.ProcessInsUid, true);

                        //内容
                        content = emailTemplate.TemplateContent;

                        content = BuildeMessageContent(process, content);

                        if (content.Contains("${业务处理时间}"))
                        {
                            content = content.Replace("${业务处理时间}", activityIns.StartTime);
                        }

                        if (content.Contains("${业务流程状态}"))
                        {
                            content = content.Replace("${业务流程状态}", process.ProcessStateMC);
                        }

                        if (content.Contains("${业务审批结论}"))
                        {
                            content = content.Replace("${业务审批结论}", "");
                        }

                        if (content.Contains("${业务审批意见}"))
                        {
                            content = content.Replace("${业务审批意见}", "");
                        }
                        if (content.Contains("${业务处理人}"))
                        {
                            content = content.Replace("${业务处理人}", "");
                        }
                    }
                    else
                    {
                        content = $"有一份\"{activityIns.AppName}\"的待处理任务需要您处理!请登录系统操作。";
                    }
                    SendMailToAssignee(title, employee.EmpName, $"{employee.EmpName}<{employee.Mailbox}>", content);
                }
                if (sendMessage)
                {
                    string content = $"有一份\"{activityIns.AppName}\"的待处理任务需要您处理!";
                    SendInmsgToAssignee(employee.Fid, content);
                }
            }
        }