Exemplo n.º 1
0
        /// <summary>
        /// 合流点向分流点退回
        /// </summary>
        private string ExeReturn3_2()
        {
            //删除分流点与合流点之间的子线程数据。
            if (this.ReurnToNode.IsStartNode == false)
            {
                throw new Exception("@没有处理的模式。");
            }

            //删除子线程节点数据。
            GenerWorkerLists gwls = new GenerWorkerLists();

            gwls.Retrieve(GenerWorkFlowAttr.FID, this.WorkID);

            foreach (GenerWorkerList item in gwls)
            {
                /* 删除 子线程数据 */
                DBAccess.RunSQL("DELETE ND" + item.FK_Node + " WHERE OID=" + item.WorkID);
            }

            //删除流程控制数据。
            DBAccess.RunSQL("DELETE WF_GenerWorkFlow WHERE FID=" + this.WorkID);
            DBAccess.RunSQL("DELETE WF_GenerWorkerList WHERE FID=" + this.WorkID);
            DBAccess.RunSQL("DELETE WF_GenerFH WHERE FID=" + this.WorkID);

            return(ExeReturn1_1());
        }
Exemplo n.º 2
0
        /// <summary>
        /// 分流点退回给子线程
        /// </summary>
        /// <returns></returns>
        private string ExeReturn2_4()
        {
            //更新运动到节点,但是仍然是退回状态.
            GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID);

            gwf.FK_Node = this.ReturnToNode.NodeID;
            gwf.Update();

            //更新退回到的人员信息可见.
            GenerWorkerLists gwls = new GenerWorkerLists();

            gwls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, this.ReturnToNode.NodeID);
            foreach (GenerWorkerList item in gwls)
            {
                item.IsPassInt = 0;
                item.Update();
                this.ReturnToEmp = item.FK_Emp + "," + item.FK_EmpText;
            }

            // 去掉合流节点工作人员的待办.
            gwls = new GenerWorkerLists();
            gwls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, this.HisNode.NodeID);
            foreach (GenerWorkerList item in gwls)
            {
                item.IsPassInt = 0;
                item.IsRead    = false;
                item.Update();
            }
            return("成功的把信息退回到:" + this.ReturnToNode.Name + " , 退回给:(" + this.ReturnToEmp + ")");
        }
Exemplo n.º 3
0
        /// <summary>
        /// 执行修复
        /// </summary>
        /// <returns></returns>
        public string DoRepare()
        {
            if (this.DoSelfTestInfo() == "没有发现异常。")
            {
                return("没有发现异常。");
            }

            string    sql = "SELECT FK_Node FROM WF_GenerWorkerlist WHERE WORKID='" + this.WorkID + "' ORDER BY FK_Node desc";
            DataTable dt  = DBAccess.RunSQLReturnTable(sql);

            if (dt.Rows.Count == 0)
            {
                /*如果是开始工作节点,就删除它。*/
                WorkFlow wf = new WorkFlow(new Flow(this.FK_Flow), this.WorkID, this.FID);
                wf.DoDeleteWorkFlowByReal(true);
                return("此流程是因为发起工作失败被系统删除。");
            }

            int FK_Node = int.Parse(dt.Rows[0][0].ToString());

            Node nd = new Node(FK_Node);

            if (nd.IsStartNode)
            {
                /*如果是开始工作节点,就删除它。*/
                WorkFlow wf = new WorkFlow(new Flow(this.FK_Flow), this.WorkID, this.FID);
                wf.DoDeleteWorkFlowByReal(true);
                return("此流程是因为发起工作失败被系统删除。");
            }

            this.FK_Node  = nd.NodeID;
            this.NodeName = nd.Name;
            this.Update();

            string           str = "";
            GenerWorkerLists wls = new GenerWorkerLists();

            wls.Retrieve(GenerWorkerListAttr.FK_Node, FK_Node, GenerWorkerListAttr.WorkID, this.WorkID);
            foreach (GenerWorkerList wl in wls)
            {
                str += wl.FK_Emp + wl.FK_EmpText + ",";
            }

            return("此流程是因为[" + nd.Name + "]工作发送失败被回滚到当前位置,请转告[" + str + "]流程修复成功。");
        }
Exemplo n.º 4
0
        public string DoCheck(int days, string checker, string note1, string note2)
        {
            this.ApplyDays = days;

            this.Checker    = checker;
            this.ApplyNote1 = note1;
            this.ApplyNote2 = note2;

            // 调整当前预警与
            GenerWorkerLists wls = new GenerWorkerLists(this.WorkID, this.NodeId);

            wls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID, GenerWorkerListAttr.FK_Node, this.NodeId);
            foreach (GenerWorkerList wl in wls)
            {
                // wl.DTOfWarning = DataType.AddDays(wl.DTOfWarning, days);
                // wl.SDT = DataType.AddDays(wl.SDT, days);
                wl.DirectUpdate();
            }

            this.RunState = 2; /*进入提交审核状态*/
            this.Update();

            return("执行成功,已经交给" + checker + "审核。");
        }
Exemplo n.º 5
0
        /// <summary>
        /// 合流点向子线程退回
        /// </summary>
        private string ExeReturn3_4()
        {
            GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID);

            gwf.FK_Node = this.ReurnToNode.NodeID;
            gwf.WFState = WFState.Runing;
            gwf.Update();

            string           info = "@工作已经成功的退回到(" + ReurnToNode.Name + ")退回给:";
            GenerWorkerLists gwls = new GenerWorkerLists();

            gwls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID,
                          GenerWorkerListAttr.FK_Node, this.ReurnToNode.NodeID);

            string toEmp     = "";
            string toEmpName = "";

            foreach (GenerWorkerList item in gwls)
            {
                item.IsPass = false;
                item.IsRead = false;
                item.Update();
                info     += item.FK_Emp + "," + item.FK_EmpText;
                toEmp     = item.FK_Emp;
                toEmpName = item.FK_EmpText;
            }

            //删除已经发向合流点的汇总数据.
            MapDtls dtls = new MapDtls("ND" + this.HisNode.NodeID);

            foreach (MapDtl dtl in dtls)
            {
                /*如果是合流数据*/
                if (dtl.IsHLDtl)
                {
                    BP.DA.DBAccess.RunSQL("DELETE " + dtl.PTable + " WHERE OID=" + this.WorkID);
                }
            }



            // 记录退回轨迹。
            ReturnWork rw = new ReturnWork();

            rw.WorkID         = this.WorkID;
            rw.ReturnToNode   = this.ReurnToNode.NodeID;
            rw.ReturnNodeName = this.ReurnToNode.Name;

            rw.ReturnNode  = this.HisNode.NodeID; // 当前退回节点.
            rw.ReturnToEmp = toEmp;               //退回给。

            rw.MyPK           = DBAccess.GenerOIDByGUID().ToString();
            rw.Note           = Msg;
            rw.IsBackTracking = this.IsBackTrack;
            rw.Insert();

            // 加入track.
            this.AddToTrack(ActionType.Return, toEmp, toEmpName,
                            this.ReurnToNode.NodeID, this.ReurnToNode.Name, Msg);

            // 返回退回信息.
            return(info);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 子线程退回给分流点
        /// </summary>
        /// <returns></returns>
        private string ExeReturn5_2()
        {
            GenerWorkFlow gwf = new GenerWorkFlow(this.WorkID);

            gwf.FK_Node = this.ReturnToNode.NodeID;
            string info = "@工作已经成功的退回到(" + ReturnToNode.Name + ")退回给:";

            //查询退回到的工作人员列表.
            GenerWorkerLists gwls = new GenerWorkerLists();

            gwls.Retrieve(GenerWorkerListAttr.WorkID, this.WorkID,
                          GenerWorkerListAttr.FK_Node, this.ReturnToNode.NodeID);

            string toEmp     = "";
            string toEmpName = "";

            if (gwls.Count == 1)
            {
                /*有可能多次退回的情况,表示曾经退回过n次。*/
                foreach (GenerWorkerList item in gwls)
                {
                    item.IsPass = false; // 显示待办, 这个是合流节点的工作人员.
                    item.IsRead = false; //
                    item.Update();
                    info     += item.FK_Emp + "," + item.FK_EmpText;
                    toEmp     = item.FK_Emp;
                    toEmpName = item.FK_EmpText;
                    info     += "(" + item.FK_Emp + "," + item.FK_EmpText + ")";
                }
            }
            else
            {
                // 找到合流点的发送人.
                Nodes nds = this.HisNode.FromNodes;
                gwls = new GenerWorkerLists();
                GenerWorkerList gwl = new GenerWorkerList();
                foreach (Node nd in nds)
                {
                    gwls.Retrieve(GenerWorkerListAttr.WorkID, this.FID,
                                  GenerWorkerListAttr.FK_Node, nd.NodeID,
                                  GenerWorkerListAttr.IsPass, 1);
                    if (gwls.Count == 0)
                    {
                        continue;
                    }

                    if (gwls.Count != 1)
                    {
                        throw new Exception("@应该只有一个记录,现在有多个,可能错误。");
                    }

                    //求出分流节点的发送人.
                    gwl       = (GenerWorkerList)gwls[0];
                    toEmp     = gwl.FK_Emp;
                    toEmpName = gwl.FK_EmpText;
                    info     += "(" + toEmp + "," + toEmpName + ")";
                }

                if (string.IsNullOrEmpty(toEmp) == true)
                {
                    throw new Exception("@在退回时出现错误,没有找到分流节点的发送人。");
                }

                // 插入一条数据, 行程一个工作人员记录,这个记录就是子线程的延长点. 给合流点上的接受人设置待办.
                gwl.WorkID = this.WorkID;
                gwl.FID    = this.FID;
                gwl.IsPass = false;
                if (gwl.IsExits == false)
                {
                    gwl.Insert();
                }
                else
                {
                    gwl.Update();
                }
            }

            // 记录退回轨迹。
            ReturnWork rw = new ReturnWork();

            rw.WorkID         = this.WorkID;
            rw.ReturnToNode   = this.ReturnToNode.NodeID;
            rw.ReturnNodeName = this.ReturnToNode.Name;

            rw.ReturnNode  = this.HisNode.NodeID; // 当前退回节点.
            rw.ReturnToEmp = toEmp;               //退回给。

            rw.MyPK           = DBAccess.GenerOIDByGUID().ToString();
            rw.Note           = Msg;
            rw.IsBackTracking = this.IsBackTrack;
            rw.Insert();

            // 加入track.
            this.AddToTrack(ActionType.Return, toEmp, toEmpName,
                            this.ReturnToNode.NodeID, this.ReturnToNode.Name, Msg);

            gwf.WFState     = WFState.ReturnSta;
            gwf.FK_Node     = this.ReturnToNode.NodeID;
            gwf.NodeName    = this.ReturnToNode.Name;
            gwf.Starter     = toEmp;
            gwf.StarterName = toEmpName;
            gwf.Update();

            //找到当前的工作数据.
            GenerWorkerList currWorker = new GenerWorkerList();
            int             i          = currWorker.Retrieve(GenerWorkerListAttr.FK_Emp, WebUser.No,
                                                             GenerWorkerListAttr.WorkID, this.WorkID,
                                                             GenerWorkerListAttr.FK_Node, this.HisNode.NodeID);

            if (i != 1)
            {
                throw new Exception("@当前的工作人员列表数据丢失了,流程引擎错误.");
            }

            //设置当前的工作数据为退回状态,让其不能看到待办, 这个是约定的值.
            currWorker.IsPassInt = (int)WFState.ReturnSta;
            currWorker.Update();

            // 返回退回信息.
            return(info);
        }