ImageSourceNewWindow.xaml.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  1. using ivf_tl_Entity.Entity.balance;
  2. using ivf_tl_Entity.Enums;
  3. using ivf_tl_Entity.Pic;
  4. using ivf_tl_Manage.Converts;
  5. using ivf_tl_Manage.UserControls;
  6. using ivf_tl_Service.HttpProvider;
  7. using Newtonsoft.Json;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Diagnostics;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading.Tasks;
  14. using System.Windows;
  15. using System.Windows.Controls;
  16. using System.Windows.Data;
  17. using System.Windows.Documents;
  18. using System.Windows.Input;
  19. using System.Windows.Media;
  20. using System.Windows.Media.Imaging;
  21. using System.Windows.Shapes;
  22. namespace ivf_tl_Manage.Win
  23. {
  24. /// <summary>
  25. /// ImageSourceNewWindow.xaml 的交互逻辑
  26. /// </summary>
  27. public partial class ImageSourceNewWindow : Window
  28. {
  29. PicProvider picProvider = null;
  30. int houseSn;
  31. int pictureLayer;
  32. long embryoId;
  33. string tlSn;
  34. Dish dish;
  35. List<int> FocalList = new List<int>();
  36. List<PhotoBoxSetting1> PhotoBoxSettings = new List<PhotoBoxSetting1>();
  37. public ImageSourceNewWindow(Embryo embryo, int houseSn, int pictureLayer, string tlSn, Dish dish, int max, int min, List<PhotoBoxSetting1> photoBoxSetting1s)
  38. {
  39. try
  40. {
  41. InitializeComponent();
  42. this.Owner = AppData.Instance.MainWindow;
  43. PhotoBoxSettings = photoBoxSetting1s;
  44. this.houseSn = houseSn;
  45. this.pictureLayer = pictureLayer;
  46. this.tlSn = tlSn;
  47. picProvider = AppData.Instance.GetPicProvider();
  48. GetMaxAndMinFocal(picProvider.GetSourcePicturesTotalLayerApi(tlSn, houseSn, dish.embryoList.First().id));
  49. this.dish = dish;
  50. PicPageSize = 42;
  51. for (int i = MinFocal; i <= MaxFocal; i++)
  52. {
  53. FocalList.Add(i);
  54. }
  55. this.ComBox_Focal.ItemsSource = FocalList;
  56. this.ComBox_Focal.SelectedItem = pictureLayer;
  57. this.ComBox_Well.ItemsSource = this.dish.embryoList;
  58. if (embryo == null)
  59. {
  60. this.ComBox_Well.SelectedIndex = 0;
  61. }
  62. else
  63. {
  64. this.ComBox_Well.SelectedItem = embryo;
  65. }
  66. Loaded += (s, e) =>
  67. {
  68. if (!this.dish.embryoList.Any()) return;
  69. long embryoIdC = this.dish.embryoList.First().id;
  70. if (embryo != null) embryoIdC = embryo.id;
  71. this.embryoId = embryoIdC;
  72. var aa = picProvider.GetImageSourcePageApi(embryoIdC, houseSn, pictureLayer, tlSn, 1, PicPageSize, PhotoBoxSettings);
  73. PicDataCount = aa.total;
  74. return;
  75. };
  76. this.Closed += (a, b) => AppData.Instance.MainWindow.Activate();
  77. Unloaded += (s, e) =>
  78. {
  79. _root_Canvas.Children.Clear();
  80. };
  81. }
  82. catch (Exception ex)
  83. {
  84. ExLog(ex, "ImageSourceWindow");
  85. }
  86. }
  87. int MaxFocal, MinFocal;
  88. public void GetMaxAndMinFocal(int MaxTotalLayer)
  89. {
  90. if (MaxTotalLayer <= 0)
  91. {
  92. MaxFocal = 0;
  93. MinFocal = 0;
  94. return;
  95. }
  96. MaxFocal = (MaxTotalLayer - 1) / 2;
  97. MinFocal = -MaxFocal;
  98. }
  99. public int PicPageSize
  100. {
  101. get { return (int)GetValue(PicPageSizeProperty); }
  102. set { SetValue(PicPageSizeProperty, value); }
  103. }
  104. // Using a DependencyProperty as the backing store for PicPageSize. This enables animation, styling, binding, etc...
  105. public static readonly DependencyProperty PicPageSizeProperty =
  106. DependencyProperty.Register("PicPageSize", typeof(int), typeof(ImageSourceNewWindow), new PropertyMetadata(-1));
  107. public int PicDataCount
  108. {
  109. get { return (int)GetValue(PicDataCountProperty); }
  110. set { SetValue(PicDataCountProperty, value); }
  111. }
  112. // Using a DependencyProperty as the backing store for PicDataCount. This enables animation, styling, binding, etc...
  113. public static readonly DependencyProperty PicDataCountProperty =
  114. DependencyProperty.Register("PicDataCount", typeof(int), typeof(ImageSourceNewWindow), new PropertyMetadata(-1));
  115. public int CurrentPage
  116. {
  117. get { return (int)GetValue(CurrentPageProperty); }
  118. set { SetValue(CurrentPageProperty, value); }
  119. }
  120. // Using a DependencyProperty as the backing store for CurrentPage. This enables animation, styling, binding, etc...
  121. public static readonly DependencyProperty CurrentPageProperty =
  122. DependencyProperty.Register("CurrentPage", typeof(int), typeof(ImageSourceNewWindow), new PropertyMetadata(1));
  123. private int CheckBoxImageNum = 1;
  124. private void init(long embryoId, int houseSn, int pictureLayer, string tlSn)
  125. {
  126. return;
  127. var list = picProvider.GetImageSourceApi(embryoId, houseSn, pictureLayer, tlSn);
  128. Task.Run(() =>
  129. {
  130. Dispatcher.Invoke(() =>
  131. {
  132. foreach (var item in list)
  133. {
  134. if (string.IsNullOrEmpty(item.sourceImageUrl)) continue;
  135. PicSourceUserControl checkBoxImage = new PicSourceUserControl()
  136. {
  137. ImageSourceUrl = AppData.Instance.StringToBitmapImage($"{AppData.Instance.BaseUrl}{item.sourceImageUrl.Replace(AppData.Instance.PicSuf, $"_180x180{AppData.Instance.PicSuf}")}?token={AppData.Instance.HttpServiceCall.GetToken()}"),
  138. ImageInfoString = $"{item.imageTime.ToString("MM-dd HH:mm")}",
  139. };
  140. if (checkBoxImage.ImageSourceUrl == null) continue;
  141. if (CheckBoxImageNum > 7)
  142. {
  143. if ((CheckBoxImageNum - 1) % 7 == 0) checkBoxImage.Margin = new Thickness(0, 10, 0, 0);
  144. else checkBoxImage.Margin = new Thickness(10, 10, 0, 0);
  145. }
  146. else
  147. {
  148. if (CheckBoxImageNum == 1) checkBoxImage.Margin = new Thickness(0);
  149. else checkBoxImage.Margin = new Thickness(10, 0, 0, 0);
  150. }
  151. CheckBoxImageNum++;
  152. WrapPanel_Image.Children.Add(checkBoxImage);
  153. }
  154. });
  155. });
  156. }
  157. private void ExLog(Exception ex, string name)
  158. {
  159. AppData.Instance.LogService.ExceptionLog(ex, $"ImageSourceNewWindow.{name}", LogEnum.RunException);
  160. }
  161. private void ErrorLog(string message, LogEnum logType)
  162. {
  163. AppData.Instance.LogService.TLLog($"ImageSourceNewWindow.{message}", logType);
  164. }
  165. private void Cancel_Click(object sender, RoutedEventArgs e)
  166. {
  167. this.DialogResult = false;
  168. return;
  169. }
  170. private void ScrollViewer_ManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e)
  171. {
  172. e.Handled = true;
  173. }
  174. private void PaginationUserControl_PageChangedEvent(PaginationUserControl arg1, int arg2)
  175. {
  176. if (!arg1.IsLoaded) return;
  177. if (!this.IsLoaded) return;
  178. WrapPanel_Image.Children.Clear();
  179. var a = picProvider.GetImageSourcePageApi(embryoId, houseSn, pictureLayer, tlSn, arg2, PicPageSize, PhotoBoxSettings);
  180. Task.Run(() =>
  181. {
  182. Dispatcher.Invoke(() =>
  183. {
  184. //this.Canvas_Big.Visibility = Visibility.Collapsed;
  185. PicSourceUserControl aa = null;
  186. int newK = 0;
  187. int ImageIndex = 1;
  188. CurrentPage = arg2;
  189. ListPic.Clear();
  190. foreach (var item in a.records)
  191. {
  192. if (string.IsNullOrEmpty(item.sourceImageUrl)) continue;
  193. PicSourceUserControl checkBoxImage = new PicSourceUserControl()
  194. {
  195. ImageSourceUrl = AppData.Instance.StringToBitmapImage($"{AppData.Instance.BaseUrl}{item.sourceImageUrl.Replace(AppData.Instance.PicSuf, $"_180x180{AppData.Instance.PicSuf}")}?token={AppData.Instance.HttpServiceCall.GetToken()}"),
  196. ImageInfoString = $"{item.imageTime.ToString("MM-dd HH:mm")}-{item.shootingPosition}",
  197. ImageUrl = item.sourceImageUrl,
  198. ImageId = item.id,
  199. developTime = item.developTime,
  200. };
  201. if (checkBoxImage.ImageSourceUrl == null) continue;
  202. if (CheckBoxImageNum > 7)
  203. {
  204. if ((CheckBoxImageNum - 1) % 7 == 0) checkBoxImage.Margin = new Thickness(0, 10, 0, 0);
  205. else checkBoxImage.Margin = new Thickness(10, 10, 0, 0);
  206. }
  207. else
  208. {
  209. if (CheckBoxImageNum == 1) checkBoxImage.Margin = new Thickness(0);
  210. else checkBoxImage.Margin = new Thickness(10, 0, 0, 0);
  211. }
  212. var k = ImageIndex;
  213. checkBoxImage.MouseDown += (s, e) =>
  214. {
  215. this.Text_Big.Text = checkBoxImage.ImageInfoString;
  216. CurrentImageId = checkBoxImage.ImageId;
  217. CurrentDevelopTime = checkBoxImage.developTime;
  218. this.Image_Big.Source = AppData.Instance.StringToBitmapImage($"{AppData.Instance.BaseUrl}{checkBoxImage.ImageUrl}?token={AppData.Instance.HttpServiceCall.GetToken()}");
  219. this.Canvas_Big.Visibility = Visibility.Visible;
  220. this.Image_Big.Tag = k;
  221. if (k < ListPic.Last().Key)
  222. {
  223. this._nextPic_Button.Visibility = Visibility.Visible;
  224. }
  225. else
  226. {
  227. this._nextPic_Button.Visibility = Visibility.Hidden;
  228. }
  229. if (k > 1)
  230. {
  231. this._prePic_Button.Visibility = Visibility.Visible;
  232. }
  233. else
  234. {
  235. this._prePic_Button.Visibility = Visibility.Hidden;
  236. }
  237. };
  238. ListPic.Add(k, checkBoxImage);
  239. ImageIndex++;
  240. CheckBoxImageNum++;
  241. WrapPanel_Image.Children.Add(checkBoxImage);
  242. if (this.Canvas_Big.Visibility == Visibility.Visible && CurrentDevelopTime != -1)
  243. {
  244. if (aa == null && item.developTime >= CurrentDevelopTime)
  245. {
  246. aa = checkBoxImage;
  247. newK = k;
  248. }
  249. }
  250. }
  251. if (this.Canvas_Big.Visibility == Visibility.Visible)
  252. {
  253. if (CurrentDevelopTime != -1 && aa != null)
  254. {
  255. this.Text_Big.Text = aa.ImageInfoString;
  256. CurrentImageId = aa.ImageId;
  257. CurrentDevelopTime = aa.developTime;
  258. this.Image_Big.Source = AppData.Instance.StringToBitmapImage($"{AppData.Instance.BaseUrl}{aa.ImageUrl}?token={AppData.Instance.HttpServiceCall.GetToken()}");
  259. this.Canvas_Big.Visibility = Visibility.Visible;
  260. this.Image_Big.Tag = newK;
  261. if (newK < ListPic.Last().Key)
  262. {
  263. this._nextPic_Button.Visibility = Visibility.Visible;
  264. }
  265. else
  266. {
  267. this._nextPic_Button.Visibility = Visibility.Hidden;
  268. }
  269. if (newK > 1)
  270. {
  271. this._prePic_Button.Visibility = Visibility.Visible;
  272. }
  273. else
  274. {
  275. this._prePic_Button.Visibility = Visibility.Hidden;
  276. }
  277. }
  278. else
  279. {
  280. this.Canvas_Big.Visibility = Visibility.Collapsed;
  281. }
  282. }
  283. });
  284. });
  285. return;
  286. }
  287. private void ComBox_Well_SelectionChanged(object sender, SelectionChangedEventArgs e)
  288. {
  289. if (!this.ComBox_Well.IsLoaded) return;
  290. if (this.ComBox_Well.SelectedItem != null && this.ComBox_Well.SelectedItem is Embryo currentEmbryo)
  291. {
  292. CurrentPage = 1;
  293. this.embryoId = currentEmbryo.id;
  294. var aa = picProvider.GetImageSourcePageApi(embryoId, houseSn, pictureLayer, tlSn, 1, PicPageSize, PhotoBoxSettings);
  295. PicDataCount = -1;
  296. PicDataCount = aa.total;
  297. this.Canvas_Big.Visibility = Visibility.Collapsed;
  298. CurrentDevelopTime = -1;
  299. }
  300. }
  301. private void ComBox_Focal_SelectionChanged(object sender, SelectionChangedEventArgs e)
  302. {
  303. if (!this.ComBox_Focal.IsLoaded) return;
  304. if (this.ComBox_Focal.SelectedItem != null && this.ComBox_Focal.SelectedItem is int currentFocal)
  305. {
  306. pictureLayer = currentFocal;
  307. var aa = picProvider.GetImageSourcePageApi(embryoId, houseSn, pictureLayer, tlSn, 1, PicPageSize, PhotoBoxSettings);
  308. PicDataCount = -1;
  309. PicDataCount = aa.total;
  310. }
  311. }
  312. Dictionary<int, PicSourceUserControl> ListPic = new Dictionary<int, PicSourceUserControl>();
  313. private void Close_Click(object sender, RoutedEventArgs e)
  314. {
  315. this.Canvas_Big.Visibility = Visibility.Collapsed;
  316. }
  317. private void PreButton_Click(object sender, RoutedEventArgs e)
  318. {
  319. if (!int.TryParse(this.Image_Big.Tag.ToString(), out int newValue))
  320. {
  321. return;
  322. }
  323. newValue--;
  324. if (!ListPic.ContainsKey(newValue)) return;
  325. var checkBoxImage = ListPic[newValue];
  326. this.Text_Big.Text = checkBoxImage.ImageInfoString;
  327. this.Image_Big.Source = AppData.Instance.StringToBitmapImage($"{AppData.Instance.BaseUrl}{checkBoxImage.ImageUrl}?token={AppData.Instance.HttpServiceCall.GetToken()}");
  328. this.Canvas_Big.Visibility = Visibility.Visible;
  329. this.Image_Big.Tag = newValue;
  330. CurrentImageId = checkBoxImage.ImageId;
  331. CurrentDevelopTime = checkBoxImage.developTime;
  332. if (newValue > 1)
  333. {
  334. this._prePic_Button.Visibility = Visibility.Visible;
  335. }
  336. else
  337. {
  338. this._prePic_Button.Visibility = Visibility.Hidden;
  339. }
  340. if (newValue < ListPic.Last().Key)
  341. {
  342. this._nextPic_Button.Visibility = Visibility.Visible;
  343. }
  344. else
  345. {
  346. this._nextPic_Button.Visibility = Visibility.Hidden;
  347. }
  348. }
  349. private void NextButton_Click(object sender, RoutedEventArgs e)
  350. {
  351. if (!int.TryParse(this.Image_Big.Tag.ToString(), out int newValue))
  352. {
  353. return;
  354. }
  355. newValue++;
  356. if (!ListPic.ContainsKey(newValue)) return;
  357. var checkBoxImage = ListPic[newValue];
  358. this.Text_Big.Text = checkBoxImage.ImageInfoString;
  359. this.Image_Big.Source = AppData.Instance.StringToBitmapImage($"{AppData.Instance.BaseUrl}{checkBoxImage.ImageUrl}?token={AppData.Instance.HttpServiceCall.GetToken()}");
  360. this.Canvas_Big.Visibility = Visibility.Visible;
  361. this.Image_Big.Tag = newValue;
  362. CurrentImageId = checkBoxImage.ImageId;
  363. CurrentDevelopTime = checkBoxImage.developTime;
  364. if (newValue < ListPic.Last().Key)
  365. {
  366. this._nextPic_Button.Visibility = Visibility.Visible;
  367. }
  368. else
  369. {
  370. this._nextPic_Button.Visibility = Visibility.Hidden;
  371. }
  372. if (newValue > 1)
  373. {
  374. this._prePic_Button.Visibility = Visibility.Visible;
  375. }
  376. else
  377. {
  378. this._prePic_Button.Visibility = Visibility.Hidden;
  379. }
  380. }
  381. private void ExportCurrentWellPic_Click(object sender, RoutedEventArgs e)
  382. {
  383. try
  384. {
  385. string name = $"{dish.wife}_{DateTime.Now.ToString("yy-MM-dd-HH-mm-ss")}.zip";
  386. string fileName = SaveFileName(name);
  387. if (string.IsNullOrEmpty(fileName)) return;
  388. string body = null;
  389. if (PhotoBoxSettings.Any())
  390. {
  391. body = JsonConvert.SerializeObject(new { houseSn = dish.houseSn, ids = new List<long> { embryoId }, pictureLayer = pictureLayer, tlSn = tlSn, searchButtons = PhotoBoxSettings });
  392. }
  393. else
  394. {
  395. body = JsonConvert.SerializeObject(new { houseSn = dish.houseSn, ids = new List<long> { embryoId }, pictureLayer = pictureLayer, tlSn = tlSn });
  396. }
  397. AppData.Instance.MainWindowViewModel.DownLoadStart(new ivf_tl_Entity.Entity.DownLoad.DownLoadEntity
  398. {
  399. DownLoadUrl = $"/api/businessManage/pc/resource/downloadSourcePictures",
  400. NewFileFullName = fileName,
  401. FileName = name,
  402. Body = body,
  403. });
  404. //ToastMessage("开始下载");
  405. ToastMessage(KeyToStringConvert.GetLanguageStringByKey("0299"));
  406. }
  407. catch (Exception ex)
  408. {
  409. ExLog(ex, "ExportCurrentWellPic_Click");
  410. }
  411. }
  412. private void ExportAllWellPic_Click(object sender, RoutedEventArgs e)
  413. {
  414. try
  415. {
  416. string name = $"{dish.wife}_{DateTime.Now.ToString("yy-MM-dd-HH-mm-ss")}.zip";
  417. string fileName = SaveFileName(name);
  418. if (string.IsNullOrEmpty(fileName)) return;
  419. string body = null;
  420. if (PhotoBoxSettings.Any())
  421. {
  422. body = JsonConvert.SerializeObject(new { houseSn = dish.houseSn, ids = dish.embryoList.Select(x => x.id).ToList(), pictureLayer = pictureLayer, tlSn = tlSn, searchButtons = PhotoBoxSettings });
  423. }
  424. else
  425. {
  426. body = JsonConvert.SerializeObject(new { houseSn = dish.houseSn, ids = dish.embryoList.Select(x => x.id).ToList(), pictureLayer = pictureLayer, tlSn = tlSn });
  427. }
  428. AppData.Instance.MainWindowViewModel.DownLoadStart(new ivf_tl_Entity.Entity.DownLoad.DownLoadEntity
  429. {
  430. DownLoadUrl = $"/api/businessManage/pc/resource/downloadSourcePictures",
  431. NewFileFullName = fileName,
  432. FileName = name,
  433. Body = body,
  434. });
  435. //ToastMessage("开始下载");
  436. ToastMessage(KeyToStringConvert.GetLanguageStringByKey("0299"));
  437. }
  438. catch (Exception ex)
  439. {
  440. ExLog(ex, "ExportAllWellPic_Click");
  441. }
  442. }
  443. public string SaveFileName(string fileName)
  444. {
  445. var dialog = new Microsoft.Win32.SaveFileDialog();
  446. dialog.FileName = fileName;
  447. dialog.DefaultExt = ".zip";
  448. dialog.Filter = "zip|*.zip";
  449. if (dialog.ShowDialog() != true)
  450. {
  451. return null;
  452. }
  453. return dialog.FileName;
  454. }
  455. private void ToastMessage(string mess)
  456. {
  457. new ToastMessageWindow(this, mess).Show();
  458. }
  459. private void ExportPic_Click(object sender, RoutedEventArgs e)
  460. {
  461. try
  462. {
  463. string url = $"/api/businessManage/pc/resource/downloadSourcePicture?tlSn={tlSn}&houseSn={houseSn}&ids={CurrentImageId}";
  464. string oldName = AppData.Instance.HttpServiceCall.GetDownLoadFileName(url);
  465. string fileName = SaveFileName(oldName);
  466. if (string.IsNullOrEmpty(fileName)) return;
  467. AppData.Instance.MainWindowViewModel.DownLoadStart(new ivf_tl_Entity.Entity.DownLoad.DownLoadEntity
  468. {
  469. DownLoadUrl = url,
  470. NewFileFullName = fileName,
  471. FileName = System.IO.Path.GetFileName(fileName),
  472. });
  473. }
  474. catch (Exception ex)
  475. {
  476. ExLog(ex, "ExportPic_Click");
  477. }
  478. }
  479. public long CurrentImageId { get; set; }
  480. public int CurrentDevelopTime { get; set; } = -1;
  481. private void PaginationUserControl_ClickPageEvent()
  482. {
  483. this.Canvas_Big.Visibility = Visibility.Collapsed;
  484. }
  485. }
  486. }