TskListCtrl.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. using DevExpress.Mvvm;
  2. using DevExpress.Xpo;
  3. using DevExpress.Xpo.DB;
  4. using DevExpress.XtraBars;
  5. using DevExpress.XtraBars.Docking2010;
  6. using DevExpress.XtraEditors;
  7. using DevExpress.XtraGrid.Views.Base;
  8. using DevExpress.XtraGrid.Views.Grid;
  9. using Ips.Library.Basic;
  10. using Ips.Library.DxpLib;
  11. using Ips.Library.Entity;
  12. using Ips.Sps.Scheduling;
  13. using Ips.Sps.Tsks.Commands;
  14. using Ips.Sps.TskStrategys;
  15. using System;
  16. using System.Collections.Generic;
  17. using System.ComponentModel;
  18. using System.Data;
  19. using System.Drawing;
  20. using System.Linq;
  21. using System.Text;
  22. using System.Threading.Tasks;
  23. using System.Windows.Forms;
  24. namespace Ips.Sps.Tsks
  25. {
  26. public partial class TskListCtrl : DevExpress.XtraEditors.XtraUserControl
  27. {
  28. public TskListCtrl()
  29. {
  30. InitializeComponent();
  31. gvSignalList.ShowRowNumber();
  32. _tskManager = TskManager.Default;
  33. new LogCtrl() { Parent = grpTskLog };
  34. this.RegisterCommands();
  35. }
  36. Session Session { get; set; }
  37. TskManager _tskManager;
  38. public void RegisterCommands()
  39. {
  40. Messenger.Default.Register<ReloadTskMessage>(this, OnReloadTsk);
  41. Messenger.Default.Register<TskStateChangedMessage>(this, OnTskStateChanged);
  42. }
  43. private void OnReloadTsk(ReloadTskMessage message)
  44. {
  45. Reload();
  46. if (message.TskId.HasValue)
  47. {
  48. gvTskList.FocusedRowHandle = gvTskList.LocateByValue(nameof(Tsk.Oid), message.TskId);
  49. }
  50. }
  51. private void OnTskStateChanged(TskStateChangedMessage cmd)
  52. {
  53. var rowHandle = gvTskList.LocateByValue(nameof(Tsk.Oid), cmd.TskId);
  54. if (rowHandle < 0) return;
  55. var tsk = gvTskList.GetRow(rowHandle) as Tsk;
  56. this.Invoke(() => tsk.Reload());
  57. }
  58. private void TskListForm_Load(object sender, EventArgs e)
  59. {
  60. _tskManager.ResetAll();
  61. tskStateEdit.AddEnum<TskState>();
  62. Reload();
  63. }
  64. private void Reload()
  65. {
  66. Session = new Session();
  67. var sortProperties = new SortProperty[]{
  68. new SortProperty(nameof(Tsk.Oid), SortingDirection.Descending)
  69. };
  70. bsTskList.DataSource = new XPCollection<Tsk>(Session, null, sortProperties);
  71. }
  72. private void gvTskList_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
  73. {
  74. if (e.Button == MouseButtons.Left && e.Clicks == 1)
  75. {
  76. e.Handled = true;
  77. //btnEdit.PerformClick();
  78. var tskId = (int)gvTskList.GetRowCellValue(e.RowHandle, colOid);
  79. _tskManager.SelectTsk(tskId, 0);
  80. }
  81. }
  82. private void ShowEditForm(int? id, int stgId, string caption = null)
  83. {
  84. caption = caption.IfNullOrWhitespace(id.HasValue ? $"编辑任务-{caption}" : "新建任务");
  85. var form = new TskEditForm(id, stgId);
  86. form.Text = caption;
  87. //form.FormClosed += EditFormClosed;
  88. var documentManager = DocumentManager.FromControl(this.ParentForm);
  89. if (documentManager != null)
  90. {
  91. documentManager.View.AddDocument(form);
  92. }
  93. else
  94. {
  95. try
  96. {
  97. form.ShowDialog();
  98. }
  99. finally
  100. {
  101. form.Dispose();
  102. }
  103. }
  104. }
  105. private void EditFormClosed(object sender, FormClosedEventArgs e)
  106. {
  107. var form = sender as TskEditForm;
  108. form.FormClosed -= EditFormClosed;
  109. if (form.Id.HasValue)
  110. {
  111. Reload();
  112. gvTskList.FocusedRowHandle = gvTskList.LocateByValue(nameof(Tsk.Oid), form.Id);
  113. }
  114. }
  115. private void btnAdd_ItemClick(object sender, ItemClickEventArgs e)
  116. {
  117. //ShowEditForm(null, null);
  118. }
  119. private void btnEdit_ItemClick(object sender, ItemClickEventArgs e)
  120. {
  121. if (gvTskList.FocusedRowHandle < 0) return;
  122. var tsk = gvTskList.GetFocusedRow() as Tsk;
  123. //var id = (int)gvTskList.GetFocusedRowCellValue(colOid);
  124. ShowEditForm(tsk.Oid, tsk.Strategy?.Oid ?? 0, tsk.Name);
  125. }
  126. private void btnDelete_ItemClick(object sender, ItemClickEventArgs e)
  127. {
  128. if (gvTskList.FocusedRowHandle < 0) return;
  129. var handles = gvTskList.GetSelectedRows();
  130. if (handles.Length == 0) return;
  131. if (MsgHelper.ShowConfirm("确定删除选中的记录吗?"))
  132. {
  133. var modelList = handles.Select(m => gvTskList.GetRow(m) as Tsk).ToList();
  134. Session.Delete(modelList);
  135. Reload();
  136. }
  137. }
  138. private void gvTskList_MouseDown(object sender, MouseEventArgs e)
  139. {
  140. if (e.Button == MouseButtons.Right)
  141. {
  142. var hitInfo = gvTskList.CalcHitInfo(e.Location);
  143. btnStart.Visibility = btnStop.Visibility = btnEdit.Visibility = btnDelete.Visibility = hitInfo.InRow ? BarItemVisibility.Always : BarItemVisibility.Never;
  144. var tsk = gvTskList.GetRow(hitInfo.RowHandle) as Tsk;
  145. if (tsk != null)
  146. {
  147. bool isStart = tsk.State != TskState.Stop;
  148. btnStart.Enabled = !isStart;
  149. btnStop.Enabled = isStart;
  150. }
  151. popTskList.ShowPopup(grdTskList.PointToScreen(e.Location));
  152. }
  153. }
  154. private void btnStart_ItemClick(object sender, ItemClickEventArgs e)
  155. {
  156. if (gvTskList.FocusedRowHandle < 0) return;
  157. var tsk = gvTskList.GetFocusedRow() as Tsk;
  158. if (tsk.IsHistory)
  159. {
  160. StartTskForm startTskForm = new StartTskForm(tsk.Oid);
  161. if (startTskForm.ShowDialog() != DialogResult.OK) return;
  162. }
  163. try
  164. {
  165. TskScheduler.Default.Start(tsk.Oid);
  166. }
  167. catch (Exception ex)
  168. {
  169. MsgHelper.ShowError("启动任务出错," + ex.Message);
  170. }
  171. }
  172. private void btnStop_ItemClick(object sender, ItemClickEventArgs e)
  173. {
  174. if (gvTskList.FocusedRowHandle < 0) return;
  175. var id = (int)gvTskList.GetFocusedRowCellValue(colOid);
  176. try
  177. {
  178. TskScheduler.Default.Stop(id);
  179. }
  180. catch (Exception ex)
  181. {
  182. MsgHelper.ShowError("停止任务出错," + ex.Message);
  183. }
  184. }
  185. private void gvTskList_FocusedRowObjectChanged(object sender, FocusedRowObjectChangedEventArgs e)
  186. {
  187. }
  188. private void gvSignalList_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
  189. {
  190. if (e.Button == MouseButtons.Left && e.Clicks == 1)
  191. {
  192. e.Handled = true;
  193. var sig = (sender as GridView).GetRow(e.RowHandle) as TskSignal;
  194. _tskManager.SelectTsk(sig.Tsk.Oid, sig.Oid);
  195. }
  196. }
  197. }
  198. }