コード例 #1
0
        public bool Check(OleDbConnection connection)
        {
            var reader = ADOSQLHelper.ExecuteReader(connection, string.IsNullOrEmpty(WhereFieldName) ? string.Format("Select {0} from {1}", CheckFieldName, TableName) : string.Format("Select {0},{1} from {1}", CheckFieldName, WhereFieldName, TableName));

            if (reader != null)
            {
                var temp = new List <string>();
                var str  = string.Empty;
                var info = string.Empty;
                while (reader.Read())
                {
                    str = string.IsNullOrEmpty(WhereFieldName) ? string.Format("{0}:{1}", CheckFieldName, reader[0].ToString()) : string.Format("{0}:{1}并且{2}:{3}", WhereFieldName, reader[1], CheckFieldName, reader[0]);
                    if (temp.Contains(str))
                    {
                        info = string.Format("{0}  存在重复", str);
                        Messages.Add(info);
                        _questions.Add(new Question {
                            Code = Code, Name = Name, Project = CheckProject.属性正确性, TableName = TableName, BSM = CheckFieldName, Description = info
                        });
                    }
                    else
                    {
                        temp.Add(str);
                    }
                }
                QuestionManager.AddRange(_questions);
                return(true);
            }
            return(false);
        }
コード例 #2
0
        public bool Check(OleDbConnection connection)
        {
            var reader = ADOSQLHelper.ExecuteReader(connection, string.Format("Select {0} from {1}", string.Join(",", Fields), TableName));

            if (reader != null)
            {
                var array = new string[Fields.Length];
                var info  = string.Empty;
                while (reader.Read())
                {
                    array = new string[Fields.Length];
                    for (var i = 0; i < Fields.Length; i++)
                    {
                        array[i] = Fields[i].ToString();
                    }
                    var val = string.Join(Split, array);
                    if (!Values.Contains(val))
                    {
                        info = string.Format("不存在:{0}", val);
                        Messages.Add(info);
                        _questions.Add(new Question {
                            Code = Code, Name = Name, Project = CheckProject.属性正确性, TableName = TableName, Description = info
                        });
                    }
                }
                QuestionManager.AddRange(_questions);
                return(true);
            }

            return(false);
        }
コード例 #3
0
        public void Program()
        {
            _workspace = MDBFilePath.OpenAccessFileWorkSpace();
            if (_workspace == null)
            {
                _messages.Add("获取Access的workspace失败");
                return;
            }
            var str = string.Empty;

            foreach (var className in FeatureClassNames)
            {
                var featureClass = _workspace.GetFeatureClass(className);
                if (featureClass == null)
                {
                    str = string.Format("未获取图层:{0},无法进行图层相关检查", className);
                    _messages.Add(str);
                    _questions.Add(new Question()
                    {
                        Code = "2101", Name = "图层完整性", Project = CheckProject.图层完整性, TableName = className, Description = str
                    });
                    continue;
                }
                var spatialReference = SpatialReferenceManager.GetSpatialReference(featureClass);//检查图层坐标系
                if (spatialReference.Name.Trim() != CurrentSpatialReference.Name.Trim())
                {
                    str = string.Format("图层:{0}不符合2201(平面坐标系是否采用‘1980 西安坐标系’、3度带、带带号,检查高程系统是否采用‘1985 国家高程基准’,检查投影方式是否采用高斯-克吕格投影)", className);
                    _messages.Add(str);
                    _questions.Add(new Question {
                        Code = "2201", Name = "数学基础", Project = CheckProject.数学基础, TableName = className, Description = str
                    });
                }

                if (className == TABLENAME)//检查DCDYTB中是否存在相交
                {
                    var featurePath    = string.Format("{0}/{1}", _mdbFilePath, className);
                    var outFeatureName = string.Format("{0}_intersect", className);
                    var intersectPath  = string.Format("{0}/{1}", _mdbFilePath, outFeatureName);
                    if (Cross(string.Format("{0};{1}", featurePath, featurePath), intersectPath))
                    {
                        var intersectfeatureClass = _workspace.GetFeatureClass(outFeatureName);
                        if (intersectfeatureClass == null)
                        {
                            _messages.Add(string.Format("无法获取要素类:【{0}】,故无法验证图斑是否相交"));
                        }
                        else
                        {
                            Run(intersectfeatureClass, TABLENAME, "XZCMC", "TBBH");
                            DeleteFeatureClass(intersectPath);
                        }
                    }
                    else
                    {
                        _messages.Add(string.Format("验证表【{0}】中是否存在图斑相交,执行intersect发生错误"));
                    }
                }
            }

            QuestionManager.AddRange(_questions);
        }
コード例 #4
0
        public bool Check(OleDbConnection connection)
        {
            var reader = ADOSQLHelper.ExecuteReader(connection, string.Format("Select {0},{1} from {2}", CheckFieldName, Key, TableName));

            if (reader != null)
            {
                var str  = string.Empty;
                var info = string.Empty;
                while (reader.Read())
                {
                    str = reader[0].ToString();
                    if (Regex.IsMatch(str, RegexString))
                    {
                        continue;
                    }
                    else
                    {
                        info = string.Format("{0}对应的值不正确,请核对", reader[1].ToString());
                        Messages.Add(info);
                        _questions.Add(new Question()
                        {
                            Code = "3201", Name = Name, Project = CheckProject.值符合性, TableName = TableName, BSM = reader[1].ToString(), Description = info
                        });
                    }
                }
                QuestionManager.AddRange(_questions);
                return(true);
            }
            return(false);
        }
コード例 #5
0
        public void Write()
        {
            var Time  = DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss");
            var tools = new List <IExcel>
            {
                new ExcelSix {
                    MStartLine = 6, SaveFolder = SaveFolder, Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID, TitleName = string.Format("{0}({1})农村存量建设用地情况汇总表 {2}", ParameterManager.District, ParameterManager.Code, Time)
                },
                new ExcelOne {
                    MStartLine = 3, SaveFolder = SaveFolder, Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID, TitleName = string.Format("{0}({1})农村存量建设用地总体情况汇总表 {2}", ParameterManager.District, ParameterManager.Code, Time)
                },
                new ExcelTwo {
                    MStartLine = 5, SaveFolder = SaveFolder, Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID, TitleName = string.Format("{0}({1})农村存量宅基地基本情况汇总表 {2}", ParameterManager.District, ParameterManager.Code, Time)
                },
                new ExcelThree {
                    MStartLine = 5, SaveFolder = SaveFolder, Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID, TitleName = string.Format("{0}({1})农村存量经营性建设用地基本情况汇总表 {2}", ParameterManager.District, ParameterManager.Code, Time)
                },
                new ExcelFour {
                    MStartLine = 5, SaveFolder = SaveFolder, Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID, TitleName = string.Format("{0}({1})农村存量公共管理及公共服务设施用地基本情况汇总表 {2}", ParameterManager.District, ParameterManager.Code, Time)
                },
                new ExcelFive {
                    MStartLine = 5, SaveFolder = SaveFolder, Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID, TitleName = string.Format("{0}({1})农村其它存量建设用地基本情况汇总表 {2}", ParameterManager.District, ParameterManager.Code, Time)
                }
            };

            Parallel.ForEach(tools, tool =>
            {
                tool.Write();
                QuestionManager.AddRange(tool.ParalleQuestions.ToList());
            });
        }
コード例 #6
0
        private bool CheckNoWhere(OleDbConnection connection)
        {
            var reader = ADOSQLHelper.ExecuteReader(connection, string.Format("select {0},{1} from {2}", CheckFieldName, Key, TableName));

            if (reader != null)
            {
                var str   = string.Empty;
                var error = string.Empty;
                Messages = new List <string>();
                while (reader.Read())
                {
                    str = reader[0].ToString();
                    if (Values.Contains(str))
                    {
                        continue;
                    }
                    else
                    {
                        error = string.Format("{0}对应的‘{1}’值不正确", reader[1].ToString(), str);
                        Messages.Add(error);
                        _questions.Add(new Question()
                        {
                            Code = "3201", Name = Name, Project = CheckProject.值符合性, TableName = TableName, BSM = reader[1].ToString(), Description = error
                        });
                    }
                }
                QuestionManager.AddRange(_questions);
                return(true);
            }
            return(false);
        }
コード例 #7
0
        public void Check()
        {
            var tools = new List <IExcel>
            {
                new ExcelOne {
                    Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID
                },
                new ExcelTwo {
                    Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID
                },
                new ExcelThree {
                    Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID
                },
                new ExcelFour {
                    Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID
                },
                new ExcelFive {
                    Connection = ParameterManager.Connection, List = ExcelManager.XZQ, District = ParameterManager.District, Code = ParameterManager.Code, Folder = ParameterManager.CollectFolder, CheckCode = ID
                }
            };

            foreach (var tool in tools)
            {
                tool.Check();
                System.Console.WriteLine(tool.ExcelName);
                QuestionManager.AddRange(tool.ParalleQuestions.ToList());
            }
            //Parallel.ForEach(tools, item =>
            //{
            //    item.Check();
            //    QuestionManager.AddRange(item.ParalleQuestions.ToList());
            //});
        }
コード例 #8
0
        private bool CheckNoWhereFields(OleDbConnection connection)
        {
            var reader = ADOSQLHelper.ExecuteReader(connection,
                                                    string.IsNullOrEmpty(WhereCaluse) ?
                                                    (
                                                        LocationFields == null ?
                                                        string.Format("Select {0},{1} from {2}", string.Join(",", CheckFields), Key, TableName)
                 : string.Format("Select {0},{1},{2} from {3}", string.Join(",", CheckFields), Key, string.Join(",", LocationFields), TableName)
                                                    )
                : (
                                                        LocationFields == null ?
                                                        string.Format("Select {0},{1} from {2} where {3}", string.Join(",", CheckFields), Key, TableName, WhereCaluse)
                : string.Format("Select {0},{1},{2} from {3} where {4}", string.Join(",", CheckFields), Key, string.Join(",", LocationFields), TableName, WhereCaluse)
                                                        )

                                                    );

            if (reader != null)
            {
                var str  = string.Empty;
                var info = string.Empty;
                while (reader.Read())
                {
                    str = string.Empty;
                    for (var i = 0; i < CheckFields.Count(); i++)
                    {
                        var a = reader[i].ToString().Trim();
                        if (Is_Nullable ^ string.IsNullOrEmpty(a))//异或  Is_NULLable  ture 为空  字段不为空或者 Is_NULLable false 必填 字段为空 矛盾
                        {
                            str += CheckFields[i] + ",";
                        }
                    }
                    if (!string.IsNullOrEmpty(str))
                    {
                        info = string.Format("{0}对应的字段:{1}与要求的{2}不符", reader[CheckFields.Count()], str, Is_Nullable ? "为空" : "必填");
                        _questions.Add(
                            new Question
                        {
                            Code              = "5101",
                            Name              = Name,
                            Project           = CheckProject.图层内属性一致性,
                            TableName         = TableName,
                            BSM               = reader[CheckFields.Count()].ToString(),
                            Description       = info,
                            RelationClassName = RelationName,
                            ShowType          = ShowType.Space,
                            WhereClause       =
                                LocationFields == null ?
                                string.Format("[{0}] ='{1}'", Key, reader[CheckFields.Count()].ToString())
                                : ADOSQLHelper.GetWhereClause(LocationFields, ADOSQLHelper.GetValues(reader, 1 + CheckFields.Length, LocationFields.Length))
                        });
                        Messages.Add(info);
                    }
                }
                QuestionManager.AddRange(_questions);
                return(true);
            }
            return(false);
        }
コード例 #9
0
        public static void Program(string mdbfilePath, string[] ids)
        {
            var _connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", mdbfilePath);

            using (var connection = new OleDbConnection(_connectionString))
            {
                connection.Open();
                Console.WriteLine("开始检查");
                #region  检查数据库是否存在要求的表
                var tableStructure = new TableStructure();
                Console.WriteLine(string.Format("开始检查{0}", tableStructure.Name));
                tableStructure.Check(connection);
                if (tableStructure.Erros.Count == 0)
                {
                    Console.WriteLine(string.Format("符合{0}", tableStructure.Name.Replace("检查", "")));
                }
                else
                {
                    QuestionManager.AddRange(tableStructure.Erros.Select(e => new Models.Question {
                        Code = "2101", Name = "矢量图层完整", Project = Models.CheckProject.图层完整性, Description = e
                    }).ToList());
                    Console.WriteLine("存在如下错误:");
                    foreach (var error in tableStructure.Erros)
                    {
                        Console.WriteLine(error);
                    }
                }
                #endregion
                if (tableStructure.ExistTables.Contains(DCDYTB))
                {
                    DCDYTBManager.Init(connection);
                }
                var rule = new RuleManager()
                {
                    IDS = ids
                };
                rule.Program(connection);


                #region 检查图斑面积

                Console.WriteLine("正在核对图斑面积一致性;");

                try
                {
                    DCDYTBManager.Program();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }


                Console.WriteLine("完成核对图斑面积一致性;");
                #endregion

                connection.Close();
            }
        }
コード例 #10
0
        public void Check()
        {
            var tool = new TableStructure();

            tool.Check(ParameterManager.Connection);
            QuestionManager.AddRange(tool.Erros.Select(e => new Question {
                Code = "2101", Name = RuleName, Project = CheckProject.图层完整性, Description = e
            }).ToList());
        }
コード例 #11
0
        private bool CheckNoWhereField(OleDbConnection connection)
        {
            var reader = ADOSQLHelper.ExecuteReader(connection,
                                                    LocationFields == null?
                                                    string.Format("Select {0} from {1}", CheckFieldName, TableName)
                :string.Format("Select {0},{1} from {2}", CheckFieldName, string.Join(",", LocationFields), TableName)
                                                    );

            if (reader != null)
            {
                var temp = new List <string>();
                var str  = string.Empty;
                var info = string.Empty;
                while (reader.Read())
                {
                    str = string.Format("{0}:{1}", CheckFieldName, reader[0].ToString());
                    if (temp.Contains(str))
                    {
                        info = string.Format("{0}  存在重复", str);
                        Messages.Add(info);
                        _questions.Add(
                            new Question
                        {
                            Code              = Code,
                            Name              = Name,
                            Project           = CheckProject.属性正确性,
                            TableName         = TableName,
                            BSM               = CheckFieldName,
                            Description       = info,
                            RelationClassName = RelationName,
                            ShowType          = ShowType.Space,
                            WhereClause       =
                                LocationFields == null ?
                                string.Empty
                                : ADOSQLHelper.GetWhereClause(LocationFields, ADOSQLHelper.GetValues(reader, 1, LocationFields.Length))
                        });
                    }
                    else
                    {
                        temp.Add(str);
                    }
                }
                QuestionManager.AddRange(_questions);
                return(true);
            }

            return(false);
        }
コード例 #12
0
        private bool CheckNoWhere(OleDbConnection connection)
        {
            var reader = ADOSQLHelper.ExecuteReader(connection,
                                                    LocationFields == null ?
                                                    string.Format("select {0},{1} from {2}", CheckFieldName, Key, TableName)
                : string.Format("select {0},{1},{2} from {3}", CheckFieldName, Key, string.Join(",", LocationFields), TableName)
                                                    );

            if (reader != null)
            {
                var str   = string.Empty;
                var error = string.Empty;
                Messages = new List <string>();
                while (reader.Read())
                {
                    str = reader[0].ToString().Trim();
                    if (Values.Contains(str))
                    {
                        continue;
                    }
                    else
                    {
                        error = string.Format("{0}对应的‘{1}’值不正确", reader[1].ToString(), str);
                        Messages.Add(error);
                        _questions.Add(
                            new Question()
                        {
                            Code              = "3201",
                            Name              = Name,
                            Project           = CheckProject.值符合性,
                            TableName         = TableName,
                            BSM               = reader[1].ToString(),
                            Description       = error,
                            ShowType          = ShowType.Space,
                            RelationClassName = RelationName,
                            WhereClause       =
                                LocationFields == null ?
                                string.Format("[{0}] ='{1}'", Key, reader[1].ToString())
                                : ADOSQLHelper.GetWhereClause(LocationFields, ADOSQLHelper.GetValues(reader, 2, LocationFields.Length))
                        });
                    }
                }
                QuestionManager.AddRange(_questions);
                return(true);
            }
            return(false);
        }
コード例 #13
0
        public void Check()
        {
            #region  检查目录文件夹
            var resultComplete = new ResultComplete(ParameterManager.Folder)
            {
                Children = ParameterManager.ChildrenFolder
            };
            resultComplete.Check();
            QuestionManager.AddRange(
                resultComplete.Messages.Select(e =>
                                               new Question
            {
                Code        = ID,
                Name        = RuleName,
                Project     = CheckProject.目录及文件规范性,
                Description = e,
                ShowType    = ShowType.Folder,
                Folder      = ParameterManager.Folder
            }).ToList());
            #endregion
            #region  各个文件夹下面的文件是否丢失 是否缺失


            var tool = new FileStandard {
                Files = ParameterManager.ChildrenFiles
            };
            tool.Check();
            QuestionManager.AddRange(
                tool.List.Select(e =>
                                 new Question {
                Code        = "1102",
                Name        = RuleName,
                Project     = CheckProject.目录及文件规范性,
                Description = string.Format(@"文件:{0}不存在,请去除多余的空格,并注意全角\半角符号符合规范", e),
                ShowType    = ShowType.Folder,
                Folder      = System.IO.Path.GetDirectoryName(e)
            }).ToList());
            //Parallel.ForEach(tools, tool =>
            //{
            //    tool.Check();
            //    QuestionManager.AddRange(tool.List.Select(e => new Question { Code = "1102", Name = RuleName, Project = CheckProject.目录及文件规范性, Description = e }).ToList());
            //});
            #endregion
        }
コード例 #14
0
        public static void XZQ(string className1, string className2)
        {
            var featurePath1        = string.Format("{0}/{1}", ParameterManager.MDBFilePath, className1); //XZQ_XZC
            var featurePath2        = string.Format("{0}/{1}", ParameterManager.MDBFilePath, className2); //DCDYTB
            var outfeatureClassName = string.Format("{0}_loowootech", className1);
            var outfeaturePath      = string.Format("{0}\\{1}", ParameterManager.MDBFilePath, outfeatureClassName);

            if (Cross(string.Format("{0};{1}", featurePath1, featurePath2), outfeaturePath))
            {
                var outfeatureClass = ParameterManager.Workspace.GetFeatureClass(outfeatureClassName);
                if (outfeatureClass == null)
                {
                    QuestionManager.Add(new Question {
                        Code = "", Name = "", Project = CheckProject.图层内属性一致性, Description = ""
                    });
                }
                else
                {
                    var list = RunXZQ(outfeatureClass, className1);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(outfeatureClass);
                    DeleteFeatureClass2(outfeatureClassName);
                    //DeleteFeatureClass(outfeaturePath);
                    QuestionManager.AddRange(list);
                    //QuestionManager.AddRange(
                    //    list.Select(e =>
                    //    new Question
                    //    {
                    //        Code = "5101",
                    //        Name = "行政区(空间)",
                    //        TableName = className1,
                    //        Description = e
                    //    }).ToList());
                }
            }
            else
            {
                QuestionManager.Add(new Question {
                    Code = "", Name = "", Project = CheckProject.图层内属性一致性, Description = ""
                });
            }
        }
コード例 #15
0
        public bool Check(OleDbConnection connection)
        {
            var sb = new StringBuilder(CheckFields[0]);

            for (var i = 1; i < CheckFields.Count(); i++)
            {
                sb.AppendFormat(",{0}", CheckFields[i]);
            }
            var reader = ADOSQLHelper.ExecuteReader(connection, string.Format("Select {0},{1} from {2} where {3}", sb.ToString(), Key, TableName, WhereCaluse));

            if (reader != null)
            {
                var str  = string.Empty;
                var info = string.Empty;
                while (reader.Read())
                {
                    str = string.Empty;
                    for (var i = 0; i < CheckFields.Count(); i++)
                    {
                        if (Is_Nullable ^ string.IsNullOrEmpty(reader[i].ToString()))//异或  Is_NULLable  ture 为空  字段不为空或者 Is_NULLable false 必填 字段为空 矛盾
                        {
                            str += CheckFields[i] + ",";
                        }
                    }
                    if (!string.IsNullOrEmpty(str))
                    {
                        info = string.Format("{0}对应的字段:{1}与要求的{2}不符", reader[CheckFields.Count()], str, Is_Nullable ? "为空" : "必填");
                        _questions.Add(new Question {
                            Code = "5101", Name = Name, Project = CheckProject.图层内属性一致性, TableName = TableName, BSM = reader[CheckFields.Count()].ToString(), Description = info
                        });
                        Messages.Add(info);
                    }
                }
                QuestionManager.AddRange(_questions);
                return(true);
            }
            return(false);
        }
コード例 #16
0
        private bool Init()
        {
            OutputMessage("00", "正在初始化检查机制", ProgressResultTypeEnum.Other);
            if (!ReadXZQ())//分析读取行政区
            {
                OutputMessage("00", "未分析读取到行政区名称和行政区代码", ProgressResultTypeEnum.Fail);
                return(false);
            }
            if (!SearchFile())//查找单位代码表和数据库文件
            {
                OutputMessage("00", "未找到单位代码表或者数据库文件", ProgressResultTypeEnum.Fail);
                return(false);
            }

            OutputMessage("00", "参数管理器初始化完毕", ProgressResultTypeEnum.Other);
            ExcelManager.Init(ParameterManager.CodeFilePath);//初始化单位代码信息列表
            var tree = new CodeForm()
            {
                Dict = ExcelManager.Dict
            };

            if (tree.ShowDialog() == DialogResult.Cancel)
            {
                return(false);
            }
            if (ExcelManager.Dict.Count == 0)
            {
                QuestionManager.Add(new Question {
                    Code = "00", TableName = "单位代码表", Description = "未获取单位代码表中的相关数据信息"
                });
                OutputMessage("00", "未获取单位代码表中的相关数据信息", ProgressResultTypeEnum.Fail);
            }
            else
            {
                OutputMessage("00", string.Format("成功读取行政区(乡镇)单位代码表信息:{0}条", ExcelManager.Dict.Count), ProgressResultTypeEnum.Other);
            }
            if (ExcelManager.XZQ.Count == 0)
            {
                QuestionManager.Add(new Question {
                    Code = "00", TableName = "单位代码表", Description = "读取到的单位代码表中未填写行政区(乡镇)代码信息"
                });
                OutputMessage("00", "读取到的单位代码表中未填写行政区(乡镇)代码信息", ProgressResultTypeEnum.Fail);
            }
            if (ExcelManager.XZC.Count == 0)
            {
                QuestionManager.Add(new Question {
                    Code = "00", TableName = "单位代码表", Description = "读取到的单位代码表中未填写行政区(村级)代码信息"
                });
                OutputMessage("00", "读取到的单位代码表中未填写行政区(村级)代码信息", ProgressResultTypeEnum.Fail);
            }
            var list = ArcGISManager.GainDCDYTB(ParameterManager.Workspace, DCDYTBManager.ClassName) ?? new List <DCDYTB>();

            if (list.Count == 0)
            {
                OutputMessage("00", "未获取调查单元类型相关基础信息", ProgressResultTypeEnum.Fail);
            }
            QuestionManager.AddRange(list.Where(e => e.Right == false).Select(e =>
                                                                              new Question
            {
                Code        = "3401",
                Name        = "面积一致性",
                TableName   = DCDYTBManager.ClassName,
                Description = string.Format("行政区名称:【{0}】行政区代码:【{1}】图斑编号:【{2}】的MJ:【{3}】图斑实际面积:【{4}】容差超过1平方米", e.XZCMC, e.XZCDM, e.TBBH, e.MJ, e.Area),
                BSM         = e.BSM,
                ShowType    = ShowType.Space,
                WhereClause = string.Format("[BSM] = {0}", e.BSM)
            }).ToList());
            DCDYTBManager.List = list;

            OutputMessage("00", "成功读取调查单元图斑信息", ProgressResultTypeEnum.Other);
            InitRules();
            //ParameterManager.Folder = Folder;

            return(true);
        }
コード例 #17
0
        public void Program()
        {
            QuestionManager.Clear();//质检问题初始化

            if (!System.IO.Directory.Exists(Folder))
            {
                LogManager.Log(string.Format("质检路径不存在:{0},请核对!", Folder));
                QuestionManager.Add(new Question()
                {
                    Code = "1102", Name = "质检路径不存在", Project = CheckProject.目录及文件规范性, Description = string.Format("质检路径不存在:{0},请核对!", Folder)
                });
                return;
            }
            var folderTool = new FolderTool {
                Folder = Folder
            };                                                  //对质检路径进行命名规范检查

            folderTool.Check();
            //if (!folderTool.Check())
            //{
            //    return;
            //}
            Code     = folderTool.Code;
            District = folderTool.CityName;



            var resultComplete = new ResultComplete(Folder)
            {
                Children = XmlManager.Get("/Folders/Folder", "Name", XmlEnum.DataTree)
            };

            resultComplete.Check();//对质检路径下的文件夹、文件是否存在,是否能够打开进行检查
            QuestionManager.AddRange(resultComplete.Messages.Select(e => new Question {
                Code = "1102", Name = "成果数据丢露", Project = CheckProject.目录及文件规范性, Description = e
            }).ToList());

            if (OnProgramProcess != null)
            {
                var args = new ProgressEventArgs()
                {
                    Code = "11", Cancel = false, Message = string.Empty
                };
                OnProgramProcess(this, args);
                if (args.Cancel)
                {
                    return;
                }
            }

            _folderTools.AddRange(resultComplete.ExistPath.Select(e => new FileFolder()
            {
                Folder    = e,
                FileNames = XmlManager.GetChildren(string.Format("/Folders/Folder[@Name='{0}']", new DirectoryInfo(e).Name), "Name", XmlEnum.DataTree),
                CityName  = folderTool.CityName,
                Code      = folderTool.Code
            }));

            try
            {
                Parallel.ForEach(_folderTools, tool =>
                {
                    tool.Check();
                });
            }
            catch (AggregateException ae)
            {
                foreach (var exp in ae.InnerExceptions)
                {
                    LogManager.Log(exp.ToString());
                    LogManager.Record(exp.ToString());
                }
            }


            var path = System.IO.Path.Combine(Folder, DataBase);
            //获取空间数据库文件夹下的单位代码表文件,并获取单位代码信息
            var codefileTool = new Tool.FileTool {
                Folder = path, Filter = "*.xls", RegexString = @"^[\u4e00-\u9fa5]+\(\d{6}\)单位代码表.xls$"
            };
            var currentCodeFile = codefileTool.GetFile();

            if (string.IsNullOrEmpty(currentCodeFile))
            {
                LogManager.Log("未识别到单位代码表文件,请核对空间数据库文件下的文件");
            }
            else
            {
                ExcelManager.Init(currentCodeFile);
            }
            //获取空间数据库文件夹下的空间数据库文件,并对数据库进行检查
            var mdbfileTool = new Tool.FileTool()
            {
                Folder = path, Filter = "*.mdb", RegexString = @"^[\u4e00-\u9fa5]+\(\d{6}\)农村存量建设用地调查成功空间数据库.mdb$"
            };
            var currentMdbFile = mdbfileTool.GetFile();

            if (string.IsNullOrEmpty(currentMdbFile))
            {
                LogManager.Log("未识别到数据库文件,请核对农村存量建设用地调查成功空间数据库.mdb文件");
                QuestionManager.Add(new Question {
                    Code = "2101", Name = "适量数据文件", Project = CheckProject.目录及文件规范性, Description = "未识别到数据库文件,请核对农村存量建设用地调查成功空间数据库.mdb文件"
                });
            }
            else
            {
                TableHeart.Program(currentMdbFile, IDS);
                var gisheart = new ArcGISHeart()
                {
                    MDBFilePath = currentMdbFile, FeatureClassNames = XmlManager.Get("/Tables/Table[@IsSpace='true']", "Name", XmlEnum.Field)
                };
                gisheart.Program();
            }
            Console.WriteLine("开始对统计表格进行质检......");
            var collectfolder = System.IO.Path.Combine(Folder, Collect);

            if (!System.IO.Directory.Exists(collectfolder))
            {
                QuestionManager.Add(new Question {
                    Code = "1101", Name = "统计表格文件夹", Project = CheckProject.目录及文件规范性, Description = string.Format("目录:{0}不存在", collectfolder)
                });
            }
            else
            {
                //汇总表质检
                var excel = new ExcelHeart()
                {
                    Folder = collectfolder, MDBFilePath = currentMdbFile, District = folderTool.CityName, Code = folderTool.Code
                };
                excel.Program();
                QuestionManager.AddRange(excel.Questions);
            }
        }
コード例 #18
0
        public bool Check(OleDbConnection connection)
        {
            var reader = ADOSQLHelper.ExecuteReader(connection, string.Format("Select {0},{1},{2} from {3}", Key, string.Join(",", FieldArray1), string.Join(",", FieldArray2), TableName));

            if (reader != null)
            {
                var val1 = .0;
                var val2 = .0;
                var a    = .0;
                var info = string.Empty;
                while (reader.Read())
                {
                    var str = reader[0].ToString().Trim();
                    for (var i = 0; i < FieldArray1.Length; i++)
                    {
                        if (double.TryParse(reader[i + 1].ToString(), out a))
                        {
                            val1 += a;
                        }
                    }
                    for (var i = 0; i < FieldArray2.Length; i++)
                    {
                        if (double.TryParse(reader[i + 1 + FieldArray1.Length].ToString(), out a))
                        {
                            val2 += a;
                        }
                    }
                    var flag = false;
                    switch (Compare)
                    {
                    case Compare.Above:
                        flag = val1 > val2;
                        break;

                    case Compare.MoreEqual:
                        flag = val1 >= val2;
                        break;

                    case Compare.Equal:
                        flag = Math.Abs(val1 - val2) < 0.001;
                        break;

                    case Compare.Less:
                        flag = val1 < val2;
                        break;

                    case Compare.SmarllerEqual:
                        flag = val1 <= val2;
                        break;
                    }
                    if (flag)
                    {
                        info = string.Format("{0}对应的不符合{1}", str, Name);
                        Messages.Add(info);
                        _questions.Add(new Models.Question {
                            Code = "3201", Name = Name, TableName = TableName, BSM = str, Description = info
                        });
                    }
                }
                QuestionManager.AddRange(_questions);
                return(true);
            }
            return(false);
        }
コード例 #19
0
        public bool CheckInt()
        {
            var info = string.Empty;

            foreach (var entry in Dict)
            {
                var list = entry.Value;
                int val1 = 0, val2 = 0, temp = 0;
                foreach (var item in FieldArray1)
                {
                    var a = list.FirstOrDefault(e => e.Title == item);
                    if (a != null)
                    {
                        if (int.TryParse(a.Value, out temp))
                        {
                            val1 += temp;
                        }
                    }
                }

                foreach (var item in FieldArray2)
                {
                    var a = list.FirstOrDefault(e => e.Title == item);
                    if (a != null)
                    {
                        if (int.TryParse(a.Value, out temp))
                        {
                            val2 += temp;
                        }
                    }
                }

                bool flag = true;
                switch (Compare)
                {
                case Compare.Above:
                    flag = val1 > val2;
                    break;

                case Compare.Equal:
                    flag = val1 == val2;
                    break;

                case Compare.Less:
                    flag = val1 < val2;
                    break;

                case Compare.MoreEqual:
                    flag = val1 >= val2;
                    break;

                case Compare.SmarllerEqual:
                    flag = val1 <= val2;
                    break;
                }
                if (!flag)
                {
                    info = string.Format("{0}不符合{1}", entry.Key, Name);
                    _questions.Add(new Question {
                        Code = "3201", Name = Name, TableName = ExcelName, BSM = entry.Key, Description = info
                    });
                }
            }
            QuestionManager.AddRange(_questions);
            return(true);
        }
コード例 #20
0
        public static void Program(string mdbfilePath, string[] ids)
        {
            var _connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", mdbfilePath);
            var info = string.Empty;

            using (var connection = new OleDbConnection(_connectionString))
            {
                connection.Open();
                LogManager.Log("开始检查");
                #region  检查数据库是否存在要求的表
                var tableStructure = new TableStructure();
                LogManager.Log(string.Format("开始检查{0}", tableStructure.Name));
                tableStructure.Check(connection);
                if (tableStructure.Erros.Count == 0)
                {
                    info = string.Format("符合{0}", tableStructure.Name.Replace("检查", ""));
                    LogManager.Log(info);
                }
                else
                {
                    QuestionManager.AddRange(tableStructure.Erros.Select(e => new Models.Question {
                        Code = "2101", Name = "矢量图层完整", Project = Models.CheckProject.图层完整性, Description = e
                    }).ToList());
                }
                #endregion
                if (tableStructure.ExistTables.Contains(DCDYTB))
                {
                    //DCDYTBManager.Init(connection);
                }
                else
                {
                    LogManager.Record("不存在或者未找到表DCDYTB,未获取图斑相关信息");
                }
                var rule = new RuleManager()
                {
                    IDS = ids
                };
                rule.Program(connection);


                #region 检查图斑面积
                LogManager.Log("核对图斑面积");

                var tbTools = new List <GainAreaTool>()
                {
                    new GainAreaTool {
                        TableName = "CLZJD", AreaFields = new string[] { "JZZDMJ", "FSYDMJ" }, Denominator = 10000
                    },
                    new GainAreaTool {
                        TableName = "JYXJSYD", AreaFields = new string[] { "JSYDMJ" }, Denominator = 10000
                    },
                    new GainAreaTool {
                        TableName = "GGGL_GGFWSSYD", AreaFields = new string[] { "JSYDMJ" }, Denominator = 10000
                    },
                    new GainAreaTool {
                        TableName = "QTCLJSYD", AreaFields = new string[] { "JSYDMJ" }, Denominator = 10000
                    }
                };
                try
                {
                    Parallel.ForEach(tbTools, tool =>
                    {
                        tool.Gain(connection);
                    });
                    DCDYTBManager.Program();
                }
                catch (AggregateException ae)
                {
                    foreach (var exp in ae.InnerExceptions)
                    {
                        LogManager.Log(exp.ToString());
                    }
                }catch (Exception ex)
                {
                    LogManager.Log(ex.ToString());
                    LogManager.Record(ex.ToString());
                }


                Console.WriteLine("完成核对图斑面积一致性;");
                #endregion

                connection.Close();
            }
        }
コード例 #21
0
        public bool Check(OleDbConnection connection)
        {
            if (connection != null)
            {
                if (connection.State == System.Data.ConnectionState.Broken)
                {
                    connection.Close();
                    connection.Open();
                }
                if (connection.State == System.Data.ConnectionState.Closed)
                {
                    connection.Open();
                }

                var dict   = new Dictionary <string, Field>();
                var table  = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, TableName, null });
                var m      = table.Columns.IndexOf("COLUMN_NAME");
                var n      = table.Columns.IndexOf("NUMERIC_PRECISION");
                var l      = table.Columns.IndexOf("CHARACTER_MAXIMUM_LENGTH");
                var a      = table.Columns.IndexOf("DATA_TYPE");
                var length = 0;
                for (var i = 0; i < table.Rows.Count; i++)
                {
                    var row  = table.Rows[i];
                    var name = row.ItemArray.GetValue(m).ToString().Trim();
                    if (!dict.ContainsKey(name))
                    {
                        dict.Add(name, new Field()
                        {
                            Name   = name,
                            Title  = row.ItemArray.GetValue(n).ToString().Trim(),
                            Length = int.TryParse(row.ItemArray.GetValue(l).ToString().Trim(), out length) ? length : 0,
                            Type   = (FieldType)Enum.Parse(typeof(FieldType), row.ItemArray.GetValue(a).ToString().Trim())
                        });
                    }
                }
                var requireField = XmlClass.GetField(TableName);
                var str          = string.Empty;
                foreach (var field in requireField)
                {
                    if (dict.ContainsKey(field.Name))
                    {
                        if (field != dict[field.Name])
                        {
                            str = string.Format("字段{0}与要求的类型或者长度不符", field.Name);
                            Console.WriteLine(str);
                            Messages.Add(str);
                        }
                    }
                    else
                    {
                        str = string.Format("缺失字段{0};", field.Name);
                        Console.WriteLine(str);
                        Messages.Add(str);
                    }
                }
                QuestionManager.AddRange(Messages.Select(e => new Question {
                    Code = "3101", Name = Name, Project = CheckProject.结构符合性, TableName = TableName, Description = e
                }).ToList());
            }
            return(false);
        }
コード例 #22
0
        private bool CheckWhereFields(OleDbConnection connection)
        {
            var reader = ADOSQLHelper.ExecuteReader(connection,
                                                    string.IsNullOrEmpty(WhereCaluse) ?
                                                    (
                                                        LocationFields == null ?
                                                        string.Format("Select {0},{1},{2} from {3}", Key, string.Join(",", CheckFields), string.Join(",", WhereFields), TableName)
                 : string.Format("Select {0},{1},{2},{3} from {4}", Key, string.Join(",", CheckFields), string.Join(",", WhereFields), string.Join(",", LocationFields), TableName)
                                                    )
                : (
                                                        LocationFields == null ?
                                                        string.Format("Select {0},{1},{2} from {3} where {4}", Key, string.Join(",", CheckFields), string.Join(",", WhereFields), TableName, WhereCaluse)
                 : string.Format("Select {0},{1},{2},{3} from {4} where {5}", Key, string.Join(",", CheckFields), string.Join(",", WhereFields), string.Join(",", LocationFields), TableName, WhereCaluse)
                                                        )

                                                    );

            if (reader != null)
            {
                var array = new string[WhereFields.Length];
                var str   = string.Empty;
                var info  = string.Empty;
                while (reader.Read())
                {
                    for (var i = 0; i < WhereFields.Length; i++)
                    {
                        array[i] = reader[i + 1 + CheckFields.Length].ToString();
                    }
                    var key = string.Join(Split, array);
                    if (WhereList.Contains(key))
                    {
                        str = string.Empty;
                        for (var i = 0; i < CheckFields.Length; i++)
                        {
                            var a = reader[i + 1].ToString().Trim();
                            if (Is_Nullable ^ string.IsNullOrEmpty(a))
                            {
                                str += CheckFields[i] + ",";
                            }
                        }
                        if (!string.IsNullOrEmpty(str))
                        {
                            info = string.Format("{0}对应的字段:{1}与要求的{2}不符,图斑信息:行政村代码:【{3}】图斑编号:【{4}】", reader[0].ToString().Trim(), str, Is_Nullable ? "为空" : "必填", array[0], array[1]);
                            _questions.Add(
                                new Question
                            {
                                Code              = "5101",
                                Name              = Name,
                                Project           = CheckProject.图层内属性一致性,
                                TableName         = TableName,
                                BSM               = reader[0].ToString(),
                                Description       = info,
                                RelationClassName = RelationName,
                                ShowType          = ShowType.Space,
                                WhereClause       =
                                    LocationFields == null ?
                                    string.Format("[{0}] ='{1}'", Key, reader[0].ToString())
                                    : ADOSQLHelper.GetWhereClause(LocationFields, ADOSQLHelper.GetValues(reader, 1 + CheckFields.Length + WhereFields.Length, LocationFields.Length))
                            });
                            Messages.Add(info);
                        }
                    }
                }
                QuestionManager.AddRange(_questions);

                return(true);
            }
            return(false);
        }