protected void cmdAddUser_Click(object sender, EventArgs e)
    {
        string[] userIds = this.txtUserToAdd.Value.Trim().Trim(';').Split(';');
        if (userIds != null && userIds.Length > 0)
        {
            using (ISession session = new Session())
            {
                DataSet ds = session.CreateObjectQuery("select max(UserSequnce) as UserSequnce,max(StepIndex) as StepIndex from OrderApproveDef where OrderTypeCode=?typeCode")
                             .Attach(typeof(OrderApproveDef))
                             .SetValue("?typeCode", this.OrderTypeCode, "OrderTypeCode")
                             .DataSet();
                int maxSeq   = ds.Tables[0].Rows.Count <= 0 ? 0 : Magic.Framework.Utils.Cast.Int(ds.Tables[0].Rows[0]["UserSequnce"], 0);
                int maxIndex = ds.Tables[0].Rows.Count <= 0 ? 0 : Magic.Framework.Utils.Cast.Int(ds.Tables[0].Rows[0]["StepIndex"], 0);

                try
                {
                    session.BeginTransaction();
                    for (int i = 0; i < userIds.Length; i++)
                    {
                        int userId = Magic.Framework.Utils.Cast.Int(userIds[i], 0);
                        if (userId <= 0)
                        {
                            continue;
                        }
                        OrderApproveDef def = new OrderApproveDef();
                        def.OrderTypeCode = this.OrderTypeCode;
                        def.UserID        = userId;
                        def.UserSequnce   = (++maxSeq);
                        def.StepIndex     = (++maxIndex);
                        def.Create(session);
                    }
                    session.Commit();
                    WebUtil.ShowMsg(this, "签核用户添加成功");
                    this.QueryAndBindData(session);
                }
                catch (Exception er)
                {
                    session.Rollback();
                    WebUtil.ShowError(this, er);
                }
            }
        }
    }
    private void SortDefines(IList <OrderApproveDef> defines)
    {
        if (defines == null || defines.Count <= 1)
        {
            return;
        }
        bool exchanged = true;

        while (exchanged)
        {
            exchanged = false;
            for (int i = 1; i < defines.Count; i++)
            {
                if (defines[i - 1].UserSequnce > defines[i].UserSequnce)
                {
                    OrderApproveDef t = defines[i - 1];
                    defines[i - 1] = defines[i];
                    defines[i]     = t;
                    exchanged      = true;
                }
            }
        }
    }
    protected void MagicItemCommand(object sender, MagicItemEventArgs e)
    {
        if (e.CommandName != "Save" && e.CommandName != "Delete")
        {
            WebUtil.ShowError(this, "无效的命令");
            return;
        }
        if (this.repeatControl.Items.Count <= 0)
        {
            return;
        }

        IList <OrderApproveDef> defines = new List <OrderApproveDef>();

        foreach (RepeaterItem item in this.repeatControl.Items)
        {
            HtmlInputCheckBox chk = item.FindControl("checkbox") as HtmlInputCheckBox;
            if (e.CommandName == "Delete" && chk.Checked)
            {
                continue;
            }
            HtmlInputText txt    = item.FindControl("txtSeq") as HtmlInputText;
            int           userId = Magic.Framework.Utils.Cast.Int(chk.Value, -1);
            if (userId <= 0)
            {
                WebUtil.ShowError(this, "无法读取签核用户资料,请和管理员联系");
                return;
            }

            OrderApproveDef def = new OrderApproveDef();
            def.OrderTypeCode = this.OrderTypeCode;
            def.UserID        = userId;
            def.UserSequnce   = Magic.Framework.Utils.Cast.Int(txt.Value);
            defines.Add(def);
        }

        using (ISession session = new Session())
        {
            try
            {
                session.BeginTransaction();
                session.CreateEntityQuery <OrderApproveDef>()
                .Where(Exp.Eq("OrderTypeCode", this.OrderTypeCode))
                .Delete();
                this.SortDefines(defines);
                for (int i = 1; i <= defines.Count; i++)
                {
                    defines[i - 1].StepIndex = i;
                    defines[i - 1].Create(session);
                }
                session.Commit();
                if (e.CommandName == "Save")
                {
                    WebUtil.ShowMsg(this, "签核顺序保存成功");
                }
                else
                {
                    WebUtil.ShowMsg(this, "选择的签核人员已经删除");
                }
                this.QueryAndBindData(session);
            }
            catch (Exception er)
            {
                session.Rollback();
                WebUtil.ShowError(this, er);
            }
        }
    }