You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

7955 lines
327 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using DbfDataReader;
using DevExpress.Spreadsheet;
//using DfdIO.Elements;
//using DQ.Construction.NewLook.CustomControls;
using MiniExcelLibs;
using Newtonsoft.Json;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
//using ParameterDQ.Construction.Util;
using SqlSugar;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Diagnostics;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using WellWorkDataUI;
using WellWorkDataUI.CustomControls;
using WorkData;
using WorkData.Entity;
using WorkData.EntityBase;
//using static ParameterDQ.Construction.Util.ParameterDataWriter;
using IRow = NPOI.SS.UserModel.IRow;
using Path = System.IO.Path;
using TableInfo = WorkData.Entity.TableInfo;
namespace DQ.Construction.NewLook.DataManager
{
/// <summary>
/// ImportManager
/// </summary>
internal class ImportManager
{
/// <summary>
/// /// 执行次数,用于井斜分批导入时验证
/// </summary>
private int times = 0;
/// The preview line count.
/// </summary>
private const int PreviewLineCount = 200;
public string errorMessage = string.Empty;
private int totalDuplicate = 0;
private string currentFileName;
private IImportDataUI ui;
private IImportDataCfg cfg;
private int importNum = 0;
private string importTips = string.Empty;
/// <summary>
/// Initializes a new instance of the <see cref="ImportManager"/> class.
/// </summary>
/// <param name="ui">window</param>
public ImportManager(IImportDataUI ui)
{
this.ui = ui;
if (ui is IImportDataCfg cfg)
{
this.cfg = cfg;
}
}
#region 属性
/// <summary>
/// IsDataImported
/// </summary>
public bool IsDataImported { get; private set; } = false;
/// <summary>
/// PreviewCache
/// </summary>
public PreviewCache PreviewCache { get; private set; } = new PreviewCache();
/// <summary>
/// RecordCount
/// </summary>
public int RecordCount { get; private set; } = 0;
#endregion
/// <summary>
/// Gets the start i d.
/// </summary>
/// <returns>An int.</returns>
private int GetStartID<T>()
{
return DBHelp.Db.Queryable<T>().Max<int>("id") + 1;
}
/// <summary>
/// Gets the start i d.
/// </summary>
/// <returns>An int.</returns>
private int GetStartXHID<T>(string key)
{
return DBHelp.Db.Queryable<T>().Where("jh=" + key).Max<int>("id") + 1;
}
/// <summary>
/// 导入数据
/// </summary>
/// <param name="cfg">cfg</param>
/// <returns>task</returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1101:Prefix local calls with this", Justification = "blabla")]
public async Task ImportTable(IImportDataCfg cfg)
{
this.cfg = cfg ?? this.cfg;
using (SplashHelper.Create())
{
if (this.tableName == DBHelp.GetTableName<WellBase>())
{
await this.CheckAndSave(this.CheckInputData, (table, matches, i, start) => Save<WellBase>(table, matches, i, start, this.SaveDataWellBase, false));
KEPDataManager.NotifyChange<WellBase>();
}
else if (this.tableName == DBHelp.GetTableName<WellDeflection>())
{
await this.CheckAndSaveAsync(this.CheckWellDeflection, (table, matches, i, start) => Save<WellDeflection>(table, matches, i, start, this.SaveWellDeflection, false));
DataHelp.UpdateSearchWellName<WellDeflection>();
KEPDataManager.NotifyChange<WellDeflection>();
}
else if (this.tableName == DBHelp.GetTableName<InterpretDrillWellLayered>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<InterpretDrillWellLayered>(table, matches, i, start, this.SaveDataDrillWellLayered));
KEPDataManager.NotifyChange<InterpretDrillWellLayered>();
}
else if (this.tableName == DBHelp.GetTableName<WellCurve>())
{
await this.CheckAndSaveAsync(this.CheckWellCurve, (table, matches, i, start) => Save<WellCurve>(table, matches, i, start, this.SaveDataCurve, false));
KEPDataManager.NotifyChange<WellCurve>();
}
else if (this.tableName == DBHelp.GetTableName<WellTimeDepth>())
{
await this.CheckAndSaveAsync(this.CheckWellCurveOrTimeDepth, (table, matches, i, start) => Save<WellTimeDepth>(table, matches, i, start, this.SaveDataCurveOrTimeDepth<WellTimeDepth>));
KEPDataManager.NotifyChange<WellCurve>();
}
else if (this.tableName == DBHelp.GetTableName<WellPerforation>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<WellPerforation>(table, matches, i, start, this.SaveDataWellPerforation));
KEPDataManager.NotifyChange<WellPerforation>();
}
else if (this.tableName == DBHelp.GetTableName<WellBreakPoint>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<WellBreakPoint>(table, matches, i, start, this.SaveDataWellBreakPoint));
KEPDataManager.NotifyChange<WellBreakPoint>();
}
else if (this.tableName == DBHelp.GetTableName<WellCapacityOilMonth>())
{
await this.CheckAndSave(this.CheckWellCapacity, (table, matches, i, start) => SaveWellCapacity<WellCapacityOilMonth>(table, matches, i));
KEPDataManager.NotifyChange<WellCapacityOilMonth>();
}
else if (this.tableName == DBHelp.GetTableName<WellCapacityOilYear>())
{
await this.CheckAndSave(this.CheckWellCapacity, (table, matches, i, start) => SaveWellCapacity<WellCapacityOilYear>(table, matches, i));
KEPDataManager.NotifyChange<WellCapacityOilYear>();
}
else if (this.tableName == DBHelp.GetTableName<WellCapacityWaterMonth>())
{
await this.CheckAndSave(this.CheckWellCapacity, (table, matches, i, start) => SaveWellCapacity<WellCapacityWaterMonth>(table, matches, i));
KEPDataManager.NotifyChange<WellCapacityWaterMonth>();
}
else if (this.tableName == DBHelp.GetTableName<WellCapacityWaterYear>())
{
await this.CheckAndSave(this.CheckWellCapacity, (table, matches, i, start) => SaveWellCapacity<WellCapacityWaterYear>(table, matches, i));
KEPDataManager.NotifyChange<WellCapacityWaterYear>();
}
else if (this.tableName == DBHelp.GetTableName<WellCapacityOilDay>())
{
await this.CheckAndSave(this.CheckWellCapacity, (table, matches, i, start) => SaveWellCapacity<WellCapacityOilDay>(table, matches, i));
KEPDataManager.NotifyChange<WellCapacityOilDay>();
}
else if (this.tableName == DBHelp.GetTableName<WellCapacityWaterDay>())
{
await this.CheckAndSave(this.CheckWellCapacity, (table, matches, i, start) => SaveWellCapacity<WellCapacityWaterDay>(table, matches, i));
KEPDataManager.NotifyChange<WellCapacityWaterDay>();
}
else if (this.tableName == DBHelp.GetTableName<WellTestResult>())
{
await this.CheckAndSave(this.CheckWellCapacity, (table, matches, i, start) => SaveWellCapacity<WellTestResult>(table, matches, i));
KEPDataManager.NotifyChange<WellTestResult>();
}
else if (this.tableName == DBHelp.GetTableName<WellTestTotal>())
{
await this.CheckAndSave(this.CheckWellCapacity, (table, matches, i, start) => SaveWellCapacity<WellTestTotal>(table, matches, i));
KEPDataManager.NotifyChange<WellTestTotal>();
}
//else if (this.tableName == DBHelp.GetTableName<InterpretFault>())
//{
// await this.CheckAndSave(this.CheckFault, async (table, matches, i, start) => await SaveInterpret<InterpretFault>(table, matches, i, this.SaveDataFault));
// KEPDataManager.NotifyChange<InterpretFault>();
//}
//else if (this.tableName == DBHelp.GetTableName<InterpretBoundary>())
//{
// await this.CheckAndSave(this.CheckBoundary, async (table, matches, i, start) => await SaveInterpret<InterpretBoundary>(table, matches, i, this.SaveDataBoundary));
// KEPDataManager.NotifyChange<InterpretBoundary>();
//}
//else if (this.tableName == DBHelp.GetTableName<ScatterBaseFault>())
//{
// if (!string.IsNullOrWhiteSpace(this.cfg.UpdateNode))
// {
// await this.CheckAndSave(this.CheckFault, async (table, matches, i, start) => await this.SaveDataScatterSingleFault(table, matches, i));
// }
// else
// {
// await this.CheckAndSave(this.CheckFault, async (table, matches, i, start) => await SaveInterpret<ScatterBaseFault>(table, matches, i, this.SaveDataScatterFault));
// }
// KEPDataManager.NotifyChange<ScatterBaseFault>();
//}
//else if (this.tableName == DBHelp.GetTableName<ScatterBaseBoundary>())
//{
// if (!string.IsNullOrWhiteSpace(this.cfg.UpdateNode))
// {
// await this.CheckAndSave(this.CheckBoundary, async (table, matches, i, start) => await this.SaveDataScatterSingleBoundary(table, matches, i));
// }
// else
// {
// await this.CheckAndSave(this.CheckBoundary, async (table, matches, i, start) => await SaveInterpret<ScatterBaseBoundary>(table, matches, i, this.SaveDataScatterBoundary));
// }
// KEPDataManager.NotifyChange<ScatterBaseBoundary>();
//}
else if (this.tableName == DBHelp.GetTableName<WorkArea>())
{
await this.CheckAndSave(this.CheckWorkArea, async (table, matches, i, start) =>
{
await this.SaveWorkArea(table, matches);
});
KEPDataManager.NotifyChange<WorkArea>();
}
else if (this.tableName == DBHelp.GetTableName<LssxCjx>())
{
await this.CheckAndSaveAsync(
this.CheckInputDataWithWellName,
(table, matches, i, start) => this.SaveWellEntity<LssxCjx>(table, matches, i));
KEPDataManager.NotifyChange<LssxCjx>();
}
else if (this.tableName == DBHelp.GetTableName<LssxSt>())
{
await this.CheckAndSaveAsync(
this.CheckInputDataWithWellName,
(table, matches, i, start) => this.SaveWellEntity<LssxSt>(table, matches, i));
KEPDataManager.NotifyChange<LssxSt>();
}
else if (this.tableName == DBHelp.GetTableName<LssxYlsy>())
{
await this.CheckAndSaveAsync(
this.CheckInputDataWithWellName,
(table, matches, i, start) => this.SaveWellEntity<LssxYlsy>(table, matches, i));
KEPDataManager.NotifyChange<LssxYlsy>();
}
else if (this.tableName == DBHelp.GetTableName<LssxYxsy>())
{
await this.CheckAndSaveAsync(
this.CheckInputDataWithWellName,
(table, matches, i, start) => this.SaveWellEntity<LssxYxsy>(table, matches, i));
KEPDataManager.NotifyChange<LssxYxsy>();
}
else if (this.tableName == DBHelp.GetTableName<HoriWellFracturParameter>())
{
await this.CheckAndSave(
this.CheckInputData,
(table, matches, i, start) => Save<HoriWellFracturParameter>(table, matches, i, start, this.SaveDataHoriWellFractParm));
KEPDataManager.NotifyChange<HoriWellFracturParameter>();
}
else if (this.tableName == DBHelp.GetTableName<HoriWellFracturCoord>())
{
await this.CheckAndSave(
this.CheckInputData,
(table, matches, i, start) => Save<HoriWellFracturCoord>(table, matches, i, start, this.SaveDataHoriWellFractCoord));
KEPDataManager.NotifyChange<HoriWellFracturCoord>();
}
else if (this.tableName == DBHelp.GetTableName<WellCasingDamage>())
{
await this.CheckAndSaveAsync(
this.CheckWellExist,
(table, matches, i, start) => this.SaveWellEntity<WellCasingDamage>(table, matches, i));
KEPDataManager.NotifyChange<WellCasingDamage>();
}
else if (this.tableName == DBHelp.GetTableName<Surveyline2d>())
{
await this.CheckAndSave(
this.CheckInputData,
(table, matches, i, start) => Save<Surveyline2d>(table, matches, i, start, this.SaveSurveyline2d));
KEPDataManager.NotifyChange<Surveyline2d>();
}
else if (this.tableName == DBHelp.GetTableName<Crossplot>())
{
await this.CheckAndSave((tableList, cache) => true, this.SaveCrossplot);
KEPDataManager.NotifyChange<Crossplot>();
}
else if (this.tableName == DBHelp.GetTableName<WellLithology>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<WellLithology>(table, matches, i, start, this.SaveWellLithology));
KEPDataManager.NotifyChange<WellLithology>();
}
else if (this.tableName == DBHelp.GetTableName<CycleLongterm>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<CycleLongterm>(table, matches, i, start, this.SaveCycleLongterm));
KEPDataManager.NotifyChange<CycleLongterm>();
}
else if (this.tableName == DBHelp.GetTableName<CycleMediumterm>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<CycleMediumterm>(table, matches, i, start, this.SaveCycleMediumterm));
KEPDataManager.NotifyChange<CycleMediumterm>();
}
else if (this.tableName == DBHelp.GetTableName<CycleShortterm>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<CycleShortterm>(table, matches, i, start, this.SaveCycleShortterm));
KEPDataManager.NotifyChange<CycleShortterm>();
}
else if (this.tableName == DBHelp.GetTableName<WellInnerLayer>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<WellInnerLayer>(table, matches, i, start, this.SaveWellInnerLayer));
KEPDataManager.NotifyChange<WellInnerLayer>();
}
else if (this.tableName == DBHelp.GetTableName<WellReservesLayer>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<WellReservesLayer>(table, matches, i, start, this.SaveWellReservesLayer));
KEPDataManager.NotifyChange<WellReservesLayer>();
}
else if (this.tableName == DBHelp.GetTableName<WellCoring>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<WellCoring>(table, matches, i, start, this.SaveWellCoring));
KEPDataManager.NotifyChange<WellCoring>();
}
else if (this.tableName == DBHelp.GetTableName<WellSideWallCoring>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<WellSideWallCoring>(table, matches, i, start, this.SaveWellSideWallCoring));
KEPDataManager.NotifyChange<WellSideWallCoring>();
}
else if (this.tableName == DBHelp.GetTableName<WellWaterInjection>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<WellWaterInjection>(table, matches, i, start, this.SaveWellWaterInjection));
KEPDataManager.NotifyChange<WellWaterInjection>();
}
else if (this.tableName == DBHelp.GetTableName<WellFluidProducingProfile>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<WellFluidProducingProfile>(table, matches, i, start, this.SaveWellFluidProducingProfile));
KEPDataManager.NotifyChange<WellFluidProducingProfile>();
}
else if (this.tableName == DBHelp.GetTableName<WellLithologicalAnalysis>())
{
await this.CheckAndSaveAsync(this.CheckInputDataWithWellName, (table, matches, i, start) => Save<WellLithologicalAnalysis>(table, matches, i, start, this.SaveWellLithologicalAnalysis));
KEPDataManager.NotifyChange<WellLithologicalAnalysis>();
}
//else if (this.tableType.IsType<IReservoirData>())
//{
// await SaveReservoirData<CcsjBhd>();
// await SaveReservoirData<CcsjKxd>();
// await SaveReservoirData<CcsjStl>();
// await SaveReservoirData<CcsjSyhd>();
// await SaveReservoirData<CcsjYxhd>();
//}
//else if (this.tableType.IsType<InterpretTable>())
//{
// await SaveInterpretTable<InterpretTimeLayer>();
// await SaveInterpretTable<InterpretDepthLayer>();
// await SaveInterpretTable<InterpretVaildThickness>();
// await SaveInterpretTable<InterpretSandThickness>();
// await SaveInterpretTable<InterpretPorosity>();
// await SaveInterpretTable<InterpretPenetration>();
// await SaveInterpretTable<InterpretSaturation>();
// await SaveInterpretTable<InterpretAttribute>();
// await SaveInterpretTable<ScatterBase>();
//}
//else if (this.tableType == ReservoirHelp.Type)
//{
// await this.CheckAndSaveAsync(
// this.CheckInputDataWithWellName,
// async (table, matches, i, start) =>
// {
// await Save<CcsjBhd>(table, matches, i, start, this.SaveCcsj<CcsjBhd>);
// await Save<CcsjKxd>(table, matches, i, start, this.SaveCcsj<CcsjKxd>);
// await Save<CcsjStl>(table, matches, i, start, this.SaveCcsj<CcsjStl>);
// await Save<CcsjSyhd>(table, matches, i, start, this.SaveCcsj<CcsjSyhd>);
// await Save<CcsjYxhd>(table, matches, i, start, this.SaveCcsj<CcsjYxhd>);
// });
//}
}
this.IsDataImported = true;
// 保存InterpretTableXYZ
//async Task SaveInterpretTable<T>()
// where T : InterpretTable, new()
//{
// if (this.tableType == typeof(T))
// {
// await this.CheckAndSave(
// this.CheckMultipleInputData,
// async (table, matches, i, start) => await SaveInterpret<T>(table, matches, i, this.SaveDataInterpretTable<T>));
// KEPDataManager.NotifyChange<T>();
// }
//}
//// 保存储层数据
//async Task SaveReservoirData<T>()
// where T : class, IReservoirData, new()
//{
// if (this.tableType == typeof(T))
// {
// await this.CheckAndSaveAsync(this.CheckWellExist, (table, matches, i, start) => Save<T>(table, matches, i, start, this.SaveCcsj<T>));
// KEPDataManager.NotifyChange<T>();
// }
//}
// 保存通用数据
Task Save<T>(DataTable table, MatchCache matches, int index, int startID, Action<DataTable, MatchCache, int, int, bool> action, bool bPrompt = true)
where T : class, new()
{
return SaveGeneral<T>(table, matches, index, startID, action, ref bPrompt);
}
Task SaveGeneral<T>(DataTable table, MatchCache matches, int index, int startID, Action<DataTable, MatchCache, int, int, bool> action, ref bool bPrompt)
where T : class, new()
{
if (bPrompt && !this.AlwaysAppend && !this.UpdateAppend && this.GetTableRecordCount<T>() > 0)
{
if (DevExpress.XtraSplashScreen.SplashScreenManager.Default != null)
{
DevExpress.XtraSplashScreen.SplashScreenManager.CloseForm();
}
var result = new DlgAppend().ShowDialog();
if (result == DialogResult.OK)
{
if (this.cfg is FrmImportData xtraForm)
{
DevExpress.XtraSplashScreen.SplashScreenManager.ShowForm(xtraForm, typeof(DlgWait), false, false, DevExpress.XtraSplashScreen.ParentFormState.Unlocked);
}
if (typeof(T) == typeof(InterpretDrillWellLayered))
{
DBHelp.Db.Deleteable<T>().AS(DBHelp.GetTableOriginName<T>()).ExecuteCommand();
}
//else if (typeof(T).IsType<IReservoirData>())
//{
// DBHelp.Db.Deleteable<T>().AS(DBHelp.GetTableOriginName<T>()).ExecuteCommand();
//}
DBHelp.Db.Deleteable<T>().ExecuteCommand();
action(table, matches, index, startID, false);
bPrompt = false;
}
else if (result == DialogResult.Ignore)
{
//加一个判断,如果是压裂段参数,走追加逻辑
if (typeof(T) == typeof(HoriWellFracturParameter))
{
this.AddDataHoriWellFractParm(table, matches);
}
else
{
action(table, matches, index, startID, true);
}
bPrompt = false;
}
}
else
{
action(table, matches, index, startID, true);
}
return Task.CompletedTask;
}
// 保存地层数据
async Task SaveInterpret<T>(DataTable table, MatchCache matches, int index, Func<DataTable, MatchCache, int, Task> func)
where T : class, new()
{
List<string> list_del = this.cfg.Storage.DataTableList.Rows.OfType<DataRow>()
.Select(row => row["层位"].ToString()).ToList();
int cnt = DBHelp.Db.Queryable<T>().In("CW", list_del).Count();
if (!this.AlwaysAppend && cnt > 0)
{
if (DevExpress.XtraSplashScreen.SplashScreenManager.Default != null)
{
DevExpress.XtraSplashScreen.SplashScreenManager.CloseForm();
}
var result = new DlgAppend().ShowDialog();
if (result == DialogResult.OK)
{
if (this.cfg is FrmImportData xtraForm)
{
DevExpress.XtraSplashScreen.SplashScreenManager.ShowForm(xtraForm, typeof(DlgWait), false, false, DevExpress.XtraSplashScreen.ParentFormState.Unlocked);
}
DBHelp.Db.Deleteable<T>().Where($"CW in ({string.Join(", ", list_del.Select(o => $"'{o}'"))})").ExecuteCommand();
await func(table, matches, index);
}
else if (result == DialogResult.Ignore)
{
await func(table, matches, index);
}
}
else
{
await func(table, matches, index);
}
}
// 保存产能数据
Task SaveWellCapacity<T>(DataTable table, MatchCache matches, int index)
where T : WellCapacity, new()
{
List<string> list_del = table.Rows.OfType<DataRow>()
.Select(row => row["井号"].ToString()).ToList();
int cnt = DBHelp.Db.Queryable<T>().In("JH", list_del).Count();
if (!this.AlwaysAppend && cnt > 0)
{
if (DevExpress.XtraSplashScreen.SplashScreenManager.Default != null)
{
DevExpress.XtraSplashScreen.SplashScreenManager.CloseForm();
}
var result = new DlgAppend().ShowDialog();
if (result == DialogResult.OK)
{
if (this.cfg is FrmImportData xtraForm)
{
DevExpress.XtraSplashScreen.SplashScreenManager.ShowForm(xtraForm, typeof(DlgWait), false, false, DevExpress.XtraSplashScreen.ParentFormState.Unlocked);
}
DBHelp.Db.Deleteable<T>().Where($"JH in ({string.Join(", ", list_del.Select(o => $"'{o}'"))})").ExecuteCommand();
this.SaveWellCapacity<T>(table, matches, index);
}
else if (result == DialogResult.Ignore)
{
this.SaveWellCapacity<T>(table, matches, index);
}
}
else
{
this.SaveWellCapacity<T>(table, matches, index);
}
return Task.CompletedTask;
}
}
/// <summary>
/// Checks the and save2.
/// </summary>
/// <param name="check">The check.</param>
/// <param name="save">The save.</param>
/// <returns>A Task.</returns>
private async Task CheckAndSaveAsync(Func<List<DataTable>, MatchCache, Task<bool>> check, Func<DataTable, MatchCache, int, int, Task> save)
{
try
{
List<MatchFromItem> matches = this.cfg.ListMatches;
this.ui.UpdateProgress("数据准备中");
if (matches.All(m => m.Connections.Count == 0) && this.cfg.UseMatch)
{
this.ShowMessageBox("未配置数据列", "提示");
return;
}
MatchCache cache = new MatchCache(matches);
Type t = EntityHelp.GetEntityTypeByName(this.tableName);
if (typeof(InterpretTable).IsAssignableFrom(t) || this.tableName == DBHelp.GetTableName<WorkArea>()
|| this.tableName == DBHelp.GetTableName<WellTimeDepth>())
{
this.cfg.TotalImport = 0;
DataTable table = this.cfg.Storage.DataTableList;
this.ui.UpdateProgress(Constants.Splash.DataChecking);
if (!await check(new List<DataTable>() { table }, cache))
{
return;
}
this.ui.UpdateProgress(Constants.Splash.DataSaving);
await save(table, cache, 0, -1);
}
else if (this.tableName == DBHelp.GetTableName<WellCurve>())
{
this.cfg.TotalImport = 0;
this.importNum = 0;
List<DataTable> tableList = new List<DataTable>();
if (!this.cfg.ImportFromTable)
{
List<Task> readTasks = new List<Task>();
for (int i = 0; i < this.listFileNames.Count; i++)
{
string filepath = this.listFileNames[i];
readTasks.Add(Task.Run(() =>
{
DataTable tmpTable = new DataTable();
int rowindex = this.cfg.BeginIndex;
this.LoadDataTable(ref tmpTable, filepath, rowindex, false, false);
DataTable table = this.cfg.IsVertical ? tmpTable : this.Convert2HorizonTable(tmpTable);
table.TableName = Path.GetFileNameWithoutExtension(filepath);
tableList.Add(table);
}));
}
await Task.WhenAll(readTasks);
}
else
{
tableList.Add(this.cfg.Storage.DataTableShow);
}
this.ui.UpdateProgress(Constants.Splash.DataChecking);
if (!await check(tableList, cache))
{
return;
}
this.ui.UpdateProgress(Constants.Splash.DataSaving);
List<Task> taskList = new List<Task>();
for (int i = 0; i < tableList.Count; i++)
{
taskList.Add(save(tableList[i], cache, i, -1));
}
await Task.WhenAll(taskList);
}
else if (this.tableName == DBHelp.GetTableName<WellDeflection>())
{
List<Task> taskList = new List<Task>();
this.cfg.TotalImport = 0;
this.times = 0;
List<DataTable> tableList = new List<DataTable>();
//Stopwatch sw = new Stopwatch();
if (!this.cfg.ImportFromTable)
{
//Console.WriteLine($"``````抽稀规则:{this.cfg.RarefyIndex}``````````");
//totalSw.Start();
int rowindex = this.cfg.BeginIndex;
this.ui.UpdateProgress(Constants.Splash.DataSaving);
ConcurrentBag<WellDeflection> datas = new ConcurrentBag<WellDeflection>();
this.cfg.FileCount = this.listFileNames.Count;
int index = 0;
int maxId = DBHelp.NewDb.Queryable<WellDeflection>().Max<int>("ID");
Parallel.ForEach(this.listFileNames, EntityHelp.Options, file =>
{
try
{
//sw.Restart();
DataTable tmpTable = new DataTable();
maxId = maxId + 1;
// txt文档每个文档一个井号存储为一个文件
if (file.ToLower().EndsWith(".txt") || file.ToLower().EndsWith(".dev"))
{
this.LoadDataTable(ref tmpTable, file, rowindex, false, false);
DataTable table = this.cfg.IsVertical ? tmpTable : this.Convert2HorizonTable(tmpTable);
this.ui.UpdateProgress(string.Format(Constants.Splash.HandleProgress, index + 1, this.cfg.FileCount));
string fileName = Path.GetFileNameWithoutExtension(file);
table.TableName = fileName;
// 将文件信息存储至数据库
WellDeflection wdd = new WellDeflection
{
ID = maxId,
JH = fileName,
XHID = maxId,
FileName = $"{fileName}.data",
};
datas.Add(wdd);
save(table, cache, index, 1).Wait();
}
// dbf文件需要在读取时就拆分否则太大也会很慢
else if (file.ToLower().EndsWith(".dbf"))
{
this.LoadDataTable(ref tmpTable, file, rowindex, false, false);
//DataTable table = this.cfg.IsVertical ? tmpTable : this.Convert2HorizonTable(tmpTable);
//this.ui.UpdateProgress(string.Format(Constants.Splash.HandleProgress, index + 1, this.cfg.FileCount));
//string fileName = Path.GetFileNameWithoutExtension(file);
//table.TableName = fileName;
//// 将文件信息存储至数据库
//WellDeflection wdd = new WellDeflection
//{
// JH = fileName,
// FileName = $"{fileName}.data",
//};
//datas.Add(wdd);
}
// 其它文件类型的数据
else
{
this.LoadDataTable(ref tmpTable, file, rowindex, false, false);
DataTable table = this.cfg.IsVertical ? tmpTable : this.Convert2HorizonTable(tmpTable);
// 分解table
if (cache.Keys.Contains("JH"))
{
var matchColumn = cache["JH"];
var tables = table.AsEnumerable().GroupBy(row => row.Field<string>(matchColumn.MatchColumn))
.ToDictionary(g => g.Key, g => g.CopyToDataTable());
List<Task> tasks = new List<Task>();
bool isFirstRow = true;
foreach (var kvp in tables)
{
if (isFirstRow)
{
isFirstRow = false;
continue;
}
string jh = kvp.Key;
DataTable tb = kvp.Value;
tb.TableName = jh;
// 将文件信息存储至数据库
WellDeflection wdd = new WellDeflection
{
JH = jh,
XHID = maxId,
ID = maxId,
FileName = $"{jh}.data",
};
datas.Add(wdd);
tasks.Add(save(tb, cache, index, 1));
maxId = maxId + 1;
}
if (tasks != null && tasks.Count > 0)
{
Task.WhenAll(tasks).Wait();
}
}
}
//sw.Stop();
//Console.WriteLine($"保存第 [{index + 1}] 个文件耗时:{sw.Elapsed}");
index++;
}
catch (Exception ex)
{
Console.WriteLine($"处理文件 [{file}] 异常:{ex.Message}");
}
});
if (datas.Any())
{
List<WellDeflection> newDatas = datas.ToList();
DBHelp.NewDb.Storageable(newDatas).WhereColumns(w => w.JH).ExecuteCommand();
DBHelp.NewDb.Ado.ExecuteCommand("UPDATE well_deflection SET xhid = id WHERE xhid is null or xhid = 0");
}
}
else
{
tableList.Add(this.cfg.Storage.DataTableShow);
this.ui.UpdateProgress(Constants.Splash.DataChecking);
// 统一获取起始ID
int startID = this.GetStartID<WellDeflection>();
if (!await check(tableList, cache))
{
return;
}
this.ui.UpdateProgress(Constants.Splash.DataSaving);
for (int i = 0; i < tableList.Count; i++)
{
taskList.Add(save(tableList[i], cache, i, startID));
startID += tableList[i].Rows.Count;
}
await Task.WhenAll(taskList);
}
}
else
{
this.cfg.TotalImport = 0;
List<DataTable> tableList = new List<DataTable>();
if (!this.cfg.ImportFromTable)
{
for (int i = 0; i < this.listFileNames.Count; i++)
{
string filepath = this.listFileNames[i];
int rowindex = this.cfg.BeginIndex;
DataTable tmpTable = new DataTable();
this.LoadDataTable(ref tmpTable, filepath, rowindex, false, false);
DataTable table = this.cfg.IsVertical ? tmpTable : this.Convert2HorizonTable(tmpTable);
table.TableName = Path.GetFileNameWithoutExtension(filepath);
tableList.Add(table);
}
}
else
{
tableList.Add(this.cfg.Storage.DataTableShow);
}
this.ui.UpdateProgress(Constants.Splash.DataChecking);
List<Task> taskList = new List<Task>();
//统一获取起始ID
int startID = 1;
if (this.tableName == DBHelp.GetTableName<WellDeflection>())
{
startID = this.GetStartID<WellDeflection>();
}
if (!await check(tableList, cache))
{
return;
}
this.ui.UpdateProgress(Constants.Splash.DataSaving);
for (int i = 0; i < tableList.Count; i++)
{
taskList.Add(save(tableList[i], cache, i, startID));
startID += tableList[i].Rows.Count;
}
await Task.WhenAll(taskList);
}
if (this.cfg.TotalImport > 0)
{
if (this.tableName == DBHelp.GetTableName<WellCurve>())
{
this.ShowMessageBox(string.Format("导入'测井曲线' {0} 口井!" + this.importTips, this.importNum), "提示");
}
else
{
this.ShowMessageBox(string.Format("导入'{0}' {1} 条数据!", DBHelp.GetTableDescription(this.cfg.TableType), this.cfg.TotalImport), "提示");
}
this.ui.OnSaveFinish(this.cfg);
}
else
{
this.ShowMessageBox($"{DBHelp.GetTableDescription(this.cfg.TableType)},未导入数据!", "提示");
}
}
catch (Exception ex)
{
this.ShowMessageBox(ex.Message, "导入失败");
}
}
/// <summary>
/// 检测并保存
/// </summary>
/// <param name="check">检测函数</param>
/// <param name="save">保存函数</param>
private async Task CheckAndSave(Func<List<DataTable>, MatchCache, bool> check, Func<DataTable, MatchCache, int, int, Task> save)
{
await this.CheckAndSaveAsync((list, cache) => Task.FromResult(check(list, cache)), save);
}
#region 读取数据
private void LoadWellDeflectionDbfPreviewData(ref DataTable table, string filepath, int rowindex)
{
try
{
table.Columns.Clear();
table.Clear();
string dbfFilePath = filepath;
using (var dbfTable = new DbfTable(filepath, Encoding.GetEncoding("GB2312")))
{
var fields = dbfTable.Columns;
for (int i = 0; i < fields.Count; i++)
{
// 忽略_NullFlags列
if ((int)fields[i].ColumnType == 0x30)
{
continue;
}
table.Columns.Add(fields[i].ColumnName);
}
int beginRow = rowindex + (this.cfg.UseHeaderRow ? 1 : 0);
int index_temp = 0;
var dbfRecord = new DbfDataReader.DbfRecord(dbfTable);
while (dbfTable.Read(dbfRecord))
{
if (index_temp >= beginRow)
{
DataRow dr = table.NewRow();
for (int i = 0; i < dbfRecord.Values.Count; i++)
{
// 忽略_NullFlags列
if ((int)fields[i].ColumnType == 0x30)
{
continue;
}
dr[i] = dbfRecord.Values[i].GetValue();
}
table.Rows.Add(dr);
}
index_temp++;
// 预览时只取前100条数据
if (table.Rows.Count == 100)
{
break;
}
}
this.RecordCount = index_temp;
}
}
catch (Exception ex)
{
this.errorMessage = ex.Message;
Console.WriteLine(ex.ToString());
}
}
private void LoadWellDeflectionDataTableDbf(ref DataTable table, string filepath, int rowindex)
{
try
{
table.Columns.Clear();
table.Clear();
string dbfFilePath = filepath;
//Stopwatch sw = new Stopwatch();
// 存储井斜导入结果
List<WellDeflection> datas = new List<WellDeflection>();
int wellCount = DBHelp.NewDb.Queryable<WellBase>().Count();
int maxId = DBHelp.NewDb.Queryable<WellDeflection>().Max<int>("ID");
int currentWellIndex = 0;
//Console.WriteLine($"井总数:{wellCount}");
if (wellCount > 0)
{
this.cfg.FileCount = wellCount;
this.RecordCount = wellCount;
}
string currentJH = string.Empty;
string jhKey = string.Empty;
int jhIndex = -1;
var matches = this.cfg.ListMatches;
bool isSameWell = true;
MatchCache cache = new MatchCache(matches);
if (cache.ContainsKey("JH"))
{
var jhItem = cache["JH"];
jhKey = jhItem.MatchColumn;
}
// 没有井号,不能匹配数据
if (string.IsNullOrWhiteSpace(jhKey))
{
return;
}
using (var dbfTable = new DbfTable(filepath, Encoding.GetEncoding("GB2312")))
{
var fields = dbfTable.Columns;
for (int i = 0; i < fields.Count; i++)
{
// 忽略_NullFlags列
if ((int)fields[i].ColumnType == 0x30)
{
continue;
}
table.Columns.Add(fields[i].ColumnName);
if (fields[i].ColumnName == jhKey)
{
jhIndex = i;
}
}
int beginRow = rowindex + (this.cfg.UseHeaderRow ? 1 : 0);
int index_temp = 0;
var dbfRecord = new DbfDataReader.DbfRecord(dbfTable);
while (dbfTable.Read(dbfRecord))
{
//sw.Restart();
if (index_temp >= beginRow)
{
DataRow dr = table.NewRow();
for (int i = 0; i < dbfRecord.Values.Count; i++)
{
// 忽略_NullFlags列
if ((int)fields[i].ColumnType == 0x30)
{
continue;
}
dr[i] = dbfRecord.Values[i].GetValue();
if (jhIndex == i)
{
var jhTemp = dr[i].ToString();
// 没有数据,则记录当前井号
if (table.Rows.Count == 0)
{
table.TableName = jhTemp;
currentJH = jhTemp;
isSameWell = true;
}
else
{
// 不是同一口井的数据,则生成当前井的文件数据
if (jhTemp != currentJH)
{
//Console.WriteLine($"不是同一井号的数据:原井号-{currentJH}\t 新井号-{jhTemp}");
isSameWell = false;
currentJH = jhTemp;
}
}
}
}
// 导入的数据是井斜
// 同一口井的数据就添加进表里面
if (isSameWell)
{
// 如果配置了抽稀规则,则按抽稀规则取数据
if (this.cfg.RarefyIndex >= 0)
{
if (index_temp == beginRow || (index_temp % (this.cfg.RarefyIndex + 2) == 0))
{
table.Rows.Add(dr);
}
}
// 没有配置抽稀规则,则直接取数据
else
{
table.Rows.Add(dr);
}
}
// 当前井的数据已经取完
else
{
currentWellIndex++;
// 先把数据保存,之后清空,再重新装入数据
string fileName = table.TableName;
DataTable saveTable = this.cfg.IsVertical ? table : this.Convert2HorizonTable(table);
if (wellCount > 0)
{
this.ui.UpdateProgress(string.Format(Constants.Splash.HandleProgress, currentWellIndex, this.cfg.FileCount));
}
else
{
this.ui.UpdateProgress($"当前导入第 {currentWellIndex} 口井的数据,井号为 【{fileName}】!");
}
this.SaveWellDeflection(saveTable, cache, 0, 0, false);
// 将文件信息存储至数据库
WellDeflection wdd = new WellDeflection
{
ID = maxId + currentWellIndex,
JH = fileName,
XHID = maxId + currentWellIndex,
FileName = $"{fileName}.data",
};
datas.Add(wdd);
isSameWell = true;
table.Rows.Clear();
table.TableName = currentJH;
//currentJH = string.Empty;
//sw.Stop();
if (dr != null)
{
table.Rows.Add(dr);
}
//Console.WriteLine($"导入第 {currentWellIndex} 口井,井号为【{fileName}】的井斜数据,耗时:{sw.Elapsed}");
}
}
index_temp++;
}
// 最后一个表格数据
if (table != null && table.Rows.Count > 0)
{
currentWellIndex++;
// 先把数据保存,之后清空,再重新装入数据
string fileName = table.TableName;
DataTable saveTable = this.cfg.IsVertical ? table : this.Convert2HorizonTable(table);
if (wellCount > 0)
{
this.ui.UpdateProgress(string.Format(Constants.Splash.HandleProgress, currentWellIndex, this.cfg.FileCount));
}
else
{
this.ui.UpdateProgress($"当前导入第 {currentWellIndex} 口井的数据,井号为 【{fileName}】!");
}
this.SaveWellDeflection(saveTable, cache, 0, 0, false);
// 将文件信息存储至数据库
WellDeflection wdd = new WellDeflection
{
JH = fileName,
XHID = currentWellIndex,
FileName = $"{fileName}.data",
};
datas.Add(wdd);
//Console.WriteLine($"导入第 {currentWellIndex} 口井,井号为【{fileName}】的井斜数据,耗时:{sw.Elapsed}");
}
if (datas.Any())
{
DBHelp.NewDb.Storageable(datas).WhereColumns(w => w.JH).ExecuteCommand();
DBHelp.NewDb.Ado.ExecuteCommand("UPDATE well_deflection SET xhid = id WHERE xhid is null or xhid = 0");
}
}
}
catch (Exception ex)
{
this.errorMessage = ex.Message;
Console.WriteLine(ex.ToString());
}
}
/// <summary>
/// LoadDataTable
/// </summary>
/// <param name="table">table</param>
/// <param name="filepath">filepath</param>
/// <param name="rowindex">rowindex</param>
/// <param name="reloadTableName">reloadTableName</param>
/// <param name="previewOnly">previewOnly</param>
public void LoadDataTable(ref DataTable table, string filepath, int rowindex, bool reloadTableName, bool previewOnly)
{
string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);
if (filename.LastIndexOf(".") == -1)
{
this.LoadDataTableTxt(ref table, filepath, this.GetFileEncoding(filepath), rowindex, previewOnly);
}
else
{
string filetype = Path.GetExtension(filename).Replace(".", string.Empty).ToUpper();
if (filetype == "DBF")
{
if (this.tableType == typeof(WellDeflection))
{
if (previewOnly)
{
this.LoadWellDeflectionDbfPreviewData(ref table, filepath, rowindex);
}
else
{
this.LoadWellDeflectionDataTableDbf(ref table, filepath, rowindex);
}
}
else
{
this.LoadDataTableDbf(ref table, filepath, rowindex, previewOnly);
}
// this.LoadDataTableDbf(ref table, filepath, rowindex, previewOnly);
}
else if (filetype == "DEV")
{
this.LoadDataTableDev(ref table, filepath, this.GetFileEncoding(filepath), rowindex, previewOnly);
}
else if (filetype == "LAS")
{
this.LoadDataTableLasNew(ref table, filepath, this.GetFileEncoding(filepath), rowindex, previewOnly);
}
else if (filetype == "DAT")
{
if (this.tableName == DBHelp.GetTableName<WellCurve>())
{
this.LoadDataTableDatByCurve(ref table, filepath, this.GetFileEncoding(filepath), rowindex, previewOnly);
}
else
{
this.LoadDataTableDat(ref table, filepath, this.GetFileEncoding(filepath), rowindex, previewOnly);
}
}
else if (filetype == "TXT" || filetype == "CSV" || filetype == "XYZ")
{
if (this.tableName == DBHelp.GetTableName<WellCurve>())
{
this.LoadDataTableTxtByCurve(ref table, filepath, this.GetFileEncoding(filepath), rowindex, previewOnly);
}
else
{
this.LoadDataTableTxt(ref table, filepath, this.GetFileEncoding(filepath), rowindex, previewOnly);
}
}
else if (filetype == "DFD")
{
this.LoadDataTableDfd(ref table, filepath, rowindex, previewOnly);
}
else if (filetype == "XLS" || filetype == "XLSX" || filetype == "MDB")
{
if (reloadTableName)
{
this.LoadOfficeTableName(filepath, previewOnly);
}
else
{
this.ReadOfficeData(ref table, filepath, previewOnly);
}
}
this.RecordCount = table.Rows.Count;
}
}
/// <summary>
/// 按表名读取数据.
/// </summary>
/// <param name="table">table</param>
/// <param name="previewOnly">previewOnly</param>
public void ReadDataByTableName(ref DataTable table, bool previewOnly)
{
if (this.dbType == "excel" || this.dbType == "access")
{
this.ReadOfficeData(ref table, this.currentFileName, previewOnly);
}
else if (this.dbType == "oracle" || this.dbType == "sqlserver")
{
this.ReadDataBasePreview(ref table, previewOnly);
}
}
/// <summary>
/// Reads the office data.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="filepath">The filepath.</param>
/// <param name="previewOnly">If true, preview only.</param>
private void ReadOfficeData(ref DataTable table, string filepath, bool previewOnly)
{
using (SplashHelper.Create())
{
int rowindex = this.cfg.BeginIndex;
string tableName = this.cfg.DbTableName;
if (this.dbType == "excel")
{
this.LoadDataTableXls(ref table, filepath, tableName, rowindex, previewOnly);
}
else if (this.dbType == "access")
{
this.LoadDataTableAccess(ref table, filepath, tableName, rowindex, previewOnly);
}
}
}
/// <summary>
/// 加载excel的sheet
/// </summary>
/// <param name="path">路径</param>
/// <param name="previewOnly">是否预览</param>
private void LoadOfficeTableName(string path, bool previewOnly = false)
{
this.currentFileName = path;
if (this.dbType == "excel")
{
string ext = Path.GetExtension(path);
var lstSheetName = new List<string>();
int activeSheetIndex = 0;
if (ext.ToLower().Equals(".xls"))
{
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
NPOI.SS.UserModel.IWorkbook workbook = WorkbookFactory.Create(stream, true);
int sheetIndex = 0;
for (int i = 0; i < workbook.NumberOfSheets; i++)
{
string sheetName = workbook.GetSheetName(i);
lstSheetName.Add(sheetName);
if (this.cfg.DbTableName == sheetName)
{
activeSheetIndex = sheetIndex;
}
sheetIndex++;
}
}
}
else
{
lstSheetName = MiniExcel.GetSheetNames(path);
for (int i = 0; i < lstSheetName.Count; i++)
{
if (this.cfg.DbTableName == lstSheetName[i])
{
activeSheetIndex = i;
}
}
}
this.ui.OnLoadOfficeTablesFinish(lstSheetName, activeSheetIndex);
}
else if (this.dbType == "access")
{
OleDbConnection conn = null;
try
{
conn = new OleDbConnection(new ConnStringData { FilePath = path }.Access);
conn.Open();
DataTable dt_sheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dt_sheet == null)
{
return;
}
var list = new List<string>();
for (int i = 0; i < dt_sheet.Rows.Count; i++)
{
string tabletype = dt_sheet.Rows[i]["TABLE_TYPE"].ToString();
string tableName = dt_sheet.Rows[i]["TABLE_NAME"].ToString();
if (tabletype.ToUpper() == "TABLE")
{
list.Add(tableName);
}
}
conn.Close();
this.ui.OnLoadOfficeTablesFinish(list, 0);
// conn.Dispose();
}
catch (Exception e)
{
this.ShowMessageBox("无法打开此文件", "提示");
conn.Close();
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
return;
}
}
}
/// <summary>
/// Loads the data table dbf.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="filepath">The filepath.</param>
/// <param name="rowindex">The rowindex.</param>
/// <param name="previewOnly">If true, preview only.</param>
private void LoadDataTableDbf(ref DataTable table, string filepath, int rowindex, bool previewOnly = false)
{
try
{
table.Columns.Clear();
table.Clear();
string dbfFilePath = filepath;
//using (var stream = File.Open(dbfFilePath, FileMode.Open, FileAccess.Read))
//using (var reader = new DotNetDBF.DBFReader(stream))
//{
// this.RecordCount = reader.RecordCount;
// var fields = reader.Fields;
// for (int i = 0; i < fields.Length; i++)
// {
// // 忽略_NullFlags列
// if ((int)fields[i].DataType == 0x30)
// {
// continue;
// }
// table.Columns.Add(fields[i].Name);
// }
// int beginRow = rowindex + (this.cfg.UseHeaderRow ? 1 : 0);
// int index_temp = 0;
// var dbfRecord = reader.NextRecord();
// while (dbfRecord != null)
// {
// if (index_temp >= beginRow)
// {
// DataRow dr = table.NewRow();
// for (int i = 0; i < dbfRecord.Length; i++)
// {
// // 忽略_NullFlags列
// if ((int)fields[i].DataType == 0x30)
// {
// continue;
// }
// dr[i] = dbfRecord.GetValue(i);
// }
// table.Rows.Add(dr);
// }
// dbfRecord = reader.NextRecord();
// index_temp++;
// }
//}
using (var dbfTable = new DbfTable(filepath, Encoding.GetEncoding("GB2312")))
{
var fields = dbfTable.Columns;
for (int i = 0; i < fields.Count; i++)
{
// 忽略_NullFlags列
if ((int)fields[i].ColumnType == 0x30)
{
continue;
}
table.Columns.Add(fields[i].ColumnName);
}
int beginRow = rowindex + (this.cfg.UseHeaderRow ? 1 : 0);
int index_temp = 0;
var dbfRecord = new DbfRecord(dbfTable);
while (dbfTable.Read(dbfRecord))
{
if (index_temp >= beginRow)
{
DataRow dr = table.NewRow();
for (int i = 0; i < dbfRecord.Values.Count; i++)
{
// 忽略_NullFlags列
if ((int)fields[i].ColumnType == 0x30)
{
continue;
}
dr[i] = dbfRecord.Values[i].GetValue();
}
table.Rows.Add(dr);
}
index_temp++;
}
this.RecordCount = index_temp;
}
}
catch (Exception ex)
{
this.errorMessage = ex.Message;
Console.WriteLine(ex.ToString());
}
}
private void LoadDataTableDfd(ref DataTable table, string filename, int rowindex, bool previewOnly)
{
try
{
FileStream fs = File.OpenRead(filename);
StreamReader reader = new StreamReader(fs);
List<List<string>> list = new List<List<string>>();
string str = reader.ReadLine();
while (str != null)
{
List<string> list_row = new List<string>();
string[] array = str.Split(Constants.StringSplit.Separator, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < array.Length; i++)
{
list_row.Add(array[i]);
}
list.Add(list_row);
str = reader.ReadLine();
}
this.RecordCount = list.Count;
if (list.Count > 0)
{
for (int i = 0; i < list[0].Count; i++)
{
string colname = "列" + (i + 1);
if (this.cfg.UseHeaderRow)
{
// 避免列头重名
colname = list[0][i] + $"({colname})";
// colname = list[0][i];
}
table.Columns.Add(colname);
this.cfg.Storage.DataTableShow.Columns.Add(colname);
}
int rowcount_temp = 0;
int beginRow = rowindex + (this.cfg.UseHeaderRow ? 1 : 0);
for (int i = beginRow; i < list.Count; i++)
{
if (previewOnly && rowcount_temp > PreviewLineCount)
{
break;
}
DataRow dr = table.NewRow();
for (int j = 0; j < list[i].Count; j++)
{
// Reporter.WriteMsg("i:" + i+",j:"+j);
dr[j] = list[i][j];
}
table.Rows.Add(dr);
rowcount_temp++;
}
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
}
private void LoadDataTableAccess(ref DataTable table, string path, string tableName, int rowindex, bool previewOnly)
{
try
{
if (string.IsNullOrWhiteSpace(tableName))
{
return;
}
OleDbConnection conn = null;
try
{
conn = new OleDbConnection(new ConnStringData { FilePath = path }.Access);
conn.Open();
OleDbDataAdapter myDa = new OleDbDataAdapter("Select * from " + tableName, conn);
DataTable tmp = new DataTable();
myDa.Fill(tmp);
if (previewOnly)
{
DataHelp.CloneTable(tmp, table, false, count: PreviewLineCount);
}
else
{
table = tmp;
}
this.RecordCount = table.Rows.Count;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
conn?.Close();
// conn.Dispose();
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
}
private void LoadDataTableEmpty(DataTable table, string filename, int rowindex, bool previewOnly)
{
try
{
FileStream fs = File.OpenRead(filename);
StreamReader reader = new StreamReader(fs);
List<List<string>> list = new List<List<string>>();
string type = string.Empty;
string str = reader.ReadLine();
if (str == null)
{
return;
}
if (str == "# Type: scattered data")
{
type = "A";
}
else if (str.StartsWith("! "))
{
type = "B";
}
else
{
type = "C";
}
bool next = false;
while (str != null)
{
if (type == "A")
{
if (str.StartsWith("# "))
{
str = reader.ReadLine();
continue;
}
else
{
next = true;
}
}
else if (type == "B")
{
if (str == "@")
{
next = true;
str = reader.ReadLine();
continue;
}
}
else if (type == "C")
{
next = true;
}
if (!next)
{
str = reader.ReadLine();
continue;
}
List<string> list_row = new List<string>();
string[] array = str.Split(Constants.StringSplit.Separator, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < array.Length; i++)
{
list_row.Add(array[i]);
}
list.Add(list_row);
str = reader.ReadLine();
}
this.RecordCount = list.Count;
if (list.Count > 0)
{
for (int i = 0; i < list[0].Count; i++)
{
string colname = "列" + (i + 1);
if (this.cfg.UseHeaderRow)
{
colname = list[0][i];
}
table.Columns.Add(colname);
this.cfg.Storage.DataTableShow.Columns.Add(colname);
}
int rowcount_temp = 0;
for (int i = rowindex; i < list.Count; i++)
{
if (previewOnly && rowcount_temp > PreviewLineCount)
{
break;
}
DataRow dr = table.NewRow();
for (int j = 0; j < list[i].Count; j++)
{
dr[j] = list[i][j];
}
table.Rows.Add(dr);
rowcount_temp++;
}
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
}
private void LoadDataTableOracle(ref DataTable table, int rowindex, bool previewOnly)
{
try
{
string tableName = this.cfg.DbTableName;
Oracle10g dB = new Oracle10g(this.cfg.DbConnectString);
DataTable tmp = dB.GetDataTable("select * from " + tableName);
dB.Dispose();
if (previewOnly)
{
DataHelp.CloneTable(tmp, table, false, count: PreviewLineCount);
}
else
{
table = tmp;
}
this.RecordCount = table.Rows.Count;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
Console.WriteLine(ex.Message);
}
}
private void LoadDataTableSqlServer(ref DataTable table, int rowindex, bool previewOnly)
{
try
{
string tableName = this.cfg.DbTableName;
Server2008 dB = new Server2008(this.cfg.DbConnectString);
DataTable tmp = dB.GetDataTable("select * from " + tableName);
dB.Dispose();
if (previewOnly)
{
DataHelp.CloneTable(tmp, table, false, count: PreviewLineCount);
}
else
{
table = tmp;
}
this.RecordCount = table.Rows.Count;
}
catch (Exception ex)
{
this.errorMessage = ex.Message;
Console.WriteLine(ex.Message);
}
}
private void LoadDataTableTxt(ref DataTable table, string filepath, string charset, int rowindex, bool previewOnly = false)
{
this.LoadDataTableTxtWithoutHeader(ref table, filepath, charset, rowindex, previewOnly);
}
/// <summary>
/// Loads the data table dev.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="filename">The filename.</param>
/// <param name="charset">The charset.</param>
/// <param name="rowindex">The rowindex.</param>
/// <param name="previewOnly">If true, preview only.</param>
private void LoadDataTableDev(ref DataTable table, string filename, string charset, int rowindex, bool previewOnly = false)
{
try
{
long length = new FileInfo(filename).Length;
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filename, FileMode.Open, Guid.NewGuid().ToString()))
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, length))
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(charset)))
{
PreviewData preview = new PreviewData();
int lineindex = 0;
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
if (string.IsNullOrWhiteSpace(str))
{
continue;
}
else if (str.StartsWith("#"))
{
continue;
}
string trimString = string.Join(",", str.Split(
Constants.StringSplit.EmptySeparator,
StringSplitOptions.RemoveEmptyEntries));
string[] array = trimString.Split(
Constants.StringSplit.Separator,
StringSplitOptions.None);
if (previewOnly && lineindex >= PreviewLineCount)
{
break;
}
if (lineindex < PreviewLineCount)
{
preview.Add(new PreviewLine(array));
}
if (lineindex == 0)
{
for (int i = 0; i < array.Length; i++)
{
this.GenerateColumnByPreview(table, preview, i);
}
}
if (lineindex == rowindex && this.cfg.UseHeaderRow && previewOnly)
{
lineindex++;
continue;
}
if (lineindex >= rowindex)
{
for (int i = 0; i < array.Length; i++)
{
this.GenerateColumnByPreview(table, preview, i);
}
if (array.Length > 0)
{
table.Rows.Add(array);
}
}
lineindex++;
}
this.PreviewCache[filename] = preview;
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
}
/// <summary>
/// Loads the data table dat.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="filename">The filename.</param>
/// <param name="charset">The charset.</param>
/// <param name="rowindex">The rowindex.</param>
/// <param name="previewOnly">If true, preview only.</param>
private void LoadDataTableDat(ref DataTable table, string filename, string charset, int rowindex, bool previewOnly = false)
{
try
{
long length = new FileInfo(filename).Length;
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filename, FileMode.Open, Guid.NewGuid().ToString()))
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, length))
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(charset)))
{
PreviewData preview = new PreviewData();
int lineindex = 0;
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
if (string.IsNullOrWhiteSpace(str))
{
continue;
}
string trimString = string.Join(",", str.Split(
Constants.StringSplit.EmptySeparator,
StringSplitOptions.RemoveEmptyEntries));
string[] array = trimString.Split(
Constants.StringSplit.Separator,
StringSplitOptions.None);
if (previewOnly && lineindex >= PreviewLineCount)
{
break;
}
if (lineindex < PreviewLineCount)
{
preview.Add(new PreviewLine(array));
}
if (lineindex == 0)
{
for (int i = 0; i < array.Length; i++)
{
this.GenerateColumnByPreview(table, preview, i);
}
}
if (lineindex == rowindex && this.cfg.UseHeaderRow)
{
lineindex++;
continue;
}
if (lineindex >= rowindex)
{
for (int i = 0; i < array.Length; i++)
{
this.GenerateColumnByPreview(table, preview, i);
}
if (array.Length > 0)
{
table.Rows.Add(array);
}
}
lineindex++;
}
this.PreviewCache[filename] = preview;
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
}
/// <summary>
/// Loads the data table dat.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="filename">The filename.</param>
/// <param name="charset">The charset.</param>
/// <param name="rowindex">The rowindex.</param>
/// <param name="previewOnly">If true, preview only.</param>
private List<string> LoadDataTableDatInHeader(ref DataTable table, string filename, string charset, int rowindex, bool previewOnly = false)
{
List<string> columnNames = new List<string>();
try
{
long length = new FileInfo(filename).Length;
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filename, FileMode.Open, Guid.NewGuid().ToString()))
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, length))
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(charset)))
{
PreviewData preview = new PreviewData();
int lineindex = 0;
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
if (string.IsNullOrWhiteSpace(str))
{
continue;
}
string trimString = string.Join(",", str.Split(
Constants.StringSplit.EmptySeparator,
StringSplitOptions.RemoveEmptyEntries));
string[] array = trimString.Split(
Constants.StringSplit.Separator,
StringSplitOptions.None);
if (previewOnly && lineindex >= PreviewLineCount)
{
break;
}
if (lineindex == 0)
{
for (int i = 0; i < array.Length; i++)
{
string colName = array[i];
if (!columnNames.Contains(colName))
{
columnNames.Add(colName);
}
}
//判断表头
for (int i = 0; i < columnNames.Count; i++)
{
table.Columns.Add(columnNames[i]);
this.allColumnNames.Add(columnNames[i]);
}
}
else
{
table.Rows.Add(array);
}
lineindex++;
}
this.PreviewCache[filename] = preview;
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
return columnNames;
}
/// <summary>
/// Loads the data table dat by curve.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="filename">The filename.</param>
/// <param name="charset">The charset.</param>
/// <param name="rowindex">The rowindex.</param>
/// <param name="previewOnly">If true, preview only.</param>
/// <returns>A list of string.</returns>
private List<string> LoadDataTableDatByCurve(ref DataTable table, string filename, string charset, int rowindex, bool previewOnly = false)
{
List<string> columnNames = new List<string>();
try
{
long length = new FileInfo(filename).Length;
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filename, FileMode.Open, Guid.NewGuid().ToString()))
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, length))
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(charset)))
{
PreviewData preview = new PreviewData();
int lineindex = 0;
bool isReadHeader = false;
bool isReadBody = false;
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
str = str.Trim(' ');
if (string.IsNullOrWhiteSpace(str))
{
continue;
}
else if (str.StartsWith("# DEPT"))
{
str = str.Replace("# DEPT", "DEPT");
isReadHeader = true;
}
else if (str.StartsWith("# TVD"))
{
str = str.Replace("# TVD", "TVD");
isReadHeader = true;
}
else if (str.StartsWith("DEPTHT"))
{
str = str.Replace("DEPTHT", "DEPTH");
isReadHeader = true;
this.importTips = $"{filename}的深度列名是DEPTHT导入时已将列名替换为Depth";
}
string trimString = string.Join(",", str.Split(
Constants.StringSplit.EmptySeparator,
StringSplitOptions.RemoveEmptyEntries));
string[] array = trimString.Split(
Constants.StringSplit.Separator,
StringSplitOptions.None);
if (isReadHeader && !isReadBody)
{
foreach (var colName in array)
{
if (!columnNames.Contains(colName))
{
columnNames.Add(colName);
}
}
//判断表头
for (int i = 0; i < columnNames.Count; i++)
{
table.Columns.Add(columnNames[i]);
this.allColumnNames.Add(columnNames[i]);
}
isReadBody = true;
//说明表头写完了
continue;
}
if (isReadBody)
{
if (previewOnly && lineindex >= PreviewLineCount)
{
break;
}
if (lineindex < PreviewLineCount)
{
preview.Add(new PreviewLine(array));
}
table.Rows.Add(array);
lineindex++;
}
}
this.PreviewCache[filename] = preview;
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
if (columnNames.Count == 0)
{
columnNames = this.LoadDataTableDatInHeader(ref table, filename, charset, rowindex, previewOnly);
}
return columnNames;
}
/// <summary>
/// Loads the data table las.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="filename">The filename.</param>
/// <param name="charset">The charset.</param>
/// <param name="rowindex">The rowindex.</param>
/// <param name="previewOnly">If true, preview only.</param>
private List<string> LoadDataTableLas(ref DataTable table, string filename, string charset, int rowindex, bool previewOnly = false)
{
List<string> columnNames = new List<string>();
try
{
long length = new FileInfo(filename).Length;
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filename, FileMode.Open, Guid.NewGuid().ToString()))
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, length))
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(charset)))
{
PreviewData preview = new PreviewData();
int lineindex = 0;
bool isReadHeader = false;
bool isReadBody = false;
string strLine = string.Empty;
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
if (string.IsNullOrWhiteSpace(str))
{
continue;
}
else if (str.StartsWith("~C") || str.StartsWith("~Curve"))
{
isReadHeader = true;
continue;
}
else if (!isReadHeader)
{
continue;
}
else if (str.StartsWith("~A") || str.StartsWith("~Ascii"))
{
isReadBody = true;
table.Columns.Clear();
if (columnNames.Count == 0)
{
this.errorMessage += $"文件{filename}列读取失败,已跳过文件,{Environment.NewLine}";
return new List<string>();
}
//说明表头写完了
for (int i = 0; i < columnNames.Count; i++)
{
table.Columns.Add(columnNames[i]);
this.allColumnNames.Add(columnNames[i]);
}
continue;
}
if (isReadHeader && !isReadBody)
{
//判断表头,对于小数点处理和冒号处理
string colName = str.Replace(":", string.Empty);
colName = colName.Split('.')[0];
if (colName.StartsWith("#"))
{
continue;
}
colName = colName.Trim().ToUpper();
if (!columnNames.Contains(colName))
{
columnNames.Add(colName);
}
else
{
//存在重复列名
table.Columns.Clear();
this.errorMessage += $"文件{filename}存在重复列名{colName},已跳过文件,{Environment.NewLine}";
return new List<string>();
}
continue;
}
strLine = str;
string trimString = string.Join(",", strLine.Split(Constants.StringSplit.EmptySeparator, StringSplitOptions.RemoveEmptyEntries));
string[] array = trimString.Split(Constants.StringSplit.Separator, StringSplitOptions.None);
if (array.Length != columnNames.Count)
{
continue;
}
strLine = string.Empty;
if (previewOnly && lineindex >= PreviewLineCount)
{
break;
}
if (lineindex < PreviewLineCount)
{
preview.Add(new PreviewLine(array));
}
for (int i = 0; i < array.Length; i++)
{
this.GenerateColumnByPreview(table, preview, i);
}
if (array.Length > 0)
{
table.Rows.Add(array);
}
lineindex++;
}
this.PreviewCache[filename] = preview;
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
return columnNames;
}
/// <summary>
/// 从 ~A 行提取列名
/// </summary>
/// <param name="table">存储加载的数据</param>
/// <param name="filename">文件的路径</param>
/// <param name="charset">字符编码</param>
/// <param name="rowindex">行索引</param>
/// <param name="previewOnly">仅加载预览数据</param>
private List<string> LoadDataTableLasNew(ref DataTable table, string filename, string charset, int rowindex, bool previewOnly = false)
{
List<string> columnNames = new List<string>();
try
{
long length = new FileInfo(filename).Length;
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filename, FileMode.Open, Guid.NewGuid().ToString()))
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, length))
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(charset)))
{
PreviewData preview = new PreviewData();
int lineindex = 0;
bool isReadBody = false;
string strLine = string.Empty;
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
if (string.IsNullOrWhiteSpace(str))
{
continue;
}
else if (str.StartsWith("~A", StringComparison.OrdinalIgnoreCase))
{
isReadBody = true;
// 从 ~A 行提取列名
string headerLine = str.Substring(2).Trim(); // 去掉 ~A 前缀
string[] headers = headerLine.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
// 清空已有列名
table.Columns.Clear();
columnNames.Clear();
foreach (var header in headers)
{
// 进一步处理列名,例如去除特殊字符
string colName = header.Trim().ToUpper();
if (!columnNames.Contains(colName))
{
columnNames.Add(colName);
table.Columns.Add(colName);
this.allColumnNames.Add(colName);
}
else
{
// 存在重复列名
this.errorMessage += $"文件{filename}存在重复列名{colName}, 已跳过文件,{Environment.NewLine}";
table.Columns.Clear();
return new List<string>();
}
}
continue;
}
if (isReadBody)
{
// 读取数据行
strLine = str;
string trimString = string.Join(",", strLine.Split(Constants.StringSplit.EmptySeparator, StringSplitOptions.RemoveEmptyEntries));
string[] array = trimString.Split(Constants.StringSplit.Separator, StringSplitOptions.None);
if (array.Length != columnNames.Count)
{
continue;
}
strLine = string.Empty;
if (previewOnly && lineindex >= PreviewLineCount)
{
break;
}
if (lineindex < PreviewLineCount)
{
preview.Add(new PreviewLine(array));
}
for (int i = 0; i < array.Length; i++)
{
this.GenerateColumnByPreview(table, preview, i);
}
if (array.Length > 0)
{
table.Rows.Add(array);
}
lineindex++;
}
}
this.PreviewCache[filename] = preview;
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
return columnNames;
}
/// <summary>
/// Loads the data table txt by curve.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="filename">The filename.</param>
/// <param name="charset">The charset.</param>
/// <param name="rowindex">The rowindex.</param>
/// <param name="previewOnly">If true, preview only.</param>
/// <returns>A list of string.</returns>
private List<string> LoadDataTableTxtByCurve(ref DataTable table, string filename, string charset, int rowindex, bool previewOnly = false)
{
List<string> columnNames = new List<string>();
try
{
long length = new FileInfo(filename).Length;
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filename, FileMode.Open, Guid.NewGuid().ToString()))
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, length))
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(charset)))
{
PreviewData preview = new PreviewData();
int lineindex = 0;
bool isReadHeader = false;
bool isReadBody = false;
string strLine = string.Empty;
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
if (string.IsNullOrWhiteSpace(str))
{
continue;
}
else if (str.StartsWith("#DEPTH") || str.StartsWith(" # DEPTH"))
{
isReadHeader = true;
str = str.Replace("#DEPTH", "DEPTH").Replace(" # DEPTH", "DEPTH").Replace(":", string.Empty);
}
else if (!isReadHeader)
{
continue;
}
string trimString = string.Join(",", str.Split(Constants.StringSplit.EmptySeparator, StringSplitOptions.RemoveEmptyEntries));
string[] array = trimString.Split(Constants.StringSplit.Separator, StringSplitOptions.None);
if (isReadHeader && !isReadBody)
{
foreach (var colName in array)
{
if (!columnNames.Contains(colName))
{
columnNames.Add(colName);
}
}
//判断表头
for (int i = 0; i < columnNames.Count; i++)
{
this.allColumnNames.Add(columnNames[i]);
table.Columns.Add(columnNames[i]);
}
isReadBody = true;
//说明表头写完了
continue;
}
if (previewOnly && lineindex >= PreviewLineCount)
{
break;
}
if (lineindex < PreviewLineCount)
{
preview.Add(new PreviewLine(array));
}
for (int i = 0; i < array.Length; i++)
{
this.GenerateColumnByPreview(table, preview, i);
}
if (array.Length > 0)
{
table.Rows.Add(array);
}
lineindex++;
}
this.PreviewCache[filename] = preview;
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
return columnNames;
}
/// <summary>
/// Loads the data table txt without header.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="filename">The filename.</param>
/// <param name="charset">The charset.</param>
/// <param name="rowindex">The rowindex.</param>
/// <param name="previewOnly">If true, preview only.</param>
private void LoadDataTableTxtWithoutHeader(ref DataTable table, string filename, string charset, int rowindex, bool previewOnly = false)
{
try
{
long length = new FileInfo(filename).Length;
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile(filename, FileMode.Open, Guid.NewGuid().ToString()))
using (MemoryMappedViewStream stream = mmf.CreateViewStream(0, length))
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(charset)))
//using (var reader = new StreamReader(filename, Encoding.GetEncoding(charset)))
{
PreviewData preview = new PreviewData();
int lineindex = 0;
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
if (string.IsNullOrWhiteSpace(str))
{
continue;
}
string trimString = string.Join(",", str.Split(
Constants.StringSplit.EmptySeparator,
StringSplitOptions.RemoveEmptyEntries));
string[] array = trimString.Split(
Constants.StringSplit.Separator,
StringSplitOptions.None);
if (previewOnly && lineindex >= PreviewLineCount)
{
break;
}
if (lineindex < PreviewLineCount)
{
preview.Add(new PreviewLine(array));
}
if (lineindex == 0)
{
for (int i = 0; i < array.Length; i++)
{
this.GenerateColumnByPreview(table, preview, i);
}
}
if (lineindex == rowindex && this.cfg.UseHeaderRow && previewOnly)
{
lineindex++;
continue;
}
if (lineindex >= rowindex)
{
for (int i = 0; i < array.Length; i++)
{
this.GenerateColumnByPreview(table, preview, i);
}
if (array.Length > 0)
{
table.Rows.Add(array);
}
}
lineindex++;
}
this.PreviewCache[filename] = preview;
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
}
/// <summary>
/// Loads the data table txt with header.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="filename">The filename.</param>
/// <param name="charset">The charset.</param>
/// <param name="previewOnly">If true, preview only.</param>
private void LoadDataTableTxtWithHeader(ref DataTable table, string filename, string charset, bool previewOnly = false)
{
try
{
Dictionary<string, string> mapHeaders = new Dictionary<string, string>();
List<string> listHeaders = new List<string>();
int nState = 0;
int lineindex = 0;
int beginindex = 0;
using (StreamReader reader = new StreamReader(filename, Encoding.GetEncoding(charset)))
{
while (!reader.EndOfStream)
{
string str = reader.ReadLine();
lineindex++;
if (previewOnly && lineindex > PreviewLineCount)
{
break;
}
// 状态切换, 0是映射行, 1是列头行, 2是列数据行
if (nState == 0 && !str.Contains(":"))
{
nState = 1;
}
else if (nState == 1)
{
nState = 2;
beginindex = lineindex;
}
if (nState == 0)
{
string[] array = str.Split(new[] { ":", " ", "\t" }, StringSplitOptions.RemoveEmptyEntries);
if (array.Length == 2)
{
mapHeaders.Add(array[0], array[1]);
}
}
else if (nState == 1)
{
string[] array = str.Split(Constants.StringSplit.Separator, StringSplitOptions.RemoveEmptyEntries);
listHeaders.AddRange(array);
foreach (KeyValuePair<string, string> kv in mapHeaders)
{
table.Columns.Add(kv.Key);
}
foreach (string s in listHeaders)
{
table.Columns.Add(s);
}
}
else
{
if (lineindex == beginindex && this.cfg.UseHeaderRow && previewOnly)
{
continue;
}
string[] array = str.Split(Constants.StringSplit.Separator, StringSplitOptions.RemoveEmptyEntries);
if (array.Length == listHeaders.Count)
{
table.Rows.Add(mapHeaders.Values.Concat(array).ToArray());
}
}
}
}
}
catch (Exception e)
{
this.errorMessage = e.Message;
Console.WriteLine(e.ToString());
}
}
/// <summary>
/// 读取xls和xlsx格式
/// </summary>
/// <param name="table">The table.</param>
/// <param name="path">The path.</param>
/// <param name="tableName">The table name.</param>
/// <param name="rowindex">The rowindex.</param>
/// <param name="previewOnly">If true, preview only.</param>
private void LoadDataTableXls(ref DataTable table, string path, string tableName, int rowindex, bool previewOnly)
{
table.Clear();
table.Columns.Clear();
DataTable dt_from2 = new DataTable();
string ext = Path.GetExtension(path);
if (ext.ToLower().Equals(".xls"))
{
this.NpoiImportExcel(ref dt_from2, path, previewOnly, PreviewLineCount, tableName);
}
else
{
this.MiniExcelImportExcel(ref dt_from2, path, previewOnly, PreviewLineCount, tableName);
}
if (dt_from2 == null)
{
this.RecordCount = 0;
return;
}
try
{
//前面为全表数据
if (this.cfg.UseHeaderRow)
{
table.Columns.Clear();
table.Clear();
for (int j = 0; j < dt_from2.Columns.Count; j++)
{
// 此处为设置首行为列名原来此处rowindex默认是0因为首行是可以改变的所以此处调整为按照首行来进行设置列名。
string columnName = dt_from2.Rows[rowindex][j].ToString().Replace("#", ".");
// 防止重名
if (table.Columns.Contains(columnName))
{
int index = 1;
string newName;
do
{
newName = $"{columnName}_{index}";
index++;
}
while (table.Columns.Contains(newName));
columnName = newName;
}
table.Columns.Add(columnName);
}
}
else
{
for (int i = 0; i < dt_from2.Columns.Count; i++)
{
dt_from2.Columns[i].ColumnName = "列" + (i + 1);
table.Columns.Add("列" + (i + 1));
}
}
int beginRow = 0;
if (previewOnly && this.cfg.UseHeaderRow)
{
beginRow = rowindex + 1;
}
for (int i = beginRow; i < dt_from2.Rows.Count; i++)
{
if (previewOnly && i > PreviewLineCount)
{
break;
}
DataRow dr = table.NewRow();
for (int j = 0; j < dt_from2.Columns.Count; j++)
{
dr[j] = dt_from2.Rows[i][j];
}
table.Rows.Add(dr);
}
//table 实际为this.cfg.Storage.DataTableShow;
this.RecordCount = table.Rows.Count;
LoadDataResult dataResult = new LoadDataResult();
if (this.RecordCount == 0)
{
dataResult.status = ResultStatus.;
}
else
{
dataResult.status = ResultStatus.;
}
this.ui.OnReadDataFinish(dataResult);
}
catch (Exception ex)
{
this.errorMessage = ex.Message;
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// NpoiImports the excel.
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="path">路径</param>
/// <param name="previewOnly">是否预览</param>
/// <param name="previewCount">预览数量</param>
/// <param name="sheetName">表名</param>
/// <returns>表格</returns>
private DataTable NpoiImportExcel(ref DataTable dt, string path, bool previewOnly, int previewCount, string sheetName = null)
{
string ext = path.Substring(path.LastIndexOf(".") + 1);
int customBufferSize = 40 * 1024 * 1024;
try
{
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, customBufferSize))
{
NPOI.SS.UserModel.IWorkbook workbook = WorkbookFactory.Create(stream, true);
IFormulaEvaluator formulaEvaluator = WorkbookFactory.CreateFormulaEvaluator(workbook);
ISheet sheet = null;
// 获取工作表 默认取第一张
if (string.IsNullOrWhiteSpace(sheetName))
{
sheet = workbook.GetSheetAt(0);
}
else
{
sheet = workbook.GetSheet(sheetName);
}
if (sheet == null)
{
return null;
}
IRow headerRow = sheet.GetRow(0);
IRow secondRow = sheet.GetRow(1);
int cellCount = headerRow.LastCellNum;
for (int j = 0; j < cellCount; j++)
{
ICell cell = headerRow.GetCell(j);
if (cell != null)
{
dt.Columns.Add(cell.ToString());
}
else
{
dt.Columns.Add(string.Empty);
}
}
for (int i = sheet.FirstRowNum; i <= sheet.LastRowNum; i++)
{
DataRow dataRow = dt.NewRow();
IRow row = sheet.GetRow(i);
if (row != null)
{
for (int j = row.FirstCellNum; j < cellCount; j++)
{
var cell = row.GetCell(j);
if (cell != null)
{
if (cell.CellType == CellType.Formula)
{
try
{
var evalCell = formulaEvaluator.EvaluateInCell(cell);
SetRowCell(dataRow, evalCell, j);
}
catch (Exception ex)
{
SetRowCell(dataRow, null, j);
}
}
else if (cell.CellType == CellType.Numeric && DateUtil.IsCellDateFormatted(cell))
{
try
{
if (cell.DateCellValue.Value.Hour > 0 || cell.DateCellValue.Value.Minute > 0 || cell.DateCellValue.Value.Second > 0 || cell.DateCellValue.Value.Millisecond > 0)
{
SetRowCellValue(dataRow, cell.DateCellValue.ToString(), j);
}
else
{
SetRowCellValue(dataRow, cell.DateCellValue.Value.ToString("yyyy-MM-dd"), j);
}
}
catch (Exception ex)
{
SetRowCell(dataRow, null, j);
}
}
else
{
SetRowCell(dataRow, cell, j);
}
}
}
}
dt.Rows.Add(dataRow);
if (previewOnly && i >= previewCount)
{
break;
}
}
}
}
catch (DuplicateNameException)
{
this.errorMessage = ", 文件包含重复列名!";
dt = null;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
dt = null;
}
return dt;
void SetRowCell(DataRow dataRow, NPOI.SS.UserModel.ICell cell, int col)
{
dataRow[col] = cell != null ? cell.ToString() : string.Empty;
}
void SetRowCellValue(DataRow dataRow, string cellValue, int col)
{
dataRow[col] = cellValue != null ? cellValue : string.Empty;
}
}
/// <summary>
/// DevExpressImportExcel
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="path">路径</param>
/// <param name="previewOnly">是否预览</param>
/// <param name="previewCount">预览数量</param>
/// <param name="sheetName">表名</param>
/// <returns>表格</returns>
private DataTable DevExpressImportExcel(ref DataTable dt, string path, bool previewOnly, int previewCount, string sheetName = null)
{
try
{
string ext = Path.GetExtension(path);
int customBufferSize = 40 * 1024 * 1024;
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, customBufferSize))
{
using (var workbook = WorkbookFactory.Create(stream))
{
//workbook.LoadDocument(stream);
//workbook.Calculate();
IFormulaEvaluator formulaEvaluator = WorkbookFactory.CreateFormulaEvaluator(workbook);
ISheet sheet = null;
if (string.IsNullOrWhiteSpace(sheetName))
{
sheet = workbook.GetSheetAt(0);
}
else
{
sheet = workbook.GetSheet(sheetName);
}
if (sheet == null)
{
return null;
}
int rowCount = sheet.LastRowNum + 1;
IRow headerRow = sheet.GetRow(sheet.FirstRowNum);
int colCount = headerRow != null ? headerRow.LastCellNum : 0;
for (int columnIndex = 0; columnIndex < colCount; columnIndex++)
{
ICell cell = headerRow?.GetCell(columnIndex);
if (cell != null)
{
dt.Columns.Add(cell.ToString());
}
else
{
dt.Columns.Add(string.Empty);
}
}
for (int rowIndex = 0; rowIndex < rowCount; rowIndex++)
{
IRow row = sheet.GetRow(rowIndex);
DataRow dataRow = dt.NewRow();
for (int colIndex = 0; colIndex < colCount; colIndex++)
{
ICell cell = row.GetCell(colIndex);
// 处理公式单元格
if (cell.CellType == CellType.Formula)
{
try
{
ICell evaluatedCell = formulaEvaluator.EvaluateInCell(cell);
SetRowCell(dataRow, evaluatedCell, colIndex);
}
catch
{
SetRowCell(dataRow, cell, colIndex);
}
}
else
{
SetRowCell(dataRow, cell, colIndex);
}
}
dt.Rows.Add(dataRow);
if (previewOnly && rowCount >= previewCount)
{
break;
}
}
}
}
}
catch (DuplicateNameException ex)
{
this.errorMessage = ", 文件包含重复列名!";
dt = null;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
dt = null;
}
return dt;
// 辅助方法
void SetRowCell(DataRow dataRow, ICell cell, int col)
{
if (cell == null)
{
dataRow[col] = string.Empty;
return;
}
switch (cell.CellType)
{
case CellType.Numeric:
dataRow[col] = cell.NumericCellValue;
break;
case CellType.String:
dataRow[col] = cell.StringCellValue;
break;
case CellType.Boolean:
dataRow[col] = cell.BooleanCellValue;
break;
case CellType.Formula:
dataRow[col] = cell.CellFormula;
break;
default:
dataRow[col] = $"{cell}";
break;
}
}
}
/// <summary>
/// MiniExcelImportExcel
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="path">路径</param>
/// <param name="previewOnly">是否预览</param>
/// <param name="previewCount">预览数量</param>
/// <param name="sheetName">表名</param>
/// <returns>表格</returns>
private DataTable MiniExcelImportExcel(ref DataTable dt, string path, bool previewOnly, int previewCount, string sheetName = null)
{
string ext = Path.GetExtension(path);
int customBufferSize = 40 * 1024 * 1024;
try
{
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read, customBufferSize))
{
using (MiniExcelDataReader excelReader = MiniExcel.GetReader(stream, false, sheetName))
{
int fieldCount = excelReader.FieldCount;//有的excel表列会读出上万列因此限制一下
if (fieldCount > 256)
fieldCount = 256;
for (int i = 0; i < fieldCount; i++)
{
dt.Columns.Add(excelReader.GetName(i));
}
int rowCount = 0;
while (excelReader.Read())
{
rowCount++;
DataRow row = dt.NewRow();
for (int i = 0; i < fieldCount; i++)
{
row[i] = excelReader.GetValue(i); // 假设 GetValue 返回 object 类型
}
dt.Rows.Add(row);
if (previewOnly && rowCount >= previewCount)
{
break;
}
}
}
}
}
catch (DuplicateNameException ex)
{
this.errorMessage = ", 文件包含重复列名!";
dt = null;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
dt = null;
}
//去掉合并行
if (this.tableName == DBHelp.GetTableName<WellTestTotal>() && dt.Rows.Count > 0)
{
// 清理第一行
if (this.IsMergedRow(dt.Rows[0]))
{
dt.Rows.RemoveAt(0);
}
// 清理最后连续的“合并空行”或“无效尾部行”
while (dt.Rows.Count > 0 && this.IsMergedRow(dt.Rows[dt.Rows.Count - 1]))
{
dt.Rows.RemoveAt(dt.Rows.Count - 1);
}
}
return dt;
}
private bool IsMergedRow(DataRow row)
{
if (row == null)
{
return false;
}
int nonEmptyCount = 0;
foreach (var item in row.ItemArray)
{
if (item != null && !string.IsNullOrWhiteSpace(item.ToString()))
{
nonEmptyCount++;
}
}
return nonEmptyCount <= 1;
}
/// <summary>
/// 读取数据库
/// </summary>
private void ReadDataBasePreview(ref DataTable table, bool previewOnly)
{
using (SplashHelper.Create())
{
int rowindex = this.cfg.BeginIndex;
if (this.dbType == "sqlserver")
{
this.LoadDataTableSqlServer(ref table, rowindex, previewOnly);
}
else if (this.dbType == "oracle")
{
this.LoadDataTableOracle(ref table, rowindex, previewOnly);
}
LoadDataResult dataResult = new LoadDataResult();
if (this.RecordCount == 0)
{
dataResult.status = ResultStatus.;
}
else
{
dataResult.status = ResultStatus.;
}
this.ui.OnReadDataFinish(dataResult);
}
}
private List<string> allColumnNames = new List<string>();
/// <summary>
/// 读取文件预览
/// </summary>
/// <param name="table">The table.</param>
/// <param name="previewOnly">If true, preview only.</param>
public void ReadFilePreview(ref DataTable table, bool previewOnly)
{
this.errorMessage = string.Empty;
using (SplashHelper.Create())
{
LoadDataResult dataResult = new LoadDataResult() { status = ResultStatus. };
if (this.listFileNames.Count > 0)
{
table = new DataTable();
if (this.tableName == DBHelp.GetTableName<WellCurve>())
{
//需要合并表格
int fail = 0;
foreach (var filepath in this.listFileNames)
{
int rowindex = this.cfg.BeginIndex;
DataTable dt = new DataTable();
this.LoadDataTable(ref dt, filepath, rowindex, true, previewOnly);
if (dt.Columns.Count > 0)
{
table.Merge(dt);
}
else
{
fail++;
}
}
if (this.listFileNames.Count > fail && fail > 0)
{
dataResult.status = ResultStatus.;
}
else if (this.listFileNames.Count == fail)
{
dataResult.status = ResultStatus.;
}
else
{
dataResult.status = ResultStatus.;
}
this.cfg.Storage.DataTableShow = table;
this.RecordCount = table.Rows.Count;
}
else
{
string filepath = this.listFileNames[0];
int rowindex = this.cfg.BeginIndex;
this.LoadDataTable(ref table, filepath, rowindex, true, previewOnly);
this.cfg.Storage.DataTableShow = table;
if (this.RecordCount == 0)
{
dataResult.status = ResultStatus.;
}
else
{
dataResult.status = ResultStatus.;
dataResult.recordCount = this.RecordCount;
}
}
this.ui.OnReadDataFinish(dataResult);
}
}
}
/// <summary>
/// 读取文件单行预览
/// </summary>
/// <param name="table">The table.</param>
/// <param name="index">The index.</param>
/// <param name="updateStatus">If true, update status.</param>
public void ReadFileByRowPreview(ref DataTable table, int index, bool updateStatus)
{
if (this.listFileNames.Count > 0)
{
if (index < 0 || index >= this.listFileNames.Count)
{
index = 0;
}
using (SplashHelper.Create())
{
string filepath = this.listFileNames[index];
int rowindex = this.cfg.BeginIndex;
this.cfg.Storage.DataTableShow = new DataTable();
this.LoadDataTable(ref table, filepath, rowindex, true, true);
this.RecordCount = table.Rows.Count;
if (updateStatus)
{
this.RegenerateMatch();
}
}
}
}
/// <summary>
/// 读取dataTablePaste数据
/// </summary>
/// <param name="table">table</param>
public void ReadPasteData(ref DataTable table)
{
if (this.cfg.Storage.DataTablePaste != null)
{
using (SplashHelper.Create())
{
if (this.cfg.UseHeaderRow)
{
int colcount = 0;
for (int i = 0; i < this.cfg.Storage.DataTablePaste.Columns.Count; i++)
{
colcount = 0;
for (int j = i + 1; j < this.cfg.Storage.DataTablePaste.Columns.Count; j++)
{
if (this.cfg.Storage.DataTablePaste.Rows[0][i].ToString() == string.Empty)
{
this.ShowMessageBox("首行有空值,不能做为列名", "提示");
return;
}
if (this.cfg.Storage.DataTablePaste.Rows[0][i].ToString()
== this.cfg.Storage.DataTablePaste.Rows[0][j].ToString())
{
colcount++;
if (colcount >= 2)
{
this.ShowMessageBox("首行有重复列名", "提示");
return;
}
break;
}
}
}
}
table = new DataTable();
DataHelp.CloneTable(this.cfg.Storage.DataTablePaste, table, this.cfg.UseHeaderRow, count: PreviewLineCount);
this.RecordCount = table.Rows.Count;
LoadDataResult dataResult = new LoadDataResult();
if (this.RecordCount == 0)
{
dataResult.status = ResultStatus.;
}
else
{
dataResult.status = ResultStatus.;
}
this.ui.OnReadDataFinish(dataResult);
}
}
}
/// <summary>
/// Reads the preview text.
/// </summary>
/// <param name="filepath">The filepath.</param>
/// <param name="rowindex">The rowindex.</param>
/// <param name="rowcount">The rowcount.</param>
/// <returns>A string.</returns>
public string ReadPreviewText(string filepath, int rowindex, int rowcount = PreviewLineCount)
{
bool isLas = false; /*filepath.EndsWith(".las", StringComparison.OrdinalIgnoreCase);*/
string charset = this.GetFileEncoding(filepath);
using (StreamReader reader = new StreamReader(filepath, Encoding.GetEncoding(charset)))
{
StringBuilder sb = new StringBuilder();
if (isLas)
{
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (line.StartsWith("~A"))
{
sb.AppendLine(line.Substring(2));
break;
}
}
}
int i = 0;
while (i < rowcount && !reader.EndOfStream)
{
if (i++ < rowindex)
{
reader.ReadLine();
}
else
{
sb.AppendLine(reader.ReadLine().Trim());
}
}
return sb.ToString();
}
}
#endregion
#region 具体表导入函数
// 保存井基础
/// <summary>
/// Saves the data well base.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="append">If true, append.</param>
private void SaveDataWellBase(DataTable table, MatchCache cache, int index, int statrID, bool append)
{
int id = DBHelp.Db.Queryable<WellBase>().Max<int>("id") + 1;
string xhid_s = DBHelp.Db.Queryable<WellBase>().Max<string>("xhid");
int xhid = 1;
if (xhid_s != null)
{
xhid = Convert.ToInt32(xhid_s) + 1;
}
HashSet<string> origin = this.GetAvailableWellName();
HashSet<string> current = new HashSet<string>();
HashSet<string> deletes = new HashSet<string>();
string colNameJH = cache["JH"]?.MatchColumn;
string colNameWELL_NAME = cache["WELL_NAME"]?.MatchColumn;
string colNameX = cache["X"]?.MatchColumn;
string colNameY = cache["Y"]?.MatchColumn;
string colNameMDCX = cache["MDCX"]?.MatchColumn;
string colNameMDCY = cache["MDCY"]?.MatchColumn;
string colNameBXHB = cache["BXHB"]?.MatchColumn;
string colNameDMHB = cache["DMHB"]?.MatchColumn;
string colNameJB = cache["JB"]?.MatchColumn;
string colNameXSJ = cache["XSJ"]?.MatchColumn;
string colNameYSJ = cache["YSJ"]?.MatchColumn;
string colNameMDCXSJ = cache["MDCXSJ"]?.MatchColumn;
string colNameMDCYSJ = cache["MDCYSJ"]?.MatchColumn;
string colNameYF = cache["YF"]?.MatchColumn;
string colNameQ = cache["Q"]?.MatchColumn;
string colNameBZ = cache["BZ"]?.MatchColumn;
string colNameCXA = cache["CXA"]?.MatchColumn;
string colNameGBRQ = cache["GBRQ"]?.MatchColumn;
string colNameWZJS = cache["WZJS"]?.MatchColumn;
string colNameWZRQ = cache["WZRQ"]?.MatchColumn;
string colNameQKMC = cache["QKMC"]?.MatchColumn;
string colNameCXB = cache["CXB"]?.MatchColumn;
string colNameQKHM = cache["QKHM"]?.MatchColumn;
string colNameMQJB = cache["MQJB"]?.MatchColumn;
string colNameX2 = cache["X2"]?.MatchColumn;
string colNameY2 = cache["Y2"]?.MatchColumn;
string colNameQKDY = cache["QKDY"]?.MatchColumn;
string colNameJWBZ = cache["JWBZ"]?.MatchColumn;
List<WellBase> listObj = new List<WellBase>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
int duplicate = 0;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellBase obj = new WellBase();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.JH = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameWELL_NAME) && dr[colNameWELL_NAME].ToString() != string.Empty)
{
obj.WELL_NAME = dr[colNameWELL_NAME].ToString();
}
// 如果JH为空, 赋值为WELL_NAME
if (string.IsNullOrWhiteSpace(obj.JH))
{
obj.JH = obj.WELL_NAME;
}
// 如果WELL_NAME为空, 赋值为JH
if (string.IsNullOrWhiteSpace(obj.WELL_NAME))
{
obj.WELL_NAME = obj.JH;
}
// 追加, 如果数据库中井号已存在, 则跳过
//if (append && origin.Contains(obj.JH))
//{
// continue;
//}
// 覆盖, 如果数据库中井号已存在, 则增加到删除列表
//else if (origin.Contains(obj.JH) && !string.IsNullOrWhiteSpace(obj.JH))
//{
// deletes.Add(obj.JH);
//}
// 如果当前数据中, 井号已存在, 则跳过
if (current.Contains(obj.JH))
{
duplicate++;
var filename = this.cfg.ListFileNames[index];
continue;
throw new DataException($"重复井号: '{obj.JH}', 文件: '{filename}'");
}
// 如果井号不为空, 则添加到当前数据中
if (!string.IsNullOrWhiteSpace(obj.JH))
{
current.Add(obj.JH);
}
else
{
continue;
}
if (!string.IsNullOrWhiteSpace(colNameX) && dr[colNameX].ToString() != string.Empty)
{
if (double.TryParse(dr[colNameX].ToString(), out double x))
{
obj.X = x;
}
}
if (!string.IsNullOrWhiteSpace(colNameY) && dr[colNameY].ToString() != string.Empty)
{
if (double.TryParse(dr[colNameY].ToString(), out double y))
{
obj.Y = y;
}
}
if (!string.IsNullOrWhiteSpace(colNameMDCX) && dr[colNameMDCX].ToString() != string.Empty)
{
obj.MDCX = Convert.ToDouble(dr[colNameMDCX].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameMDCY) && dr[colNameMDCY].ToString() != string.Empty)
{
obj.MDCY = Convert.ToDouble(dr[colNameMDCY].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameBXHB) && dr[colNameBXHB].ToString() != string.Empty)
{
obj.BXHB = Convert.ToDouble(dr[colNameBXHB].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDMHB) && dr[colNameDMHB].ToString() != string.Empty)
{
obj.DMHB = Convert.ToDouble(dr[colNameDMHB].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameJB) && dr[colNameJB].ToString() != string.Empty)
{
obj.JB = dr[colNameJB].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameXSJ) && dr[colNameXSJ].ToString() != string.Empty)
{
obj.XSJ = Convert.ToDouble(dr[colNameXSJ].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameYSJ) && dr[colNameYSJ].ToString() != string.Empty)
{
obj.YSJ = Convert.ToDouble(dr[colNameYSJ].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameMDCXSJ) && dr[colNameMDCXSJ].ToString() != string.Empty)
{
obj.MDCXSJ = Convert.ToDouble(dr[colNameMDCXSJ].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameMDCYSJ) && dr[colNameMDCYSJ].ToString() != string.Empty)
{
obj.MDCYSJ = Convert.ToDouble(dr[colNameMDCYSJ].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameYF) && dr[colNameYF].ToString() != string.Empty)
{
obj.YF = dr[colNameYF].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameQ) && dr[colNameQ].ToString() != string.Empty)
{
obj.Q = dr[colNameQ].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameBZ) && dr[colNameBZ].ToString() != string.Empty)
{
obj.BZ = dr[colNameBZ].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameCXA) && dr[colNameCXA].ToString() != string.Empty)
{
obj.CXA = dr[colNameCXA].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameGBRQ) && dr[colNameGBRQ].ToString() != string.Empty)
{
obj.GBRQ = dr[colNameGBRQ].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameWZJS) && dr[colNameWZJS].ToString() != string.Empty)
{
obj.WZJS = Convert.ToDouble(dr[colNameWZJS].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameWZRQ) && dr[colNameWZRQ].ToString() != string.Empty)
{
obj.WZRQ = dr[colNameWZRQ].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameQKMC) && dr[colNameQKMC].ToString() != string.Empty)
{
obj.QKMC = dr[colNameQKMC].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameCXB) && dr[colNameCXB].ToString() != string.Empty)
{
obj.CXB = dr[colNameCXB].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameQKHM) && dr[colNameQKHM].ToString() != string.Empty)
{
obj.QKHM = dr[colNameQKHM].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameMQJB) && dr[colNameMQJB].ToString() != string.Empty)
{
obj.MQJB = dr[colNameMQJB].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameX2) && dr[colNameX2].ToString() != string.Empty)
{
obj.X2 = Convert.ToDouble(dr[colNameX2].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameY2) && dr[colNameY2].ToString() != string.Empty)
{
obj.Y2 = Convert.ToDouble(dr[colNameY2].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameQKDY) && dr[colNameQKDY].ToString() != string.Empty)
{
obj.QKDY = dr[colNameQKDY].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameJWBZ) && dr[colNameJWBZ].ToString() != string.Empty)
{
obj.JWBZ = dr[colNameJWBZ].ToString();
}
// 更新井数据
if (origin.Contains(obj.JH))
{
DBHelp.Db.Updateable(obj)
.IgnoreColumns(o => new { o.ID, o.XHID })
.Where(o => o.JH == obj.JH)
.ExecuteCommand();
nIndex++;
continue;
}
obj.XHID = xhid++;
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
Action<SqlSugarClient> prepare = null;
if (!append)
{
prepare = db =>
{
foreach (string item in deletes)
{
db.Deleteable<WellBase>(r => r.JH == item).ExecuteCommand();
}
};
}
DBHelp.NewDb.BulkInsert(listObj, prepare);
DataHelp.SyncSearchWellName();
this.cfg.TotalImport += nIndex;
this.totalDuplicate += duplicate;
if (duplicate > 0 && index == this.listFileNames.Count - 1)
{
MessageBox.Show($"检测到重复井号数据: {this.totalDuplicate}条!");
this.totalDuplicate = 0;
}
}
/// <summary>
/// 保存断点
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="start">The start.</param>
/// <param name="append">If true, append.</param>
private void SaveDataWellBreakPoint(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<WellBreakPoint>().Max<int>("id") + 1;
string xhid_s = DBHelp.Db.Queryable<WellBreakPoint>().Max<string>("xhid");
int xhid = 1;
if (xhid_s != null)
{
xhid = Convert.ToInt32(xhid_s) + 1;
}
string colNameJH = cache["JH"]?.MatchColumn;
string colNameDCBH = cache["DCBH"]?.MatchColumn;
string colNameDDSD = cache["DDSD"]?.MatchColumn;
string colNameDSDC = cache["DSDC"]?.MatchColumn;
string colNameDSDC2 = cache["DSDC2"]?.MatchColumn;
string colNameDBJDS = cache["DBJDS"]?.MatchColumn;
string colNameDBJDS2 = cache["DBJDS2"]?.MatchColumn;
List<WellBreakPoint> listObj = new List<WellBreakPoint>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellBreakPoint obj = new WellBreakPoint();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.JH = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameDCBH) && dr[colNameDCBH].ToString() != string.Empty)
{
obj.DCBH = dr[colNameDCBH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameDDSD) && dr[colNameDDSD].ToString() != string.Empty)
{
obj.DDSD = Convert.ToDouble(dr[colNameDDSD].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDSDC) && dr[colNameDSDC].ToString() != string.Empty)
{
obj.DSDC = dr[colNameDSDC].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameDSDC2) && dr[colNameDSDC2].ToString() != string.Empty)
{
obj.DSDC2 = dr[colNameDSDC2].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameDBJDS) && dr[colNameDBJDS].ToString() != string.Empty)
{
obj.DBJDS = Convert.ToDouble(dr[colNameDBJDS].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDBJDS2) && dr[colNameDBJDS2].ToString() != string.Empty)
{
obj.DBJDS2 = Convert.ToDouble(dr[colNameDBJDS2].ToString());
}
obj.XHID = xhid++;
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<WellBreakPoint>();
this.cfg.TotalImport += nIndex;
}
/// <summary>
/// 保存测井曲线
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="append">The append.</param>
private void SaveDataCurve(DataTable table, MatchCache cache, int index, int start, bool append)
{
string tableName = DBHelp.GetTableName<WellCurve>();
var colNames = DBHelp.Db.Queryable<TableInfo>().Where(x => SqlFunc.ToLower(x.TableName) == tableName).Select(x => x.ColumnName).ToList();
List<WellCurve> listObj = new List<WellCurve>();
int nCount = 0;
int count = table.Rows.Count;
string block = Path.GetFileNameWithoutExtension(this.listFileNames[index]);
bool isWriteFile = true;
if (isWriteFile)
{
//获取目录创建
string path = Config.ProjectPath + FileHelp.DirWellCurve;
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
string file = Path.Combine(path, $"{table.TableName}.las");
using (StreamWriter wr = new StreamWriter(file))
{
//文件标准头部
wr.WriteLine("~VERSION INFORMATION BLOCK");
wr.WriteLine(" VERS. 2.00: CWLS LOG ASCII STANDARD - VERSION 2.000000");
wr.WriteLine(" WRAP. NO: ONE LINE PER DEPTH STEP");
wr.WriteLine("~WELL INFORMATION BLOCK");
wr.WriteLine("#MNEM.UNIT DATA DESCRIPTION OF MNEMONIC");
wr.WriteLine("#---------- ----------------------------------- -----------------------");
wr.WriteLine(" STRT.M : START DEPTH");
wr.WriteLine(" STOP.M : STOP DEPTH");
wr.WriteLine(" STEP.M : STEP VALUE");
wr.WriteLine(" NULL. : NULL VALUE");
wr.WriteLine(" COMP. : COMPANY NAME");
wr.WriteLine(" WELL. : NULL VALUE");
wr.WriteLine(" FLD . : FIELD NAME");
wr.WriteLine(" LOC . : LOCATION");
wr.WriteLine(" PROV. : PROVINCE");
wr.WriteLine(" SRVC. : SERVICE COMPANY NAME");
wr.WriteLine(" DATE. : DATE");
wr.WriteLine(" UWI . : UNIQUE WELL IDENTIFIER");
wr.WriteLine("~CURVE INFORMATION BLOCK");
wr.WriteLine("#MNEM.UNIT API CODE CURVE DESCRIPTION");
wr.WriteLine("#--------- ------------- ------------------------------");
{ //笨方法写文件
//获取所有左侧名称一对一关系
List<(string, string)> lst = new List<(string, string)>();
foreach (string propName in colNames)
{
//理论上全部存在
if (cache.ContainsMatch(propName))
{
string value = string.Empty;
foreach (var matchItem in cache[propName].MatchColumns)
{
if (table.Columns.Contains(matchItem))
{
lst.Add((propName, matchItem));
}
}
}
}
//判断是否存在深度
bool isValidDepth = lst.Any(x => x.Item1 == "DEPTH");
if (!isValidDepth)
{
return;
}
//写入表头
string line = string.Empty;
StringBuilder sb = new StringBuilder();
int rowIndex = 1;
sb.AppendLine($" DEPTH\t{"."}\t\t:\t1");
foreach (var header in lst)
{
rowIndex++;
if (!header.Item1.Equals("DEPTH"))
{
line += "\t" + header.Item1;
sb.AppendLine($" {header.Item1}\t{"."}\t\t:\t{rowIndex}");
}
}
//写入行头
wr.WriteLine(sb.ToString());
wr.WriteLine($"~A DEPTH{line}");
//写入数据
for (int i = 0; i < count; i++)
{
string rowGuid = Guid.NewGuid().ToString();
DataRow dr = table.Rows[i];
bool isValid = false;
double depth = 0;
//判断当前行的深度是否有效
foreach (var matchItem in cache["DEPTH"].MatchColumns)
{
if (table.Columns.Contains(matchItem))
{
string v_depth = dr[matchItem].ToString();
if (double.TryParse(v_depth, out depth))
{
isValid = true;
}
}
}
if (!isValid)
{
continue;
}
//写入深度第一列
string lineData = string.Empty;
lineData += $"{depth}";
foreach (var head in lst)
{
string value = string.Empty;
if (head.Item1 == "DEPTH")
{
continue;
}
else
{
value = dr[head.Item2].ToString();
lineData += "\t" + value;
}
}
//源文件存在错误数据
lineData = lineData.Replace("--9", "-9");
wr.WriteLine(lineData);
nCount++;
}
}
WellCurveFile wellCurveFile = new WellCurveFile()
{
JH = table.TableName,
Columns = string.Empty,
FilePath = FileHelp.Convert2RelativePath(file),
};
DBHelp.NewDb.Insertable(wellCurveFile).ExecuteCommand();
this.importNum++;
DataHelp.UpdateSearchWellName<WellCurveFile>();
}
//聪明方法写文件
}
else
{
DBHelp.NewDb.BulkInsert(listObj);
}
this.cfg.TotalImport += nCount;
}
/// <summary>
/// 保存压裂参数
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="append">If true, append.</param>
private void SaveDataHoriWellFractParm(DataTable table, MatchCache cache, int index, int start, bool append)
{
if (this.UpdateAppend)
{
//更新操作
List<EntityColumnInfo> columns = DBHelp.GetEntityColumnInfo(typeof(HoriWellFracturParameter));
List<HoriWellFracturParameter> listObj = new List<HoriWellFracturParameter>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
string block = Path.GetFileNameWithoutExtension(this.listFileNames[index]);
List<string> array = new List<string>();
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
HoriWellFracturParameter obj = new HoriWellFracturParameter();
foreach (EntityColumnInfo col in columns)
{
if (cache.ContainsMatch(col.DbColumnName))
{
if (!array.Contains(col.DbColumnName))
{
array.Add(col.DbColumnName);
}
object obj2 = dr[cache[col.DbColumnName].MatchColumn];
if (obj2 != null)
{
string value = obj2.ToString();
this.SetPropertyData(col.PropertyInfo, obj, value);
}
}
}
nIndex++;
listObj.Add(obj);
}
string[] whereColumns = { "JH", "XHID" };
if (array.Intersect(whereColumns.ToList()).Count() == whereColumns.Count())
{
DBHelp.NewDb.Fastest<HoriWellFracturParameter>().BulkUpdate(listObj, whereColumns, array.ToArray());
this.cfg.TotalImport += nIndex;
}
}
else
{
string tableName = DBHelp.GetTableName<HoriWellFracturParameter>();
var colNames = DBHelp.Db.Queryable<TableInfo>().Where(x => SqlFunc.ToLower(x.TableName) == tableName).Select(x => x.ColumnName).ToList();
List<HoriWellFracturParameter> listObj = new List<HoriWellFracturParameter>();
int nCount = 0;
int count = table.Rows.Count;
string block = Path.GetFileNameWithoutExtension(this.listFileNames[index]);
int id = DBHelp.Db.Queryable<HoriWellFracturParameter>().Max<int>(x => x.RowID) + 1;
int beginIndex = this.cfg.BeginIndex;
DataTable tb = table;
for (int i = 0; i < count; i++)
{
string rowGuid = Guid.NewGuid().ToString();
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
HoriWellFracturParameter obj = new HoriWellFracturParameter();
//判断
Dictionary<string, string> pairs = new Dictionary<string, string>();
bool isOK = true;
foreach (string propName in colNames)
{
if (cache.ContainsMatch(propName))
{
string value = string.Empty;
foreach (var matchItem in cache[propName].MatchColumns)
{
if (table.Columns.Contains(matchItem))
{
value = dr[matchItem].ToString();
}
}
try
{
if (propName == "JH")
{
obj.JH = value;
}
else if (propName == "XHID")
{
obj.XHID = value;
}
else if (propName == "SYWZ1")
{
if (double.TryParse(value, out double z1))
{
obj.SYWZ1 = z1;
}
else
{
isOK = false;
break;
}
}
else if (propName == "SYWZ2")
{
if (double.TryParse(value, out double z2))
{
obj.SYWZ2 = z2;
}
else
{
isOK = false;
break;
}
}
else
{
pairs.Add(propName, value);
}
}
catch (Exception ex)
{
isOK = false;
break;
}
}
}
if (isOK)
{
id++;
obj.RowID = id;
obj.RowGuid = rowGuid;
obj.ColumnValue = Newtonsoft.Json.JsonConvert.SerializeObject(pairs);
listObj.Add(obj);
}
nCount++;
}
List<string> noSYWZJHs = new List<string>();
var groupedByJh = listObj.GroupBy(x => x.JH)
.ToDictionary(g => g.Key, g => g.ToList());
foreach (var kv in groupedByJh)
{
string jh = kv.Key;
var newList = kv.Value;
bool newSYWZ1AllNull = newList.All(item => item.SYWZ1 == null);
bool newSYWZ2AllNull = newList.All(item => item.SYWZ2 == null);
if (newSYWZ1AllNull || newSYWZ2AllNull)
{
noSYWZJHs.Add(jh);
continue;
}
else
{
DBHelp.NewDb.BulkInsert(newList);
}
}
if (noSYWZJHs.Any())
{
noSYWZJHs = noSYWZJHs.Distinct().ToList();
foreach (string jh in noSYWZJHs)
{
nCount -= table.AsEnumerable().Count(row => row.Field<string>("井号") == jh);
}
MessageBox.Show(string.Join(", ", noSYWZJHs) + "无法导入,不含试油顶深或者试油底深!", "提示");
}
this.cfg.TotalImport += nCount;
}
}
/// <summary>
/// 保存压裂坐标
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="append">If true, append.</param>
private void SaveDataHoriWellFractCoord(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<HoriWellFracturCoord>().Max<int>("id") + 1;
List<EntityColumnInfo> columns = DBHelp.GetEntityColumnInfo(typeof(HoriWellFracturCoord));
List<HoriWellFracturCoord> listObj = new List<HoriWellFracturCoord>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
string block = Path.GetFileNameWithoutExtension(this.listFileNames[index]);
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
HoriWellFracturCoord obj = new HoriWellFracturCoord();
foreach (EntityColumnInfo col in columns)
{
if (cache.ContainsMatch(col.DbColumnName))
{
object obj2 = dr[cache[col.DbColumnName].MatchColumn];
if (obj2 != null)
{
string value = obj2.ToString();
this.SetPropertyData(col.PropertyInfo, obj, value);
}
}
}
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
this.cfg.TotalImport += nIndex;
}
/// <summary>
/// 追加压裂参数
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="append">If true, append.</param>
private void AddDataHoriWellFractParm(DataTable table, MatchCache cache)
{
string tableName = DBHelp.GetTableName<HoriWellFracturParameter>();
var colNames = DBHelp.Db.Queryable<TableInfo>().Where(x => SqlFunc.ToLower(x.TableName) == tableName).Select(x => x.ColumnName).ToList();
List<HoriWellFracturParameter> listObj = new List<HoriWellFracturParameter>();
int nCount = 0;
int count = table.Rows.Count;
int id = DBHelp.Db.Queryable<HoriWellFracturParameter>().Max<int>(x => x.RowID) + 1;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
string rowGuid = Guid.NewGuid().ToString();
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
HoriWellFracturParameter obj = new HoriWellFracturParameter();
//判断
Dictionary<string, string> pairs = new Dictionary<string, string>();
bool isOK = true;
foreach (string propName in colNames)
{
if (cache.ContainsMatch(propName))
{
string value = string.Empty;
foreach (var matchItem in cache[propName].MatchColumns)
{
if (table.Columns.Contains(matchItem))
{
value = dr[matchItem].ToString();
}
}
try
{
if (propName == "JH")
{
obj.JH = value;
}
else if (propName == "XHID")
{
obj.XHID = value;
}
else if (propName == "SYWZ1")
{
if (double.TryParse(value, out double z1))
{
obj.SYWZ1 = z1;
}
else
{
isOK = false;
break;
}
}
else if (propName == "SYWZ2")
{
if (double.TryParse(value, out double z2))
{
obj.SYWZ2 = z2;
}
else
{
isOK = false;
break;
}
}
else
{
pairs.Add(propName, value);
}
}
catch (Exception ex)
{
isOK = false;
break;
}
}
}
if (isOK)
{
id++;
obj.RowID = id;
obj.RowGuid = rowGuid;
obj.ColumnValue = Newtonsoft.Json.JsonConvert.SerializeObject(pairs);
listObj.Add(obj);
}
nCount++;
}
// 分组按井号
var groupedByJh = listObj.GroupBy(x => x.JH)
.ToDictionary(g => g.Key, g => g.ToList());
List<string> noSYWZJHs = new List<string>();
foreach (var kv in groupedByJh)
{
string jh = kv.Key;
var newList = kv.Value;
// 已存在的记录按JH取出
var existingRecords = DBHelp.Db.Queryable<HoriWellFracturParameter>()
.Where(x => x.JH == jh)
.ToList();
if (this.IsSYWZMissing(existingRecords, newList))
{
noSYWZJHs.Add(jh);
continue;
}
foreach (string propName in colNames)
{
if (cache.ContainsMatch(propName))
{
string value = string.Empty;
foreach (var matchItem in cache[propName].MatchColumns)
{
if (table.Columns.Contains(matchItem))
{
table.Columns[matchItem].ColumnName = propName;
}
}
}
}
if (existingRecords.Any())
{
foreach (var existing in existingRecords)
{
var matchedRow = table.AsEnumerable()
.FirstOrDefault(r => r.Field<string>("JH") == existing.JH &&
r.Field<string>("XHID") == existing.XHID);
if (matchedRow == null)
{
continue;
}
var originalData = JsonConvert.DeserializeObject<Dictionary<string, string>>(existing.ColumnValue ?? "{}");
foreach (DataColumn col in table.Columns)
{
string colName = col.ColumnName;
if (colName == "JH" || colName == "XHID" || colName == "SYWZ1" || colName == "SYWZ2")
{
continue;
}
originalData[colName] = matchedRow[colName]?.ToString() ?? string.Empty;
}
existing.ColumnValue = JsonConvert.SerializeObject(originalData);
DBHelp.NewDb.Updateable<HoriWellFracturParameter>().SetColumns(x => x.ColumnValue == existing.ColumnValue).Where(x => x.RowID == existing.RowID).ExecuteCommand();
}
}
else
{
DBHelp.NewDb.BulkInsert(newList);
}
}
if (noSYWZJHs.Any())
{
MessageBox.Show(string.Join(", ", noSYWZJHs) + "无法导入,不含试油顶深或者试油底深!", "提示");
}
this.cfg.TotalImport += nCount;
}
private void SaveWellLithology(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<WellLithology>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNametop = cache["top"]?.MatchColumn;
string colNamebottom = cache["bottom"]?.MatchColumn;
string colNamethickness = cache["thickness"]?.MatchColumn;
string colNamecolor = cache["color"]?.MatchColumn;
string colNameoilcontent = cache["oilcontent"]?.MatchColumn;
string colNameinclusions = cache["inclusions"]?.MatchColumn;
string colNamelithologyprefix = cache["lithologyprefix"]?.MatchColumn;
string colNamestructure = cache["structure"]?.MatchColumn;
string colNamelithology = cache["lithology"]?.MatchColumn;
string colNamefistlayer = cache["firstlayer"]?.MatchColumn;
string colNamesecondlayer = cache["secondlayer"]?.MatchColumn;
string colNamethirdlayer = cache["thirdlayer"]?.MatchColumn;
string colNamefourthlayer = cache["fourthlayer"]?.MatchColumn;
string colNamefifthlayer = cache["fifthlayer"]?.MatchColumn;
string colNamelithologyname = cache["lithologyname"]?.MatchColumn;
string colNamemarkerlayerr = cache["markerlayer"]?.MatchColumn;
List<WellLithology> listObj = new List<WellLithology>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellLithology obj = new WellLithology();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNametop) && dr[colNametop].ToString() != string.Empty)
{
obj.top = Convert.ToDouble(dr[colNametop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamebottom) && dr[colNamebottom].ToString() != string.Empty)
{
obj.bottom = Convert.ToDouble(dr[colNamebottom].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamethickness) && dr[colNamethickness].ToString() != string.Empty)
{
obj.thickness = Convert.ToDouble(dr[colNamethickness].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamecolor) && dr[colNamecolor].ToString() != string.Empty)
{
obj.color = dr[colNamecolor].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameoilcontent) && dr[colNameoilcontent].ToString() != string.Empty)
{
obj.oilcontent = dr[colNamecolor].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameinclusions) && dr[colNameinclusions].ToString() != string.Empty)
{
obj.inclusions = dr[colNameinclusions].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamelithologyprefix) && dr[colNamelithologyprefix].ToString() != string.Empty)
{
obj.lithologyprefix = dr[colNamelithologyprefix].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamestructure) && dr[colNamestructure].ToString() != string.Empty)
{
obj.structure = dr[colNamestructure].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamelithology) && dr[colNamelithology].ToString() != string.Empty)
{
obj.lithology = dr[colNamelithology].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamefistlayer) && dr[colNamefistlayer].ToString() != string.Empty)
{
obj.firstlayer = dr[colNamefistlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamesecondlayer) && dr[colNamesecondlayer].ToString() != string.Empty)
{
obj.secondlayer = dr[colNamesecondlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamethirdlayer) && dr[colNamethirdlayer].ToString() != string.Empty)
{
obj.thirdlayer = dr[colNamethirdlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamefourthlayer) && dr[colNamefourthlayer].ToString() != string.Empty)
{
obj.fourthlayer = dr[colNamefourthlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamefifthlayer) && dr[colNamefifthlayer].ToString() != string.Empty)
{
obj.fourthlayer = dr[colNamefifthlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamelithologyname) && dr[colNamelithologyname].ToString() != string.Empty)
{
obj.lithologyname = dr[colNamelithologyname].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamemarkerlayerr) && dr[colNamemarkerlayerr].ToString() != string.Empty)
{
obj.markerlayer = dr[colNamemarkerlayerr].ToString();
}
// obj.XHID = xhid++;
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<WellLithology>();
this.cfg.TotalImport += nIndex;
}
private void SaveCycleLongterm(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<CycleLongterm>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNametop = cache["top"]?.MatchColumn;
string colNamebottom = cache["bottom"]?.MatchColumn;
string colNametype = cache["type"]?.MatchColumn;
List<CycleLongterm> listObj = new List<CycleLongterm>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
CycleLongterm obj = new CycleLongterm();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNametop) && dr[colNametop].ToString() != string.Empty)
{
obj.top = Convert.ToDouble(dr[colNametop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamebottom) && dr[colNamebottom].ToString() != string.Empty)
{
obj.bottom = Convert.ToDouble(dr[colNamebottom].ToString());
}
if (!string.IsNullOrWhiteSpace(colNametype) && dr[colNametype].ToString() != string.Empty)
{
obj.type = dr[colNametype].ToString();
}
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<CycleLongterm>();
this.cfg.TotalImport += nIndex;
}
private void SaveCycleMediumterm(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<CycleMediumterm>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNametop = cache["top"]?.MatchColumn;
string colNamebottom = cache["bottom"]?.MatchColumn;
string colNametype = cache["type"]?.MatchColumn;
List<CycleMediumterm> listObj = new List<CycleMediumterm>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
CycleMediumterm obj = new CycleMediumterm();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNametop) && dr[colNametop].ToString() != string.Empty)
{
obj.top = Convert.ToDouble(dr[colNametop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamebottom) && dr[colNamebottom].ToString() != string.Empty)
{
obj.bottom = Convert.ToDouble(dr[colNamebottom].ToString());
}
if (!string.IsNullOrWhiteSpace(colNametype) && dr[colNametype].ToString() != string.Empty)
{
obj.type = dr[colNametype].ToString();
}
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<CycleMediumterm>();
this.cfg.TotalImport += nIndex;
}
private void SaveCycleShortterm(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<CycleShortterm>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNametop = cache["top"]?.MatchColumn;
string colNamebottom = cache["bottom"]?.MatchColumn;
string colNametype = cache["type"]?.MatchColumn;
List<CycleShortterm> listObj = new List<CycleShortterm>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
CycleShortterm obj = new CycleShortterm();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNametop) && dr[colNametop].ToString() != string.Empty)
{
obj.top = Convert.ToDouble(dr[colNametop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamebottom) && dr[colNamebottom].ToString() != string.Empty)
{
obj.bottom = Convert.ToDouble(dr[colNamebottom].ToString());
}
if (!string.IsNullOrWhiteSpace(colNametype) && dr[colNametype].ToString() != string.Empty)
{
obj.type = dr[colNametype].ToString();
}
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<CycleShortterm>();
this.cfg.TotalImport += nIndex;
}
//SaveWellInnerLayer
private void SaveWellInnerLayer(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<WellInnerLayer>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNametop = cache["top"]?.MatchColumn;
string colNamebottom = cache["bottom"]?.MatchColumn;
string colNamethickness = cache["thickness"]?.MatchColumn;
string colNametype = cache["type"]?.MatchColumn;
List<WellInnerLayer> listObj = new List<WellInnerLayer>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellInnerLayer obj = new WellInnerLayer();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNametop) && dr[colNametop].ToString() != string.Empty)
{
obj.top = Convert.ToDouble(dr[colNametop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamebottom) && dr[colNamebottom].ToString() != string.Empty)
{
obj.bottom = Convert.ToDouble(dr[colNamebottom].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamethickness) && dr[colNamethickness].ToString() != string.Empty)
{
obj.thickness = Convert.ToDouble(dr[colNamethickness].ToString());
}
if (!string.IsNullOrWhiteSpace(colNametype) && dr[colNametype].ToString() != string.Empty)
{
obj.type = dr[colNametype].ToString();
}
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<WellInnerLayer>();
this.cfg.TotalImport += nIndex;
}
private void SaveWellReservesLayer(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<WellReservesLayer>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNameLayer = cache["Layer"]?.MatchColumn;
string colNameXzb = cache["XCoordinate"]?.MatchColumn;
string colNameYzb = cache["YCoordinate"]?.MatchColumn;
string colNameTop2 = cache["TopSecondSandstone"]?.MatchColumn;
string colNameBot2 = cache["BottomSecondSandstone"]?.MatchColumn;
string colNamethick2 = cache["ThicknessSecondSandstone"]?.MatchColumn;
string colNameTop1 = cache["TopFirstSandstone"]?.MatchColumn;
string colNameBot1 = cache["BottomFirstSandstone"]?.MatchColumn;
string colNamethick1 = cache["ThicknessFirstSandstone"]?.MatchColumn;
string colNameTopView = cache["ViewEffectiveTop"]?.MatchColumn;
string colNamethickView = cache["ViewEffectiveThickness"]?.MatchColumn;
string colNameTopPure = cache["PureEffectiveTopEstimate"]?.MatchColumn;
string colNamethickPure = cache["PureEffectiveThicknessEstimate"]?.MatchColumn;
string colNameECategory = cache["EffectiveCategory"]?.MatchColumn;
string colNamePorosity = cache["Porosity"]?.MatchColumn;
string colNamePermeability = cache["Permeability"]?.MatchColumn;
string colNameClayContent = cache["ClayContent"]?.MatchColumn;
string colNameOilSaturation = cache["OilSaturation"]?.MatchColumn;
string colNameMobileOilSaturation = cache["MobileOilSaturation"]?.MatchColumn;
string colNameWaterSaturation = cache["WaterSaturation"]?.MatchColumn;
string colNameElectricLogInterpretation = cache["ElectricLogInterpretation"]?.MatchColumn;
string colNamePerforationStatus = cache["PerforationStatus"]?.MatchColumn;
string colNameWaterFloodingInterpretation = cache["WaterFloodingInterpretation"]?.MatchColumn;
string colNameFacies = cache["Facies"]?.MatchColumn;
string colNameLithology = cache["Lithology"]?.MatchColumn;
string colNameInterpretationNumber = cache["InterpretationNumber"]?.MatchColumn;
string colNameXCoordinateSandstoneTop = cache["XCoordinateSandstoneTop"]?.MatchColumn;
string colNameYCoordinateSandstoneTop = cache["YCoordinateSandstoneTop"]?.MatchColumn;
string colNameGasSaturation = cache["GasSaturation"]?.MatchColumn;
string colNameWaterFloodingValue = cache["WaterFloodingValue"]?.MatchColumn;
string colNameSubfacies = cache["Subfacies"]?.MatchColumn;
string colNameFlowUnit = cache["FlowUnit"]?.MatchColumn;
string colNameBoundWaterSaturation = cache["BoundWaterSaturation"]?.MatchColumn;
string colNameWaterInjectionVolume = cache["WaterInjectionVolume"]?.MatchColumn;
string colNamePermeabilityGradient = cache["PermeabilityGradient"]?.MatchColumn;
string colNamePermeabilityBreakthrough = cache["PermeabilityBreakthrough"]?.MatchColumn;
string colNamePermeabilityVariance = cache["PermeabilityVariance"]?.MatchColumn;
string colNameAirPermability = cache["AirPermability"]?.MatchColumn;
string colNameAirPermability1 = cache["AirPermability1"]?.MatchColumn;
string colNameEffectivePermability = cache["EffectivePermability"]?.MatchColumn;
string colNameEffectivePermability1 = cache["EffectivePermability1"]?.MatchColumn;
string colNameOriginalWaterSaturation = cache["OriginalWaterSaturation"]?.MatchColumn;
string colNameRecoveryDegree = cache["RecoveryDegree"]?.MatchColumn;
string colNameCalciumContent = cache["CalciumContent"]?.MatchColumn;
string colNameGravelContent = cache["GravelContent"]?.MatchColumn;
List<WellReservesLayer> listObj = new List<WellReservesLayer>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellReservesLayer obj = new WellReservesLayer();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameLayer) && dr[colNameLayer].ToString() != string.Empty)
{
obj.Layer = dr[colNameLayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameXzb) && dr[colNameXzb].ToString() != string.Empty)
{
obj.XCoordinate = Convert.ToDouble(dr[colNameXzb].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameYzb) && dr[colNameYzb].ToString() != string.Empty)
{
obj.YCoordinate = Convert.ToDouble(dr[colNameYzb].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameTop2) && dr[colNameTop2].ToString() != string.Empty)
{
obj.TopSecondSandstone = Convert.ToDouble(dr[colNameTop2].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameBot2) && dr[colNameBot2].ToString() != string.Empty)
{
obj.BottomSecondSandstone = Convert.ToDouble(dr[colNameBot2].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamethick2) && dr[colNamethick2].ToString() != string.Empty)
{
obj.ThicknessSecondSandstone = Convert.ToDouble(dr[colNamethick2].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameTop1) && dr[colNameTop1].ToString() != string.Empty)
{
obj.TopFirstSandstone = Convert.ToDouble(dr[colNameTop1].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameBot1) && dr[colNameBot1].ToString() != string.Empty)
{
obj.BottomFirstSandstone = Convert.ToDouble(dr[colNameBot1].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamethick1) && dr[colNamethick1].ToString() != string.Empty)
{
obj.ThicknessFirstSandstone = Convert.ToDouble(dr[colNamethick1].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameTopView) && dr[colNameTopView].ToString() != string.Empty)
{
obj.ViewEffectiveTop = Convert.ToDouble(dr[colNameTopView].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamethickView) && dr[colNamethickView].ToString() != string.Empty)
{
obj.ViewEffectiveThickness = Convert.ToDouble(dr[colNamethickView].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameTopPure) && dr[colNameTopPure].ToString() != string.Empty)
{
obj.PureEffectiveTopEstimate = Convert.ToDouble(dr[colNameTopPure].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamethickPure) && dr[colNamethickPure].ToString() != string.Empty)
{
obj.PureEffectiveThicknessEstimate = Convert.ToDouble(dr[colNamethickPure].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameECategory) && dr[colNameECategory].ToString() != string.Empty)
{
obj.EffectiveCategory = dr[colNameECategory].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamePorosity) && dr[colNamePorosity].ToString() != string.Empty)
{
obj.Porosity = Convert.ToDouble(dr[colNamePorosity].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamePermeability) && dr[colNamePermeability].ToString() != string.Empty)
{
obj.Permeability = Convert.ToDouble(dr[colNamePermeability].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameClayContent) && dr[colNameClayContent].ToString() != string.Empty)
{
obj.ClayContent = Convert.ToDouble(dr[colNameClayContent].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameOilSaturation) && dr[colNameOilSaturation].ToString() != string.Empty)
{
obj.OilSaturation = Convert.ToDouble(dr[colNameOilSaturation].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameMobileOilSaturation) && dr[colNameMobileOilSaturation].ToString() != string.Empty)
{
obj.MobileOilSaturation = Convert.ToDouble(dr[colNameMobileOilSaturation].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameWaterSaturation) && dr[colNameWaterSaturation].ToString() != string.Empty)
{
obj.WaterSaturation = Convert.ToDouble(dr[colNameWaterSaturation].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameElectricLogInterpretation) && dr[colNameElectricLogInterpretation].ToString() != string.Empty)
{
obj.ElectricLogInterpretation = dr[colNameElectricLogInterpretation].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamePerforationStatus) && dr[colNamePerforationStatus].ToString() != string.Empty)
{
obj.PerforationStatus = dr[colNamePerforationStatus].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameWaterFloodingInterpretation) && dr[colNameWaterFloodingInterpretation].ToString() != string.Empty)
{
obj.WaterFloodingInterpretation = dr[colNameWaterFloodingInterpretation].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameFacies) && dr[colNameFacies].ToString() != string.Empty)
{
obj.Facies = dr[colNameFacies].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameLithology) && dr[colNameLithology].ToString() != string.Empty)
{
obj.Lithology = dr[colNameLithology].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameInterpretationNumber) && dr[colNameInterpretationNumber].ToString() != string.Empty)
{
obj.InterpretationNumber = dr[colNameInterpretationNumber].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameXCoordinateSandstoneTop) && dr[colNameXCoordinateSandstoneTop].ToString() != string.Empty)
{
obj.XCoordinateSandstoneTop = Convert.ToDouble(dr[colNameXCoordinateSandstoneTop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameYCoordinateSandstoneTop) && dr[colNameYCoordinateSandstoneTop].ToString() != string.Empty)
{
obj.YCoordinateSandstoneTop = Convert.ToDouble(dr[colNameYCoordinateSandstoneTop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameGasSaturation) && dr[colNameGasSaturation].ToString() != string.Empty)
{
obj.GasSaturation = Convert.ToDouble(dr[colNameGasSaturation].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameWaterFloodingValue) && dr[colNameWaterFloodingValue].ToString() != string.Empty)
{
obj.WaterFloodingValue = Convert.ToDouble(dr[colNameWaterFloodingValue].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameSubfacies) && dr[colNameSubfacies].ToString() != string.Empty)
{
obj.Subfacies = dr[colNameSubfacies].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameFlowUnit) && dr[colNameFlowUnit].ToString() != string.Empty)
{
obj.FlowUnit = dr[colNameFlowUnit].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameBoundWaterSaturation) && dr[colNameBoundWaterSaturation].ToString() != string.Empty)
{
obj.BoundWaterSaturation = Convert.ToDouble(dr[colNameBoundWaterSaturation].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameWaterInjectionVolume) && dr[colNameWaterInjectionVolume].ToString() != string.Empty)
{
obj.WaterInjectionVolume = Convert.ToDouble(dr[colNameWaterInjectionVolume].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamePermeabilityGradient) && dr[colNamePermeabilityGradient].ToString() != string.Empty)
{
obj.PermeabilityGradient = Convert.ToDouble(dr[colNamePermeabilityGradient].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamePermeabilityBreakthrough) && dr[colNamePermeabilityBreakthrough].ToString() != string.Empty)
{
obj.PermeabilityBreakthrough = Convert.ToDouble(dr[colNamePermeabilityBreakthrough].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamePermeabilityVariance) && dr[colNamePermeabilityVariance].ToString() != string.Empty)
{
obj.PermeabilityVariance = Convert.ToDouble(dr[colNamePermeabilityVariance].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameAirPermability) && dr[colNameAirPermability].ToString() != string.Empty)
{
obj.AirPermability = Convert.ToDouble(dr[colNameAirPermability].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameAirPermability1) && dr[colNameAirPermability1].ToString() != string.Empty)
{
obj.AirPermability1 = (dr[colNameAirPermability1].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameEffectivePermability) && dr[colNameEffectivePermability].ToString() != string.Empty)
{
obj.EffectivePermability = Convert.ToDouble(dr[colNameEffectivePermability].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameEffectivePermability1) && dr[colNameEffectivePermability1].ToString() != string.Empty)
{
obj.EffectivePermability1 = (dr[colNameEffectivePermability1].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameOriginalWaterSaturation) && dr[colNameOriginalWaterSaturation].ToString() != string.Empty)
{
obj.OriginalWaterSaturation = Convert.ToDouble(dr[colNameOriginalWaterSaturation].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameRecoveryDegree) && dr[colNameRecoveryDegree].ToString() != string.Empty)
{
obj.RecoveryDegree = Convert.ToDouble(dr[colNameRecoveryDegree].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameCalciumContent) && dr[colNameCalciumContent].ToString() != string.Empty)
{
obj.CalciumContent = Convert.ToDouble(dr[colNameCalciumContent].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameGravelContent) && dr[colNameGravelContent].ToString() != string.Empty)
{
obj.GravelContent = Convert.ToDouble(dr[colNameGravelContent].ToString());
}
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<WellReservesLayer>();
this.cfg.TotalImport += nIndex;
}
private bool IsSYWZMissing(List<HoriWellFracturParameter> existingRecords, List<HoriWellFracturParameter> newRecords)
{
bool existingSYWZ1AllNull = existingRecords.All(item => item.SYWZ1 == null);
bool existingSYWZ2AllNull = existingRecords.All(item => item.SYWZ2 == null);
bool newSYWZ1AllNull = newRecords.All(item => item.SYWZ1 == null);
bool newSYWZ2AllNull = newRecords.All(item => item.SYWZ2 == null);
return (existingSYWZ1AllNull || existingSYWZ2AllNull) &&
(newSYWZ1AllNull || newSYWZ2AllNull);
}
private void SaveWellCoring(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<WellCoring>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNametop = cache["top"]?.MatchColumn;
string colNamebottom = cache["bottom"]?.MatchColumn;
string colNameMethod = cache["method"]?.MatchColumn;
string colNameDate = cache["date"]?.MatchColumn;
string colNameLayer = cache["layer"]?.MatchColumn;
string colNameLength = cache["length"]?.MatchColumn;
string colNameDiameter = cache["diameter"]?.MatchColumn;
string colNametimes = cache["times"]?.MatchColumn;
string colNameoilsaturatedlength = cache["oilsaturatedlength"]?.MatchColumn;
string colNamefistlayer = cache["firstlayer"]?.MatchColumn;
string colNamesecondlayer = cache["secondlayer"]?.MatchColumn;
string colNamethirdlayer = cache["thirdlayer"]?.MatchColumn;
List<WellCoring> listObj = new List<WellCoring>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellCoring obj = new WellCoring();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNametop) && dr[colNametop].ToString() != string.Empty)
{
obj.top = Convert.ToDouble(dr[colNametop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamebottom) && dr[colNamebottom].ToString() != string.Empty)
{
obj.bottom = Convert.ToDouble(dr[colNamebottom].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDate) && dr[colNameDate].ToString() != string.Empty)
{
obj.date = dr[colNameDate].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameMethod) && dr[colNameMethod].ToString() != string.Empty)
{
obj.method = dr[colNameMethod].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameLayer) && dr[colNameLayer].ToString() != string.Empty)
{
obj.layer= dr[colNameLayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameLength) && dr[colNameLength].ToString() != string.Empty)
{
obj.length = Convert.ToDouble(dr[colNameLength].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDiameter) && dr[colNameDiameter].ToString() != string.Empty)
{
obj.diameter = Convert.ToDouble(dr[colNameDiameter].ToString());
}
if (!string.IsNullOrWhiteSpace(colNametimes) && dr[colNametimes].ToString() != string.Empty)
{
obj.times = Convert.ToInt32(dr[colNametimes].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameoilsaturatedlength) && dr[colNameoilsaturatedlength].ToString() != string.Empty)
{
obj.oilsaturatedlength = Convert.ToDouble(dr[colNameoilsaturatedlength].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamefistlayer) && dr[colNamefistlayer].ToString() != string.Empty)
{
obj.firstlayer = dr[colNamefistlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamesecondlayer) && dr[colNamesecondlayer].ToString() != string.Empty)
{
obj.secondlayer = dr[colNamesecondlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamethirdlayer) && dr[colNamethirdlayer].ToString() != string.Empty)
{
obj.thirdlayer = dr[colNamethirdlayer].ToString();
}
// obj.XHID = xhid++;
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<WellCoring>();
this.cfg.TotalImport += nIndex;
}
private void SaveWellWaterInjection(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<WellWaterInjection>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNametop = cache["top"]?.MatchColumn;
string colNamebottom = cache["bottom"]?.MatchColumn;
string colNameDate = cache["date"]?.MatchColumn;
string colNameLayer = cache["layer"]?.MatchColumn;
string colNameDaily = cache["dailyinjection"]?.MatchColumn;
string colNameInjectionpercentage = cache["injectionpercentage"]?.MatchColumn;
string colNameInjectionpressure = cache["injectionpressure"]?.MatchColumn;
string colNameInjectionintesity = cache["injectionintesity"]?.MatchColumn;
string colNameWaterabsorptionrate = cache["waterabsorptionrate"]?.MatchColumn;
string colNameShutoff = cache["shutoff"]?.MatchColumn;
string colNameSandthickness = cache["sandthickness"]?.MatchColumn;
string colNameEffectionthickness = cache["effectionthickness"]?.MatchColumn;
string colNamefistlayer = cache["firstlayer"]?.MatchColumn;
string colNamesecondlayer = cache["secondlayer"]?.MatchColumn;
string colNamethirdlayer = cache["thirdlayer"]?.MatchColumn;
List<WellWaterInjection> listObj = new List<WellWaterInjection>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellWaterInjection obj = new WellWaterInjection();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNametop) && dr[colNametop].ToString() != string.Empty)
{
obj.top = Convert.ToDouble(dr[colNametop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamebottom) && dr[colNamebottom].ToString() != string.Empty)
{
obj.bottom = Convert.ToDouble(dr[colNamebottom].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDate) && dr[colNameDate].ToString() != string.Empty)
{
obj.date = dr[colNameDate].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameLayer) && dr[colNameLayer].ToString() != string.Empty)
{
obj.layer = dr[colNameLayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameDaily) && dr[colNameDaily].ToString() != string.Empty)
{
obj.dailyinjection = Convert.ToDouble(dr[colNameDaily].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameInjectionpercentage) && dr[colNameInjectionpercentage].ToString() != string.Empty)
{
obj.injectionpercentage = Convert.ToDouble(dr[colNameInjectionpercentage].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameInjectionpressure) && dr[colNameInjectionpressure].ToString() != string.Empty)
{
obj.injectionpressure = Convert.ToDouble(dr[colNameInjectionpressure].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameInjectionintesity) && dr[colNameInjectionintesity].ToString() != string.Empty)
{
obj.injectionintesity = Convert.ToDouble(dr[colNameInjectionintesity].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameWaterabsorptionrate) && dr[colNameWaterabsorptionrate].ToString() != string.Empty)
{
obj.waterabsorptionrate = Convert.ToDouble(dr[colNameWaterabsorptionrate].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameShutoff) && dr[colNameShutoff].ToString() != string.Empty)
{
obj.shutoff = dr[colNameShutoff].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameSandthickness) && dr[colNameSandthickness].ToString() != string.Empty)
{
obj.sandthickness = Convert.ToDouble(dr[colNameSandthickness].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameEffectionthickness) && dr[colNameEffectionthickness].ToString() != string.Empty)
{
obj.effectionthickness = Convert.ToDouble(dr[colNameEffectionthickness].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamefistlayer) && dr[colNamefistlayer].ToString() != string.Empty)
{
obj.firstlayer = dr[colNamefistlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamesecondlayer) && dr[colNamesecondlayer].ToString() != string.Empty)
{
obj.secondlayer = dr[colNamesecondlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamethirdlayer) && dr[colNamethirdlayer].ToString() != string.Empty)
{
obj.thirdlayer = dr[colNamethirdlayer].ToString();
}
// obj.XHID = xhid++;
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<WellWaterInjection>();
this.cfg.TotalImport += nIndex;
}
private void SaveWellFluidProducingProfile(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<WellFluidProducingProfile>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNametop = cache["top"]?.MatchColumn;
string colNamebottom = cache["bottom"]?.MatchColumn;
string colNameDate = cache["date"]?.MatchColumn;
string colNameLayer = cache["layer"]?.MatchColumn;
string colNameSequencenumber = cache["sequencenumber"]?.MatchColumn;
string colNameMeasurementdepth = cache["measurementdepth"]?.MatchColumn;
string colNameLayercount = cache["layercount"]?.MatchColumn;
string colNameTemperature = cache["temperature"]?.MatchColumn;
string colNameFlowingpressure = cache["flowingpressure"]?.MatchColumn;
string colNameFlowrate = cache["flowrate"]?.MatchColumn;
string colNameDensity = cache["density"]?.MatchColumn;
string colNameDailyliquid = cache["dailyliquid"]?.MatchColumn;
string colNameDailygas = cache["dailygas"]?.MatchColumn;
string colNameWatercut = cache["watercut"]?.MatchColumn;
string colNamefistlayer = cache["firstlayer"]?.MatchColumn;
string colNamesecondlayer = cache["secondlayer"]?.MatchColumn;
string colNamethirdlayer = cache["thirdlayer"]?.MatchColumn;
List<WellFluidProducingProfile> listObj = new List<WellFluidProducingProfile>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellFluidProducingProfile obj = new WellFluidProducingProfile();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNametop) && dr[colNametop].ToString() != string.Empty)
{
obj.top = Convert.ToDouble(dr[colNametop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamebottom) && dr[colNamebottom].ToString() != string.Empty)
{
obj.bottom = Convert.ToDouble(dr[colNamebottom].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDate) && dr[colNameDate].ToString() != string.Empty)
{
obj.date = dr[colNameDate].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameLayer) && dr[colNameLayer].ToString() != string.Empty)
{
obj.layer = dr[colNameLayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameSequencenumber) && dr[colNameSequencenumber].ToString() != string.Empty)
{
obj.sequencenumber = Convert.ToInt32(dr[colNameSequencenumber].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameMeasurementdepth) && dr[colNameMeasurementdepth].ToString() != string.Empty)
{
obj.measurementdepth = Convert.ToDouble(dr[colNameMeasurementdepth].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameLayercount) && dr[colNameLayercount].ToString() != string.Empty)
{
obj.layercount = Convert.ToInt32(dr[colNameLayercount].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameTemperature) && dr[colNameTemperature].ToString() != string.Empty)
{
obj.temperature = Convert.ToDouble(dr[colNameTemperature].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameFlowingpressure) && dr[colNameFlowingpressure].ToString() != string.Empty)
{
obj.flowingpressure = Convert.ToDouble(dr[colNameFlowingpressure].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameFlowrate) && dr[colNameFlowrate].ToString() != string.Empty)
{
obj.flowrate = Convert.ToDouble(dr[colNameFlowrate].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDensity) && dr[colNameDensity].ToString() != string.Empty)
{
obj.density = Convert.ToDouble(dr[colNameDensity].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDailyliquid) && dr[colNameDailyliquid].ToString() != string.Empty)
{
obj.dailyliquid = Convert.ToDouble(dr[colNameDailyliquid].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameWatercut) && dr[colNameWatercut].ToString() != string.Empty)
{
obj.watercut = Convert.ToDouble(dr[colNameWatercut].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDailygas) && dr[colNameDailygas].ToString() != string.Empty)
{
obj.dailygas = Convert.ToDouble(dr[colNameDailygas].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamefistlayer) && dr[colNamefistlayer].ToString() != string.Empty)
{
obj.firstlayer = dr[colNamefistlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamesecondlayer) && dr[colNamesecondlayer].ToString() != string.Empty)
{
obj.secondlayer = dr[colNamesecondlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamethirdlayer) && dr[colNamethirdlayer].ToString() != string.Empty)
{
obj.thirdlayer = dr[colNamethirdlayer].ToString();
}
// obj.XHID = xhid++;
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<WellFluidProducingProfile>();
this.cfg.TotalImport += nIndex;
}
private void SaveWellLithologicalAnalysis(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<WellLithologicalAnalysis>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNametop = cache["top"]?.MatchColumn;
string colNamebottom = cache["bottom"]?.MatchColumn;
string colNamesamplenumber = cache["samplenumber"]?.MatchColumn;
string colNamelithology = cache["lithology"]?.MatchColumn;
string colNamesampleposition = cache["sampleposition"]?.MatchColumn;
string colNamesampledepth = cache["sampledepth"]?.MatchColumn;
string colNamecolor = cache["color"]?.MatchColumn;
string colNameoilcontent = cache["oilcontent"]?.MatchColumn;
string colNameinclusions = cache["inclusions"]?.MatchColumn;
string colNamelithologyprefix = cache["lithologyprefix"]?.MatchColumn;
string colNamestructure = cache["structure"]?.MatchColumn;
string colNamesamporosity = cache["porosity"]?.MatchColumn;
string colNamepermeability = cache["permeability"]?.MatchColumn;
string colNameoilsaturation = cache["oilsaturation"]?.MatchColumn;
string colNamewatersaturation = cache["watersaturation"]?.MatchColumn;
string colNameboundwatersaturation = cache["boundwatersaturation"]?.MatchColumn;
string colNameclaycontent = cache["claycontent"]?.MatchColumn;
string colNamelithologyname = cache["lithologyname"]?.MatchColumn;
string colNamefistlayer = cache["firstlayer"]?.MatchColumn;
string colNamesecondlayer = cache["secondlayer"]?.MatchColumn;
string colNamethirdlayer = cache["thirdlayer"]?.MatchColumn;
List<WellLithologicalAnalysis> listObj = new List<WellLithologicalAnalysis>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellLithologicalAnalysis obj = new WellLithologicalAnalysis();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNametop) && dr[colNametop].ToString() != string.Empty)
{
obj.top = Convert.ToDouble(dr[colNametop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamebottom) && dr[colNamebottom].ToString() != string.Empty)
{
obj.bottom = Convert.ToDouble(dr[colNamebottom].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamesamplenumber) && dr[colNamesamplenumber].ToString() != string.Empty)
{
obj.samplenumber = Convert.ToInt32(dr[colNamesamplenumber].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamesampleposition) && dr[colNamesampleposition].ToString() != string.Empty)
{
obj.sampleposition = Convert.ToDouble(dr[colNamesampleposition].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamesampledepth) && dr[colNamesampledepth].ToString() != string.Empty)
{
obj.sampledepth = Convert.ToDouble(dr[colNamesampledepth].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamecolor) && dr[colNamecolor].ToString() != string.Empty)
{
obj.color = dr[colNamecolor].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameoilcontent) && dr[colNameoilcontent].ToString() != string.Empty)
{
obj.oilcontent = dr[colNamecolor].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameinclusions) && dr[colNameinclusions].ToString() != string.Empty)
{
obj.inclusions = dr[colNameinclusions].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamelithologyprefix) && dr[colNamelithologyprefix].ToString() != string.Empty)
{
obj.lithologyprefix = dr[colNamelithologyprefix].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamestructure) && dr[colNamestructure].ToString() != string.Empty)
{
obj.structure = dr[colNamestructure].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamelithology) && dr[colNamelithology].ToString() != string.Empty)
{
obj.lithology = dr[colNamelithology].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamesamporosity) && dr[colNamesamporosity].ToString() != string.Empty)
{
obj.porosity = Convert.ToDouble(dr[colNamesamporosity].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamepermeability) && dr[colNamepermeability].ToString() != string.Empty)
{
obj.permeability = Convert.ToDouble(dr[colNamepermeability].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameoilsaturation) && dr[colNameoilsaturation].ToString() != string.Empty)
{
obj.oilsaturation = Convert.ToDouble(dr[colNameoilsaturation].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamewatersaturation) && dr[colNamewatersaturation].ToString() != string.Empty)
{
obj.watersaturation = Convert.ToDouble(dr[colNamewatersaturation].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameboundwatersaturation) && dr[colNameboundwatersaturation].ToString() != string.Empty)
{
obj.boundwatersaturation = Convert.ToDouble(dr[colNameboundwatersaturation].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameclaycontent) && dr[colNameclaycontent].ToString() != string.Empty)
{
obj.claycontent = Convert.ToDouble(dr[colNameclaycontent].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamefistlayer) && dr[colNamefistlayer].ToString() != string.Empty)
{
obj.firstlayer = dr[colNamefistlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamesecondlayer) && dr[colNamesecondlayer].ToString() != string.Empty)
{
obj.secondlayer = dr[colNamesecondlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamethirdlayer) && dr[colNamethirdlayer].ToString() != string.Empty)
{
obj.thirdlayer = dr[colNamethirdlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamelithologyname) && dr[colNamelithologyname].ToString() != string.Empty)
{
obj.lithologyname = dr[colNamelithologyname].ToString();
}
// obj.XHID = xhid++;
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<WellLithologicalAnalysis>();
this.cfg.TotalImport += nIndex;
}
private void SaveWellSideWallCoring(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<WellSideWallCoring>().Max<int>("id") + 1;
string colNameJH = cache["well"]?.MatchColumn;
string colNametop = cache["top"]?.MatchColumn;
string colNameNumber = cache["number"]?.MatchColumn;
string colNamecolor = cache["color"]?.MatchColumn;
string colNameoilcontent = cache["oilcontent"]?.MatchColumn;
string colNameinclusions = cache["inclusions"]?.MatchColumn;
string colNamelithologyprefix = cache["lithologyprefix"]?.MatchColumn;
string colNamestructure = cache["structure"]?.MatchColumn;
string colNamelithology = cache["lithology"]?.MatchColumn;
string colNamefistlayer = cache["firstlayer"]?.MatchColumn;
string colNamesecondlayer = cache["secondlayer"]?.MatchColumn;
string colNamethirdlayer = cache["thirdlayer"]?.MatchColumn;
string colNamevDepth = cache["verticaldepth"]?.MatchColumn;
string colNameelevaDepth = cache["elevationdepth"]?.MatchColumn;
string colNamelithologyname = cache["lithologyname"]?.MatchColumn;
List<WellSideWallCoring> listObj = new List<WellSideWallCoring>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellSideWallCoring obj = new WellSideWallCoring();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.Well = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNametop) && dr[colNametop].ToString() != string.Empty)
{
obj.top = Convert.ToDouble(dr[colNametop].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamecolor) && dr[colNamecolor].ToString() != string.Empty)
{
obj.color = dr[colNamecolor].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameNumber) && dr[colNameNumber].ToString() != string.Empty)
{
obj.number = Convert.ToInt32(dr[colNameNumber].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameoilcontent) && dr[colNameoilcontent].ToString() != string.Empty)
{
obj.oilcontent = dr[colNamecolor].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameinclusions) && dr[colNameinclusions].ToString() != string.Empty)
{
obj.inclusions = dr[colNameinclusions].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamelithologyprefix) && dr[colNamelithologyprefix].ToString() != string.Empty)
{
obj.lithologyprefix = dr[colNamelithologyprefix].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamestructure) && dr[colNamestructure].ToString() != string.Empty)
{
obj.structure = dr[colNamestructure].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamelithology) && dr[colNamelithology].ToString() != string.Empty)
{
obj.lithology = dr[colNamelithology].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamefistlayer) && dr[colNamefistlayer].ToString() != string.Empty)
{
obj.firstlayer = dr[colNamefistlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamesecondlayer) && dr[colNamesecondlayer].ToString() != string.Empty)
{
obj.secondlayer = dr[colNamesecondlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamethirdlayer) && dr[colNamethirdlayer].ToString() != string.Empty)
{
obj.thirdlayer = dr[colNamethirdlayer].ToString();
}
if (!string.IsNullOrWhiteSpace(colNamevDepth) && dr[colNamevDepth].ToString() != string.Empty)
{
obj.verticaldepth = Convert.ToDouble(dr[colNamevDepth].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameelevaDepth) && dr[colNameelevaDepth].ToString() != string.Empty)
{
obj.elevationdepth = Convert.ToDouble(dr[colNameelevaDepth].ToString());
}
if (!string.IsNullOrWhiteSpace(colNamelithologyname) && dr[colNamelithologyname].ToString() != string.Empty)
{
obj.lithologyname = dr[colNamelithologyname].ToString();
}
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<WellSideWallCoring>();
this.cfg.TotalImport += nIndex;
}
// 保存射孔
/// <summary>
/// Saves the data well perforation.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="append">If true, append.</param>
private void SaveDataWellPerforation(DataTable table, MatchCache cache, int index, int startID, bool append)
{
int id = DBHelp.Db.Queryable<WellPerforation>().Max<int>("id") + 1;
string xhid_s = DBHelp.Db.Queryable<WellPerforation>().Max<string>("xhid");
int xhid = 1;
if (xhid_s != null)
{
xhid = Convert.ToInt32(xhid_s) + 1;
}
string colNameJH = cache["JH"]?.MatchColumn;
string colNameDS = cache["DS"]?.MatchColumn;
string colNameDS2 = cache["DS2"]?.MatchColumn;
string colNameCW = cache["CW"]?.MatchColumn;
string colNameSK = cache["SK"]?.MatchColumn;
List<WellPerforation> listObj = new List<WellPerforation>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellPerforation obj = new WellPerforation();
if (!string.IsNullOrWhiteSpace(colNameJH) && dr[colNameJH].ToString() != string.Empty)
{
obj.JH = dr[colNameJH].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameDS) && dr[colNameDS].ToString() != string.Empty)
{
obj.DS = Convert.ToDouble(dr[colNameDS].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameDS2) && dr[colNameDS2].ToString() != string.Empty)
{
obj.DS2 = Convert.ToDouble(dr[colNameDS2].ToString());
}
if (!string.IsNullOrWhiteSpace(colNameCW) && dr[colNameCW].ToString() != string.Empty)
{
obj.CW = dr[colNameCW].ToString();
}
if (!string.IsNullOrWhiteSpace(colNameSK) && dr[colNameSK].ToString() != string.Empty)
{
obj.SK = dr[colNameSK].ToString();
}
obj.XHID = xhid++;
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<WellPerforation>();
this.cfg.TotalImport += nIndex;
}
// 通用井斜
/// <summary>
/// Saves the well common.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="append">If true, append.</param>
//private void SaveWellDeflection(DataTable table, MatchCache cache, int index, int startID, bool append)
//{
// int id = DBHelp.Db.Queryable<WellDeflection>().Max<int>("id") + 1;
// string xhid_s = DBHelp.Db.Queryable<WellDeflection>().Max<string>("xhid");
// int xhid = 1;
// if (xhid_s != null)
// {
// xhid = Convert.ToInt32(xhid_s) + 1;
// }
// PropertyInfo[] properties = typeof(WellDeflection).GetProperties(BindingFlags.Public | BindingFlags.Instance);
// List<WellDeflection> listObj = new List<WellDeflection>();
// int nIndex = 0;
// int count = table.Rows.Count;
// int beginIndex = this.cfg.BeginIndex;
// for (int i = 0; i < count; i++)
// {
// if (this.IsSkippingRow(beginIndex, i))
// {
// continue;
// }
// DataRow dr = table.Rows[i];
// WellDeflection obj = new WellDeflection();
// foreach (PropertyInfo prop in properties)
// {
// if (cache.ContainsMatch(prop.Name))
// {
// string value = this.GetMatchValue(cache[prop.Name], dr, this.listFileNames[index]);
// this.SetPropertyData(prop, obj, value);
// }
// }
// obj.XHID = xhid++;
// obj.ID = id++;
// nIndex++;
// listObj.Add(obj);
// }
// DBHelp.NewDb.BulkInsert(listObj);
// this.cfg.TotalImport += nIndex;
//}
private void SaveWellDeflection(DataTable table, MatchCache cache, int index, int startID, bool append)
{
PropertyInfo[] properties = typeof(WellDeflection).GetProperties(BindingFlags.Public | BindingFlags.Instance);
int nIndex = 0;
int count = table.Rows.Count;
List<WellDeflection> listObj = new List<WellDeflection>();
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
WellDeflection obj = new WellDeflection();
foreach (PropertyInfo prop in properties)
{
if (cache.ContainsMatch(prop.Name))
{
string value = this.GetMatchValue(cache[prop.Name], dr, this.listFileNames[index]);
this.SetPropertyData(prop, obj, value);
}
}
obj.ID = obj.XHID = i + 1;
nIndex++;
listObj.Add(obj);
}
try
{
EntityHelp.SaveWellDeflectionFile(table.TableName, listObj);
this.cfg.TotalImport += nIndex;
}
catch (Exception ex)
{
Console.WriteLine($"处理文件失败:{table.TableName} \r\n 原因:{ex.Message}");
}
}
/// <summary>
/// 通用产能数据保存
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
private void SaveWellCapacity<T>(DataTable table, MatchCache cache, int index)
where T : WellCapacity, new()
{
int id = DBHelp.Db.Queryable<T>().Max<int>("id") + 1;
string xhid_s = DBHelp.Db.Queryable<T>().Max<string>("xhid");
int xhid = 1;
if (xhid_s != null)
{
xhid = Convert.ToInt32(xhid_s) + 1;
}
PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
List<T> listObj = new List<T>();
int nIndex = 0;
int count = table.Rows.Count;
string block = Path.GetFileNameWithoutExtension(this.listFileNames[index]);
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
T obj = new T();
foreach (PropertyInfo prop in properties)
{
if (cache.ContainsMatch(prop.Name))
{
string value = dr[cache[prop.Name].MatchColumn].ToString();
this.SetPropertyData(prop, obj, value);
}
}
if (string.IsNullOrWhiteSpace(obj.Block))
{
obj.Block = block;
}
if (obj is WellTestTotal wellTestObj)
{
obj.Block = !string.IsNullOrEmpty(wellTestObj.BlockName) ? wellTestObj.BlockName : "默认";
}
obj.XHID = xhid++;
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
this.cfg.TotalImport += nIndex;
}
/// <summary>
/// Saves the well entity.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <returns>A Task.</returns>
/// <summary>
/// Saves the well entity.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <returns>A Task.</returns>
private async Task SaveWellEntity<T>(DataTable table, MatchCache cache, int index)
where T : class, new()
{
//int id = DBHelp.Db.Queryable<T>().Max<int>("id") + 1;
PropertyInfo[] properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
List<T> listObj = new List<T>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
T obj = new T();
foreach (PropertyInfo prop in properties)
{
if (cache.ContainsMatch(prop.Name))
{
string value = dr[cache[prop.Name].MatchColumn].ToString();
this.SetPropertyData(prop, obj, value);
}
}
if (obj is WellCasingDamage casingDamage)
{
if (string.IsNullOrWhiteSpace(casingDamage.GROUP))
{
casingDamage.GROUP = "默认";
}
}
//obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
this.cfg.TotalImport += nIndex;
await Task.CompletedTask;
}
// 保存工区
private async Task SaveWorkArea(DataTable table, MatchCache cache)
{
int nCount = 0;
for (int i = 0; i < this.cfg.Storage.DataTableList.Rows.Count; i++)
{
WorkArea obj = new WorkArea();
obj.ID = 1;
obj.PATH = FileHelp.DirWorkArea;
obj.OUTFILENAME = "workarea.kev";
if (DBHelp.Db.Queryable<WorkArea>().Any())
{
DBHelp.Db.Updateable(obj).IgnoreColumns(o => o.WORKNAME).ExecuteCommand();
}
else
{
DBHelp.Db.Insertable(obj).ExecuteCommand();
}
string outputfile = Config.ProjectPath + obj.PATH + "\\" + obj.OUTFILENAME;
// 创建目录, 清理已有文件
this.PrepareFile(outputfile);
//if (this.IsDfdFile(this.listFileNames[i]))
//{
// await RewriteDfdOutput(this.listFileNames[i], outputfile, "边界");
//}
//else
//{
// await this.WriteDfdOutput(cache.Matches, this.listFileNames[i], outputfile, "边界", true);
//}
nCount++;
}
this.cfg.TotalImport += nCount;
}
// 保存边界
/// <summary>
/// Saves the data boundary.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <returns>A Task.</returns>
//private async Task SaveDataBoundary(DataTable table, MatchCache cache, int index)
//{
// int id = DBHelp.Db.Queryable<InterpretBoundary>().Max<int>("id") + 1;
// string xhid_s = DBHelp.Db.Queryable<InterpretBoundary>().Max<string>("xhid");
// int xhid = 1;
// if (xhid_s != null)
// {
// xhid = Convert.ToInt32(xhid_s) + 1;
// }
// int nCount = this.cfg.Storage.DataTableList.Rows.Count;
// IEnumerable<Task> tasks = Enumerable.Range(0, nCount).Select(async i =>
// {
// InterpretBoundary obj = new InterpretBoundary()
// {
// XHID = xhid++,
// ID = id++,
// PATH = FileHelp.DirInterpretBoundary,
// CWID = Convert.ToInt32(this.cfg.Storage.DataTableList.Rows[i]["层位ID"].ToString()),
// };
// this.SetInterpretProperty(obj, i);
// obj.OUTFILENAME = obj.CW + ".kev";
// DBHelp.NewDb.Storageable(obj).ExecuteCommand();
// string outputfile = Config.ProjectPath + obj.PATH + "\\" + obj.OUTFILENAME;
// // 创建目录, 清理已有文件
// this.PrepareFile(outputfile);
// if (this.IsDfdFile(this.listFileNames[i]))
// {
// await RewriteDfdOutput(this.listFileNames[i], outputfile, "边界");
// }
// else
// {
// await this.WriteDfdOutput(cache.Matches, this.listFileNames[i], outputfile, "边界", true);
// }
// });
// await Task.WhenAll(tasks);
// this.cfg.TotalImport += nCount;
//}
//// 保存散点边界
//private async Task SaveDataScatterBoundary(DataTable table, MatchCache cache, int index)
//{
// int id = DBHelp.Db.Queryable<ScatterBaseBoundary>().Max<int>("id") + 1;
// string xhid_s = DBHelp.Db.Queryable<ScatterBaseBoundary>().Max<string>("xhid");
// int xhid = 1;
// if (xhid_s != null)
// {
// xhid = Convert.ToInt32(xhid_s) + 1;
// }
// int nCount = this.cfg.Storage.DataTableList.Rows.Count;
// IEnumerable<Task> tasks = Enumerable.Range(0, nCount).Select(async i =>
// {
// ScatterBaseBoundary obj = new ScatterBaseBoundary()
// {
// XHID = xhid++,
// ID = id++,
// PATH = FileHelp.DirScatterBoundary,
// CWID = Convert.ToInt32(this.cfg.Storage.DataTableList.Rows[i]["层位ID"].ToString()),
// };
// this.SetInterpretProperty(obj, i);
// obj.OUTFILENAME = obj.CW + ".kev";
// DBHelp.NewDb.Storageable(obj).ExecuteCommand();
// string outputfile = Config.ProjectPath + obj.PATH + "\\" + obj.OUTFILENAME;
// // 创建目录, 清理已有文件
// this.PrepareFile(outputfile);
// if (this.IsDfdFile(this.listFileNames[i]))
// {
// await RewriteDfdOutput(this.listFileNames[i], outputfile, "边界");
// }
// else
// {
// await this.WriteDfdOutput(cache.Matches, this.listFileNames[i], outputfile, "边界", true);
// }
// });
// await Task.WhenAll(tasks);
// this.cfg.TotalImport += nCount;
//}
//// 保存单层散点边界
//private async Task SaveDataScatterSingleBoundary(DataTable table, MatchCache cache, int index)
//{
// //判断是否存在不存在择创建
// bool isBoundary = DBHelp.NewDb.Queryable<ScatterBaseBoundary>().Any(x => x.CW == this.cfg.UpdateNode);
// int nCount = this.cfg.Storage.DataTableList.Rows.Count;
// IEnumerable<Task> tasks = Enumerable.Range(0, nCount).Select(async i =>
// {
// ScatterBaseBoundary obj = new ScatterBaseBoundary()
// {
// PATH = FileHelp.DirScatterBoundary,
// CWID = Convert.ToInt32(this.cfg.Storage.DataTableList.Rows[i]["层位ID"].ToString()),
// };
// this.SetInterpretProperty(obj, i);
// obj.OUTFILENAME = obj.CW + ".kev";
// if (!isBoundary)
// {
// int id = DBHelp.Db.Queryable<ScatterBaseBoundary>().Max<int>("id") + 1;
// string xhid_s = DBHelp.Db.Queryable<ScatterBaseBoundary>().Max<string>("xhid");
// int xhid = 1;
// if (xhid_s != null)
// {
// xhid = Convert.ToInt32(xhid_s) + 1;
// }
// obj.XHID = xhid++;
// obj.ID = id++;
// obj.CW = this.cfg.UpdateNode;
// DBHelp.NewDb.Storageable(obj).ExecuteCommand();
// }
// string outputfile = Config.ProjectPath + obj.PATH + "\\" + obj.OUTFILENAME;
// this.PrepareFile(outputfile);
// if (this.IsDfdFile(this.listFileNames[i]))
// {
// await RewriteDfdOutput(this.listFileNames[i], outputfile, "边界");
// }
// else
// {
// await this.WriteDfdOutput(cache.Matches, this.listFileNames[i], outputfile, "边界", false);
// }
// });
// await Task.WhenAll(tasks);
// this.cfg.TotalImport += nCount;
//}
/// <summary>
/// Saves the data interpret table.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <returns>A Task.</returns>
//private async Task SaveDataInterpretTable<T>(DataTable table, MatchCache cache, int index)
// where T : InterpretTable, new()
//{
// int id = DBHelp.Db.Queryable<T>().Max<int>("id") + 1;
// string xhid_s = DBHelp.Db.Queryable<T>().Max<string>("xhid");
// int xhid = 1;
// if (xhid_s != null)
// {
// xhid = Convert.ToInt32(xhid_s) + 1;
// }
// List<InterpretLayer> list_layer = this.listInterpretLayer;
// int nCount = this.cfg.Storage.DataTableList.Rows.Count;
// IEnumerable<Task> tasks = Enumerable.Range(0, nCount).Select(async i =>
// {
// InterpretLayer obj_layer = this.GetInterpretLayer(this.cfg.Storage.DataTableList.Rows[i]["层位"].ToString());
// T obj = new T()
// {
// XHID = xhid++,
// ID = id++,
// CWID = obj_layer.ID,
// PATH = $@"\Interpret\{typeof(T).Name.Replace("Interpret", string.Empty)}",
// OUTFILENAME = obj_layer.CW + ".xyz",
// };
// this.SetInterpretProperty(obj, i);
// string outputfile = Config.ProjectPath + obj.PATH + "\\" + obj.OUTFILENAME;
// // 创建目录, 清理已有文件
// this.PrepareFile(outputfile);
// RangeData range = null;
// if (this.IsDfdFile(this.listFileNames[i]))
// {
// range = await this.WriteXYZOutputFromDfd(this.listFileNames[i], outputfile);
// }
// else
// {
// range = await this.WriteXYZOutput(cache.Matches, this.listFileNames[i], outputfile);
// }
// //if (typeof(T).IsType<InterpretTableXYZ>())
// //{
// // var xyz = obj as InterpretTableXYZ;
// // xyz.MAXZ = range?.MaxZ;
// // if (typeof(T).IsType<InterpretDepthLayer>())
// // {
// // double absMinValue = this.AbsValue(range?.MinZ);
// // double absMaxValue = this.AbsValue(range?.MaxZ);
// // xyz.MAXZ = Math.Max(absMinValue, absMaxValue);
// // }
// //}
// DBHelp.NewDb.Insertable(obj).ExecuteCommand();
// });
// await Task.WhenAll(tasks);
// this.cfg.TotalImport += nCount;
//}
private double AbsValue(double? value)
{
if (!value.HasValue)
{
return 0;
}
return value.Value < 0 ? -value.Value : value.Value;
}
//// 保存断层
//private async Task SaveDataFault(DataTable table, MatchCache cache, int index)
//{
// int id = DBHelp.Db.Queryable<InterpretFault>().Max<int>("id") + 1;
// string xhid_s = DBHelp.Db.Queryable<InterpretFault>().Max<string>("xhid");
// int xhid = 1;
// if (xhid_s != null)
// {
// xhid = Convert.ToInt32(xhid_s) + 1;
// }
// int nCount = this.cfg.Storage.DataTableList.Rows.Count;
// IEnumerable<Task> tasks = Enumerable.Range(0, nCount).Select(async i =>
// {
// InterpretFault obj = new InterpretFault()
// {
// XHID = xhid++,
// ID = id++,
// PATH = FileHelp.DirInterpretFault,
// CWID = Convert.ToInt32(this.cfg.Storage.DataTableList.Rows[i]["层位ID"].ToString()),
// };
// this.SetInterpretProperty(obj, i);
// obj.OUTFILENAME = obj.CW + ".kev";
// DBHelp.NewDb.Storageable(obj).ExecuteCommand();
// string outputfile = Config.ProjectPath + obj.PATH + "\\" + obj.OUTFILENAME;
// this.PrepareFile(outputfile);
// if (this.IsDfdFile(this.listFileNames[i]))
// {
// await RewriteDfdOutput(this.listFileNames[i], outputfile, "断层");
// }
// else
// {
// await this.WriteDfdOutput(cache.Matches, this.listFileNames[i], outputfile, "断层", false);
// }
// });
// await Task.WhenAll(tasks);
// this.cfg.TotalImport += nCount;
//}
///// <summary>
///// 保存散点断层
///// </summary>
///// <param name="table">The table.</param>
///// <param name="cache">The cache.</param>
///// <param name="index">The index.</param>
///// <returns>A Task.</returns>
//private async Task SaveDataScatterFault(DataTable table, MatchCache cache, int index)
//{
// int nCount = 0;
// int id = DBHelp.Db.Queryable<ScatterBaseFault>().Max<int>("id") + 1;
// string xhid_s = DBHelp.Db.Queryable<ScatterBaseFault>().Max<string>("xhid");
// int xhid = 1;
// if (xhid_s != null)
// {
// xhid = Convert.ToInt32(xhid_s) + 1;
// }
// nCount = this.cfg.Storage.DataTableList.Rows.Count;
// IEnumerable<Task> tasks = Enumerable.Range(0, nCount).Select(async i =>
// {
// ScatterBaseFault obj = new ScatterBaseFault()
// {
// XHID = xhid++,
// ID = id++,
// PATH = FileHelp.DirScatterFault,
// CWID = Convert.ToInt32(this.cfg.Storage.DataTableList.Rows[i]["层位ID"].ToString()),
// };
// this.SetInterpretProperty(obj, i);
// obj.OUTFILENAME = obj.CW + ".kev";
// DBHelp.NewDb.Storageable(obj).ExecuteCommand();
// string outputfile = Config.ProjectPath + obj.PATH + "\\" + obj.OUTFILENAME;
// this.PrepareFile(outputfile);
// if (this.IsDfdFile(this.listFileNames[i]))
// {
// await RewriteDfdOutput(this.listFileNames[i], outputfile, "断层");
// }
// else
// {
// await this.WriteDfdOutput(cache.Matches, this.listFileNames[i], outputfile, "断层", false);
// }
// });
// await Task.WhenAll(tasks);
// this.cfg.TotalImport += nCount;
//}
///// <summary>
///// 保存散点断层单层
///// </summary>
///// <param name="table">The table.</param>
///// <param name="cache">The cache.</param>
///// <param name="index">The index.</param>
///// <returns>A Task.</returns>
//private async Task SaveDataScatterSingleFault(DataTable table, MatchCache cache, int index)
//{
// int nCount = this.cfg.Storage.DataTableList.Rows.Count;
// bool isFault = DBHelp.NewDb.Queryable<ScatterBaseFault>().Any(x => x.CW == this.cfg.UpdateNode);
// IEnumerable<Task> tasks = Enumerable.Range(0, nCount).Select(async i =>
// {
// ScatterBaseFault obj = new ScatterBaseFault()
// {
// PATH = FileHelp.DirScatterBoundary,
// CWID = Convert.ToInt32(this.cfg.Storage.DataTableList.Rows[i]["层位ID"].ToString()),
// };
// this.SetInterpretProperty(obj, i);
// obj.OUTFILENAME = obj.CW + ".kev";
// if (!isFault)
// {
// int id = DBHelp.Db.Queryable<ScatterBaseFault>().Max<int>("id") + 1;
// string xhid_s = DBHelp.Db.Queryable<ScatterBaseFault>().Max<string>("xhid");
// int xhid = 1;
// if (xhid_s != null)
// {
// xhid = Convert.ToInt32(xhid_s) + 1;
// }
// obj.XHID = xhid++;
// obj.ID = id++;
// obj.CW = this.cfg.UpdateNode;
// DBHelp.NewDb.Storageable(obj).ExecuteCommand();
// }
// string outputfile = Config.ProjectPath + obj.PATH + "\\" + obj.OUTFILENAME;
// this.PrepareFile(outputfile);
// if (this.IsDfdFile(this.listFileNames[i]))
// {
// await RewriteDfdOutput(this.listFileNames[i], outputfile, "断层");
// }
// else
// {
// await this.WriteDfdOutput(cache.Matches, this.listFileNames[i], outputfile, "断层", false);
// }
// });
// await Task.WhenAll(tasks);
// this.cfg.TotalImport += nCount;
//}
/// <summary>
/// Saves the data curve or time depth.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="append">If true, append.</param>
private void SaveDataCurveOrTimeDepth<T>(DataTable table, MatchCache cache, int index, int start, bool append) where T : WellFileTable, new()
{
int id = DBHelp.Db.Queryable<T>().Max<int>("id") + 1;
string xhid_s = DBHelp.Db.Queryable<T>().Max<string>("xhid");
int xhid = 1;
if (xhid_s != null)
{
xhid = Convert.ToInt32(xhid_s) + 1;
}
int nCount = 0;
List<T> listObj = new List<T>();
for (int i = 0; i < this.cfg.Storage.DataTableList.Rows.Count; i++)
{
T obj = new T()
{
XHID = xhid++,
ID = id++,
PATH = FileHelp.DirWellTimeDepth,
};
obj.JH = this.cfg.Storage.DataTableList.Rows[i]["井号"].ToString();
obj.FILE_NAME = this.cfg.Storage.DataTableList.Rows[i]["文件名"].ToString();
obj.CATEGARY = this.cfg.Storage.DataTableList.Rows[i]["类型"].ToString();
// obj.FILE_DATA = this.GetFileData(this.listFileNames[i]);
obj.OUTFILENAME = obj.FILE_NAME;
listObj.Add(obj);
// copy link
{
string outputfile = Config.ProjectPath + obj.PATH + "\\link\\" + obj.FILE_NAME;
this.PrepareFile(outputfile);
this.RewriteFile(this.listFileNames[i], outputfile);
}
{
string outputfile = Config.ProjectPath + obj.PATH + "\\" + obj.OUTFILENAME;
this.RewriteFile(this.listFileNames[i], outputfile);
}
nCount++;
}
DBHelp.NewDb.BulkInsert(listObj);
DataHelp.UpdateSearchWellName<T>();
this.cfg.TotalImport += nCount;
}
// 保存 二维测线
private void SaveSurveyline2d(DataTable table, MatchCache cache, int index, int start, bool append)
{
int id = DBHelp.Db.Queryable<Surveyline2d>().Max<int>("id") + 1;
List<EntityColumnInfo> columns = DBHelp.GetEntityColumnInfo(typeof(Surveyline2d));
List<Surveyline2d> listObj = new List<Surveyline2d>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
string block = Path.GetFileNameWithoutExtension(this.listFileNames[index]);
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
Surveyline2d obj = new Surveyline2d();
foreach (EntityColumnInfo col in columns)
{
if (cache.ContainsMatch(col.DbColumnName))
{
string value = dr[cache[col.DbColumnName].MatchColumn].ToString();
this.SetPropertyData(col.PropertyInfo, obj, value);
}
}
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
DBHelp.NewDb.BulkInsert(listObj);
this.cfg.TotalImport += nIndex;
}
// 保存 交汇图
private async Task SaveCrossplot(DataTable table, MatchCache cache, int index, int start)
{
int id = DBHelp.Db.Queryable<Crossplot>().Max<int>("id") + 1;
string filepath = this.listFileNames[0];
string filename = Path.GetFileNameWithoutExtension(filepath) + ".xlsx";
Crossplot obj = new Crossplot()
{
ID = id++,
DATA_NAME = Path.GetFileNameWithoutExtension(filename),
DATA_TYPE = Path.GetExtension(filename).ToLower(),
FILE_NAME = filename,
FILE_PATH = @"\Crossplot\",
};
string outputfile = Config.ProjectPath + obj.FILE_PATH + "\\" + obj.FILE_NAME;
// 创建目录, 清理已有文件
this.PrepareFile(outputfile);
await this.WriteExcelOutput(table, outputfile);
DBHelp.NewDb.Insertable(obj).ExecuteCommand();
this.cfg.TotalImport += 1;
}
private Task WriteExcelOutput(DataTable table, string outputfile)
{
NPOI.SS.UserModel.IWorkbook wb = new XSSFWorkbook();
ISheet sheet = wb.CreateSheet("Sheet1");
IRow row;
int rowIndex = 0;
row = sheet.CreateRow(rowIndex++);
int colIndex = 0;
foreach (DataColumn dtCol in table.Columns)
{
row.CreateCell(colIndex++).SetCellValue(dtCol.ColumnName);
}
foreach (DataRow dtRow in table.Rows)
{
row = sheet.CreateRow(rowIndex++);
colIndex = 0;
foreach (DataColumn dtCol in table.Columns)
{
var s = dtRow[dtCol].ToString();
if (double.TryParse(s, out var dValue))
{
row.CreateCell(colIndex++).SetCellValue(dValue);
}
else
{
row.CreateCell(colIndex++).SetCellValue(s);
}
}
}
using (FileStream stream = File.Create(outputfile))
{
wb.Write(stream);
}
return Task.CompletedTask;
}
/// <summary>
/// 保存储层数据
/// </summary>
private void SaveCcsj<T>(DataTable table, MatchCache cache, int index, int start, bool append)
where T : IReservoirData, new()
{
int id = DBHelp.Db.Queryable<T>().AS(DBHelp.GetTableOriginName<T>()).Max<int>("id") + 1;
List<EntityColumnInfo> columns = DBHelp.GetEntityColumnInfo(typeof(T));
List<T> listObj = new List<T>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
string block = Path.GetFileNameWithoutExtension(this.listFileNames[index]);
string tableName = DBHelp.GetEntityInfo<T>().TableDescription;
int processedCount = 0;
for (int i = 0; i < count; i++)
{
Interlocked.Increment(ref processedCount);
double percent = processedCount * 100.0 / count;
this.ui.UpdateProgress($"保存{tableName}数据,{Math.Round(percent, 2)} %");
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
T obj = new T();
foreach (EntityColumnInfo col in columns)
{
if (cache.ContainsMatch(col.DbColumnName))
{
string value = dr[cache[col.DbColumnName].MatchColumn].ToString();
this.SetPropertyData(col.PropertyInfo, obj, value);
}
}
if (obj is CcsjKxd kxd)
{
if (!kxd.KXD.HasValue)
{
continue;
}
}
else if (obj is CcsjBhd bhd)
{
if (!bhd.HSBHD.HasValue)
{
continue;
}
}
else if (obj is CcsjStl stl)
{
if (!stl.STL.HasValue)
{
continue;
}
}
else if (obj is CcsjYxhd yxhd)
{
int k1 = 3;
int k2 = 3;
if (!yxhd.YXHD.HasValue)
{
k1--;
}
if (!yxhd.DJSD1.HasValue)
{
k1--;
}
if (!yxhd.DJSD2.HasValue)
{
k1--;
}
if (!yxhd.YXCS_T.HasValue)
{
k2--;
}
if (!yxhd.YXCS_B.HasValue)
{
k2--;
}
if (!yxhd.YXCS_HD.HasValue)
{
k2--;
}
if (k1 < 2 && k2 < 2)
{
continue;
}
}
else if (obj is CcsjSyhd syhd)
{
int k1 = 3;
int k2 = 3;
if (!syhd.SYHD.HasValue)
{
k1--;
}
if (!syhd.SYSD_T.HasValue)
{
k1--;
}
if (!syhd.SYSD_B.HasValue)
{
k1--;
}
if (!syhd.SYCS_T.HasValue)
{
k2--;
}
if (!syhd.SYCS_B.HasValue)
{
k2--;
}
if (!syhd.SYCS_HD.HasValue)
{
k2--;
}
if (k1 < 2 && k2 < 2)
{
continue;
}
}
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
if (typeof(T) == typeof(CcsjSyhd))
{
DBHelp.NewDb.Fastest<CcsjSyhd>().AS(DBHelp.GetTableOriginName<T>()).BulkCopy(listObj.OfType<CcsjSyhd>().ToList());
}
else if (typeof(T) == typeof(CcsjYxhd))
{
DBHelp.NewDb.Fastest<CcsjYxhd>().AS(DBHelp.GetTableOriginName<T>()).BulkCopy(listObj.OfType<CcsjYxhd>().ToList());
}
else if (typeof(T) == typeof(CcsjStl))
{
DBHelp.NewDb.Fastest<CcsjStl>().AS(DBHelp.GetTableOriginName<T>()).BulkCopy(listObj.OfType<CcsjStl>().ToList());
}
else if (typeof(T) == typeof(CcsjKxd))
{
DBHelp.NewDb.Fastest<CcsjKxd>().AS(DBHelp.GetTableOriginName<T>()).BulkCopy(listObj.OfType<CcsjKxd>().ToList());
}
else if (typeof(T) == typeof(CcsjBhd))
{
DBHelp.NewDb.Fastest<CcsjBhd>().AS(DBHelp.GetTableOriginName<T>()).BulkCopy(listObj.OfType<CcsjBhd>().ToList());
}
this.cfg.TotalImport += nIndex;
}
/// <summary>
/// 保存 井分层
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="append">If true, append.</param>
private void SaveDataDrillWellLayered(DataTable table, MatchCache cache, int index, int startID, bool append)
{
int id = DBHelp.Db.Queryable<InterpretDrillWellLayered>().AS(DBHelp.GetTableOriginName<InterpretDrillWellLayered>()).Max<int>("id") + 1;
Dictionary<string, int> dictXhid = DBHelp.Db.Queryable<InterpretDrillWellLayered>().AS(DBHelp.GetTableOriginName<InterpretDrillWellLayered>())
.GroupBy(o => o.JH)
.Select(o => new { o.JH, XHID = SqlFunc.AggregateMax(o.XHID) })
.ToList()
.ToDictionary(o => o.JH, o => o.XHID);
int getXhid(string jh)
{
if (!dictXhid.ContainsKey(jh))
{
dictXhid[jh] = 1;
}
else
{
dictXhid[jh] = dictXhid[jh] + 1;
}
return dictXhid[jh];
}
List<InterpretDrillWellLayered> listObj = new List<InterpretDrillWellLayered>();
int nIndex = 0;
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
PropertyInfo[] properties = typeof(InterpretDrillWellLayered).GetProperties(BindingFlags.Public | BindingFlags.Instance);
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
DataRow dr = table.Rows[i];
InterpretDrillWellLayered obj = new InterpretDrillWellLayered();
foreach (PropertyInfo prop in properties)
{
if (cache.ContainsMatch(prop.Name))
{
string value = dr[cache[prop.Name].MatchColumn].ToString();
this.SetPropertyData(prop, obj, value);
}
}
try
{
if (obj.JH == null)
{
continue;
}
obj.XHID = getXhid(obj.JH);
obj.ID = id++;
nIndex++;
listObj.Add(obj);
}
catch (Exception ex)
{ }
}
DBHelp.NewDb.Fastest<InterpretDrillWellLayered>().AS(DBHelp.GetTableOriginName<InterpretDrillWellLayered>()).BulkCopy(listObj);
//DBHelp.NewDb.BulkInsert(listObj);
//DataHelp.UpdateSearchWellName<InterpretDrillWellLayered>(); 应该创建表时创建
this.cfg.TotalImport += nIndex;
}
// 保存 地震属性
/// <summary>
/// Saves the data attribute.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <param name="append">If true, append.</param>
private void SaveDataAttribute(DataTable table, MatchCache cache, int index, bool append)
{
DBHelp.Db.BeginTran();
int id = DBHelp.Db.Queryable<InterpretAttribute>().Max<int>("id") + 1;
string xhid_s = DBHelp.Db.Queryable<InterpretAttribute>().Max<string>("xhid");
int xhid = 1;
if (xhid_s != null)
{
xhid = Convert.ToInt32(xhid_s) + 1;
}
int nCount = 0;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < this.cfg.Storage.DataTableList.Rows.Count; i++)
{
InterpretAttribute obj = new InterpretAttribute();
obj.XHID = xhid++;
obj.ID = id++;
obj.CW = this.cfg.Storage.DataTableList.Rows[i]["层位"].ToString();
obj.FILE_NAME = this.cfg.Storage.DataTableList.Rows[i]["文件名"].ToString();
obj.Attribute = this.cfg.Storage.DataTableList.Rows[i]["属性名"].ToString();
obj.CATEGARY = this.cfg.Storage.DataTableList.Rows[i]["类型"].ToString();
obj.FILE_DATA = this.GetFileData(this.listFileNames[i]);
obj.CWID = Convert.ToInt32(this.cfg.Storage.DataTableList.Rows[i]["层位ID"].ToString());
DBHelp.Db.Storageable(obj).ExecuteCommand();
nCount++;
}
this.cfg.TotalImport += nCount;
if (nCount > 0)
{
DBHelp.Db.CommitTran();
this.ShowMessageBox(string.Format("导入 {0} 条数据!", nCount), "提示");
this.ui.OnSaveFinish(this.cfg);
}
else
{
DBHelp.Db.CommitTran();
this.ShowMessageBox("未导入数据!", "提示");
}
}
#endregion
#region 检查数据
/// <summary>
/// 检查井斜数据.
/// </summary>
/// <param name="tableList">The table.</param>
/// <param name="cache">The cache.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
private async Task<bool> CheckWellDeflection(List<DataTable> tableList, MatchCache cache)
{
HashSet<string> set = this.GetAvailableWellName();
HashSet<string> missing = new HashSet<string>();
HashSet<string> set2 = this.GetAvailableWellDeflectionWellName();
HashSet<string> exist = new HashSet<string>();
DataTable missingTable = tableList.First().Clone();
bool bRet = this.CheckInputData(tableList, cache, (row, index) =>
{
string jh = this.GetMatchValue(cache["JH"], row, this.listFileNames[index]);
if (!this.checkIsWellExist(row, set, cache["JH"], this.listFileNames[index]))
{
if (!string.IsNullOrWhiteSpace(jh))
{
if (!missing.Contains(jh))
{
missingTable.Rows.Add(row.ItemArray);
}
missing.Add(jh);
}
}
if (!exist.Contains(jh) && set2.Contains(jh))
{
exist.Add(jh);
}
return true;
});
if (exist.Count > 0)
{
if (DevExpress.XtraSplashScreen.SplashScreenManager.Default != null)
{
DevExpress.XtraSplashScreen.SplashScreenManager.CloseForm();
}
var result = new DlgAppend().ShowDialog();
if (result == DialogResult.OK)
{
if (this.cfg is FrmImportData xtraForm)
{
DevExpress.XtraSplashScreen.SplashScreenManager.ShowForm(xtraForm, typeof(DlgWait), false, false, DevExpress.XtraSplashScreen.ParentFormState.Unlocked);
}
DBHelp.Db.Deleteable<WellDeflection>()
.Where(o => exist.Contains(o.JH))
.ExecuteCommand();
}
}
if (!bRet)
{
return false;
}
if (missing.Count > 0)
{
DataTable dt = new DataTable();
dt.Columns.Add("井号");
foreach (var item in missing)
{
DataRow dataRow = dt.NewRow();
dataRow[0] = item;
dt.Rows.Add(dataRow);
}
//missingTable 返回数据
return await this.ImportWellBase(dt);
}
return true;
}
/// <summary>
/// 检查水平井压裂参数.
/// </summary>
/// <param name="tableList">The table.</param>
/// <param name="cache">The cache.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
private async Task<bool> CheckHoriWellFracturParm(List<DataTable> tableList, MatchCache cache)
{
HashSet<string> set = this.GetAvailableWellName();
HashSet<string> missing = new HashSet<string>();
HashSet<string> set2 = this.GetAvailableHoriWellFracturParmWellName();
HashSet<string> exist = new HashSet<string>();
DataTable missingTable = tableList.First().Clone();
bool bRet = this.CheckInputData(tableList, cache, (row, index) =>
{
string jh = this.GetMatchValue(cache["JH"], row, this.listFileNames[index]);
if (!this.checkIsWellExist(row, set, cache["JH"], this.listFileNames[index]))
{
if (!string.IsNullOrWhiteSpace(jh))
{
if (!missing.Contains(jh))
{
missingTable.Rows.Add(row.ItemArray);
}
missing.Add(jh);
}
}
if (!exist.Contains(jh) && set2.Contains(jh))
{
exist.Add(jh);
}
return true;
});
if (exist.Count > 0)
{
if (DevExpress.XtraSplashScreen.SplashScreenManager.Default != null)
{
DevExpress.XtraSplashScreen.SplashScreenManager.CloseForm();
}
var result = new DlgAppend().ShowDialog();
if (result == DialogResult.OK)
{
if (this.cfg is FrmImportData xtraForm)
{
DevExpress.XtraSplashScreen.SplashScreenManager.ShowForm(xtraForm, typeof(DlgWait), false, false, DevExpress.XtraSplashScreen.ParentFormState.Unlocked);
}
DBHelp.Db.Deleteable<HoriWellFracturParameter>().Where(o => exist.Contains(o.JH)).ExecuteCommand();
}
}
if (!bRet)
{
return false;
}
if (missing.Count > 0)
{
return await this.ImportWellBase(missingTable);
}
return true;
}
/// <summary>
/// 检查输入数据, 并判断井号是否存在.
/// </summary>
/// <param name="tableList">The table.</param>
/// <param name="cache">The cache.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
private async Task<bool> CheckInputDataWithWellName(List<DataTable> tableList, MatchCache cache)
{
HashSet<string> set = this.GetAvailableWellName();
HashSet<string> missing = new HashSet<string>();
DataTable missingTable = tableList.First().Clone();
bool bRet = this.CheckInputData(tableList, cache, (row, index) =>
{
if (!this.checkIsWellExist(row, set, cache["JH"], this.listFileNames[index]))
{
string jh = this.GetMatchValue(cache["JH"], row, this.listFileNames[index]);
if (!string.IsNullOrWhiteSpace(jh))
{
if (!missing.Contains(jh))
{
missingTable.Rows.Add(row.ItemArray);
}
missing.Add(jh);
}
}
return true;
});
if (!bRet)
{
return false;
}
if (missing.Count > 0)
{
return await this.ImportWellBase(missingTable);
}
return true;
}
/// <summary>
/// 检查输入数据(层位相关).
/// </summary>
/// <param name="table">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="index">The index.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
private bool CheckMultipleInputData(List<DataTable> tableList, MatchCache cache)
{
if (this.cfg.Storage.DataTableList == null || this.cfg.Storage.DataTableList.Rows.Count == 0)
{
this.ShowMessageBox("请选择数据文件", "提示");
return false;
}
// 校验格式
for (int i = 0; i < this.cfg.Storage.DataTableList.Rows.Count; i++)
{
if (this.cfg.Storage.DataTableList.Rows[i]["层位"].ToString().Trim() == string.Empty)
{
this.ShowMessageBox("第" + (i + 1) + "行层位名不能为空", "提示");
return false;
}
if (this.tableType == typeof(ScatterBaseBoundary) || this.tableType == typeof(ScatterBaseFault))
{
string cw = this.cfg.Storage.DataTableList.Rows[i]["层位"].ToString().Trim();
if (!DBHelp.Db.Queryable<ScatterBase>().Any(x => x.CW == cw))
{
this.ShowMessageBox("第" + (i + 1) + "行散点层位不存,不能保存", "提示");
return false;
}
this.cfg.Storage.DataTableList.Rows[i]["层位ID"] = DBHelp.Db.Queryable<ScatterBase>().First(x => x.CW == cw).CWID;
}
}
if (this.cfg.UseMatch)
{
foreach (MatchFromItem item in cache.Matches)
{
if (item.Connections.Count == 0 && item.Name != "线号" && item.Name != "道号")
{
this.ShowMessageBox($"请配置{item.Name}列!");
return false;
}
}
}
return true;
}
private bool CheckBoundary(List<DataTable> tableList, MatchCache cache)
{
return this.CheckMultipleInputData(tableList, cache);
}
private bool CheckDepthLayer(List<DataTable> tableList, MatchCache cache)
{
return this.CheckMultipleInputData(tableList, cache);
}
private bool CheckFault(List<DataTable> tableList, MatchCache cache)
{
return this.CheckMultipleInputData(tableList, cache);
}
private bool CheckTimeLayer(List<DataTable> tableList, MatchCache cache)
{
return this.CheckMultipleInputData(tableList, cache);
}
/// <summary>
/// Checks the well curve.
/// </summary>
/// <param name="tableList">The table list.</param>
/// <param name="cache">The cache.</param>
/// <returns>A Task.</returns>
private async Task<bool> CheckWellCurve(List<DataTable> tableList, MatchCache cache)
{
HashSet<string> set = this.GetAvailableWellName();
HashSet<string> missing = new HashSet<string>();
List<string> set2 = DBHelp.Db.Queryable<WellCurve>().Select(x => x.JH).ToList();
HashSet<string> exist = new HashSet<string>();
DataTable missingTable = tableList.First().Clone();
foreach (var dataTable in tableList)
{
string jh = dataTable.TableName;
if (!exist.Contains(jh) && set2.Contains(jh))
{
exist.Add(jh);
}
}
if (exist.Count > 0)
{
if (DevExpress.XtraSplashScreen.SplashScreenManager.Default != null)
{
DevExpress.XtraSplashScreen.SplashScreenManager.CloseForm();
}
var result = new DlgAppend().ShowDialog();
if (result == DialogResult.OK)
{
if (this.cfg is FrmImportData xtraForm)
{
DevExpress.XtraSplashScreen.SplashScreenManager.ShowForm(xtraForm, typeof(DlgWait), false, false, DevExpress.XtraSplashScreen.ParentFormState.Unlocked);
}
DBHelp.Db.Deleteable<WellCurve>().Where(x => exist.Contains(x.JH)).ExecuteCommand();
}
else if (result == DialogResult.Cancel)
{
return false;
}
}
return true;
}
private async Task<bool> CheckWellCurveOrTimeDepth(List<DataTable> tableList, MatchCache cache)
{
HashSet<string> set = this.GetAvailableWellName();
HashSet<string> missing = new HashSet<string>();
DataTable missingTable = tableList.First().Clone();
int count = this.cfg.Storage.DataTableList.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
if (!this.checkIsWellExist(this.cfg.Storage.DataTableList.Rows[i], set, new MatchData("井号"), this.listFileNames[i]))
{
string jh = this.cfg.Storage.DataTableList.Rows[i]["井号"].ToString();
if (!missing.Contains(jh))
{
missingTable.Rows.Add(this.cfg.Storage.DataTableList.Rows[i].ItemArray);
}
missing.Add(jh);
}
}
foreach (MatchFromItem item in cache.Matches)
{
if (item.Connections.Count == 0)
{
this.ShowMessageBox($"请配置{item.Name}列!");
return false;
}
}
if (missing.Count > 0)
{
return await this.ImportWellBase(missingTable);
}
return true;
}
/// <summary>
/// Checks the well exist.
/// </summary>
/// <param name="tableList">The table list.</param>
/// <param name="cache">The cache.</param>
/// <returns>A Task.</returns>
private async Task<bool> CheckWellExist(List<DataTable> tableList, MatchCache cache)
{
HashSet<string> set = this.GetAvailableWellName();
HashSet<string> missing = new HashSet<string>();
DataTable missingTable = tableList.First().Clone();
foreach (var dataTable in tableList)
{
int count = dataTable.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
string jh = dataTable.Rows[i][cache["JH"].MatchColumn].ToString();
if (!set.Contains(jh))
{
if (!missing.Contains(jh))
{
missingTable.Rows.Add(dataTable.Rows[i].ItemArray);
}
missing.Add(jh);
}
}
}
if (missing.Count > 0)
{
//不存在的井
//MessageBox.Show();
}
return true;
}
private bool CheckWorkArea(List<DataTable> tableList, MatchCache cache)
{
bool isDfd = this.IsDfdFile(this.cfg.ListFileNames.FirstOrDefault());
if (!isDfd)
{
foreach (MatchFromItem item in cache.Matches)
{
if (item.Connections.Count == 0)
{
this.ShowMessageBox($"请配置{item.Name}列!");
return false;
}
}
}
return true;
}
private bool CheckWellCapacity(List<DataTable> tableList, MatchCache cache)
{
return this.CheckInputData(tableList, cache);
}
/// <summary>
/// 检查输入数据.
/// </summary>
/// <param name="tableList">The table list.</param>
/// <param name="cache">The cache.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
private bool CheckInputData(List<DataTable> tableList, MatchCache cache)
{
return this.CheckInputData(tableList, cache, null);
}
/// <summary>
/// 检查输入数据.
/// </summary>
/// <param name="tableList">The table.</param>
/// <param name="cache">The cache.</param>
/// <param name="extendFunc">The extend function.</param>
/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>
private bool CheckInputData(List<DataTable> tableList, MatchCache cache, Func<DataRow, int, bool> extendFunc)
{
for (int index = 0; index < tableList.Count; index++)
{
DataTable table = tableList[index];
// 校验格式
int count = table.Rows.Count;
int beginIndex = this.cfg.BeginIndex;
for (int i = 0; i < count; i++)
{
if (this.IsSkippingRow(beginIndex, i))
{
continue;
}
foreach (TableInfo item in this.listColumnNames)
{
if (cache.ContainsMatch(item.ColumnName) && table.Columns.Contains(item.ColumnName))
{
if (item.ColumnType == "整型" || item.ColumnType == "浮点")
{
if (!this.checkIsNumber(this.GetFileNameByIndex(index), table.Rows[i], cache[item.ColumnName]))
{
return false;
}
}
else if (item.ColumnType == "文本" && int.TryParse(item.ColumnWidth, out int width))
{
if (!this.checkIsLessThan(this.GetFileNameByIndex(index), table.Rows[i], cache[item.ColumnName], width))
{
return false;
}
}
}
}
if (extendFunc?.Invoke(table.Rows[i], index) == false)
{
return false;
}
}
}
return true;
}
#endregion
#region 辅助函数[数据操作]
/// <summary>
/// Generates the column by preview.
/// </summary>
/// <param name="table">The table.</param>
/// <param name="preview">The preview.</param>
/// <param name="index">The i.</param>
private void GenerateColumnByPreview(DataTable table, PreviewData preview, int index)
{
if (index >= table.Columns.Count)
{
string defaultName = "列" + (index + 1);
if (preview.Count > 0 && index < preview[0].Count)
{
string colname = this.cfg.UseHeaderRow ? preview[0][index] : defaultName;
string caption = this.cfg.UseHeaderRow
? preview[0][index] + $"({defaultName})"
: defaultName;
DataColumn col = table.Columns.Add(colname);
col.Caption = caption;
}
else
{
table.Columns.Add(defaultName);
}
}
}
private int GetTableRecordCount<T>()
{
return DBHelp.NewDb.Queryable<T>().Count();
}
/// <summary>
/// 转换纵向表为横向表
/// </summary>
/// <param name="origin">纵向表</param>
/// <returns>横向表</returns>
public DataTable Convert2HorizonTable(DataTable origin)
{
DataTable result = new DataTable();
int columnIndex = this.cfg.BeginColumn;
int columnWidth = this.cfg.ColumnWidth;
int columnEndIndex = this.cfg.BeginColumn + columnWidth;
for (int i = 0; i < columnIndex; i++)
{
result.Columns.Add(origin.Columns[i].ColumnName);
}
result.Columns.Add("名称");
for (int i = 0; i < columnWidth; i++)
{
result.Columns.Add($"数据{i + 1}");
}
try
{
for (int i = 0; i < origin.Rows.Count; i++)
{
for (int j = columnIndex; j < origin.Columns.Count; j += columnWidth)
{
object[] objs = origin.Rows[i].ItemArray.Take(columnIndex).ToArray();
objs = objs.Union(new object[] { origin.Columns[j].ColumnName }).ToArray();
for (int k = 0; k < columnWidth; k++)
{
objs = objs.Union(new object[] { origin.Rows[i][j + k], }).ToArray();
}
result.Rows.Add(objs);
}
}
}
catch (Exception e)
{
}
return result;
}
/// <summary>
/// 获取当前WellBase已有的井号
/// </summary>
/// <returns>井号列表</returns>
private HashSet<string> GetAvailableWellName()
{
List<string> list = DBHelp.Db.Queryable<WellBase>().GroupBy(r => r.JH).Select(r => r.JH).ToList();
HashSet<string> set = new HashSet<string>();
foreach (string item in list)
{
set.Add(item);
}
return set;
}
/// <summary>
/// 获取当前WellDeflection已有的井号
/// </summary>
/// <returns>井号列表</returns>
private HashSet<string> GetAvailableWellDeflectionWellName()
{
List<string> list = DBHelp.Db.Queryable<WellDeflection>().GroupBy(r => r.JH).Select(r => r.JH).ToList();
HashSet<string> set = new HashSet<string>();
foreach (string item in list)
{
set.Add(item);
}
return set;
}
/// <summary>
/// 获取当前WellDeflection已有的井号
/// </summary>
/// <returns>井号列表</returns>
private HashSet<string> GetAvailableHoriWellFracturParmWellName()
{
List<string> list = DBHelp.Db.Queryable<HoriWellFracturParameter>().GroupBy(r => r.JH).Select(r => r.JH).ToList();
HashSet<string> set = new HashSet<string>();
foreach (string item in list)
{
set.Add(item);
}
return set;
}
/// <summary>
/// 设置属性值
/// </summary>
/// <param name="prop">prop</param>
/// <param name="obj">obj</param>
/// <param name="value">value</param>
private void SetPropertyData(PropertyInfo prop, object obj, string value)
{
if (!string.IsNullOrWhiteSpace(value))
{
Type type = prop.PropertyType;
if (Nullable.GetUnderlyingType(type) is Type underlyingType)
{
type = underlyingType;
}
if (type == typeof(string))
{
prop.SetValue(obj, value);
}
else if (type == typeof(double))
{
if (double.TryParse(value, out double parsed))
{
prop.SetValue(obj, parsed);
}
}
else if (type == typeof(float))
{
if (float.TryParse(value, out float parsed))
{
prop.SetValue(obj, parsed);
}
}
else if (type == typeof(int))
{
if (int.TryParse(value, out int parsed))
{
prop.SetValue(obj, parsed);
}
else if (double.TryParse(value, out double parsed2))
{
prop.SetValue(obj, (int)parsed2);
}
}
else if (type == typeof(long))
{
if (long.TryParse(value, out long parsed))
{
prop.SetValue(obj, parsed);
}
else if (double.TryParse(value, out double parsed2))
{
prop.SetValue(obj, (long)parsed2);
}
}
else if (type == typeof(DateTime))
{
if (DateTime.TryParse(value, out DateTime parsed))
{
prop.SetValue(obj, parsed);
}
}
}
}
private void SetInterpretProperty(IInterpretEntity entity, int i)
{
// entity.FILE_DATA = this.GetFileData(this.listFileNames[i]);
entity.CW = this.cfg.Storage.DataTableList.Rows[i]["层位"].ToString();
entity.FILE_NAME = this.cfg.Storage.DataTableList.Rows[i]["文件名"].ToString();
entity.CATEGARY = this.cfg.Storage.DataTableList.Rows[i]["类型"].ToString();
string outputfile = Config.ProjectPath + entity.PATH + "\\link\\" + entity.FILE_NAME;
this.PrepareFile(outputfile);
File.Copy(this.listFileNames[i], outputfile, true);
}
private InterpretLayer GetInterpretLayer(string cw)
{
List<InterpretLayer> list_layer = this.listInterpretLayer;
InterpretLayer obj_layer = list_layer.FirstOrDefault(o => o.CW.Equals(cw, StringComparison.OrdinalIgnoreCase));
if (obj_layer == null)
{
obj_layer = new InterpretLayer();
int id_cw = list_layer.Count > 0 ? list_layer.Max(o => o.ID) + 1 : 0;
obj_layer.ID = id_cw;
obj_layer.CW = cw;
obj_layer.GQID = WorkConfig.GetGQID();
DBHelp.Db.Storageable(obj_layer).ExecuteCommand();
list_layer.Add(obj_layer);
}
return obj_layer;
}
private byte[] GetFileData(string fileUrl)
{
int rowindex = this.cfg.BeginIndex;
string charset = this.GetFileEncoding(fileUrl);
using (FileStream stream = File.OpenRead(fileUrl))
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(charset)))
{
int i = 0;
while (i++ < rowindex && !reader.EndOfStream)
{
reader.ReadLine();
}
return Encoding.UTF8.GetBytes(reader.ReadToEnd());
}
}
/// <summary>
/// 输出dfd文件
/// </summary>
/// <param name="m">数据配置结果</param>
/// <param name="filename">输入文件</param>
/// <param name="outputfile">输出文件</param>
/// <param name="layerName">层名</param>
/// <param name="autoClose">自动关闭曲线</param>
/// <returns>Task</returns>
//internal async Task WriteDfdOutput(
// List<MatchFromItem> m,
// string filename,
// string outputfile,
// string layerName,
// bool autoClose)
//{
// const long kMinProgressSize = 100 * 1024 * 1024;
// long filesize = new FileInfo(filename).Length;
// using (FileStream stream = File.OpenRead(filename))
// {
// int xIndex = m.FirstOrDefault(r => r.Index == 0)?.Connections.FirstOrDefault()?.Index ?? 0;
// int yIndex = m.FirstOrDefault(r => r.Index == 1)?.Connections.FirstOrDefault()?.Index ?? 1;
// int nameIndex = m.FirstOrDefault(r => r.Index == 2)?.Connections.FirstOrDefault()?.Index ?? 2;
// int nSkip = this.cfg.BeginIndex;
// DelegateProgress progress = (current, total) =>
// {
// double percent = current * 100.0 / total;
// SplashHelper.SetDescription($"文件处理进度: {percent:F1}%");
// };
// await CreateCurveDfd(
// stream,
// outputfile,
// layerName,
// nSkip,
// autoClose,
// xIndex,
// yIndex,
// nameIndex,
// filesize > kMinProgressSize ? progress : null);
// }
//}
///// <summary>
///// 输出xyz文件
///// </summary>
///// <param name="filename">输入文件</param>
///// <param name="outputfile">输出文件</param>
///// <returns>Task</returns>
//private async Task<RangeData> WriteXYZOutputFromDfd(string filename, string outputfile)
//{
// RangeData data = new RangeData();
// DfdDocument input_doc = await DfdDocument.ParseAsync(filename);
// using (StreamWriter writer = new StreamWriter(outputfile))
// {
// foreach (DfdClass cls in input_doc.Classes)
// {
// foreach (DfdLayer ly in cls.Layers)
// {
// foreach (DfdElementPoint pt in ly.Elements.OfType<DfdElementPoint>())
// {
// data.UpdateX(pt.X);
// data.UpdateY(pt.Y);
// data.UpdateZ(pt.Z);
// writer.WriteLine(string.Join(",", new object[] { pt.X, pt.Y, pt.Z }));
// }
// }
// }
// writer.Flush();
// }
// return data;
//}
/// <summary>
/// 输出xyz文件
/// </summary>
/// <param name="m">数据配置结果</param>
/// <param name="filename">输入文件</param>
/// <param name="outputfile">输出文件</param>
/// <returns>Task</returns>
//private async Task<RangeData> WriteXYZOutput(List<MatchFromItem> m, string filename, string outputfile)
//{
// const long kMinProgressSize = 100 * 1024 * 1024;
// long filesize = new FileInfo(filename).Length;
// using (FileStream fileStream = File.OpenRead(filename))
// using (BufferedStream stream = new BufferedStream(fileStream, 81920))
// {
// int xIndex = m.FirstOrDefault(r => r.Index == 0)?.Connections.FirstOrDefault()?.Index ?? 0;
// int yIndex = m.FirstOrDefault(r => r.Index == 1)?.Connections.FirstOrDefault()?.Index ?? 1;
// int zIndex = m.FirstOrDefault(r => r.Index == 2)?.Connections.FirstOrDefault()?.Index ?? 2;
// int? mIndex = m.FirstOrDefault(r => r.Index == 3)?.Connections.FirstOrDefault()?.Index;
// int? nIndex = m.FirstOrDefault(r => r.Index == 4)?.Connections.FirstOrDefault()?.Index;
// int nSkip = this.cfg.BeginIndex;
// DelegateProgress progress = (current, total) =>
// {
// double percent = current * 100.0 / total;
// SplashHelper.SetDescription($"文件处理进度: {percent:F1}%");
// };
// return await CreateXYZData(stream, outputfile, nSkip, xIndex, yIndex, zIndex, mIndex, nIndex,
// filesize > kMinProgressSize ? progress : null);
// }
//}
/// <summary>
/// 转写dfd文件
/// </summary>
/// <param name="input">The input.</param>
/// <param name="outputfile">The outputfile.</param>
/// <param name="layerName">Name of the layer.</param>
/// <returns>task</returns>
public static async Task RewriteDfdOutput(string input, string outputfile, string layerName)
{
await Task.CompletedTask;
File.Copy(input, outputfile, true);
/*DfdDocument input_doc = await DfdDocument.ParseAsync(input);
DfdDocument doc = new DfdDocument();
DfdLayer layer = doc.FindOrCreateClass("Layer").FindOrCreateLayer(layerName);
foreach (DfdClass cls in input_doc.Classes)
{
foreach (DfdLayer ly in cls.Layers)
{
layer.Elements.AddRange(ly.Elements);
}
}
using (DfdStreamWriter writer = new DfdStreamWriter(outputfile))
{
await writer.WriteDocumentAsync(doc);
}*/
}
/// <summary>
/// 拷贝文件
/// </summary>
/// <param name="input">The input.</param>
/// <param name="output">The output.</param>
private void RewriteFile(string input, string output)
{
string dir = Path.GetDirectoryName(output);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
File.Copy(input, output, true);
}
#endregion
#region 辅助函数[检查/其他]
private string GetMatchValue(MatchData md, DataRow dr, string filename)
{
string value;
if (md?.MatchTag?.StartsWith("$") == true)
{
value = md.MatchTag.Replace("${FileName}", Path.GetFileNameWithoutExtension(filename));
}
else
{
value = dr[md.MatchColumn].ToString();
}
return value;
}
private bool IsTxtWithHeader(string filepath, string charset)
{
List<string> lines = File.ReadLines(filepath, Encoding.GetEncoding(charset)).Take(10).ToList();
foreach (string line in lines)
{
if (line.Contains(":"))
{
return true;
}
}
return false;
}
private bool checkIsDateTime(string filename, DataRow row, MatchData md)
{
if (md != null && !string.IsNullOrWhiteSpace(md.MatchColumn))
{
string value = this.GetMatchValue(md, row, filename);
if (!Validation.IsDateTime(value))
{
this.ShowMessageBox($"文件{filename}, 第{row.Index() + 1}行, {md.ChineseName}列, 格式不正确,非日期类型", "提示");
return false;
}
}
return true;
}
private bool checkIsNotEmpty(string filename, DataRow row, MatchData md)
{
if (md != null && !string.IsNullOrWhiteSpace(md.MatchColumn))
{
string value = this.GetMatchValue(md, row, filename);
if (!Validation.IsNotEmpty(value))
{
this.ShowMessageBox($"文件{filename}, 第{row.Index() + 1}行, {md.ChineseName}列, 不能为空!", "提示");
return false;
}
}
return true;
}
private bool checkIsLessThan(string filename, DataRow row, MatchData md, int length)
{
if (md != null && !string.IsNullOrWhiteSpace(md.MatchColumn))
{
string value = this.GetMatchValue(md, row, filename);
if (!Validation.IsLessThan(value, length))
{
this.ShowMessageBox($"文件{filename}, 第{row.Index() + 1}行, {md.ChineseName}列, 长度不得超过{length}个字符!", "提示");
return false;
}
}
return true;
}
private bool checkIsNumber(string filename, DataRow row, MatchData md)
{
if (md != null && !string.IsNullOrWhiteSpace(md.MatchColumn))
{
string value = this.GetMatchValue(md, row, filename);
if (!Validation.IsNumber(value))
{
this.ShowMessageBox($"文件{filename}, 第{row.Index() + 1}行, {md.ChineseName}列, 格式不正确,非数字类型!,值{value}", "提示");
return false;
}
}
return true;
}
private bool checkIsWellExist(DataRow row, HashSet<string> set, MatchData md, string filename)
{
if (md != null && !string.IsNullOrWhiteSpace(md.MatchColumn) && row.Table.Columns.Contains(filename))
{
string value = this.GetMatchValue(md, row, filename);
if (!set.Contains(value))
{
return false;
}
}
return true;
}
private DialogResult ShowMessageBox(string text, string title = "", MessageBoxButtons buttons = MessageBoxButtons.OK, MessageBoxIcon icon = MessageBoxIcon.Information)
{
return this.ui.ShowMessageBox(text, title, buttons, icon);
}
private string GetFileEncoding(string filename)
{
return EncodingType.GetType(filename)?.BodyName;
}
private bool IsXYZFile(string filename)
{
if (filename.EndsWith(".xyz", StringComparison.OrdinalIgnoreCase))
{
return true;
}
return false;
}
private bool IsDfdFile(string filename)
{
if (filename.EndsWith(".kev", StringComparison.OrdinalIgnoreCase))
{
return true;
}
if (filename.EndsWith(".dfd", StringComparison.OrdinalIgnoreCase))
{
return true;
}
return false;
}
/// <summary>
/// PrepareFile
/// </summary>
/// <param name="fullpath">f</param>
private void PrepareFile(string fullpath)
{
string dir = Path.GetDirectoryName(fullpath);
if (!Directory.Exists(dir))
{
Directory.CreateDirectory(dir);
}
if (File.Exists(fullpath))
{
File.Delete(fullpath);
}
}
#endregion
#region 兼容函数
private List<TableInfo> listColumnNames => this.cfg.ListColumnNames;
private List<string> listFileNames => this.cfg.ListFileNames;
private bool IsSkippingRow(int beginIndex, int i) => this.cfg.IsSkippingRow(beginIndex, i);
private string tableName => this.cfg.TableName;
private Type tableType => this.cfg.TableType;
private string dbType => this.cfg.DbType;
private bool AlwaysAppend => this.cfg.AlwaysAppend;
private bool UpdateAppend => this.cfg.UpdateAppend;
private List<InterpretLayer> listInterpretLayer => this.cfg.ListInterpretLayer;
private void RegenerateMatch() => this.ui.RegenerateMatch();
private Task<bool> ImportWellBase(DataTable dt) => this.ui.ImportWellBase(dt);
/// <summary>
/// Gets the index of the file name by.
/// </summary>
/// <param name="index">The index.</param>
/// <returns>System.String.</returns>
private string GetFileNameByIndex(int index)
{
if (index >= 0 && index < this.listFileNames.Count)
{
return this.listFileNames[index];
}
return "内存数据";
}
#endregion
}
/// <summary>
/// MatchCache.
/// </summary>
internal class MatchCache : Dictionary<string, MatchData>
{
/// <summary>
/// Initializes a new instance of the <see cref="MatchCache" /> class.
/// </summary>
/// <param name="matches">The matches.</param>
public MatchCache(List<MatchFromItem> matches)
{
this.Matches = matches;
foreach (MatchFromItem m in matches)
{
try
{
//用于处理多条关系
this.Add(m.Tag.ToString().ToUpper(),
new MatchData
{
EnglishName = m.Tag.ToString(),
ChineseName = m.Name,
MatchColumn = m.Connections.FirstOrDefault()?.Name,
MatchTag = m.Connections.FirstOrDefault()?.Tag?.ToString(),
MatchColumns = m.Connections.Select(x => x.Name).ToList(),
});
}
catch (Exception ex)
{
}
}
}
/// <summary>
/// Gets or sets the matches.
/// </summary>
/// <value>The matches.</value>
public List<MatchFromItem> Matches { get; private set; }
/// <summary>
/// Gets or sets the <see cref="MatchData" /> with the specified key.
/// </summary>
/// <param name="key">The key.</param>
/// <returns>MatchData.</returns>
public new MatchData this[string key]
{
get
{
var newKey = key.ToUpper();
MatchData result;
this.TryGetValue(newKey, out result);
return result;
}
set
{
var newKey = key.ToUpper();
base[newKey] = value;
}
}
/// <summary>
/// ContainsKey
/// </summary>
/// <param name="key">key</param>
/// <returns>bool</returns>
public new bool ContainsKey(string key)
{
var newKey = key.ToUpper();
return base.ContainsKey(newKey);
}
/// <summary>
/// Determines whether the specified key contains match.
/// </summary>
/// <param name="key">The key.</param>
/// <returns><c>true</c> if the specified key contains match; otherwise, <c>false</c>.</returns>
public bool ContainsMatch(string key)
{
return !string.IsNullOrWhiteSpace(key) && this.ContainsKey(key) && this[key].MatchColumn != null;
}
}
/// <summary>
/// Class MatchData.
/// </summary>
internal class MatchData
{
/// <summary>
/// Initializes a new instance of the <see cref="MatchData" /> class.
/// </summary>
public MatchData()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="MatchData" /> class.
/// </summary>
/// <param name="nameForAll">The name for all.</param>
public MatchData(string nameForAll)
{
this.EnglishName = this.ChineseName = this.MatchColumn = nameForAll;
}
/// <summary>
/// Gets or sets the name of the chinese.
/// </summary>
/// <value>The name of the chinese.</value>
public string ChineseName { get; set; }
/// <summary>
/// Gets or sets the name of the english.
/// </summary>
/// <value>The name of the english.</value>
public string EnglishName { get; set; }
/// <summary>
/// Gets or sets the match column.
/// </summary>
/// <value>The match column.</value>
public string MatchColumn { get; set; }
/// <summary>
/// Gets or sets the match Tag.
/// </summary>
public string MatchTag { get; set; }
/// <summary>
/// Gets or sets the match columns.
/// </summary>
public List<string> MatchColumns { get; set; } = new List<string>();
}
/// <summary>
/// PreviewCache.
/// </summary>
internal class PreviewCache : Dictionary<string, PreviewData>
{
}
/// <summary>
/// PreviewData.
/// </summary>
internal class PreviewData : List<PreviewLine>
{
}
/// <summary>
/// PreviewLine.
/// </summary>
internal class PreviewLine : List<string>
{
/// <summary>
/// Initializes a new instance of the <see cref="PreviewLine" /> class.
/// </summary>
public PreviewLine()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="PreviewLine" /> class.
/// </summary>
/// <param name="collection">The collection.</param>
public PreviewLine(IEnumerable<string> collection)
: base(collection)
{
}
}
}