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