Example #1
0
        /// <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);
            }
        }
Example #2
0
        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);
        }
Example #5
0
        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());
        }
Example #6
0
        /// <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);

            //}
        }
Example #8
0
        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;
 }