CtrlXl.cs 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. using DevExpress.XtraEditors;
  2. using DevExpress.XtraScheduler;
  3. using DxHelper;
  4. using ExtensionsDev;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Diagnostics;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using DW5S.App.CorTools;
  12. using DW5S.DTO;
  13. using DW5S.Entity;
  14. using DW5S.Repostory;
  15. namespace DW5S.App.UserControl
  16. {
  17. public partial class CtrlXl : DevExpress.XtraEditors.XtraUserControl
  18. {
  19. List<XlInfo> list = new List<XlInfo>();
  20. int maxCount = 0;
  21. int maxPage = 0;
  22. int currentPage = 1;
  23. int? satCode = null;
  24. public CtrlXl()
  25. {
  26. InitializeComponent();
  27. this.layoutControl1.UseDefault();
  28. btnOpen.UseChooseFile().UseDoubleClickToSelectAll();
  29. var sat = XlRepository.GetAllSat().Result;
  30. txtSat.UseDefault("不限制", true).SetData(sat, nameof(SatInfo.Sat));
  31. }
  32. private async void TxtSat_EditValueChanged(object sender, EventArgs e)
  33. {
  34. var sat = txtSat.EditValue as SatInfo;
  35. satCode = sat?.SatCode;
  36. this.maxCount = await XlRepository.GetCount(satCode);
  37. var countPerPage = Convert.ToInt32(txtCountPerPage.Text);
  38. this.maxPage = maxCount / countPerPage;
  39. if (maxCount % countPerPage != 0)
  40. maxPage++;
  41. currentPage = 1;
  42. dataNavigator1.TextStringFormat = $"第{1}页/共{maxPage}页";
  43. await LoadPageData(1);
  44. }
  45. private async void CtrlXl_Load(object sender, EventArgs e)
  46. {
  47. gridXl.UseDefault(list).UseRowNumber().UseDeleteAsync<XlInfo>(Del)
  48. .UseClearAsync<XlInfo>(Clear).UseExportXlsx()
  49. .AddMenu("星历推算", SvgHelper.LoadFromFile("Image\\XlCalc.svg"), () =>
  50. {
  51. var ids = gridView1.GetSelectedRows();
  52. if (ids.Length <= 0)
  53. {
  54. XtraMessageBox.Show("请选择需要星历推算的数据信息!");
  55. return;
  56. }
  57. var item = gridView1.GetRow(ids[0]) as XlInfo;
  58. XlCalculateForm form = new XlCalculateForm(item.TwoLine);
  59. form.ShowDialog();
  60. })
  61. .AddMenu("刷新数据", SvgHelper.CreateRefresh(), async () =>
  62. {
  63. currentPage = 1;
  64. dataNavigator1.Buttons.First.Enabled = false;
  65. dataNavigator1.Buttons.PrevPage.Enabled = false;
  66. dataNavigator1.Buttons.Last.Enabled = true;
  67. dataNavigator1.Buttons.NextPage.Enabled = true;
  68. dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页";
  69. await LoadPageData(currentPage);
  70. });
  71. await LoadData(1);
  72. dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页";
  73. dataNavigator1.DataSource = list;
  74. dataNavigator1.Buttons.First.Enabled = false;
  75. dataNavigator1.Buttons.PrevPage.Enabled = false;
  76. }
  77. public async Task LoadData(int currentPage)
  78. {
  79. try
  80. {
  81. this.maxCount = await XlRepository.GetCount(satCode);
  82. var countPerPage = Convert.ToInt32(txtCountPerPage.Text);
  83. this.maxPage = maxCount / countPerPage;
  84. if (maxCount % countPerPage != 0)
  85. maxPage++;
  86. await LoadPageData(1);
  87. }
  88. catch (Exception ex)
  89. {
  90. await LogHelper.Error("加载星历信息异常", ex);
  91. DxHelper.MsgBoxHelper.ShowError("加载星历信息异常");
  92. }
  93. }
  94. private async Task LoadPageData(int currentPage)
  95. {
  96. var dtResult = await XlRepository.GetPageAsync(currentPage, Convert.ToInt32(txtCountPerPage.Text), satCode);
  97. list.Clear();
  98. list.AddRange(dtResult);
  99. gridView1.RefreshData();
  100. if (maxPage == 1)
  101. {
  102. dataNavigator1.Buttons.First.Enabled = false;
  103. dataNavigator1.Buttons.PrevPage.Enabled = false;
  104. dataNavigator1.Buttons.Last.Enabled = false;
  105. dataNavigator1.Buttons.NextPage.Enabled = false;
  106. }
  107. }
  108. private async void btnImp_Click(object sender, EventArgs e)
  109. {
  110. this.layoutControl1.Enabled = false;
  111. if (string.IsNullOrEmpty(btnOpen.Text))
  112. {
  113. DW5S.Framework.LogHelper.Warning($"请选择星历文件");
  114. DxHelper.MsgBoxHelper.ShowInfo($"请选择星历文件");
  115. this.layoutControl1.Enabled = true;
  116. return;
  117. }
  118. string file;
  119. try
  120. {
  121. file = await HttpHelper.UploadFileAsync(btnOpen.Text, SysConfig.GetBaseUrl());
  122. }
  123. catch (Exception ex)
  124. {
  125. layoutControl1.Enabled = true;
  126. DW5S.Framework.LogHelper.Error(ex.Message, ex);
  127. DxHelper.MsgBoxHelper.ShowError(ex.Message);
  128. return;
  129. }
  130. try
  131. {
  132. XlImportDto dto = new XlImportDto() { File = file };
  133. var result = await HttpHelper.PostRequestAsync<RecordRes>(SysConfig.GetUrl("Xl/ImportTleAsync"), dto);
  134. if (result.code == 200)
  135. {
  136. DxHelper.MsgBoxHelper.ShowInfo($"星历导入成功.共导入{result.data.Count}条");
  137. await LoadData(1);
  138. }
  139. else
  140. {
  141. DW5S.Framework.LogHelper.Error(result.msg);
  142. DxHelper.MsgBoxHelper.ShowError($"星历导入失败,{result.msg}!");
  143. }
  144. }
  145. catch (TaskCanceledException)
  146. {
  147. DW5S.Framework.LogHelper.Warning($"星历导入超时");
  148. DxHelper.MsgBoxHelper.ShowInfo($"星历导入超时");
  149. return;
  150. }
  151. catch (Exception ex)
  152. {
  153. DW5S.Framework.LogHelper.Error("星历导入异常", ex);
  154. }
  155. this.layoutControl1.Enabled = true;
  156. }
  157. private async Task<bool> Del(List<XlInfo> list)
  158. {
  159. try
  160. {
  161. this.Enabled = false;
  162. var ids = list.Select(p => p.ID);
  163. using (RHDWContext db = new RHDWContext())
  164. {
  165. var delItems = await db.XlInfos.Where(p => ids.Contains(p.ID)).ToListAsync();
  166. db.XlInfos.RemoveRange(delItems);
  167. await db.SaveChangesAsync();
  168. }
  169. await LoadData(1);
  170. return true;
  171. }
  172. catch (Exception ex)
  173. {
  174. DW5S.Framework.LogHelper.Error("删除选中的星历时异常", ex);
  175. DxHelper.MsgBoxHelper.ShowError("删除选中的星历时异常");
  176. return false;
  177. }
  178. finally
  179. {
  180. this.Enabled = true;
  181. }
  182. }
  183. private async Task<bool> Clear(List<XlInfo> list)
  184. {
  185. try
  186. {
  187. this.Enabled = false;
  188. using (RHDWContext db = new RHDWContext())
  189. {
  190. if (satCode == null)
  191. {
  192. db.XlInfos.RemoveRange(db.XlInfos);
  193. }
  194. else
  195. {
  196. db.XlInfos.RemoveRange(db.XlInfos.Where(p => p.SatCode == satCode.Value));
  197. }
  198. await db.SaveChangesAsync();
  199. }
  200. await LoadData(1);
  201. return true;
  202. }
  203. catch (Exception ex)
  204. {
  205. DW5S.Framework.LogHelper.Error("清空星历时异常", ex);
  206. DxHelper.MsgBoxHelper.ShowError("清空星历时异常");
  207. return false;
  208. }
  209. finally
  210. {
  211. this.Enabled = true;
  212. }
  213. }
  214. private async void dataNavigator1_ButtonClick(object sender, NavigatorButtonClickEventArgs e)
  215. {
  216. if (e.Button.ButtonType == NavigatorButtonType.First)
  217. {
  218. currentPage = 1;
  219. dataNavigator1.Buttons.First.Enabled = false;
  220. dataNavigator1.Buttons.PrevPage.Enabled = false;
  221. dataNavigator1.Buttons.Last.Enabled = true;
  222. dataNavigator1.Buttons.NextPage.Enabled = true;
  223. }
  224. else if (e.Button.ButtonType == NavigatorButtonType.Last)
  225. {
  226. currentPage = maxPage;
  227. dataNavigator1.Buttons.Last.Enabled = false;
  228. dataNavigator1.Buttons.NextPage.Enabled = false;
  229. dataNavigator1.Buttons.First.Enabled = true;
  230. dataNavigator1.Buttons.PrevPage.Enabled = true;
  231. }
  232. else if (e.Button.ButtonType == NavigatorButtonType.NextPage)
  233. {
  234. currentPage++;
  235. dataNavigator1.Buttons.First.Enabled = true;
  236. dataNavigator1.Buttons.PrevPage.Enabled = true;
  237. if (currentPage >= maxPage)
  238. {
  239. dataNavigator1.Buttons.Last.Enabled = false;
  240. dataNavigator1.Buttons.NextPage.Enabled = false;
  241. }
  242. else
  243. {
  244. dataNavigator1.Buttons.Last.Enabled = true;
  245. dataNavigator1.Buttons.NextPage.Enabled = true;
  246. }
  247. }
  248. else if (e.Button.ButtonType == NavigatorButtonType.PrevPage)
  249. {
  250. currentPage--;
  251. dataNavigator1.Buttons.Last.Enabled = true;
  252. dataNavigator1.Buttons.NextPage.Enabled = true;
  253. if (currentPage == 1)
  254. {
  255. dataNavigator1.Buttons.First.Enabled = false;
  256. dataNavigator1.Buttons.PrevPage.Enabled = false;
  257. }
  258. }
  259. await LoadPageData(currentPage);
  260. dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页";
  261. }
  262. private async void btnGo_Click(object sender, EventArgs e)
  263. {
  264. int.TryParse(txtGoPage.Text, out int _currentPage);
  265. if (_currentPage > maxPage)
  266. {
  267. _currentPage = maxPage;
  268. }
  269. if (_currentPage > 0)
  270. {
  271. currentPage = _currentPage;
  272. if (currentPage == 1 && currentPage < maxPage)
  273. {
  274. dataNavigator1.Buttons.First.Enabled = false;
  275. dataNavigator1.Buttons.PrevPage.Enabled = false;
  276. dataNavigator1.Buttons.Last.Enabled = true;
  277. dataNavigator1.Buttons.NextPage.Enabled = true;
  278. }
  279. else if (currentPage == 1 && currentPage == maxPage)
  280. {
  281. dataNavigator1.Buttons.First.Enabled = false;
  282. dataNavigator1.Buttons.PrevPage.Enabled = false;
  283. dataNavigator1.Buttons.First.Enabled = false;
  284. dataNavigator1.Buttons.PrevPage.Enabled = false;
  285. }
  286. else if (currentPage == maxPage)
  287. {
  288. dataNavigator1.Buttons.First.Enabled = true;
  289. dataNavigator1.Buttons.PrevPage.Enabled = true;
  290. dataNavigator1.Buttons.Last.Enabled = false;
  291. dataNavigator1.Buttons.NextPage.Enabled = false;
  292. if (dataNavigator1.Position == 0)
  293. dataNavigator1.Position = 1;
  294. }
  295. else
  296. {
  297. dataNavigator1.Buttons.First.Enabled = true;
  298. dataNavigator1.Buttons.PrevPage.Enabled = true;
  299. dataNavigator1.Buttons.Last.Enabled = true;
  300. dataNavigator1.Buttons.NextPage.Enabled = true;
  301. dataNavigator1.Position = 1;
  302. }
  303. dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页";
  304. await LoadPageData(currentPage);
  305. }
  306. }
  307. private async void txtCountPerPage_EditValueChanged(object sender, EventArgs e)
  308. {
  309. int.TryParse(txtCountPerPage.Text, out int countPerPage);
  310. if (countPerPage > 0)
  311. {
  312. this.maxPage = maxCount / countPerPage;
  313. if (maxCount % countPerPage != 0)
  314. maxPage++;
  315. if (currentPage > maxPage)
  316. currentPage = maxPage;
  317. if (currentPage == 1 && currentPage < maxPage)
  318. {
  319. dataNavigator1.Buttons.First.Enabled = false;
  320. dataNavigator1.Buttons.PrevPage.Enabled = false;
  321. dataNavigator1.Buttons.Last.Enabled = true;
  322. dataNavigator1.Buttons.NextPage.Enabled = true;
  323. }
  324. else if (currentPage == 1 && currentPage == maxPage)
  325. {
  326. dataNavigator1.Buttons.First.Enabled = false;
  327. dataNavigator1.Buttons.PrevPage.Enabled = false;
  328. dataNavigator1.Buttons.First.Enabled = false;
  329. dataNavigator1.Buttons.PrevPage.Enabled = false;
  330. }
  331. else if (currentPage == maxPage)
  332. {
  333. dataNavigator1.Buttons.First.Enabled = true;
  334. dataNavigator1.Buttons.PrevPage.Enabled = true;
  335. dataNavigator1.Buttons.Last.Enabled = false;
  336. dataNavigator1.Buttons.NextPage.Enabled = false;
  337. }
  338. else
  339. {
  340. dataNavigator1.Buttons.First.Enabled = true;
  341. dataNavigator1.Buttons.PrevPage.Enabled = true;
  342. dataNavigator1.Buttons.Last.Enabled = true;
  343. dataNavigator1.Buttons.NextPage.Enabled = true;
  344. dataNavigator1.Position = 1;
  345. }
  346. dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页";
  347. await LoadPageData(currentPage);
  348. }
  349. }
  350. }
  351. }