Ejemplo n.º 1
0
        /// <summary>
        /// 存储工作流实例进程(审核驳回重新提交)
        /// </summary>
        /// <param name="processInstanceEntity"></param>
        /// <param name="processSchemeEntity"></param>
        /// <param name="processOperationHistoryEntity"></param>
        /// <param name="processTransitionHistoryEntity"></param>
        /// <returns></returns>
        public int SaveProcess(WFProcessInstance processInstanceEntity, WFProcessScheme processSchemeEntity,
                               WFProcessOperationHistory processOperationHistoryEntity, WFProcessTransitionHistory processTransitionHistoryEntity = null)
        {
            try
            {
                processInstanceEntity.Modify(processInstanceEntity.Id);
                _unitWork.Update(processSchemeEntity);
                _unitWork.Update(processInstanceEntity);

                processOperationHistoryEntity.ProcessId = processInstanceEntity.Id;
                _unitWork.Add(processOperationHistoryEntity);

                if (processTransitionHistoryEntity != null)
                {
                    processTransitionHistoryEntity.ProcessId = processInstanceEntity.Id;
                    _unitWork.Add(processTransitionHistoryEntity);
                }

                _unitWork.Save();
                return(1);
            }
            catch
            {
                throw;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 存储工作流实例进程(创建实例进程)
        /// </summary>
        /// <param name="wfRuntimeModel"></param>
        /// <param name="processInstanceEntity"></param>
        /// <param name="processSchemeEntity"></param>
        /// <param name="processOperationHistoryEntity"></param>
        /// <param name="delegateRecordEntity"></param>
        /// <returns></returns>
        public int SaveProcess(WF_RuntimeModel wfRuntimeModel, WFProcessInstance processInstanceEntity, WFProcessScheme processSchemeEntity, WFProcessOperationHistory processOperationHistoryEntity, WFProcessTransitionHistory processTransitionHistoryEntity)
        {
            try
            {
                if (Guid.Empty == (processInstanceEntity.Id))
                {
                    processSchemeEntity.Create();
                    _unitWork.Add(processSchemeEntity);

                    processInstanceEntity.Create();
                    processInstanceEntity.Id = Guid.Parse(wfRuntimeModel.processId);
                    processInstanceEntity.ProcessSchemeId = processSchemeEntity.Id;
                    _unitWork.Add(processInstanceEntity);
                }
                else
                {
                    processInstanceEntity.Modify(processInstanceEntity.Id);
                    _unitWork.Update(processSchemeEntity);
                    _unitWork.Update(processInstanceEntity);
                }
                processOperationHistoryEntity.ProcessId = processInstanceEntity.Id;
                _unitWork.Add(processOperationHistoryEntity);

                if (processTransitionHistoryEntity != null)
                {
                    processTransitionHistoryEntity.ProcessId = processInstanceEntity.Id;
                    _unitWork.Add(processTransitionHistoryEntity);
                }

                _unitWork.Save();
                return(1);
            }
            catch
            {
                throw;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 驳回
        /// </summary>
        /// <param name="processId"></param>
        /// <param name="nodeId"></param>
        /// <param name="description"></param>
        /// <returns></returns>
        public bool NodeReject(Guid processId, string nodeId, string description = "")
        {
            try
            {
                WFProcessInstance          WFProcessInstance              = GetEntity(processId);
                WFProcessScheme            WFProcessScheme                = _unitWork.FindSingle <WFProcessScheme>(u => u.Id == WFProcessInstance.ProcessSchemeId);
                WFProcessOperationHistory  WFProcessOperationHistory      = new WFProcessOperationHistory();
                WFProcessTransitionHistory processTransitionHistoryEntity = null;
                dynamic             schemeContentJson  = WFProcessScheme.SchemeContent.ToJson();//获取工作流模板内容的json对象;
                WF_RuntimeInitModel wfRuntimeInitModel = new WF_RuntimeInitModel()
                {
                    schemeContent = schemeContentJson.SchemeContent.Value,
                    currentNodeId = WFProcessInstance.ActivityId,
                    frmData       = schemeContentJson.frmData.Value,
                    previousId    = WFProcessInstance.PreviousId,
                    processId     = processId
                };
                IWF_Runtime wfruntime = new WF_Runtime(wfRuntimeInitModel);


                string resnode = "";
                if (nodeId == "")
                {
                    resnode = wfruntime.RejectNode();
                }
                else
                {
                    resnode = nodeId;
                }
                wfruntime.MakeTagNode(wfruntime.runtimeModel.currentNodeId, 0, AuthUtil.GetUserName(), description);
                WFProcessInstance.IsFinish = 4;//4表示驳回(需要申请者重新提交表单)
                if (resnode != "")
                {
                    WFProcessInstance.PreviousId   = WFProcessInstance.ActivityId;
                    WFProcessInstance.ActivityId   = resnode;
                    WFProcessInstance.ActivityType = wfruntime.GetNodeStatus(resnode);                                                           //-1无法运行,0会签开始,1会签结束,2一般节点,4流程运行结束
                    WFProcessInstance.ActivityName = wfruntime.runtimeModel.nodeDictionary[resnode].name;
                    WFProcessInstance.MakerList    = GetMakerList(wfruntime.runtimeModel.nodeDictionary[resnode], WFProcessInstance.PreviousId); //当前节点可执行的人信息
                    #region 流转记录
                    processTransitionHistoryEntity                = new WFProcessTransitionHistory();
                    processTransitionHistoryEntity.FromNodeId     = wfruntime.runtimeModel.currentNodeId;
                    processTransitionHistoryEntity.FromNodeName   = wfruntime.runtimeModel.currentNode.name.Value;
                    processTransitionHistoryEntity.FromNodeType   = wfruntime.runtimeModel.currentNodeType;
                    processTransitionHistoryEntity.ToNodeId       = wfruntime.runtimeModel.nextNodeId;
                    processTransitionHistoryEntity.ToNodeName     = wfruntime.runtimeModel.nextNode.name.Value;
                    processTransitionHistoryEntity.ToNodeType     = wfruntime.runtimeModel.nextNodeType;
                    processTransitionHistoryEntity.TransitionSate = 1;//
                    processTransitionHistoryEntity.IsFinish       = (processTransitionHistoryEntity.ToNodeType == 4 ? 1 : 0);
                    #endregion
                }
                var data = new
                {
                    SchemeContent = wfruntime.runtimeModel.schemeContentJson.ToString(),
                    frmData       = (WFProcessInstance.FrmType == 0 ? wfruntime.runtimeModel.frmData : null)
                };
                WFProcessScheme.SchemeContent     = data.ToJson().ToString();
                WFProcessOperationHistory.Content = "【" + "todo name" + "】【" + wfruntime.runtimeModel.currentNode.name + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "】驳回,备注:" + description;

                SaveProcess(WFProcessInstance, WFProcessScheme, WFProcessOperationHistory, processTransitionHistoryEntity);
                return(true);
            }
            catch
            {
                throw;
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 存储工作流实例进程(编辑草稿用)
        /// </summary>
        /// <param name="processInstanceEntity"></param>
        /// <param name="processSchemeEntity"></param>
        /// <param name="wfOperationHistoryEntity"></param>
        /// <returns></returns>
        public int SaveProcess(Guid processId, WFProcessInstance processInstanceEntity, WFProcessScheme processSchemeEntity, WFProcessOperationHistory wfOperationHistoryEntity = null)
        {
            try
            {
                if (Guid.Empty == (processInstanceEntity.Id))
                {
                    _unitWork.Add(processSchemeEntity);

                    processInstanceEntity.Create();
                    processInstanceEntity.Id = processId;
                    processInstanceEntity.ProcessSchemeId = processSchemeEntity.Id;
                    _unitWork.Add(processInstanceEntity);
                }
                else
                {
                    processInstanceEntity.Modify(processId);
                    _unitWork.Update(processInstanceEntity);

                    processSchemeEntity.Modify(processInstanceEntity.ProcessSchemeId);
                    _unitWork.Update(processSchemeEntity);
                }
                if (wfOperationHistoryEntity != null)
                {
                    wfOperationHistoryEntity.ProcessId = processId;
                    _unitWork.Add(wfOperationHistoryEntity);
                }
                _unitWork.Save();
                return(1);
            }
            catch
            {
                throw;
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 节点审核
        /// </summary>
        /// <param name="processId"></param>
        /// <returns></returns>
        public bool NodeVerification(Guid processId, bool flag, string description = "")
        {
            bool _res = false;

            try
            {
                string                     _sqlstr = "", _dbbaseId = "";
                WFProcessInstance          WFProcessInstance              = GetEntity(processId);
                WFProcessScheme            WFProcessScheme                = _unitWork.FindSingle <WFProcessScheme>(u => u.Id == WFProcessInstance.ProcessSchemeId);
                WFProcessOperationHistory  WFProcessOperationHistory      = new WFProcessOperationHistory(); //操作记录
                WFProcessTransitionHistory processTransitionHistoryEntity = null;                            //流转记录

                dynamic             schemeContentJson  = WFProcessScheme.SchemeContent.ToJson();             //获取工作流模板内容的json对象;
                WF_RuntimeInitModel wfRuntimeInitModel = new WF_RuntimeInitModel()
                {
                    schemeContent = schemeContentJson.SchemeContent.Value,
                    currentNodeId = WFProcessInstance.ActivityId,
                    frmData       = schemeContentJson.frmData.Value,
                    previousId    = WFProcessInstance.PreviousId,
                    processId     = processId
                };
                IWF_Runtime wfruntime = new WF_Runtime(wfRuntimeInitModel);


                #region 会签
                if (WFProcessInstance.ActivityType == 0)                                //会签
                {
                    wfruntime.MakeTagNode(wfruntime.runtimeModel.currentNodeId, 1, ""); //标记当前节点通过
                    ///寻找需要审核的节点Id
                    string        _VerificationNodeId = "";
                    List <string> _nodelist           = wfruntime.GetCountersigningNodeIdList(wfruntime.runtimeModel.currentNodeId);
                    string        _makerList          = "";
                    foreach (string item in _nodelist)
                    {
                        _makerList = GetMakerList(wfruntime.runtimeModel.nodeDictionary[item], wfruntime.runtimeModel.processId);
                        if (_makerList != "-1")
                        {
                            var id = AuthUtil.GetCurrentUser().User.Id.ToString();
                            foreach (string one in _makerList.Split(','))
                            {
                                if (id == one || id.IndexOf(one) != -1)
                                {
                                    _VerificationNodeId = item;
                                    break;
                                }
                            }
                        }
                    }

                    if (_VerificationNodeId != "")
                    {
                        if (flag)
                        {
                            WFProcessOperationHistory.Content = "【" + "todo name" + "】【" + wfruntime.runtimeModel.nodeDictionary[_VerificationNodeId].name + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "】同意,备注:" + description;
                        }
                        else
                        {
                            WFProcessOperationHistory.Content = "【" + "todo name" + "】【" + wfruntime.runtimeModel.nodeDictionary[_VerificationNodeId].name + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "】不同意,备注:" + description;
                        }

                        string _Confluenceres = wfruntime.NodeConfluence(_VerificationNodeId, flag, AuthUtil.GetCurrentUser().User.Id.ToString(), description);
                        var    _data          = new
                        {
                            SchemeContent = wfruntime.runtimeModel.schemeContentJson.ToString(),
                            frmData       = wfruntime.runtimeModel.frmData
                        };
                        WFProcessScheme.SchemeContent = _data.ToJson().ToString();
                        switch (_Confluenceres)
                        {
                        case "-1":    //不通过
                            WFProcessInstance.IsFinish = 3;
                            break;

                        case "1":    //等待
                            break;

                        default:    //通过
                            WFProcessInstance.PreviousId   = WFProcessInstance.ActivityId;
                            WFProcessInstance.ActivityId   = wfruntime.runtimeModel.nextNodeId;
                            WFProcessInstance.ActivityType = wfruntime.runtimeModel.nextNodeType;    //-1无法运行,0会签开始,1会签结束,2一般节点,4流程运行结束
                            WFProcessInstance.ActivityName = wfruntime.runtimeModel.nextNode.name;
                            WFProcessInstance.IsFinish     = (wfruntime.runtimeModel.nextNodeType == 4 ? 1 : 0);
                            WFProcessInstance.MakerList    = (wfruntime.runtimeModel.nextNodeType == 4 ?"": GetMakerList(wfruntime));  //当前节点可执行的人信息

                            #region 流转记录
                            processTransitionHistoryEntity                = new WFProcessTransitionHistory();
                            processTransitionHistoryEntity.FromNodeId     = wfruntime.runtimeModel.currentNodeId;
                            processTransitionHistoryEntity.FromNodeName   = wfruntime.runtimeModel.currentNode.name.Value;
                            processTransitionHistoryEntity.FromNodeType   = wfruntime.runtimeModel.currentNodeType;
                            processTransitionHistoryEntity.ToNodeId       = wfruntime.runtimeModel.nextNodeId;
                            processTransitionHistoryEntity.ToNodeName     = wfruntime.runtimeModel.nextNode.name.Value;
                            processTransitionHistoryEntity.ToNodeType     = wfruntime.runtimeModel.nextNodeType;
                            processTransitionHistoryEntity.TransitionSate = 0;
                            processTransitionHistoryEntity.IsFinish       = (processTransitionHistoryEntity.ToNodeType == 4 ? 1 : 0);
                            #endregion



                            if (wfruntime.runtimeModel.currentNode.setInfo != null && wfruntime.runtimeModel.currentNode.setInfo.NodeSQL != null)
                            {
                                _sqlstr   = wfruntime.runtimeModel.currentNode.setInfo.NodeSQL.Value;
                                _dbbaseId = wfruntime.runtimeModel.currentNode.setInfo.NodeDataBaseToSQL.Value;
                            }
                            break;
                        }
                    }
                    else
                    {
                        throw (new Exception("审核异常,找不到审核节点"));
                    }
                }
                #endregion

                #region 一般审核
                else//一般审核
                {
                    if (flag)
                    {
                        wfruntime.MakeTagNode(wfruntime.runtimeModel.currentNodeId, 1, AuthUtil.GetCurrentUser().User.Id.ToString(), description);
                        WFProcessInstance.PreviousId   = WFProcessInstance.ActivityId;
                        WFProcessInstance.ActivityId   = wfruntime.runtimeModel.nextNodeId;
                        WFProcessInstance.ActivityType = wfruntime.runtimeModel.nextNodeType;                                     //-1无法运行,0会签开始,1会签结束,2一般节点,4流程运行结束
                        WFProcessInstance.ActivityName = wfruntime.runtimeModel.nextNode.name;
                        WFProcessInstance.MakerList    = wfruntime.runtimeModel.nextNodeType == 4 ? "" : GetMakerList(wfruntime); //当前节点可执行的人信息
                        WFProcessInstance.IsFinish     = (wfruntime.runtimeModel.nextNodeType == 4 ? 1 : 0);
                        #region 流转记录

                        processTransitionHistoryEntity = new WFProcessTransitionHistory
                        {
                            FromNodeId     = wfruntime.runtimeModel.currentNodeId,
                            FromNodeName   = wfruntime.runtimeModel.currentNode.name.Value,
                            FromNodeType   = wfruntime.runtimeModel.currentNodeType,
                            ToNodeId       = wfruntime.runtimeModel.nextNodeId,
                            ToNodeName     = wfruntime.runtimeModel.nextNode.name.Value,
                            ToNodeType     = wfruntime.runtimeModel.nextNodeType,
                            TransitionSate = 0
                        };
                        processTransitionHistoryEntity.IsFinish = (processTransitionHistoryEntity.ToNodeType == 4 ? 1 : 0);
                        #endregion



                        if (wfruntime.runtimeModel.currentNode.setInfo != null && wfruntime.runtimeModel.currentNode.setInfo.NodeSQL != null)
                        {
                            _sqlstr   = wfruntime.runtimeModel.currentNode.setInfo.NodeSQL.Value;
                            _dbbaseId = wfruntime.runtimeModel.currentNode.setInfo.NodeDataBaseToSQL.Value;
                        }

                        WFProcessOperationHistory.Content = "【" + "todo name" + "】【" + wfruntime.runtimeModel.currentNode.name + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "】同意,备注:" + description;
                    }
                    else
                    {
                        WFProcessInstance.IsFinish = 3; //表示该节点不同意
                        wfruntime.MakeTagNode(wfruntime.runtimeModel.currentNodeId, -1, AuthUtil.GetUserName(), description);

                        WFProcessOperationHistory.Content = "【" + "todo name" + "】【" + wfruntime.runtimeModel.currentNode.name + "】【" + DateTime.Now.ToString("yyyy-MM-dd HH:mm") + "】不同意,备注:" + description;
                    }
                    var data = new
                    {
                        SchemeContent = wfruntime.runtimeModel.schemeContentJson.ToString(),
                        frmData       = wfruntime.runtimeModel.frmData
                    };
                    WFProcessScheme.SchemeContent = data.ToJson();
                }
                #endregion

                _res = true;
                SaveProcess(_sqlstr, _dbbaseId, WFProcessInstance, WFProcessScheme, WFProcessOperationHistory, processTransitionHistoryEntity);
                return(_res);
            }
            catch
            {
                throw;
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 创建一个实例
        /// </summary>
        /// <param name="processId">进程GUID</param>
        /// <param name="schemeInfoId">模板信息ID</param>
        /// <param name="wfLevel"></param>
        /// <param name="code">进程编号</param>
        /// <param name="customName">自定义名称</param>
        /// <param name="description">备注</param>
        /// <param name="frmData">表单数据信息</param>
        /// <returns></returns>
        public bool CreateInstance(Guid processId, Guid schemeInfoId, WFProcessInstance WFProcessInstance, string frmData = null)
        {
            try
            {
                WFSchemeInfo    WFSchemeInfo    = _unitWork.FindSingle <WFSchemeInfo>(u => u.Id == schemeInfoId);
                WFSchemeContent WFSchemeContent = _unitWork.FindSingle <WFSchemeContent>(u =>
                                                                                         u.SchemeInfoId == schemeInfoId && u.SchemeVersion == WFSchemeInfo.SchemeVersion);

                WF_RuntimeInitModel wfRuntimeInitModel = new WF_RuntimeInitModel()
                {
                    schemeContent = WFSchemeContent.SchemeContent,
                    currentNodeId = "",
                    frmData       = frmData,
                    processId     = processId
                };
                IWF_Runtime wfruntime = null;

                if (frmData == null)
                {
                    throw new Exception("自定义表单需要提交表单数据");
                }
                else
                {
                    wfruntime = new WF_Runtime(wfRuntimeInitModel);
                }


                var user = AuthUtil.GetCurrentUser();
                #region 实例信息
                WFProcessInstance.ActivityId     = wfruntime.runtimeModel.nextNodeId;
                WFProcessInstance.ActivityType   = wfruntime.GetStatus();//-1无法运行,0会签开始,1会签结束,2一般节点,4流程运行结束
                WFProcessInstance.ActivityName   = wfruntime.runtimeModel.nextNode.name;
                WFProcessInstance.PreviousId     = wfruntime.runtimeModel.currentNodeId;
                WFProcessInstance.SchemeType     = WFSchemeInfo.SchemeType;
                WFProcessInstance.FrmType        = WFSchemeInfo.FrmType;
                WFProcessInstance.EnabledMark    = 1;//正式运行
                WFProcessInstance.CreateUserId   = user.User.Id.ToString();
                WFProcessInstance.CreateUserName = user.User.Account;
                WFProcessInstance.MakerList      = (wfruntime.GetStatus() != 4 ? GetMakerList(wfruntime) : "");//当前节点可执行的人信息
                WFProcessInstance.IsFinish       = (wfruntime.GetStatus() == 4 ? 1 : 0);
                #endregion

                #region 实例模板
                var data = new
                {
                    SchemeContent = WFSchemeContent.SchemeContent,
                    frmData       = frmData
                };
                WFProcessScheme WFProcessScheme = new WFProcessScheme
                {
                    SchemeInfoId  = schemeInfoId,
                    SchemeVersion = WFSchemeInfo.SchemeVersion,
                    ProcessType   = 1,//1正式,0草稿
                    SchemeContent = data.ToJson().ToString()
                };
                #endregion

                #region 流程操作记录
                WFProcessOperationHistory processOperationHistoryEntity = new WFProcessOperationHistory();
                processOperationHistoryEntity.Content = "【创建】" + user.User.Name + "创建了一个流程进程【" + WFProcessInstance.Code + "/" + WFProcessInstance.CustomName + "】";
                #endregion

                #region 流转记录
                WFProcessTransitionHistory processTransitionHistoryEntity = new WFProcessTransitionHistory();
                processTransitionHistoryEntity.FromNodeId     = wfruntime.runtimeModel.currentNodeId;
                processTransitionHistoryEntity.FromNodeName   = wfruntime.runtimeModel.currentNode.name.Value;
                processTransitionHistoryEntity.FromNodeType   = wfruntime.runtimeModel.currentNodeType;
                processTransitionHistoryEntity.ToNodeId       = wfruntime.runtimeModel.nextNodeId;
                processTransitionHistoryEntity.ToNodeName     = wfruntime.runtimeModel.nextNode.name.Value;
                processTransitionHistoryEntity.ToNodeType     = wfruntime.runtimeModel.nextNodeType;
                processTransitionHistoryEntity.TransitionSate = 0;
                processTransitionHistoryEntity.IsFinish       = (processTransitionHistoryEntity.ToNodeType == 4 ? 1 : 0);
                #endregion

                #region 委托记录
                //List<WFDelegateRecord> delegateRecordEntitylist = GetDelegateRecordList(schemeInfoId, WFProcessInstance.Code, WFProcessInstance.CustomName, WFProcessInstance.MakerList);
                //WFProcessInstance.MakerList += delegateUserList;
                #endregion

                SaveProcess(wfruntime.runtimeModel, WFProcessInstance, WFProcessScheme, processOperationHistoryEntity, processTransitionHistoryEntity);

                return(true);
            }
            catch
            {
                throw;
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        ///  更新流程实例 审核节点用
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="dbbaseId"></param>
        /// <param name="processInstanceEntity"></param>
        /// <param name="processSchemeEntity"></param>
        /// <param name="processOperationHistoryEntity"></param>
        /// <param name="delegateRecordEntityList"></param>
        /// <param name="processTransitionHistoryEntity"></param>
        /// <returns></returns>
        public int SaveProcess(string sql, string dbbaseId, WFProcessInstance processInstanceEntity, WFProcessScheme processSchemeEntity, WFProcessOperationHistory processOperationHistoryEntity, WFProcessTransitionHistory processTransitionHistoryEntity = null)
        {
            try
            {
                processInstanceEntity.Modify(processInstanceEntity.Id);
                _unitWork.Update(processSchemeEntity);
                _unitWork.Update(processInstanceEntity);

                processOperationHistoryEntity.ProcessId = processInstanceEntity.Id;
                _unitWork.Add(processOperationHistoryEntity);

                if (processTransitionHistoryEntity != null)
                {
                    processTransitionHistoryEntity.ProcessId = processInstanceEntity.Id;
                    _unitWork.Add(processTransitionHistoryEntity);
                }

                //if (!string.IsNullOrEmpty(dbbaseId) && !string.IsNullOrEmpty(sql))//测试环境不允许执行sql语句
                //{
                //    DataBaseLinkEntity dataBaseLinkEntity = dataBaseLinkService.GetEntity(dbbaseId);//获取
                //    this.BaseRepository(dataBaseLinkEntity.DbConnection).ExecuteBySql(sql.Replace("{0}", processInstanceEntity.Id));
                //}
                _unitWork.Save();
                return(1);
            }
            catch
            {
                throw;
            }
        }