TaskEditor.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. using DevExpress.XtraEditors;
  2. using DW5S.Entity;
  3. using DW5S.Repostory;
  4. using DW5S.ViewModel;
  5. using ExtensionsDev;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using XdCxRhDW5S.ViewModel;
  12. namespace DW5S.App.EditForms
  13. {
  14. public partial class TaskEditor : DevExpress.XtraEditors.XtraForm
  15. {
  16. public TaskViewModel info;
  17. public List<SigViewModel> selectedItem = new List<SigViewModel>();
  18. public TaskEditor()
  19. {
  20. InitializeComponent();
  21. this.layoutControl1.UseDefault();
  22. this.Text = "添加任务";
  23. layAsSave.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  24. info = new TaskViewModel();
  25. this.StartPosition = FormStartPosition.CenterParent;
  26. this.txtTaskType.Properties.AddEnum<EnumTaskType>();
  27. this.txtTaskType.SelectedIndex = 0;
  28. this.txtTaskType_SelectedIndexChanged(this, EventArgs.Empty);
  29. this.txtPosType.Properties.AddEnum<EnumPosType>();
  30. this.txtPosType.SelectedIndex =0;
  31. }
  32. public TaskEditor(TaskViewModel info, List<SigViewModel> taskSigList)
  33. : this()
  34. {
  35. this.Text = $"编辑任务[{info.TaskName}]";
  36. this.info = info;
  37. this.selectedItem = taskSigList;
  38. layAsSave.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  39. }
  40. private async void TaskEditor_Load(object sender, EventArgs e)
  41. {
  42. var normalsats = await GetSatAsync();
  43. var cdbsats = await GetSatAsync(EnumSatType.CdbSat);
  44. if (info.PosType == EnumPosType.X1D1CX)
  45. {
  46. this.txtMainSat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
  47. this.txtAdja1Sat.UseDefault().SetData(cdbsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
  48. }
  49. else if (info.PosType == EnumPosType.X2D1 || info.PosType == EnumPosType.X2D1NoRef)
  50. {
  51. this.txtMainSat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
  52. this.txtAdja1Sat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
  53. this.txtAdja2Sat.UseDefault().SetData(cdbsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
  54. }
  55. if (this.Text.StartsWith("编辑任务") && info != null)
  56. {
  57. if (info.PosType == EnumPosType.X1D1CX)
  58. {
  59. var satMain = normalsats.FirstOrDefault(w => w.SatCode == info.MainSat);
  60. this.txtMainSat.EditValue = satMain;
  61. var satAdja1 = cdbsats.FirstOrDefault(w => w.SatCode == info.Adja1Sat);
  62. this.txtAdja1Sat.EditValue = satAdja1;
  63. }
  64. else if (info.PosType == EnumPosType.X2D1 || info.PosType == EnumPosType.X2D1NoRef)
  65. {
  66. var satMain = normalsats.FirstOrDefault(w => w.SatCode == info.MainSat);
  67. this.txtMainSat.EditValue = satMain;
  68. var satAdja1 = normalsats.FirstOrDefault(w => w.SatCode == info.Adja1Sat);
  69. this.txtAdja1Sat.EditValue = satAdja1;
  70. var satAdja2 = cdbsats.FirstOrDefault(w => w.SatCode == info.Adja2Sat);
  71. this.txtAdja2Sat.EditValue = satAdja2;
  72. }
  73. this.txtTaskName.Text = info.TaskName;
  74. this.txtPosType.SelectedIndex = (int)info.PosType;
  75. this.txtTaskType.SelectedIndex = (int)info.TaskType;
  76. }
  77. }
  78. public async Task<List<SatViewModel>> GetSatAsync(EnumSatType enumSat = EnumSatType.NormalSat)
  79. {
  80. var unitOfWork = IocContainer.UnitOfWork;
  81. var sats = await unitOfWork.Of<SatInfo>().FindAsync(f => f.EnumSatType == enumSat);
  82. var satList = sats.To<List<SatViewModel>>();
  83. return satList;
  84. }
  85. private async void btnSave_ClickAsync(object sender, EventArgs e)
  86. {
  87. try
  88. {
  89. dxErrorProvider.ClearErrors();
  90. var posType = (EnumPosType)txtPosType.Properties.Items[txtPosType.SelectedIndex].Value;
  91. if (txtTaskName.EditValue == null)
  92. {
  93. dxErrorProvider.SetError(txtTaskName, "请填写任务名");
  94. return;
  95. }
  96. if (!selectedItem.Any())
  97. {
  98. DxHelper.MsgBoxHelper.ShowError("请选择信号");
  99. return;
  100. }
  101. if (this.Text == "添加任务")
  102. {
  103. var unitOfWork = IocContainer.UnitOfWork;
  104. var repsTask = unitOfWork.Of<TaskInfo>();
  105. if (await repsTask.FirstOrDefaultAsync(p => p.TaskName == txtTaskName.Text) != null)
  106. {
  107. dxErrorProvider.SetError(txtTaskName, "任务名称重复");
  108. return;
  109. }
  110. }
  111. else
  112. {
  113. var unitOfWork = IocContainer.UnitOfWork;
  114. var repsTask = unitOfWork.Of<TaskInfo>();
  115. if (await repsTask.FirstOrDefaultAsync(p => p.Id != info.Id && p.TaskName == txtTaskName.Text) != null)
  116. {
  117. dxErrorProvider.SetError(txtTaskName, "任务名称重复");
  118. return;
  119. }
  120. }
  121. if (posType == EnumPosType.X1D1CX)
  122. {
  123. if (txtMainSat.EditValue == null)
  124. {
  125. dxErrorProvider.SetError(txtMainSat, "请选择卫星");
  126. return;
  127. }
  128. if (txtAdja1Sat.EditValue == null)
  129. {
  130. dxErrorProvider.SetError(txtAdja1Sat, "请选择地面站卫星");
  131. return;
  132. }
  133. }
  134. else if (posType == EnumPosType.X2D1 || posType == EnumPosType.X2D1NoRef)
  135. {
  136. if (txtMainSat.EditValue == null)
  137. {
  138. dxErrorProvider.SetError(txtMainSat, "请选择主星");
  139. return;
  140. }
  141. if (txtAdja1Sat.EditValue == null)
  142. {
  143. dxErrorProvider.SetError(txtAdja1Sat, "请选择邻星");
  144. return;
  145. }
  146. if (txtMainSat.EditValue == txtAdja1Sat.EditValue)
  147. {
  148. dxErrorProvider.SetError(txtAdja1Sat, "邻星不能和主星一致");
  149. return;
  150. }
  151. if (txtAdja2Sat.EditValue == null)
  152. {
  153. dxErrorProvider.SetError(txtAdja2Sat, "请选择地面站卫星");
  154. return;
  155. }
  156. }
  157. info.TaskState = EnumTaskState.Stopped;
  158. info.TaskName = txtTaskName.Text;
  159. info.PosType = (EnumPosType)txtPosType.SelectedIndex;
  160. info.MainSat = ((SatViewModel)txtMainSat.EditValue).SatCode;
  161. if (txtAdja1Sat.EditValue != null)
  162. info.Adja1Sat = ((SatViewModel)txtAdja1Sat.EditValue).SatCode;
  163. if (txtAdja2Sat.EditValue != null)
  164. info.Adja2Sat = ((SatViewModel)txtAdja2Sat.EditValue).SatCode;
  165. info.TaskType = (EnumTaskType)txtTaskType.SelectedIndex;
  166. this.DialogResult = DialogResult.OK;
  167. }
  168. catch (Exception ex)
  169. {
  170. string msg = "编辑任务信息出错";
  171. IocContainer.Logger.Error(ex, msg);
  172. DxHelper.MsgBoxHelper.ShowError(msg);
  173. }
  174. }
  175. private async void txtPosType_EditValueChanged(object sender, EventArgs e)
  176. {
  177. RadioGroup posTypeRadioGroup = sender as RadioGroup;
  178. var posType = (EnumPosType)posTypeRadioGroup.Properties.Items[posTypeRadioGroup.SelectedIndex].Value;
  179. var normalsats = await GetSatAsync();
  180. var cdbsats = await GetSatAsync(EnumSatType.CdbSat);
  181. if (posType == EnumPosType.X1D1CX)
  182. {
  183. layoutControlItemAdja1.Text = "地面站星";
  184. layoutControlItemAdja1.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  185. layoutControlItemAdja2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  186. this.txtMainSat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
  187. this.txtAdja1Sat.UseDefault().SetData(cdbsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
  188. var satMain = normalsats.FirstOrDefault(w => w.SatCode == info.MainSat);
  189. this.txtMainSat.EditValue = satMain;
  190. var satAdja1 = cdbsats.FirstOrDefault(w => w.SatCode == info.Adja1Sat);
  191. this.txtAdja1Sat.EditValue = satAdja1;
  192. }
  193. else if (posType == EnumPosType.X2D1 || posType == EnumPosType.X2D1NoRef)
  194. {
  195. layoutControlItemAdja1.Text = "邻星";
  196. layoutControlItemAdja1.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  197. layoutControlItemAdja2.Text = "地面站星";
  198. layoutControlItemAdja2.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  199. this.txtMainSat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
  200. this.txtAdja1Sat.UseDefault().SetData(normalsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
  201. this.txtAdja2Sat.UseDefault().SetData(cdbsats, displayField: nameof(SatViewModel.Sat)).UseDoubleClickToSelectAll();
  202. var satMain = normalsats.FirstOrDefault(w => w.SatCode == info.MainSat);
  203. this.txtMainSat.EditValue = satMain;
  204. var satAdja1 = normalsats.FirstOrDefault(w => w.SatCode == info.Adja1Sat);
  205. this.txtAdja1Sat.EditValue = satAdja1;
  206. var satAdja2 = cdbsats.FirstOrDefault(w => w.SatCode == info.Adja2Sat);
  207. this.txtAdja2Sat.EditValue = satAdja2;
  208. }
  209. this.layoutControl1.BestFit();
  210. }
  211. private void txtTaskType_SelectedIndexChanged(object sender, EventArgs e)
  212. {
  213. var a = this.Height;
  214. if (this.Height < 438)
  215. this.Height += 55;
  216. this.layoutControl1.BestFit();
  217. }
  218. private void btnFreq_Click(object sender, EventArgs e)
  219. {
  220. if (this.Text.StartsWith("添加任务"))
  221. {
  222. TaskEditorSignal frm = new TaskEditorSignal();
  223. if (frm.ShowDialog() != DialogResult.OK) return;
  224. frm.info = info;
  225. selectedItem.Clear();
  226. selectedItem = frm.listSigInfoSelected;
  227. }
  228. else if (this.Text.StartsWith("编辑任务") && info != null)
  229. {
  230. TaskEditorSignal frm = new TaskEditorSignal(info, selectedItem);
  231. if (frm.ShowDialog() != DialogResult.OK) return;
  232. selectedItem.Clear();
  233. selectedItem = frm.listSigInfoSelected;
  234. }
  235. }
  236. }
  237. }