using CommunityToolkit.Mvvm.ComponentModel; using ivf_tl_Entity.Entity; using ivf_tl_Entity.Entity.balance; using ivf_tl_Entity.Entity.Mark; using ivf_tl_Entity.Entity.Result; using ivf_tl_Entity.Enums; using ivf_tl_Entity.Response; using ivf_tl_Manage.Converts; using ivf_tl_Manage.Win; using ivf_tl_Service.HttpProvider; using log4net.Layout; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace ivf_tl_Manage.ViewModels { public partial class MarkUseViewModel : BaseViewModel { //public List AllEmbryoPicAndVideo { get; set; } = new List(); //public PictureEntity CurrentPicZhen { get; set; } //public GetPicturesByRecordIdData CurrentVideoData { get; set; } = null; public event Action DingWeiEvent; [ObservableProperty] private Dish currentDish; [ObservableProperty] private Embryo currentEmbryo = null; [ObservableProperty] private double videoAllTime = 1; [ObservableProperty] private double videoCurrentTime = 0; [ObservableProperty] private int currentFocal = 0; [ObservableProperty] private Dictionary fpsItemList = new Dictionary(); [ObservableProperty] private KeyValuePair selectedFps = new KeyValuePair(1, "1.0x"); [ObservableProperty] private List markList = new List(); [ObservableProperty] private MarkEntity currentMarkEntity = null; [ObservableProperty] private List markModelTypeList = new List(); [ObservableProperty] private MarkModelTypeEntity currentMarkModelType = null; [ObservableProperty] private bool isDishRecord = false; [ObservableProperty] private bool isUpdata = false; [ObservableProperty] private bool isCurrentDish = true; [ObservableProperty] private int currentVideoFps = 1; public DetailProvider detailProvider = null; public List DishPicAndVideoList { get; set; } = new List(); public DishPicAndVideo CurrentWellDishPicAndVideo { get; set; } = null; public LayerPicAndVideo CurrentWellLayerPicAndVideo { get; set; } = null; public DetailPic CurrentPic { get; set; } = null; public List QuickButtons { get; set; } = new List(); public DetailViewModel DetailViewModel = null; public BaseViewModel RecordViewModel = null; public bool isPdf = false; public PdfViewModel PdfParentViewModel = null; public MarkUseViewModel(DetailViewModel detailViewModel, bool IsDishRecord, bool b) { //base.ViewModelName = nameof(MarkUseViewModel); //DetailViewModel = detailViewModel; //tLInfo = detailViewModel.tLInfo; //Title = titi; //CurrentDish = detailViewModel.CurrentDish; //DishPicAndVideoList = detailViewModel.DishPicAndVideoList; //QuickButtons = detailViewModel.QuickButtons; //FpsItemList.Add(2, "2.0x"); //FpsItemList.Add(1.5, "1.5x"); //FpsItemList.Add(1.25, "1.25x"); //FpsItemList.Add(1, "1.0x"); //FpsItemList.Add(0.5, "0.5x"); //FpsItemList.Add(0.25, "0.25x"); //if (detailProvider == null) detailProvider = AppData.Instance.GetDetailProvider(); //IsUpdata = true; base.NavName = KeyToStringConvert.GetLanguageStringByKey("0159"); base.ViewModelName = nameof(MarkUseViewModel); base.NavList.Clear(); foreach (var item in detailViewModel.NavList) { base.NavList.Add(item); } base.NavList.Add(this); DetailViewModel = detailViewModel; CurrentDish = detailViewModel.CurrentDish; DishPicAndVideoList = detailViewModel.DishPicAndVideoList; QuickButtons = detailViewModel.QuickButtons; FpsItemList.Add(2, "2.0x"); FpsItemList.Add(1.5, "1.5x"); FpsItemList.Add(1.25, "1.25x"); FpsItemList.Add(1, "1.0x"); FpsItemList.Add(0.5, "0.5x"); FpsItemList.Add(0.25, "0.25x"); if (detailProvider == null) detailProvider = AppData.Instance.GetDetailProvider(); this.IsDishRecord = IsDishRecord; IsUpdata = true; IsCurrentDish = b; } public MarkUseViewModel(PdfViewModel pdfViewModel, bool b) { isPdf = true; PdfParentViewModel = pdfViewModel; base.NavName = KeyToStringConvert.GetLanguageStringByKey("0159"); base.ViewModelName = nameof(MarkUseViewModel); base.NavList.Clear(); foreach (var item in pdfViewModel.NavList) { base.NavList.Add(item); } base.NavList.Add(this); CurrentDish = pdfViewModel.Dish; if (detailProvider == null) detailProvider = AppData.Instance.GetDetailProvider(); FpsItemList.Add(2, "2.0x"); FpsItemList.Add(1.5, "1.5x"); FpsItemList.Add(1.25, "1.25x"); FpsItemList.Add(1, "1.0x"); FpsItemList.Add(0.5, "0.5x"); FpsItemList.Add(0.25, "0.25x"); this.IsDishRecord = IsDishRecord; IsUpdata = true; IsCurrentDish = b; if (PdfParentViewModel != null && PdfParentViewModel.DishPicAndVideoList.Any() && PdfParentViewModel.QuickButtons.Any()) { DishPicAndVideoList = PdfParentViewModel.DishPicAndVideoList; QuickButtons = PdfParentViewModel.QuickButtons; Init(); isPdf = false; } } public void Initnew() { SelectedFps = new KeyValuePair(1, "1.0x"); CurrentEmbryo = null; DishPicAndVideoList.Clear(); CurrentWellDishPicAndVideo = null; CurrentWellLayerPicAndVideo = null; CurrentPic = null; QuickButtons.Clear(); if (CurrentDish.embryoList != null && CurrentDish.embryoList.Any()) DishPicAndVideoList = detailProvider.GetRecordDetailApi(CurrentDish.tlSn, CurrentDish.houseSn, CurrentDish.id, CurrentDish.embryoList.Select(x => x.wellSn).ToList()); QuickButtons = detailProvider.GetQuickButtonsApi(); PdfParentViewModel.QuickButtons = QuickButtons; PdfParentViewModel.DishPicAndVideoList = DishPicAndVideoList; Init(); } public void Init() { MarkModelTypeList = detailProvider.GetEnableMarkModelTypeApi(); //if (MarkModelTypeList.Any()) CurrentMarkModelType = MarkModelTypeList.First(); } partial void OnCurrentEmbryoChanged(Embryo value) { if (value == null) { foreach (var item in MarkList) { item.minTimeString = "0h"; item.maxTime = 0; } var a1 = CurrentMarkEntity; CurrentMarkEntity = null; CurrentMarkEntity = a1; return; } value.embryoMark = detailProvider.GetEmbryoMarkApi(value.id); var a = CurrentMarkEntity; CurrentMarkEntity = null; CurrentMarkEntity = a; EmbryoMark embryoMark = null; foreach (var item in MarkList) { embryoMark = value.embryoMark.FirstOrDefault(x => x.markId == item.id); if (embryoMark == null) { item.minTimeString = "0h"; item.maxTime = 0; continue; } item.pictureLayer = embryoMark.pictureLayer; item.maxTime = embryoMark.developTime; item.minTimeString = $"{(embryoMark.developTime / 60).ToString("D2")}h:{(embryoMark.developTime % 60).ToString("D2")}m"; } } partial void OnCurrentMarkModelTypeChanged(MarkModelTypeEntity value) { if (value == null) { MarkList.Clear(); CurrentMarkEntity = null; return; } MarkList = detailProvider.GetEmbryoMarkEntityAPi(value.id); if (MarkList.Any()) { CurrentMarkEntity = MarkList.First(); if (CurrentEmbryo == null) { foreach (var item in MarkList) { item.minTimeString = "0h"; item.maxTime = 0; } return; } EmbryoMark embryoMark = null; foreach (var item in MarkList) { embryoMark = CurrentEmbryo.embryoMark.FirstOrDefault(x => x.markId == item.id); if (embryoMark == null) { item.minTimeString = "0h"; item.maxTime = 0; continue; } item.pictureLayer = embryoMark.pictureLayer; item.maxTime = embryoMark.developTime; item.minTimeString = $"{(embryoMark.developTime / 60).ToString("D2")}h:{(embryoMark.developTime % 60).ToString("D2")}m"; //item.minTime = (int)Math.Round((embryoMark.developTime / 60d), 0, MidpointRounding.AwayFromZero); } } else CurrentMarkEntity = null; } partial void OnCurrentMarkEntityChanged(MarkEntity value) { try { if (value == null) return; List markNews = new List();//模板中倒数第二级别 GetLeafParentNodeList(value, markNews); if (CurrentEmbryo == null) { foreach (var item in markNews) item.CurrentValue = null; return; } if (CurrentEmbryo.embryoMark == null) { foreach (var item in markNews) item.CurrentValue = null; } else { var currentMarkDetil = CurrentEmbryo.embryoMark.FirstOrDefault(x => x.markId == value.id); if (currentMarkDetil == null) { foreach (var item in markNews) item.CurrentValue = null; } else { List lastMarkList = new List(); GetLeafParentNodeList(currentMarkDetil, lastMarkList); foreach (var item in markNews) { var oldValue = lastMarkList.FirstOrDefault(x => x.markId == item.id); if (oldValue == null) { item.CurrentValue = null; } else { if (oldValue.children != null && oldValue.children.Any() && item.children != null && item.children.Any()) { var defaultDeail = item.children.FirstOrDefault(x => x.id == oldValue.children.First().markId); if (defaultDeail != null) { item.CurrentValue = defaultDeail; continue; } } item.CurrentValue = null; } } //if (value.maxTime != 0) DingWeiEvent?.Invoke(value.maxTime, value.maxTime, value.name); } } return; if (CurrentEmbryo == null) { foreach (var item in markNews) { if (item.children != null && item.children.Any()) { var defaultDeail = item.children.FirstOrDefault(x => x.defaultValue == 1); if (defaultDeail != null) { item.CurrentValue = defaultDeail; continue; } } item.CurrentValue = null; } return; } if (CurrentEmbryo.embryoMark == null) { foreach (var item in markNews) { if (item.children != null && item.children.Any()) { var defaultDeail = item.children.FirstOrDefault(x => x.defaultValue == 1); if (defaultDeail != null) { item.CurrentValue = defaultDeail; continue; } } item.CurrentValue = null; } } else { var currentMarkDetil = CurrentEmbryo.embryoMark.FirstOrDefault(x => x.markId == value.id); if (currentMarkDetil == null) { foreach (var item in markNews) { if (item.children != null && item.children.Any()) { var defaultDeail = item.children.FirstOrDefault(x => x.defaultValue == 1); if (defaultDeail != null) { item.CurrentValue = defaultDeail; continue; } } item.CurrentValue = null; } } else { List lastMarkList = new List(); GetLeafParentNodeList(currentMarkDetil, lastMarkList); foreach (var item in markNews) { var oldValue = lastMarkList.FirstOrDefault(x => x.markId == item.id); if (oldValue == null) { if (item.children != null && item.children.Any()) { var defaultDeail = item.children.FirstOrDefault(x => x.defaultValue == 1); if (defaultDeail != null) { item.CurrentValue = defaultDeail; continue; } } item.CurrentValue = null; } else { if (oldValue.children != null && oldValue.children.Any() && item.children != null && item.children.Any()) { var defaultDeail = item.children.FirstOrDefault(x => x.id == oldValue.children.First().markId); if (defaultDeail != null) { item.CurrentValue = defaultDeail; continue; } } if (item.children != null && item.children.Any()) { var defaultDeail = item.children.FirstOrDefault(x => x.defaultValue == 1); if (defaultDeail != null) { item.CurrentValue = defaultDeail; continue; } } item.CurrentValue = null; } } } } } catch (Exception ex) { ExLog(ex, "OnCurrentMarkEntityChanged"); } } private void GetLeafParentNodeList(MarkEntity markEntity, List list) { if (markEntity.child != 1) return; if (markEntity.children != null && markEntity.children.Any()) { var a = markEntity.children.FirstOrDefault(x => x.child == 1); if (a == null) { list.Add(markEntity); return; } foreach (var item in markEntity.children) { GetLeafParentNodeList(item, list); } return; } list.Add(markEntity); } private void GetLeafParentNodeList(EmbryoMark markEntity, List list) { if (markEntity.child != 1) return; if (markEntity.children != null && markEntity.children.Any()) { var a = markEntity.children.FirstOrDefault(x => x.child == 1); if (a == null) { list.Add(markEntity); return; } foreach (var item in markEntity.children) { GetLeafParentNodeList(item, list); } return; } list.Add(markEntity); } public void SaveMark(MarkEntity MarkSource) { try { if (CurrentEmbryo == null) { new ToastMessageWindow(AppData.Instance.MainWindow, 1920, 65, KeyToStringConvert.GetLanguageStringByKey("0303")).Show(); return; } if (CurrentPic == null) { //new ToastMessageWindow(AppData.Instance.MainWindow, 1920, 65, $"当前没有图片,无法标记").Show(); new ToastMessageWindow(AppData.Instance.MainWindow, 1920, 65,KeyToStringConvert.GetLanguageStringByKey("0543")).Show(); return; } List markNews = new List(); GetLeafParentNodeList(MarkSource, markNews); var a = markNews.FirstOrDefault(x => x.CurrentValue == null); if (a != null) { var b = markNews.FirstOrDefault(x => x.markKey == "2PN/PN-NUM"); if (b == null || b.CurrentValue == null || b.CurrentValue.markKey == "2PN/2") { new ToastMessageWindow(AppData.Instance.MainWindow, 1920, 65, $"{a.name} {KeyToStringConvert.GetLanguageStringByKey("0336")}").Show(); return; } //if (b != null && (b.CurrentValue.markKey == "2PN/0" || b.CurrentValue.markKey == "2PN/3")) //{ //} //else //{ // //new ToastMessageWindow(AppData.Instance.MainWindow, 1920, 65, $"{a.name}的下级为空").Show(); // new ToastMessageWindow(AppData.Instance.MainWindow, 1920, 65, $"{a.name} {KeyToStringConvert.GetLanguageStringByKey("0336")}").Show(); // return; //} } EmbryoMarkResponse embryoMarkResponse = new EmbryoMarkResponse(); embryoMarkResponse.tlSn = AppData.Instance.CurrentTlInfo.tlSn; embryoMarkResponse.embryoCultureRecordId = CurrentDish.id; embryoMarkResponse.embryoId = CurrentEmbryo.id; embryoMarkResponse.houseSn = CurrentDish.houseSn; embryoMarkResponse.markKey = MarkSource.markKey; embryoMarkResponse.model = MarkSource.model; embryoMarkResponse.developTime = CurrentPic.developTime; embryoMarkResponse.layer = CurrentFocal; //embryoMarkResponse.pictureUuid = CurrentPicZhen.id; embryoMarkResponse.rootId = MarkSource.id; foreach (var item in markNews) { if (item.CurrentValue == null) continue; embryoMarkResponse.leafNode.Add(new LeafNode() { child = item.CurrentValue.child, id = item.CurrentValue.id, markKey = item.CurrentValue.markKey, markName = item.CurrentValue.name, parentId = item.id, }); } if (detailProvider.SaveMarkApi(embryoMarkResponse)) { CurrentEmbryo.embryoMark = detailProvider.GetEmbryoMarkApi(CurrentEmbryo.id); var current = CurrentEmbryo.embryoMark.FirstOrDefault(x => x.markId == MarkSource.id); if (current == null) { MarkSource.minTimeString = "0h"; MarkSource.maxTime = 0; MarkSource.pictureLayer = 0; } else { //MarkSource.minTime = $"{(current.developTime / 60d)}h:{current.developTime % 60d}m"; MarkSource.maxTime = current.developTime; MarkSource.minTimeString = $"{(current.developTime / 60).ToString("D2")}h:{(current.developTime % 60).ToString("D2")}m"; MarkSource.pictureLayer = CurrentFocal; //(int)Math.Round((current.developTime / 60d), 0, MidpointRounding.AwayFromZero); } new ToastWindow(AppData.Instance.MainWindow, 1920, 65, true).Show(); if (PdfParentViewModel != null) PdfParentViewModel.IsUpdateAi = true; } else { new ToastWindow(AppData.Instance.MainWindow, 1920, 65, false).Show(); } } catch (Exception ex) { new ToastWindow(AppData.Instance.MainWindow, 1920, 65, false).Show(); ExLog(ex, "SaveMark"); } } internal bool MarkEmbryo(int embryoState) { return detailProvider.MarkEmbryoDestinationApi(CurrentEmbryo.id, embryoState); } } }