using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Text.RegularExpressions; using System.Web.Script.Serialization; using System.Windows.Forms; namespace DTTest { public partial class E { } public partial class ModelManagement { /// /// 导出项目数据 /// 2020.10.29 /// public void ExportProjectData_FixedTable_Dialog(bool isLightweight) { var exportOpenFileDialog = new SaveFileDialog(); //设置文件类型 exportOpenFileDialog.Filter = "JavaScript Object Notation(*.json)|*.json"; //exportOpenFileDialog.Filter = "JavaScript Object Notation(*.json)|*.json|Microsoft Excel(*.xls)|*.xls|Data File(*.dat)|*.dat"; //设置默认文件类型显示顺序 exportOpenFileDialog.FilterIndex = 1; //保存对话框是否记忆上次打开的目录 exportOpenFileDialog.RestoreDirectory = true; var exportDialogResult = exportOpenFileDialog.ShowDialog(); //点了保存按钮进入 if (exportDialogResult == DialogResult.OK) { var localFilePath = exportOpenFileDialog.FileName;//获得文件路径 var fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1); //获取文件名,不带路径 var fileExtension = localFilePath.Substring(localFilePath.LastIndexOf(".") + 1); //获取文件扩展名 //获取文件路径,不带文件名 //FilePath = localFilePath.Substring(0, localFilePath.LastIndexOf("\\")); //给文件名前加上时间 //newFileName = DateTime.Now.ToString("yyyyMMdd") + fileNameExt; //在文件名里加字符 //saveFileDialog1.FileName.Insert(1,"dameng"); //System.IO.FileStream fs = (System.IO.FileStream)sfd.OpenFile();//输出文件 var fileExtensionToLower = fileExtension.ToLower(); ExportProjectData_FixedTable(localFilePath, fileExtensionToLower, isLightweight); } //else //{ // MessageBox.Show("您已取消了导出数据操作!"); //} } public void ExportProjectData_FixedTable_Dialog(string projectName) { var exportOpenFileDialog = new SaveFileDialog(); //设置文件类型 exportOpenFileDialog.Filter = "导出文件(*.bak)|*.bak"; //exportOpenFileDialog.Filter = "JavaScript Object Notation(*.json)|*.json|Microsoft Excel(*.xls)|*.xls|Data File(*.dat)|*.dat"; //设置默认文件类型显示顺序 exportOpenFileDialog.FilterIndex = 1; //保存对话框是否记忆上次打开的目录 exportOpenFileDialog.RestoreDirectory = true; var exportDialogResult = exportOpenFileDialog.ShowDialog(); //点了保存按钮进入 if (exportDialogResult == DialogResult.OK) { var localFilePath = exportOpenFileDialog.FileName;//获得文件路径 //var fileNameExt = localFilePath.Substring(localFilePath.LastIndexOf("\\") + 1); //获取文件名,不带路径 //var fileExtension = localFilePath.Substring(localFilePath.LastIndexOf(".") + 1); //获取文件扩展名 //获取文件路径,不带文件名 //FilePath = localFilePath.Substring(0, localFilePath.LastIndexOf("\\")); //给文件名前加上时间 //newFileName = DateTime.Now.ToString("yyyyMMdd") + fileNameExt; //在文件名里加字符 //saveFileDialog1.FileName.Insert(1,"dameng"); //System.IO.FileStream fs = (System.IO.FileStream)sfd.OpenFile();//输出文件 //var fileExtensionToLower = fileExtension.ToLower(); System.Threading.ThreadPool.QueueUserWorkItem((object obj) => { ExportProjectData(localFilePath, projectName); }); } //else //{ // MessageBox.Show("您已取消了导出数据操作!"); //} } public void ExportProjectData(string localFilePath,string projectName) { string projectDbDir = PP.currExecPath + "\\models\\GLTFmodel\\" + projectName; string projectDbPath = projectDbDir + "\\db.json"; //1导出项目数据 ExportProjectData_FixedTable(projectDbPath, "json", false); // Zip.ZipFile(projectDbDir, localFilePath, out string err); } public void ImportProjectData(string localFilePath, string projectName) { string projectDbDir = PP.currExecPath + "\\models\\GLTFmodel\\" + projectName; string projectDbPath = projectDbDir + "\\db.json"; // Zip.UnZipFile(localFilePath, projectDbDir, out string err); ImportProjectData_FixedTable(projectDbPath, projectName); //1导出项目数据 //ExportProjectData_FixedTable(projectDbPath, "json", false); } /// /// 导出项目数据 /// 2020.10.29 /// 2021.3.12 /// public void ExportProjectData_FixedTable(string localFilePath, string fileExtensionToLower, bool isLightweight) { var outDataSet = new DataSet(); var tableDataList = new List(); var dt_TableList = SqlOperation.TransferProject.Select_DB_Tables(); // PP.iGlobalVar2.ShowMainProgressSet("导出项目数据进度", dt_TableList.Rows.Count - 1); for (int i = 0; i < dt_TableList.Rows.Count; i++) { var tableName = dt_TableList.Rows[i]["name"].ToString(); DataTable dt = null; try { dt = SqlOperation.TransferProject.Select_Table(tableName); } catch (Exception err) { LogNet.LogisTrac.WriteLog(typeof(ModelManagement), err); if(ModelBasic.ErrDef.iErrHandler!=null) // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("导出项目数据查询表【错误】在表名【" + tableName + "】:\n" + err.ToString()); continue; } if (dt.Columns.Contains("ID")) { dt.Columns.Remove("ID"); } if (dt.Columns.Contains("OperationTime")) { dt.Columns.Remove("OperationTime"); } if (dt.Columns.Contains("ProjectCode")) { dt.Columns.Remove("ProjectCode"); } if (dt.Columns.Contains("ActData")) { dt.Columns.Remove("ActData"); } if (isLightweight)//轻量级选项 { if (dt.Columns.Contains("CraftPlayData")) { dt.Columns.Remove("CraftPlayData"); } } //if (dt.Columns.Contains("CraftPlayData_Joint")) //{ // dt.Columns.Remove("CraftPlayData_Joint"); //} //if (dt.Columns.Contains("CraftPlayData_Raw")) //{ // dt.Columns.Remove("CraftPlayData_Raw"); //} outDataSet.Tables.Add(dt.Copy()); if (dt.Rows.Count > 0) tableDataList.Add("{\"" + dt.TableName + "\":" + JsonConvert.SerializeObject(dt) + "}"); // PP.iGlobalVar2.ShowMainProgress(i); } if (fileExtensionToLower == "json" | fileExtensionToLower == "dat") { var db_Project_Json = "[" + string.Join(",", tableDataList.ToArray()) + "]"; File.WriteAllText(localFilePath, db_Project_Json); //string strobj = db_Project_Json; //FileStream stream = new FileStream(localFilePath, FileMode.Create, FileAccess.Write, FileShare.None); //BinaryFormatter formatter = new BinaryFormatter(); //formatter.Serialize(stream, strobj); //stream.Close(); } if (fileExtensionToLower == "xls" | fileExtensionToLower == "xlsx") { var success = OExcel.ExeclHelper_Model.DataSetToExcel(outDataSet, localFilePath); if (success == false) { // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("项目数据导出Excel【错误】,原因是数据中存在大字段!请导出.json或.dat文件"); return; } } // if(ModelBasic.ErrDef.iErrHandler!=null) // ModelBasic.ErrDef.iErrHandler.ErrInfoTransmit("导出项目数据完成!输出路径:" + localFilePath); } public void ImportProjectData(string projectName) { //1:判断项目名称是否存在? //2:项目名称如果存在,如果导入,删除原来项目 if (MessageBox.Show("确认导入项目?【" + projectName + "】", "导入确认", MessageBoxButtons.YesNo) == DialogResult.Yes) { var importOpenFileDialog = new OpenFileDialog(); var importDialogResult = importOpenFileDialog.ShowDialog(); if (importDialogResult == DialogResult.OK) { var localFilePath = importOpenFileDialog.FileName; ImportProjectData( localFilePath, projectName); } //else //{ // MessageBox.Show("您已取消了导入项目操作!"); //} } //else //{ // MessageBox.Show("您已取消了导入项目操作!"); //} } /// /// 导入项目数据 /// public void ImportProjectData() { //1:判断项目名称是否存在? //2:项目名称如果存在,如果导入,删除原来项目 if (MessageBox.Show("确认导入项目?【" + "projectName" + "】", "导入确认", MessageBoxButtons.YesNo) == DialogResult.Yes) { var importOpenFileDialog = new OpenFileDialog(); var importDialogResult = importOpenFileDialog.ShowDialog(); if (importDialogResult == DialogResult.OK) { var localFilePath = importOpenFileDialog.FileName; ImportProjectData_FixedTable(localFilePath); } //else //{ // MessageBox.Show("您已取消了导入项目操作!"); //} } //else //{ // MessageBox.Show("您已取消了导入项目操作!"); //} } public void ImportProjectData_FixedTable(string localFilePath, string restoredProjectName) { string PP_ProjectCode = Guid.NewGuid().ToString("D").ToUpper(); var t1 = DateTime.Now.ToFileTimeUtc(); var projectDataFile = File.ReadAllText(localFilePath); var t2 = DateTime.Now.ToFileTimeUtc(); var D1 = ((t2 - t1) / 10000).ToString(); var jProjectData = (JArray)JsonConvert.DeserializeObject(projectDataFile); var curr_Index_All = 1; var t_ProgressBar_2 = new T_ProgressBar_2("导入项目数据进度", jProjectData.Count); //t_ProgressBar_2.Show(); foreach (JToken jProjectData_P in jProjectData) { var jObj = JObject.Parse(jProjectData_P.ToString()); var tableName = jObj.First.Path; var j_TableData = jObj[tableName].ToString(); var dt_TableData = JsonConvert.DeserializeObject(j_TableData); var columnName = GetColumnsByDataTable(dt_TableData); var columnNameRows = string.Join(",", columnName.ToList().ToArray()); t_ProgressBar_2.ShowProgressSet(dt_TableData.Rows.Count); //foreach(DataRow dr in dt_TableData.Rows) for (int k = 0; k < dt_TableData.Rows.Count; k++) { var rowDataList = new List(); for (int i = 0; i < columnName.Length; i++) { var currValue = dt_TableData.Rows[k][(columnName[i])].ToString(); if (!ModelBasic.Judge.IsIntOrDouble(currValue)) currValue = "'" + currValue + "'"; rowDataList.Add(currValue); } var rowData = string.Join(",", rowDataList.ToArray()); SqlOperation.TransferProject.Insert_Table(tableName, columnNameRows, rowData, PP_ProjectCode, restoredProjectName); //t_ProgressBar_2.ShowProgress(k); } //t_ProgressBar_2.ShowProgress_All(curr_Index_All); curr_Index_All = curr_Index_All + 1; } var t3 = DateTime.Now.ToFileTimeUtc(); var D2 = ((t3 - t2) / 10000).ToString(); MessageBox.Show("项目文件导入成功!\n" + "读取耗时:" + D1 + " ms\n" + "转换存储耗时:" + D2 + " ms\n"); } /// /// 导入项目数据 /// 2020.10.30 /// 固定格式文件方式 /// public void ImportProjectData_FixedTable(string localFilePath) { var t1 = DateTime.Now.ToFileTimeUtc(); var projectDataFile = File.ReadAllText(localFilePath); var t2 = DateTime.Now.ToFileTimeUtc(); var D1 = ((t2 - t1) / 10000).ToString(); var jProjectData = (JArray)JsonConvert.DeserializeObject(projectDataFile); var curr_Index_All = 1; var t_ProgressBar_2 = new T_ProgressBar_2("导入项目数据进度", jProjectData.Count); t_ProgressBar_2.Show(); foreach (JToken jProjectData_P in jProjectData) { var jObj = JObject.Parse(jProjectData_P.ToString()); var tableName = jObj.First.Path; var j_TableData = jObj[tableName].ToString(); var dt_TableData = JsonConvert.DeserializeObject(j_TableData); var columnName = GetColumnsByDataTable(dt_TableData); var columnNameRows = string.Join(",", columnName.ToList().ToArray()); t_ProgressBar_2.ShowProgressSet(dt_TableData.Rows.Count); //foreach(DataRow dr in dt_TableData.Rows) for (int k = 0; k < dt_TableData.Rows.Count; k++) { var rowDataList = new List(); for (int i = 0; i < columnName.Length; i++) { var currValue = dt_TableData.Rows[k][(columnName[i])].ToString(); if (!ModelBasic.Judge.IsIntOrDouble(currValue)) currValue = "'" + currValue + "'"; rowDataList.Add(currValue); } var rowData = string.Join(",", rowDataList.ToArray()); SqlOperation.TransferProject.Insert_Table(tableName, columnNameRows, rowData); t_ProgressBar_2.ShowProgress(k); } t_ProgressBar_2.ShowProgress_All(curr_Index_All); curr_Index_All = curr_Index_All + 1; } var t3 = DateTime.Now.ToFileTimeUtc(); var D2 = ((t3 - t2) / 10000).ToString(); MessageBox.Show("项目文件导入成功!\n" + "读取耗时:" + D1 + " ms\n" + "转换存储耗时:" + D2 + " ms\n"); } /// /// 根据datatable获得列名 /// /// 表对象 /// 返回结果的数据列数组 public static string[] GetColumnsByDataTable(DataTable dt) { string[] strColumns = null; if (dt.Columns.Count > 0) { var columnNum = 0; columnNum = dt.Columns.Count; strColumns = new string[columnNum]; for (int i = 0; i < dt.Columns.Count; i++) { strColumns[i] = dt.Columns[i].ColumnName; } } return strColumns; } } }