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