示例#1
0
        public string DoSelfTestInfo()
        {
            GenerWorkerLists wls = new GenerWorkerLists(this.WorkID, this.FK_Flow);

            #region  查看一下当前的节点是否开始工作节点。
            Node nd = new Node(this.FK_Node);
            if (nd.IsStartNode)
            {
                /* 判断是否是退回的节点 */
                Work wk = nd.HisWork;
                wk.OID = this.WorkID;
                wk.Retrieve();
            }
            #endregion


            #region  查看一下是否有当前的工作节点信息。
            bool isHave = false;
            foreach (GenerWorkerList wl in wls)
            {
                if (wl.FK_Node == this.FK_Node)
                {
                    isHave = true;
                }
            }

            if (isHave == false)
            {
                /*  */
                return("已经不存在当前的工作节点信息,造成此流程的原因可能是没有捕获的系统异常,建议删除此流程或者交给系统自动修复它。");
            }
            #endregion

            return("没有发现异常。");
        }
示例#2
0
        private void ReorderLog(Node fromND, Node toND)
        {
            /*开始遍历到达的节点集合*/
            foreach (Node nd in fromND.HisToNodes)
            {
                Work wk = nd.HisWork;
                wk.OID = this.WorkID;
                if (wk.RetrieveFromDBSources() == 0)
                {
                    wk.FID = this.WorkID;
                    if (wk.Retrieve(WorkAttr.FID, this.WorkID) == 0)
                    {
                        continue;
                    }
                }

                if (nd.IsFL)
                {
                    /* 如果是分流 */
                    GenerWorkerLists wls = new GenerWorkerLists();
                    QueryObject      qo  = new QueryObject(wls);
                    qo.AddWhere(GenerWorkerListAttr.FID, this.WorkID);
                    qo.addAnd();

                    string[] ndsStrs = nd.HisToNDs.Split('@');
                    string   inStr   = "";
                    foreach (string s in ndsStrs)
                    {
                        if (s == "" || s == null)
                        {
                            continue;
                        }
                        inStr += "'" + s + "',";
                    }
                    inStr = inStr.Substring(0, inStr.Length - 1);
                    if (inStr.Contains(",") == true)
                    {
                        qo.AddWhere(GenerWorkerListAttr.FK_Node, int.Parse(inStr));
                    }
                    else
                    {
                        qo.AddWhereIn(GenerWorkerListAttr.FK_Node, "(" + inStr + ")");
                    }

                    qo.DoQuery();
                    foreach (GenerWorkerList wl in wls)
                    {
                        Node subNd = new Node(wl.FK_Node);
                        Work subWK = subNd.GetWork(wl.WorkID);

                        infoLog += "\r\n*****************************************************************************************";
                        infoLog += "\r\n节点ID:" + subNd.NodeID + "  工作名称:" + subWK.EnDesc;
                        infoLog += "\r\n处理人:" + subWK.Rec + " , " + wk.RecOfEmp.Name;
                        infoLog += "\r\n接收时间:" + subWK.RDT + " 处理时间:" + subWK.CDT;
                        infoLog += "\r\n ------------------------------------------------- ";

                        foreach (Attr attr in wk.EnMap.Attrs)
                        {
                            if (attr.UIVisible == false)
                            {
                                continue;
                            }
                            infoLog += "\r\n " + attr.Desc + ":" + subWK.GetValStrByKey(attr.Key);
                        }

                        //递归调用。
                        ReorderLog(subNd, toND);
                    }
                }
                else
                {
                    infoLog += "\r\n*****************************************************************************************";
                    infoLog += "\r\n节点ID:" + wk.NodeID + "  工作名称:" + wk.EnDesc;
                    infoLog += "\r\n处理人:" + wk.Rec + " , " + wk.RecOfEmp.Name;
                    infoLog += "\r\n接收时间:" + wk.RDT + " 处理时间:" + wk.CDT;
                    infoLog += "\r\n ------------------------------------------------- ";

                    foreach (Attr attr in wk.EnMap.Attrs)
                    {
                        if (attr.UIVisible == false)
                        {
                            continue;
                        }
                        infoLog += "\r\n" + attr.Desc + " : " + wk.GetValStrByKey(attr.Key);
                    }
                }

                /* 如果到了当前的节点 */
                if (nd.NodeID == toND.NodeID)
                {
                    break;
                }

                //递归调用。
                ReorderLog(nd, toND);
            }
        }
        private void SingleAttach(HttpContext context, string attachPk, string workid, string fk_node, string ensName)
        {
            FrmAttachment frmAth = new FrmAttachment();

            frmAth.MyPK = attachPk;
            frmAth.RetrieveFromDBSources();

            string athDBPK = attachPk + "_" + workid;

            BP.WF.Node currND = new BP.WF.Node(fk_node);
            BP.WF.Work currWK = currND.HisWork;
            currWK.OID = long.Parse(workid);
            currWK.Retrieve();
            //处理保存路径.
            string saveTo = frmAth.SaveTo;

            if (saveTo.Contains("*") || saveTo.Contains("@"))
            {
                /*如果路径里有变量.*/
                saveTo = saveTo.Replace("*", "@");
                saveTo = BP.WF.Glo.DealExp(saveTo, currWK, null);
            }

            try
            {
                saveTo = context.Server.MapPath("~/" + saveTo);
            }
            catch (Exception)
            {
                saveTo = saveTo;
            }

            if (System.IO.Directory.Exists(saveTo) == false)
            {
                System.IO.Directory.CreateDirectory(saveTo);
            }


            saveTo = saveTo + "\\" + athDBPK + "." + context.Request.Files[0].FileName.Substring(context.Request.Files[0].FileName.LastIndexOf('.') + 1);
            context.Request.Files[0].SaveAs(saveTo);

            FileInfo        info     = new FileInfo(saveTo);
            FrmAttachmentDB dbUpload = new FrmAttachmentDB();

            dbUpload.MyPK             = athDBPK;
            dbUpload.FK_FrmAttachment = attachPk;
            dbUpload.RefPKVal         = workid;

            dbUpload.FK_MapData = ensName;

            dbUpload.FileExts     = info.Extension;
            dbUpload.FileFullName = saveTo;
            dbUpload.FileName     = context.Request.Files[0].FileName;
            dbUpload.FileSize     = (float)info.Length;
            dbUpload.Rec          = WebUser.No;
            dbUpload.RecName      = WebUser.Name;
            dbUpload.RDT          = BP.DA.DataType.CurrentDataTime;


            dbUpload.NodeID = fk_node;

            dbUpload.Save();
        }
示例#4
0
        /// <summary>
        /// 逾期流程
        /// </summary>
        private void DoOverDueFlow()
        {
            //特殊处理天津的需求.
            if (SystemConfig.CustomerNo == "")
            {
                DoTianJinSpecFunc();
            }


            #region 找到要逾期的数据.
            DataTable generTab = null;
            string    sql      = "SELECT a.FK_Flow,a.WorkID,a.Title,a.FK_Node,a.SDTOfNode,a.Starter,a.TodoEmps ";
            sql     += "FROM WF_GenerWorkFlow a, WF_Node b";
            sql     += " WHERE a.SDTOfNode<='" + DataType.CurrentDataTime + "' ";
            sql     += " AND WFState=2 and b.OutTimeDeal!=0";
            sql     += " AND a.FK_Node=b.NodeID";
            generTab = DBAccess.RunSQLReturnTable(sql);
            #endregion 找到要逾期的数据.

            // 遍历循环,逾期表进行处理.
            string msg  = "";
            string info = "";
            foreach (DataRow row in generTab.Rows)
            {
                string fk_flow       = row["FK_Flow"] + "";
                int    fk_node       = int.Parse(row["FK_Node"] + "");
                long   workid        = long.Parse(row["WorkID"] + "");
                string title         = row["Title"] + "";
                string compleateTime = row["SDTOfNode"] + "";
                string starter       = row["Starter"] + "";

                GenerWorkerLists gwls = new GenerWorkerLists();
                gwls.Retrieve(GenerWorkerListAttr.WorkID, workid, GenerWorkerListAttr.FK_Node, fk_node);

                bool isLogin = false;
                foreach (GenerWorkerList item in gwls)
                {
                    if (item.IsEnable == false)
                    {
                        continue;
                    }

                    BP.Port.Emp emp = new Emp(item.FK_Emp);
                    BP.Web.WebUser.SignInOfGener(emp);
                    isLogin = true;
                }

                if (isLogin == false)
                {
                    BP.Port.Emp emp = new Emp("admin");
                    BP.Web.WebUser.SignInOfGener(emp);
                }

                try
                {
                    Node node = new Node(fk_node);
                    if (node.IsStartNode)
                    {
                        continue;
                    }

                    //获得该节点的处理内容.
                    string doOutTime = node.GetValStrByKey(NodeAttr.DoOutTime);
                    switch (node.HisOutTimeDeal)
                    {
                    case OutTimeDeal.None:     //逾期不处理.
                        continue;

                    case OutTimeDeal.AutoJumpToSpecNode:     //跳转到指定的节点.
                        try
                        {
                            //if (doOutTime.Contains(",") == false)
                            //    throw new Exception("@系统设置错误,不符合设置规范,格式为: NodeID,EmpNo  现在设置的为:"+doOutTime);

                            int  jumpNode   = int.Parse(doOutTime);
                            Node jumpToNode = new Node(jumpNode);

                            //设置默认同意.
                            BP.WF.Dev2Interface.WriteTrackWorkCheck(jumpToNode.FK_Flow, node.NodeID, workid, 0,
                                                                    "同意(预期自动审批)", null);

                            //执行发送.
                            info = BP.WF.Dev2Interface.Node_SendWork(fk_flow, workid, null, null, jumpToNode.NodeID, null).ToMsgOfText();

                            // info = BP.WF.Dev2Interface.Flow_Schedule(workid, jumpToNode.NodeID, emp.No);
                            msg = "流程 '" + node.FlowName + "',标题: '" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                                  "'超时处理规则为'自动跳转'," + info;

                            BP.DA.Log.DefaultLogWriteLine(LogType.Info, msg);
                        }
                        catch (Exception ex)
                        {
                            msg = "流程 '" + node.FlowName + "',WorkID=" + workid + ",标题: '" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                                  "'超时处理规则为'自动跳转',跳转异常:" + ex.Message;
                            BP.DA.Log.DefaultLogWriteLine(LogType.Error, msg);
                        }
                        break;

                    case OutTimeDeal.AutoShiftToSpecUser:     //走动移交给.
                        // 判断当前的处理人是否是.
                        Emp empShift = new Emp(doOutTime);
                        try
                        {
                            BP.WF.Dev2Interface.Node_Shift(fk_flow, fk_node, workid, 0, empShift.No,
                                                           "流程节点已经逾期,系统自动移交");

                            msg = "流程 '" + node.FlowName + "',标题: '" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                                  "'超时处理规则为'移交到指定的人',已经自动移交给'" + empShift.Name + ".";
                            BP.DA.Log.DefaultLogWriteLine(LogType.Info, msg);
                        }
                        catch (Exception ex)
                        {
                            msg = "流程 '" + node.FlowName + "' ,标题:'" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                                  "'超时处理规则为'移交到指定的人',移交异常:" + ex.Message;
                            BP.DA.Log.DefaultLogWriteLine(LogType.Error, msg);
                        }
                        break;

                    case OutTimeDeal.AutoTurntoNextStep:
                        try
                        {
                            GenerWorkerList workerList = new GenerWorkerList();
                            workerList.RetrieveByAttrAnd(GenerWorkerListAttr.WorkID, workid,
                                                         GenerWorkFlowAttr.FK_Node, fk_node);

                            WebUser.SignInOfGener(workerList.HisEmp);
                            WorkNode firstwn = new WorkNode(workid, fk_node);
                            string   sendIfo = firstwn.NodeSend().ToMsgOfText();
                            msg = "流程  '" + node.FlowName + "',标题: '" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                                  "'超时处理规则为'自动发送到下一节点',发送消息为:" + sendIfo;
                            BP.DA.Log.DefaultLogWriteLine(LogType.Info, msg);
                        }
                        catch (Exception ex)
                        {
                            msg = "流程  '" + node.FlowName + "',标题: '" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                                  "'超时处理规则为'自动发送到下一节点',发送异常:" + ex.Message;
                            BP.DA.Log.DefaultLogWriteLine(LogType.Error, msg);
                        }
                        break;

                    case OutTimeDeal.DeleteFlow:
                        info = BP.WF.Dev2Interface.Flow_DoDeleteFlowByReal(fk_flow, workid, true);
                        msg  = "流程  '" + node.FlowName + "',标题: '" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                               "'超时处理规则为'删除流程'," + info;
                        BP.DA.Log.DefaultLogWriteLine(LogType.Info, msg);
                        break;

                    case OutTimeDeal.RunSQL:
                        try
                        {
                            BP.WF.Work wk = node.HisWork;
                            wk.OID = workid;
                            wk.Retrieve();

                            doOutTime = BP.WF.Glo.DealExp(doOutTime, wk, null);

                            //替换字符串
                            doOutTime.Replace("@OID", workid + "");
                            doOutTime.Replace("@FK_Flow", fk_flow);
                            doOutTime.Replace("@FK_Node", fk_node.ToString());
                            doOutTime.Replace("@Starter", starter);
                            if (doOutTime.Contains("@"))
                            {
                                msg = "流程 '" + node.FlowName + "',标题:  '" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                                      "'超时处理规则为'执行SQL'.有未替换的SQL变量.";
                                BP.DA.Log.DefaultLogWriteLine(LogType.Info, msg);
                                break;
                            }

                            //执行sql.
                            DBAccess.RunSQL(doOutTime);
                        }
                        catch (Exception ex)
                        {
                            msg = "流程  '" + node.FlowName + "',标题: '" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                                  "'超时处理规则为'执行SQL'.运行SQL出现异常:" + ex.Message;
                            BP.DA.Log.DefaultLogWriteLine(LogType.Error, msg);
                        }
                        break;

                    case OutTimeDeal.SendMsgToSpecUser:
                        try
                        {
                            Emp myemp = new Emp(doOutTime);

                            bool boo = BP.WF.Dev2Interface.WriteToSMS(myemp.No, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "系统发送逾期消息",
                                                                      "您的流程:'" + title + "'的完成时间应该为'" + compleateTime + "',流程已经逾期,请及时处理!", "系统消息");
                            if (boo)
                            {
                                msg = "'" + title + "'逾期消息已经发送给:'" + myemp.Name + "'";
                            }
                            else
                            {
                                msg = "'" + title + "'逾期消息发送未成功,发送人为:'" + myemp.Name + "'";
                            }
                            BP.DA.Log.DefaultLogWriteLine(LogType.Info, msg);
                        }
                        catch (Exception ex)
                        {
                            msg = "流程  '" + node.FlowName + "',标题: '" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                                  "'超时处理规则为'执行SQL'.运行SQL出现异常:" + ex.Message;
                            BP.DA.Log.DefaultLogWriteLine(LogType.Error, msg);
                        }
                        break;

                    default:
                        msg = "流程 '" + node.FlowName + "',标题: '" + title + "'的应该完成时间为'" + compleateTime + "',当前节点'" + node.Name +
                              "'没有找到相应的超时处理规则.";
                        BP.DA.Log.DefaultLogWriteLine(LogType.Error, msg);
                        break;
                    }
                }
                catch (Exception ex)
                {
                    BP.DA.Log.DefaultLogWriteLine(LogType.Error, ex.ToString());
                }
            }
            BP.DA.Log.DefaultLogWriteLine(LogType.Info, "结束扫描逾期流程数据.");
        }