/// <summary> /// 直接获取病害名 /// </summary> /// <returns></returns> public string GetDamageName(BridgePart bridgePart = BridgePart.BridgeDeck) { ObservableCollection <BridgeDamage> componentBox = GlobalData.ComponentComboBox; if (bridgePart == BridgePart.BridgeDeck) { componentBox = GlobalData.ComponentComboBox; } else if (bridgePart == BridgePart.SuperSpace) { componentBox = GlobalData.SuperSpaceComponentComboBox; } else { componentBox = GlobalData.SubSpaceComponentComboBox; } if (DamageValue < 0) { return(Damage); } if (componentBox[ComponentValue].DamageComboBox[DamageValue].Title != "其它") { return(componentBox[ComponentValue].DamageComboBox[DamageValue].Title); } else //TODO:考虑"其它"输入为空的情况 { return(Damage); } }
public GridViewModel(BridgePart bridgePart = BridgePart.BridgeDeck) { GridSource = new GridModel(); IKernel kernel = new StandardKernel(new NinjectDependencyResolver()); var dataRepository = kernel.Get <IDataRepository>(); List <DamageSummary> lst; lst = dataRepository.ReadDamageData(bridgePart); if (bridgePart == BridgePart.BridgeDeck) { DamageSummaryServices.InitListDamageSummary(lst); } else if (bridgePart == BridgePart.SuperSpace) { DamageSummaryServices.InitListDamageSummary(lst, 2_000_000, bridgePart); } else { DamageSummaryServices.InitListDamageSummary(lst, 3_000_000, bridgePart); } ObservableCollection <DamageSummary> oc = new ObservableCollection <DamageSummary>(); //List转ObservableCollection lst.ForEach(x => oc.Add(x)); foreach (var k in oc) { GridSource.GridData.Add(k); } }
private static void SetComboBox(List <DamageSummary> listDamageSummary, BridgePart bridgePart = BridgePart.BridgeDeck) { for (int i = 0; i < listDamageSummary.Count; i++) { //TODO:写单元测试 //创建映射 ObservableCollection <BridgeDamage> componentComboBox = null; IEnumerable <BridgeDamage> componentFound = null; if (bridgePart == BridgePart.BridgeDeck) { componentComboBox = GlobalData.ComponentComboBox; } else if (bridgePart == BridgePart.SuperSpace) { componentComboBox = GlobalData.SuperSpaceComponentComboBox; } else { componentComboBox = GlobalData.SubSpaceComponentComboBox; } componentFound = componentComboBox.Where(x => x.Title == listDamageSummary[i].Component); IEnumerable <BridgeDamage> damageFound = null; if (componentFound.Any()) { listDamageSummary[i].ComponentValue = componentFound.FirstOrDefault().Idx; damageFound = componentFound.FirstOrDefault().DamageComboBox.Where(x => x.Title == listDamageSummary[i].Damage); if (damageFound.Any()) { listDamageSummary[i].DamageComboBox = componentFound.FirstOrDefault().DamageComboBox; listDamageSummary[i].DamageValue = damageFound.FirstOrDefault().Idx; } else { listDamageSummary[i].DamageComboBox = componentFound.FirstOrDefault().DamageComboBox; listDamageSummary[i].DamageValue = componentFound.FirstOrDefault().DamageComboBox.Where(x => x.Title == "其它").FirstOrDefault().Idx; } } else { listDamageSummary[i].DamageComboBox = componentComboBox.Where(x => x.Title == "其它").FirstOrDefault().DamageComboBox; listDamageSummary[i].ComponentValue = componentComboBox.Where(x => x.Title == "其它").FirstOrDefault().Idx; } } }
public static int ValidatePicturesOfBridgePart(BridgePart bridgePart, List <DamageSummary> lst, out List <string> validationResult) { validationResult = new List <string>(); int totalCounts = 0; string[] dirs, outdirs; for (int i = 0; i < lst.Count; i++) { if (lst[i].PictureCounts == 0) //没有照片,不需要验证 { continue; } else if (lst[i].PictureCounts == 1) { dirs = Directory.GetFiles($@"{App.PicturesFolder}/", $"*{lst[i].PictureNo}.*"); //结果含有路径 outdirs = Directory.GetFiles($@"{App.PicturesOutFolder}/", $"*{lst[i].PictureNo}.*"); if (dirs.Length == 0 && outdirs.Length == 0) { totalCounts++; validationResult.Add($"{EnumHelper.GetEnumDesc(bridgePart)},{lst[i].Component},{lst[i].Damage}照片{lst[i].PictureNo}不存在"); //writer.WriteLine($"{EnumHelper.GetEnumDesc(bridgePart)},{lst[i].Component},{lst[i].Damage}照片{lst[i].PictureNo}不存在"); } } else if (lst[i].PictureCounts >= 2) { var pictures = lst[i].PictureNo.Split(App.PictureNoSplitSymbol); for (int j = 0; j < pictures.Length; j++) { dirs = Directory.GetFiles($@"{App.PicturesFolder}/", $"*{pictures[j]}.*"); //结果含有路径 outdirs = Directory.GetFiles($@"{App.PicturesOutFolder}/", $"*{pictures[j]}.*"); if (dirs.Length == 0 && outdirs.Length == 0) { totalCounts++; validationResult.Add($"{EnumHelper.GetEnumDesc(bridgePart)},{lst[i].Component}照片{pictures[j]}不存在"); //writer.WriteLine($"{EnumHelper.GetEnumDesc(bridgePart)},{lst[i].Component}照片{pictures[j]}不存在"); } } } else //异常、负数等情况 { //writer.WriteLine($"未知情况:{EnumHelper.GetEnumDesc(bridgePart)},{lst[i].Component},{lst[i].Damage}不属于没有照片,纸片只有1张或多张的情况"); validationResult.Add($"未知情况:{EnumHelper.GetEnumDesc(bridgePart)},{lst[i].Component},{lst[i].Damage}不属于没有照片,纸片只有1张或多张的情况"); } } return(totalCounts); }
public void TestBridgePart() { var bridge = new BridgePart(new Physical(), new BridgeMeshBuilder(new AssetsRepository(), new DynamicAssetsFactory())); bridge.AnchorA = new BridgePart.BridgeAnchor() { Island = createIsland(new Vector3(5, 0, 5)), RelativePosition = new Vector3(4.5f, 0, 4.5f) }; bridge.AnchorB = new BridgePart.BridgeAnchor() { Island = createIsland(new Vector3(25, 5, 20)), RelativePosition = new Vector3(-5, 0, -5) }; engine.AddSimulator(new SkyMerchantRenderingSimulator()); engine.AddSimulator(new PhysicalSimulator()); engine.AddSimulator(new WorldRenderingSimulator()); }
/// <summary> /// 读取病害数据 /// </summary> /// <param name="workSheetName">工作簿名称</param> /// <returns></returns> public List <DamageSummary> ReadDamageData(BridgePart bridgePart) { string strFilePath = App.DamageSummaryFileName; var workSheetName = EnumHelper.GetEnumDesc(bridgePart).ToString(); var lst = new List <DamageSummary>(); if (!File.Exists(strFilePath)) { return(lst); } try { FileInfo file = new FileInfo(strFilePath); using (ExcelPackage package = new ExcelPackage(file)) { ExcelWorksheet worksheet = package.Workbook.Worksheets[workSheetName]; int rowCount = 2; // worksheet.Dimension.Rows; //worksheet.Dimension.Rows指的是所有列中最大行 //首行:表头不导入 bool rowCur = true; //行游标指示器 //rowCur=false表示到达行尾 //计算行数 while (rowCur) { try { //跳过表头 if (string.IsNullOrWhiteSpace(worksheet.Cells[rowCount + 1, 1].Value?.ToString())) { rowCur = false; } } catch (Exception ex) //读取异常则终止 { rowCur = false; } if (rowCur) { rowCount++; } } //bool validationResult = false; int row = 2; //excel中行指针 //行号不为空,则继续添加 //while (!string.IsNullOrEmpty(worksheet.Cells[row, 1].Value.ToString())) for (row = 2; row <= rowCount; row++) { // //1、处理excel数据导入; //2、验证"视图模型"; //3、验证业务模型; lst.Add(new DamageSummary { No = row - 1 , Position = worksheet.Cells[row, 2].Value?.ToString() ?? string.Empty , Component = worksheet.Cells[row, 3].Value?.ToString() ?? string.Empty , Damage = worksheet.Cells[row, 4].Value?.ToString() ?? string.Empty , DamageDescription = worksheet.Cells[row, 5].Value?.ToString() ?? string.Empty , DamageDescriptionInPicture = worksheet.Cells[row, 6].Value?.ToString() ?? string.Empty , PictureNo = worksheet.Cells[row, 7].Value?.ToString() ?? string.Empty , CustomPictureNo = worksheet.Cells[row, SaveExcelService.FindColumnIndexByName(worksheet, "自定义照片编号")].Value?.ToString() ?? string.Empty , Comment = worksheet.Cells[row, SaveExcelService.FindColumnIndexByName(worksheet, "备注")].Value?.ToString() ?? string.Empty , Unit1 = worksheet.Cells[row, SaveExcelService.FindColumnIndexByName(worksheet, "单位1")].Value?.ToString() ?? string.Empty , Unit1Counts = GetUnit1Counts(worksheet.Cells[row, SaveExcelService.FindColumnIndexByName(worksheet, "单位1数量")].Value?.ToString() ?? string.Empty) , Unit2 = worksheet.Cells[row, SaveExcelService.FindColumnIndexByName(worksheet, "单位2")].Value?.ToString() ?? string.Empty , Unit2Counts = GetUnit2Counts(worksheet.Cells[row, SaveExcelService.FindColumnIndexByName(worksheet, "单位2数量")].Value?.ToString() ?? string.Empty) }); } } //显示导入结果 return(lst); } catch (Exception ex) { throw ex; } }
/// <summary> /// 初始化病害汇总列表 /// </summary> /// <param name="listDamageSummary"></param> /// <param name="firstIndex"></param> public static void InitListDamageSummary(List <DamageSummary> listDamageSummary, int firstIndex = 1000000, BridgePart bridgePart = BridgePart.BridgeDeck) { SetPictureCounts(listDamageSummary); SetFirstAndLastPictureBookmark(listDamageSummary, firstIndex); SetComboBox(listDamageSummary, bridgePart); SetStatisticsUnitComboBox(listDamageSummary); //for (int i = 0; i < listDamageSummary.Count; i++) //{ // var img = System.Drawing.Image.FromFile($"PicturesOut/DSC00855.jpg"); // var map = new System.Drawing.Bitmap(img); // listDamageSummary[i].PicturePreview= ConvertBitmap(map); //} }
private static void InsertVar(List <DamageSummary> listDamageSummary, ExcelWorksheet worksheet, ObservableCollection <BridgeDamage> componentComboBox, BridgePart bridgePart) { //添加表头 worksheet.Cells[1, 1].Value = "序号"; worksheet.Cells[1, 2].Value = "位置"; if (bridgePart == BridgePart.BridgeDeck) { worksheet.Cells[1, 3].Value = "要素"; } else { worksheet.Cells[1, 3].Value = "构件类型"; } worksheet.Cells[1, 4].Value = "缺损类型"; worksheet.Cells[1, 5].Value = "缺损描述"; worksheet.Cells[1, 6].Value = "图片描述"; worksheet.Cells[1, 7].Value = "照片编号"; worksheet.Cells[1, 8].Value = "备注"; worksheet.Cells[1, 9].Value = "单位1"; worksheet.Cells[1, 10].Value = "单位1数量"; worksheet.Cells[1, 11].Value = "单位2"; worksheet.Cells[1, 12].Value = "单位2数量"; worksheet.Cells[1, 13].Value = "使用自定义单位"; //添加值 for (int i = 0; i < listDamageSummary.Count; i++) { worksheet.Cells[i + 2, 1].Value = i + 1; worksheet.Cells[i + 2, 2].Value = listDamageSummary[i].Position; if (componentComboBox[listDamageSummary[i].ComponentValue].Title != "其它") { worksheet.Cells[i + 2, 3].Value = componentComboBox[listDamageSummary[i].ComponentValue].Title; } else //TODO:考虑"其它"输入为空的情况 { worksheet.Cells[i + 2, 3].Value = listDamageSummary[i].GetComponentName(bridgePart); } if (componentComboBox[listDamageSummary[i].ComponentValue].DamageComboBox[listDamageSummary[i].DamageValue].Title != "其它") { worksheet.Cells[i + 2, 4].Value = componentComboBox[listDamageSummary[i].ComponentValue].DamageComboBox[listDamageSummary[i].DamageValue].Title; } else //TODO:考虑"其它"输入为空的情况 { worksheet.Cells[i + 2, 4].Value = listDamageSummary[i].Damage; } worksheet.Cells[i + 2, 5].Value = listDamageSummary[i].DamageDescription; worksheet.Cells[i + 2, 6].Value = listDamageSummary[i].DamageDescriptionInPicture; worksheet.Cells[i + 2, 7].Value = listDamageSummary[i].PictureNo; worksheet.Cells[i + 2, FindColumnIndexByName(worksheet, "备注")].Value = listDamageSummary[i].Comment; worksheet.Cells[i + 2, FindColumnIndexByName(worksheet, "单位1")].Value = listDamageSummary[i].GetDisplayUnit1(); worksheet.Cells[i + 2, FindColumnIndexByName(worksheet, "单位1数量")].Value = listDamageSummary[i].Unit1Counts; worksheet.Cells[i + 2, FindColumnIndexByName(worksheet, "单位2")].Value = listDamageSummary[i].GetDisplayUnit2(); worksheet.Cells[i + 2, FindColumnIndexByName(worksheet, "单位2数量")].Value = listDamageSummary[i].Unit2Counts; } }
private static ObservableCollection <BridgeDamage> LoadDataFromExcel(BridgePart bridgePart = BridgePart.BridgeDeck) { string workSheetName = "桥面系"; if (bridgePart == BridgePart.BridgeDeck) { workSheetName = "桥面系"; } else if (bridgePart == BridgePart.SuperSpace) { workSheetName = "上部结构"; } else { workSheetName = "下部结构"; } string strFilePath = $"{App.ConfigurationFolder}\\{App.DamageSummaryLibFileName}"; var lst = new List <BridgeDamage>(); if (!File.Exists(strFilePath)) { return(new ObservableCollection <BridgeDamage>(lst)); } int currRow = 2; string previousContent = string.Empty; string currContent = string.Empty; var file = new FileInfo(strFilePath); try { using (var package = new ExcelPackage(file)) { var worksheet = package.Workbook.Worksheets[workSheetName]; currContent = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "要素名称")].Value?.ToString() ?? string.Empty).Trim(); previousContent = currContent; if (!string.IsNullOrWhiteSpace(worksheet.Cells[2, 2].Value?.ToString() ?? string.Empty)) { lst.Add(new BridgeDamage { Title = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "要素名称")].Value?.ToString() ?? string.Empty).Trim() , CategoryTitle = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "要素分类")].Value?.ToString() ?? string.Empty).Trim() , Idx = Convert.ToInt32((worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "要素索引")].Value?.ToString() ?? string.Empty).Trim(), CultureInfo.InvariantCulture) , Id = Convert.ToInt32((worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "要素值")].Value?.ToString() ?? string.Empty).Trim(), CultureInfo.InvariantCulture) , DamageComboBox = new ObservableCollection <BridgeDamage> { new BridgeDamage { Title = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害名称")].Value?.ToString() ?? string.Empty).Trim() , CategoryTitle = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害分类")].Value?.ToString() ?? string.Empty).Trim() , Idx = Convert.ToInt32((worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害索引")].Value?.ToString() ?? string.Empty).Trim(), CultureInfo.InvariantCulture) , Id = Convert.ToInt32((worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害值")].Value?.ToString() ?? string.Empty).Trim(), CultureInfo.InvariantCulture), } } }); } else { return(new ObservableCollection <BridgeDamage>(lst)); } previousContent = currContent; currRow++; currContent = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "要素名称")].Value?.ToString() ?? string.Empty).Trim(); while (!string.IsNullOrWhiteSpace(currContent)) { if (previousContent != currContent) { lst.Add(new BridgeDamage { Title = currContent , CategoryTitle = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "要素分类")].Value?.ToString() ?? string.Empty).Trim() , Idx = Convert.ToInt32((worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "要素索引")].Value?.ToString() ?? string.Empty).Trim(), CultureInfo.InvariantCulture) , Id = Convert.ToInt32((worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "要素值")].Value?.ToString() ?? string.Empty).Trim(), CultureInfo.InvariantCulture) , DamageComboBox = new ObservableCollection <BridgeDamage> { new BridgeDamage { Title = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害名称")].Value?.ToString() ?? string.Empty).Trim() , CategoryTitle = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害分类")].Value?.ToString() ?? string.Empty).Trim() , Idx = Convert.ToInt32((worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害索引")].Value?.ToString() ?? string.Empty).Trim(), CultureInfo.InvariantCulture) , Id = Convert.ToInt32((worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害值")].Value?.ToString() ?? string.Empty).Trim(), CultureInfo.InvariantCulture), } } }); } else { lst.Where(x => x.Title == currContent).FirstOrDefault().DamageComboBox.Add(new BridgeDamage { Title = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害名称")].Value?.ToString() ?? string.Empty).Trim() , CategoryTitle = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害分类")].Value?.ToString() ?? string.Empty).Trim() , Idx = Convert.ToInt32((worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害索引")].Value?.ToString() ?? string.Empty).Trim(), CultureInfo.InvariantCulture) , Id = Convert.ToInt32((worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "病害值")].Value?.ToString() ?? string.Empty).Trim(), CultureInfo.InvariantCulture), }); } previousContent = currContent; currRow++; currContent = (worksheet.Cells[currRow, SaveExcelService.FindColumnIndexByName(worksheet, "要素名称")].Value?.ToString() ?? string.Empty).Trim(); } } } catch (Exception ex) { throw ex; } return(new ObservableCollection <BridgeDamage>(lst)); }
public BCIRepository(List <DamageSummary> listDamageSummary, BridgePart bridgePart) { _listDamageSummary = listDamageSummary; _bridgePart = bridgePart; }