CtrlXl.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  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).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. List<XlInfo> xlInfos = new List<XlInfo>();
  59. xlInfos.Add(item);
  60. XlCalculateForm form = new XlCalculateForm(xlInfos);
  61. form.ShowDialog();
  62. });
  63. await LoadData(1);
  64. dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页";
  65. dataNavigator1.DataSource = list;
  66. dataNavigator1.Buttons.First.Enabled = false;
  67. dataNavigator1.Buttons.PrevPage.Enabled = false;
  68. }
  69. public async Task LoadData(int currentPage)
  70. {
  71. try
  72. {
  73. this.maxCount = await XlRepository.GetCount(satCode);
  74. var countPerPage = Convert.ToInt32(txtCountPerPage.Text);
  75. this.maxPage = maxCount / countPerPage;
  76. if (maxCount % countPerPage != 0)
  77. maxPage++;
  78. await LoadPageData(1);
  79. }
  80. catch (Exception ex)
  81. {
  82. await LogHelper.Error("加载星历信息异常", ex);
  83. DxHelper.MsgBoxHelper.ShowError("加载星历信息异常");
  84. }
  85. }
  86. private async Task LoadPageData(int currentPage)
  87. {
  88. var dtResult = await XlRepository.GetPageAsync(currentPage, Convert.ToInt32(txtCountPerPage.Text), satCode);
  89. list.Clear();
  90. list.AddRange(dtResult);
  91. gridView1.RefreshData();
  92. }
  93. private async void btnImp_Click(object sender, EventArgs e)
  94. {
  95. this.layoutControl1.Enabled = false;
  96. if (string.IsNullOrEmpty(btnOpen.Text))
  97. {
  98. Serilog.Log.Warning($"请选择星历文件");
  99. DxHelper.MsgBoxHelper.ShowInfo($"请选择星历文件");
  100. this.layoutControl1.Enabled = true;
  101. return;
  102. }
  103. string file;
  104. try
  105. {
  106. file = await HttpHelper.UploadFileAsync(btnOpen.Text, SysConfig.GetBaseUrl());
  107. }
  108. catch (Exception ex)
  109. {
  110. layoutControl1.Enabled = true;
  111. Serilog.Log.Error(ex, ex.Message);
  112. DxHelper.MsgBoxHelper.ShowError(ex.Message);
  113. return;
  114. }
  115. try
  116. {
  117. XlImportDto dto = new XlImportDto() { File = file };
  118. var result = await HttpHelper.PostRequestAsync<RecordRes>(SysConfig.GetUrl("Xl/ImportTleAsync"), dto, 120);
  119. if (result.code == 200)
  120. {
  121. DxHelper.MsgBoxHelper.ShowInfo($"星历导入成功.共导入{result.data.Count}条");
  122. await LoadData(1);
  123. }
  124. else
  125. {
  126. Serilog.Log.Error(result.msg);
  127. DxHelper.MsgBoxHelper.ShowError($"星历导入失败,{result.msg}!");
  128. }
  129. }
  130. catch (TaskCanceledException)
  131. {
  132. Serilog.Log.Warning($"星历导入超时");
  133. DxHelper.MsgBoxHelper.ShowInfo($"星历导入超时");
  134. return;
  135. }
  136. catch (Exception ex)
  137. {
  138. Serilog.Log.Error(ex, "星历导入异常");
  139. }
  140. this.layoutControl1.Enabled = true;
  141. }
  142. private async Task<bool> Del(List<XlInfo> list)
  143. {
  144. try
  145. {
  146. this.Enabled = false;
  147. var ids = list.Select(p => p.ID);
  148. using (RHDWContext db = new RHDWContext())
  149. {
  150. var delItems = await db.XlInfos.Where(p => ids.Contains(p.ID)).ToListAsync();
  151. db.XlInfos.RemoveRange(delItems);
  152. await db.SaveChangesAsync();
  153. }
  154. await LoadData(1);
  155. return true;
  156. }
  157. catch (Exception ex)
  158. {
  159. Serilog.Log.Error(ex, "删除选中的星历时异常");
  160. DxHelper.MsgBoxHelper.ShowError("删除选中的星历时异常");
  161. return false;
  162. }
  163. finally
  164. {
  165. this.Enabled = true;
  166. }
  167. }
  168. private async void dataNavigator1_ButtonClick(object sender, NavigatorButtonClickEventArgs e)
  169. {
  170. if (e.Button.ButtonType == NavigatorButtonType.First)
  171. {
  172. currentPage = 1;
  173. dataNavigator1.Buttons.First.Enabled = false;
  174. dataNavigator1.Buttons.PrevPage.Enabled = false;
  175. dataNavigator1.Buttons.Last.Enabled = true;
  176. dataNavigator1.Buttons.NextPage.Enabled = true;
  177. }
  178. else if (e.Button.ButtonType == NavigatorButtonType.Last)
  179. {
  180. currentPage = maxPage;
  181. dataNavigator1.Buttons.Last.Enabled = false;
  182. dataNavigator1.Buttons.NextPage.Enabled = false;
  183. dataNavigator1.Buttons.First.Enabled = true;
  184. dataNavigator1.Buttons.PrevPage.Enabled = true;
  185. }
  186. else if (e.Button.ButtonType == NavigatorButtonType.NextPage)
  187. {
  188. currentPage++;
  189. dataNavigator1.Buttons.First.Enabled = true;
  190. dataNavigator1.Buttons.PrevPage.Enabled = true;
  191. if (currentPage == maxPage)
  192. {
  193. dataNavigator1.Buttons.Last.Enabled = false;
  194. dataNavigator1.Buttons.NextPage.Enabled = false;
  195. }
  196. }
  197. else if (e.Button.ButtonType == NavigatorButtonType.PrevPage)
  198. {
  199. currentPage--;
  200. dataNavigator1.Buttons.Last.Enabled = true;
  201. dataNavigator1.Buttons.NextPage.Enabled = true;
  202. if (currentPage == 1)
  203. {
  204. dataNavigator1.Buttons.First.Enabled = false;
  205. dataNavigator1.Buttons.PrevPage.Enabled = false;
  206. }
  207. }
  208. await LoadPageData(currentPage);
  209. dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页";
  210. }
  211. private async void btnGo_Click(object sender, EventArgs e)
  212. {
  213. int.TryParse(txtGoPage.Text, out int _currentPage);
  214. if (_currentPage > maxPage)
  215. {
  216. _currentPage = maxPage;
  217. }
  218. if (_currentPage > 0)
  219. {
  220. currentPage = _currentPage;
  221. if (currentPage == 1 && currentPage < maxPage)
  222. {
  223. dataNavigator1.Buttons.First.Enabled = false;
  224. dataNavigator1.Buttons.PrevPage.Enabled = false;
  225. dataNavigator1.Buttons.Last.Enabled = true;
  226. dataNavigator1.Buttons.NextPage.Enabled = true;
  227. }
  228. else if (currentPage == 1 && currentPage == maxPage)
  229. {
  230. dataNavigator1.Buttons.First.Enabled = false;
  231. dataNavigator1.Buttons.PrevPage.Enabled = false;
  232. dataNavigator1.Buttons.First.Enabled = false;
  233. dataNavigator1.Buttons.PrevPage.Enabled = false;
  234. }
  235. else if (currentPage == maxPage)
  236. {
  237. dataNavigator1.Buttons.First.Enabled = true;
  238. dataNavigator1.Buttons.PrevPage.Enabled = true;
  239. dataNavigator1.Buttons.Last.Enabled = false;
  240. dataNavigator1.Buttons.NextPage.Enabled = false;
  241. if (dataNavigator1.Position == 0)
  242. dataNavigator1.Position = 1;
  243. }
  244. else
  245. {
  246. dataNavigator1.Buttons.First.Enabled = true;
  247. dataNavigator1.Buttons.PrevPage.Enabled = true;
  248. dataNavigator1.Buttons.Last.Enabled = true;
  249. dataNavigator1.Buttons.NextPage.Enabled = true;
  250. dataNavigator1.Position = 1;
  251. }
  252. dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页";
  253. await LoadPageData(currentPage);
  254. }
  255. }
  256. private async void txtCountPerPage_EditValueChanged(object sender, EventArgs e)
  257. {
  258. int.TryParse(txtCountPerPage.Text, out int countPerPage);
  259. if (countPerPage > 0)
  260. {
  261. this.maxPage = maxCount / countPerPage;
  262. if (maxCount % countPerPage != 0)
  263. maxPage++;
  264. if (currentPage > maxPage)
  265. currentPage = maxPage;
  266. if (currentPage == 1 && currentPage < maxPage)
  267. {
  268. dataNavigator1.Buttons.First.Enabled = false;
  269. dataNavigator1.Buttons.PrevPage.Enabled = false;
  270. dataNavigator1.Buttons.Last.Enabled = true;
  271. dataNavigator1.Buttons.NextPage.Enabled = true;
  272. }
  273. else if (currentPage == 1 && currentPage == maxPage)
  274. {
  275. dataNavigator1.Buttons.First.Enabled = false;
  276. dataNavigator1.Buttons.PrevPage.Enabled = false;
  277. dataNavigator1.Buttons.First.Enabled = false;
  278. dataNavigator1.Buttons.PrevPage.Enabled = false;
  279. }
  280. else if (currentPage == maxPage)
  281. {
  282. dataNavigator1.Buttons.First.Enabled = true;
  283. dataNavigator1.Buttons.PrevPage.Enabled = true;
  284. dataNavigator1.Buttons.Last.Enabled = false;
  285. dataNavigator1.Buttons.NextPage.Enabled = false;
  286. }
  287. else
  288. {
  289. dataNavigator1.Buttons.First.Enabled = true;
  290. dataNavigator1.Buttons.PrevPage.Enabled = true;
  291. dataNavigator1.Buttons.Last.Enabled = true;
  292. dataNavigator1.Buttons.NextPage.Enabled = true;
  293. dataNavigator1.Position = 1;
  294. }
  295. dataNavigator1.TextStringFormat = $"第{currentPage}页/共{maxPage}页";
  296. await LoadPageData(currentPage);
  297. }
  298. }
  299. }
  300. }