/// <summary> /// Save命令的Executed事件处理函数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void CommandBindingSave_Executed(object sender, ExecutedRoutedEventArgs e) { // 新建项目的操作 if (isNew == true) { // 保存项目设置 projectSetting.Name = this.ProjectNameTextBox.Text; projectSetting.Province = this.ProjectProvinceTextBox.Text; projectSetting.City = this.ProjectCityTextBox.Text; // 检查项目名是否为空 if (string.IsNullOrEmpty(projectSetting.Name) || string.IsNullOrWhiteSpace(projectSetting.Name)) { return; } // 检测是否有同名项目 List <string> projectList = ProjectDataBase.ReadProjectList(); if (projectList != null && projectList.Contains(projectSetting.Name)) { MessageBox.Show("项目数据库中已存在名为\"" + projectSetting.Name + "\"的项目,无法新建项目。", "请检查项目名称", MessageBoxButton.OK, MessageBoxImage.Error); return; } // 创建项目数据库 ProjectDataBase.Create(projectSetting.Name); // 存储项目基本数据和公司数据 ProjectDataBase.EditProjectBasicInfo(projectSetting.Name, projectSetting.Name, projectSetting.Province, projectSetting.City); ProjectDataBase.EditProjectCompany(projectSetting.Name, projectSetting.CompanyName, projectSetting.CompanyCode, projectSetting.Drawer, projectSetting.Writer, projectSetting.Checker, projectSetting.Inspector, projectSetting.Approver, projectSetting.FinalApprover); // 删除旧分层数据,存储新分层数据 if (ProjectDataBase.ReadLayerNumberList(projectSetting.Name).Count > 0) { ProjectDataBase.DeleteAllLayer(projectSetting.Name); } if (projectSetting.LayerList != null) { for (int i = 0; i < projectSetting.LayerList.Count; i++) { string number = projectSetting.LayerList[i].Number; string name = projectSetting.LayerList[i].Name; string geo = projectSetting.LayerList[i].Geo; string description = projectSetting.LayerList[i].Description; ProjectDataBase.AddLayer(projectSetting.Name, number, name, geo, description); } } } // 非新建项目的操作 else { // 保存项目设置 string oldProjectName = projectSetting.Name; projectSetting.Name = this.ProjectNameTextBox.Text; projectSetting.Province = this.ProjectProvinceTextBox.Text; projectSetting.City = this.ProjectCityTextBox.Text; // 存储项目基本数据和公司数据 ProjectDataBase.EditProjectBasicInfo(oldProjectName, projectSetting.Name, projectSetting.Province, projectSetting.City); ProjectDataBase.EditProjectCompany(oldProjectName, projectSetting.CompanyName, projectSetting.CompanyCode, projectSetting.Drawer, projectSetting.Writer, projectSetting.Checker, projectSetting.Inspector, projectSetting.Approver, projectSetting.FinalApprover); // 删除旧分层数据,存储新分层数据 if (ProjectDataBase.ReadLayerNumberList(oldProjectName).Count > 0) { ProjectDataBase.DeleteAllLayer(oldProjectName); } if (projectSetting.LayerList != null) { for (int i = 0; i < projectSetting.LayerList.Count; i++) { string number = projectSetting.LayerList[i].Number; string name = projectSetting.LayerList[i].Name; string geo = projectSetting.LayerList[i].Geo; string description = projectSetting.LayerList[i].Description; ProjectDataBase.AddLayer(oldProjectName, number, name, geo, description); } } // 更改数据库文件名称,传递给主窗口更改数据文件名 oldFile = Program.ReadProgramPath() + "\\" + oldProjectName + ".gsygeo"; newFile = Program.ReadProgramPath() + "\\" + projectSetting.Name + ".gsygeo"; } // 关闭窗口 this.DialogResult = true; Program.currentProject = projectSetting.Name; this.Close(); }
/// <summary> /// 单击菜单"工具"-"导入旧版数据" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ImportOldDataMenu_Click(object sender, RoutedEventArgs e) { // 检查是否关闭当前项目 if (Program.currentProject != null) { MessageBox.Show("您有正处于打开状态的项目,请关闭当前项目后再执行本操作。"); return; } // 选择输出目录 string folderPath; System.Windows.Forms.FolderBrowserDialog programPathBrowser = new System.Windows.Forms.FolderBrowserDialog(); if (programPathBrowser.ShowDialog() == System.Windows.Forms.DialogResult.OK) { folderPath = programPathBrowser.SelectedPath; } else { return; } if (folderPath.Substring(folderPath.LastIndexOf(@"\") + 1) != "金浪岩土") { MessageBox.Show("选择的文件夹不正确,请选择\"金浪岩土\"文件夹!"); return; } // 耐心等候提示 MessageBox.Show("导入过程可能需要15-30秒的时间,请耐心等候,点击\"确定\"继续。"); // 遍历项目文件夹 List <string> projectlist = new List <string>(); List <string> ignoreprojectlist = new List <string>(); DirectoryInfo dir = new DirectoryInfo(folderPath); foreach (DirectoryInfo dChild in dir.GetDirectories("*")) { // 获取项目名称 string projectName = dChild.ToString(); // 获取项目文件夹路径 string projectPath = folderPath + @"\" + dChild + @"\"; // 新建项目 if (!string.IsNullOrEmpty(projectName) && !string.IsNullOrWhiteSpace(projectName)) { ProjectDataBase.Create(projectName); } // 读取分层信息 StreamReader reader = new StreamReader(projectPath + "基本信息.txt"); int countLine = 0; while (true) { countLine++; string line = reader.ReadLine(); if (countLine <= 3) { continue; } if (line == null) { break; } string number = line.Substring(0, line.IndexOf("/")); line = line.Substring(line.IndexOf("/") + 1); string name = line.Substring(0, line.IndexOf("/")); line = line.Substring(line.IndexOf("/") + 1); string description = line; string geo = "Q4al"; ProjectDataBase.AddLayer(projectName, number, name, geo, description); } reader.Close(); // 读取钻孔信息 List <string> numlist = ProjectDataBase.ReadLayerNumberList(projectName); List <string> deslist = ProjectDataBase.ReadLayerDescriptionList(projectName); DirectoryInfo dirZk = new DirectoryInfo(projectPath + @"钻孔\"); foreach (FileInfo dZkFile in dirZk.GetFiles("*.txt")) { // 读取基本信息 StreamReader zkReader = new StreamReader(projectPath + @"钻孔\" + dZkFile.ToString()); zkReader.ReadLine(); string zkname = zkReader.ReadLine(); zkReader.ReadLine(); double zkaltitude = Convert.ToDouble(zkReader.ReadLine()); BoreholeDataBase.AddZkBasicInfo(projectName, zkname, zkaltitude, Constants.NullNumber, Constants.NullNumber, Constants.NullNumber, Constants.NullNumber); zkReader.ReadLine(); // 读取分层信息 List <string> zknumberlist = new List <string>(); List <string> zknamelist = new List <string>(); List <string> zkgeolist = new List <string>(); List <string> zkdescriptionlist = new List <string>(); List <double> zkdepthlist = new List <double>(); while (true) { string line = zkReader.ReadLine(); if (line == "===取样===") { break; } zknumberlist.Add(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); zknamelist.Add(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); zkdepthlist.Add(Convert.ToDouble(line)); zkgeolist.Add("Q4al"); int index = numlist.IndexOf(zknumberlist[zknumberlist.Count - 1]); zkdescriptionlist.Add(deslist[index]); } BoreholeDataBase.AddLayerListToZk(projectName, zkname, zknumberlist, zknamelist, zkgeolist, zkdescriptionlist, zkdepthlist); // 读取取样信息 List <string> spnumberlist = new List <string>(); List <double> spdepthlist = new List <double>(); List <int> spisdisturbedlist = new List <int>(); countLine = 0; while (true) { string line = zkReader.ReadLine(); if (line == "===标贯===") { break; } countLine++; spnumberlist.Add(countLine.ToString()); spdepthlist.Add(Convert.ToDouble(line.Substring(0, line.IndexOf("/")))); line = line.Substring(line.IndexOf("/") + 1); spisdisturbedlist.Add(line == "扰" ? 1 : 0); } BoreholeDataBase.AddSampleListToZk(projectName, zkname, spnumberlist, spdepthlist, spisdisturbedlist); // 读取标贯信息 List <string> ntnumberlist = new List <string>(); List <double> ntdepthlist = new List <double>(); List <double> ntvaluelist = new List <double>(); List <string> nttypelist = new List <string>(); countLine = 0; while (true) { string line = zkReader.ReadLine(); if (line == null) { break; } countLine++; ntnumberlist.Add(countLine.ToString()); ntdepthlist.Add(Convert.ToDouble(line.Substring(0, line.IndexOf("/")))); line = line.Substring(line.IndexOf("/") + 1); ntvaluelist.Add(Convert.ToDouble(line)); nttypelist.Add("N"); } BoreholeDataBase.AddNTestListToZk(projectName, zkname, ntnumberlist, ntdepthlist, ntvaluelist, nttypelist); zkReader.Close(); } // 读取静力触探信息 DirectoryInfo dirJk = new DirectoryInfo(projectPath + @"静力触探\"); foreach (FileInfo dJkFile in dirJk.GetFiles("*.txt")) { // 读取基本信息 StreamReader jkReader = new StreamReader(projectPath + @"静力触探\" + dJkFile.ToString()); jkReader.ReadLine(); string jkname = jkReader.ReadLine(); jkReader.ReadLine(); double jkaltitude = Convert.ToDouble(jkReader.ReadLine()); CPTDataBase.AddJkBasicInfo(projectName, jkname, jkaltitude, Constants.NullNumber, Constants.NullNumber); jkReader.ReadLine(); // 读取分层信息 List <string> jknumberlist = new List <string>(); List <string> jknamelist = new List <string>(); List <string> jkgeolist = new List <string>(); List <string> jkdescriptionlist = new List <string>(); List <double> jkdepthlist = new List <double>(); while (true) { string line = jkReader.ReadLine(); if (line == "===Ps值===") { break; } jknumberlist.Add(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); jknamelist.Add(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); jkdepthlist.Add(Convert.ToDouble(line)); jkgeolist.Add("Q4al"); int index = numlist.IndexOf(jknumberlist[jknumberlist.Count - 1]); jkdescriptionlist.Add(deslist[index]); } CPTDataBase.AddLayerListToJk(projectName, jkname, jknumberlist, jknamelist, jkgeolist, jkdescriptionlist, jkdepthlist); // 读取Ps值信息 List <double> pslist = new List <double>(); while (true) { string line = jkReader.ReadLine(); if (line == null) { break; } pslist.Add(Convert.ToDouble(line)); } CPTDataBase.AddPsListToJk(projectName, jkname, pslist); } // 读取土工试验 StreamReader rstReader = new StreamReader(projectPath + @"土工试验\NormalTest.txt"); List <RoutineSoilTest> rsts = new List <RoutineSoilTest>(); while (true) { string line = rstReader.ReadLine(); if (line == null) { break; } string zkNumber = line.Substring(0, line.IndexOf("/")); line = line.Substring(line.IndexOf("/") + 1); double sampleDepth = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); string sampleLayer = ProjectDataBase.ReadLayerNumberList(projectName)[0]; List <ZkLayer> layers = BoreholeDataBase.ReadZkLayer(projectName, zkNumber); for (int i = 0; i < layers.Count; i++) { if (sampleDepth <= layers[i].Depth) { sampleLayer = layers[i].Number; break; } } double waterLevel = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double density = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double specificGravity = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double voidRatio = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double saturation = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double liquidLimit = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double plasticLimit = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double plasticIndex = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double liquidityIndex = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double compressibility = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double modulus = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double frictionAngle = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))) == 0 ? Constants.NullNumber : Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double cohesion = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))) == 0 ? Constants.NullNumber : Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); line = line.Substring(line.IndexOf("/") + 1); double permeability = line.Substring(0, line.IndexOf("/")) == "0.000000E+000" ? Constants.NullNumber : Convert.ToDouble(line.Substring(0, line.IndexOf("/"))); RoutineSoilTest rst = new RoutineSoilTest(zkNumber, sampleDepth, sampleLayer, waterLevel, density, specificGravity, voidRatio, saturation, liquidLimit, plasticLimit, plasticIndex, liquidityIndex, compressibility, modulus, frictionAngle, cohesion, permeability); rsts.Add(rst); } rstReader.Close(); GC.Collect(); GC.WaitForPendingFinalizers(); RoutineSoilTestDataBase.Refresh(projectName, rsts); projectlist.Add(projectName); } // 成功提示 StringBuilder sb = new StringBuilder(); if (projectlist.Count > 0) { sb.AppendLine("已成功导入以下项目:"); for (int i = 0; i < projectlist.Count; i++) { sb.AppendLine((i + 1).ToString() + projectlist[i]); } } else { sb.AppendLine("没有导入任何项目。"); } MessageBox.Show(sb.ToString()); }