| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 | using DevExpress.Mvvm;using DevExpress.Xpo;using DevExpress.Xpo.DB;using DevExpress.XtraBars;using DevExpress.XtraBars.Docking2010;using DevExpress.XtraEditors;using DevExpress.XtraGrid.Views.Base;using DevExpress.XtraGrid.Views.Grid;using Ips.Library.Basic;using Ips.Library.DxpLib;using Ips.Library.Entity;using Ips.Sps.Scheduling;using Ips.Sps.Tsks.Commands;using Ips.Sps.TskStrategys;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace Ips.Sps.Tsks{    public partial class TskListCtrl : DevExpress.XtraEditors.XtraUserControl    {        public TskListCtrl()        {            InitializeComponent();            gvSignalList.ShowRowNumber();            _tskManager = TskManager.Default;            new LogCtrl() { Parent = grpTskLog };            this.RegisterCommands();        }        Session Session { get; set; }        TskManager _tskManager;        public void RegisterCommands()        {            Messenger.Default.Register<ReloadTskMessage>(this, OnReloadTsk);            Messenger.Default.Register<TskStateChangedMessage>(this, OnTskStateChanged);        }        private void OnReloadTsk(ReloadTskMessage message)        {            Reload();            if (message.TskId.HasValue)            {                gvTskList.FocusedRowHandle = gvTskList.LocateByValue(nameof(Tsk.Oid), message.TskId);            }        }        private void OnTskStateChanged(TskStateChangedMessage cmd)        {            var rowHandle = gvTskList.LocateByValue(nameof(Tsk.Oid), cmd.TskId);            if (rowHandle < 0) return;            var tsk = gvTskList.GetRow(rowHandle) as Tsk;            this.Invoke(() => tsk.Reload());        }        private void TskListForm_Load(object sender, EventArgs e)        {            _tskManager.ResetAll();            tskStateEdit.AddEnum<TskState>();            Reload();        }        private void Reload()        {            Session = new Session();            var sortProperties = new SortProperty[]{                new SortProperty(nameof(Tsk.Oid), SortingDirection.Descending)            };            bsTskList.DataSource = new XPCollection<Tsk>(Session, null, sortProperties);        }        private void gvTskList_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)        {            if (e.Button == MouseButtons.Left && e.Clicks == 1)            {                e.Handled = true;                //btnEdit.PerformClick();                var tskId = (int)gvTskList.GetRowCellValue(e.RowHandle, colOid);                _tskManager.SelectTsk(tskId, 0);            }        }        private void ShowEditForm(int? id, int stgId, string caption = null)        {            caption = caption.IfNullOrWhitespace(id.HasValue ? $"编辑任务-{caption}" : "新建任务");            var form = new TskEditForm(id, stgId);            form.Text = caption;            //form.FormClosed += EditFormClosed;            var documentManager = DocumentManager.FromControl(this.ParentForm);            if (documentManager != null)            {                documentManager.View.AddDocument(form);            }            else            {                try                {                    form.ShowDialog();                }                finally                {                    form.Dispose();                }            }        }        private void EditFormClosed(object sender, FormClosedEventArgs e)        {            var form = sender as TskEditForm;            form.FormClosed -= EditFormClosed;            if (form.Id.HasValue)            {                Reload();                gvTskList.FocusedRowHandle = gvTskList.LocateByValue(nameof(Tsk.Oid), form.Id);            }        }        private void btnAdd_ItemClick(object sender, ItemClickEventArgs e)        {            //ShowEditForm(null, null);        }        private void btnEdit_ItemClick(object sender, ItemClickEventArgs e)        {            if (gvTskList.FocusedRowHandle < 0) return;            var tsk = gvTskList.GetFocusedRow() as Tsk;            //var id = (int)gvTskList.GetFocusedRowCellValue(colOid);            ShowEditForm(tsk.Oid, tsk.Strategy?.Oid ?? 0, tsk.Name);        }        private void btnDelete_ItemClick(object sender, ItemClickEventArgs e)        {            if (gvTskList.FocusedRowHandle < 0) return;            var handles = gvTskList.GetSelectedRows();            if (handles.Length == 0) return;            if (MsgHelper.ShowConfirm("确定删除选中的记录吗?"))            {                var modelList = handles.Select(m => gvTskList.GetRow(m) as Tsk).ToList();                Session.Delete(modelList);                Reload();            }        }        private void gvTskList_MouseDown(object sender, MouseEventArgs e)        {            if (e.Button == MouseButtons.Right)            {                var hitInfo = gvTskList.CalcHitInfo(e.Location);                btnStart.Visibility = btnStop.Visibility = btnEdit.Visibility = btnDelete.Visibility = hitInfo.InRow ? BarItemVisibility.Always : BarItemVisibility.Never;                var tsk = gvTskList.GetRow(hitInfo.RowHandle) as Tsk;                if (tsk != null)                {                    bool isStart = tsk.State != TskState.Stop;                    btnStart.Enabled = !isStart;                    btnStop.Enabled = isStart;                }                popTskList.ShowPopup(grdTskList.PointToScreen(e.Location));            }        }        private void btnStart_ItemClick(object sender, ItemClickEventArgs e)        {            if (gvTskList.FocusedRowHandle < 0) return;            var tsk = gvTskList.GetFocusedRow() as Tsk;            if (tsk.IsHistory)            {                StartTskForm startTskForm = new StartTskForm(tsk.Oid);                if (startTskForm.ShowDialog() != DialogResult.OK) return;            }            try            {                TskScheduler.Default.Start(tsk.Oid);            }            catch (Exception ex)            {                MsgHelper.ShowError("启动任务出错," + ex.Message);            }        }        private void btnStop_ItemClick(object sender, ItemClickEventArgs e)        {            if (gvTskList.FocusedRowHandle < 0) return;            var id = (int)gvTskList.GetFocusedRowCellValue(colOid);            try            {                TskScheduler.Default.Stop(id);            }            catch (Exception ex)            {                MsgHelper.ShowError("停止任务出错," + ex.Message);            }        }        private void gvTskList_FocusedRowObjectChanged(object sender, FocusedRowObjectChangedEventArgs e)        {        }        private void gvSignalList_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)        {            if (e.Button == MouseButtons.Left && e.Clicks == 1)            {                e.Handled = true;                var sig = (sender as GridView).GetRow(e.RowHandle) as TskSignal;                _tskManager.SelectTsk(sig.Tsk.Oid, sig.Oid);            }        }    }}
 |