using FLY.OBJComponents.Server;
using FLY.OBJComponents.Server.Model;
using FLY.Thick.Blowing.IService;
using FObjBase;
using FObjBase.Reflect;
using SQLite;
using System;
using System.Collections.Generic;
namespace FLY.Thick.Blowing.Server.Model
{
///
/// 数据库 写操作
///
public class HistoryDb : IShareDbService
{
///
/// 本地数据库
///
public LocalDb localDb;
DbModel dbModel;
public BufferError ErrorBuffer;
#region IShareDbService
[Push(typeof(ProfileChangedEventArgs))]
public event EventHandler ProfileChanged;
[Push(typeof(ScanDataAddedEventArgs))]
public event EventHandler ScanDataAdded;
#endregion
///
///
///
///
///
///
public void Init(DbModel dBModel, LocalDb localDb)
{
this.dbModel = dBModel;
this.localDb = localDb;
ErrorBuffer = new BufferError();
ErrorBuffer.Init(dBModel.TbError);
}
///
/// 按时间删除数据库
///
///
public void KeepDbSize(int month)
{
if (month <= 3)
month = 3;
DateTime del_time = DateTime.Now - TimeSpan.FromDays(month * 30);
string det_time_str = del_time.ToStringOfSQLiteFieldType();
List sqls = new List();
sqls.Add(
$"DELETE FROM {dbModel.TbProfile.TableName}" +
$" WHERE {nameof(Db_Profile.EndTime)} < {det_time_str}");
sqls.Add(
$"DELETE FROM {dbModel.TbScanData.TableName}" +
$" WHERE {nameof(Db_ScanData.Time)} < {det_time_str}");
sqls.Add(
$"DELETE FROM {dbModel.TbError.TableName}" +
$" WHERE {nameof(DB_Error.Time)} < {det_time_str}");
sqls.Add(
$"DELETE FROM {dbModel.TbTrendData.TableName}" +
$" WHERE {nameof(DB_Error.Time)} < {det_time_str}");
sqls.Add(
$"DELETE FROM {dbModel.TbSample.TableName}" +
$" WHERE {nameof(DB_Error.Time)} < {det_time_str}");
dbModel.sqliteHelper.QueryTran(sqls);
}
///
/// 保存产品参数
///
public void AddProfile(
Db_Profile profile
)
{
//把上一次结束掉
if ((localDb.CurrProfile != null) && localDb.IsProfileFinished == false)
{
FinishProfile();
}
//添加 数据库必要的 field
localDb.ProfileStartTime = DateTime.Now;
localDb.ProfileEndTime = DateTime.Now;
localDb.IsProfileFinished = false;
profile.ID = dbModel.TbProfile.FreeID;
profile.StartTime = localDb.ProfileStartTime;
profile.EndTime = localDb.ProfileEndTime;
//SQL
List sqls = new List();
sqls.Add(SQLiteHelper.GetInsertCommandText(profile));
dbModel.sqliteHelper.QueryTranAsync(sqls);
//本地数据备份
localDb.CurrProfile = profile;
#region IDBShareService
ProfileChanged?.Invoke(this, new ProfileChangedEventArgs()
{
isInsert = true,
profile = profile
});
#endregion
}
///
/// 修改产品参数
///
///
public void UpdateProfile(
Db_Profile profile
)
{
//添加 数据库必要的 field
profile.ID = localDb.CurrProfile.ID;
profile.StartTime = localDb.ProfileStartTime;
profile.EndTime = localDb.ProfileEndTime;
//SQL
List sqls = new List();
sqls.Add(SQLiteHelper.GetUpdateCommandText(profile, $"WHERE {nameof(Db_Profile.ID)} = {profile.ID}"));
dbModel.sqliteHelper.QueryTranAsync(sqls);
//本地数据备份
localDb.CurrProfile = profile;
#region IDBShareService
ProfileChanged?.Invoke(this, new ProfileChangedEventArgs()
{
isInsert = false,
profile = profile
});
#endregion
}
///
/// 下辊,结束当前产品生产
///
public void FinishProfile()
{
if (localDb.CurrProfile == null)
return;
//SQL
dbModel.sqliteHelper.ExecuteNonQuery(
$"UPDATE {dbModel.TbProfile.TableName} SET IsFinished = {true} WHERE ID = {localDb.CurrProfile.ID}");
localDb.IsProfileFinished = true;
localDb.CurrProfile.IsFinished = true;
#region IDBShareService
ProfileChanged?.Invoke(this, new ProfileChangedEventArgs()
{
isInsert = false,
profile = localDb.CurrProfile
});
#endregion
}
///
/// 不需设置 DB_ScanData 内 ProfileID, 自动设置!
///
public void AddScanData(
Lc_ScanData scanData)
{
bool updateEnd = false;
//添加 数据库必要的 field
scanData.ID = dbModel.TbScanData.FreeID;
if (localDb.ProfileEndTime < scanData.Time)
{
localDb.ProfileEndTime = scanData.Time;
updateEnd = true;
}
//SQLs
List sqls = new List();
var db_scandata = Lc_AutoMapperProfile.Mapper.Map(scanData);
sqls.Add(SQLiteHelper.GetInsertCommandText(db_scandata));
if (updateEnd)
{
sqls.Add(
$"UPDATE {dbModel.TbProfile.TableName}" +
$" SET {nameof(Db_Profile.EndTime)}={localDb.ProfileEndTime.ToStringOfSQLiteFieldType()}" +
$" WHERE {nameof(Db_Profile.ID)}={localDb.CurrProfile.ID}");
}
dbModel.sqliteHelper.QueryTranAsync(sqls);
//本地数据备份
localDb.CurrProfile.EndTime = localDb.ProfileEndTime;
#region IDBShareService
ScanDataAdded?.Invoke(this, new ScanDataAddedEventArgs()
{
scandata = scanData
});
if (updateEnd)
{
ProfileChanged?.Invoke(this, new ProfileChangedEventArgs()
{
isInsert = false,
profile = localDb.CurrProfile
});
}
#endregion
}
///
/// 不需设置 DB_TrendData 内 ProfileID, 自动设置!
///
public void AddTrendData(
Lc_TrendData trendData)
{
bool updateEnd = false;
//添加 数据库必要的 field
trendData.ID = dbModel.TbTrendData.FreeID;
if (localDb.ProfileEndTime < trendData.Time)
{
localDb.ProfileEndTime = trendData.Time;
updateEnd = true;
}
//SQLs
List sqls = new List();
var db_trenddata = Lc_AutoMapperProfile.Mapper.Map(trendData);
sqls.Add(SQLiteHelper.GetInsertCommandText(db_trenddata));
if (updateEnd)
{
string s_endtime = localDb.ProfileEndTime.ToStringOfSQLiteFieldType();
sqls.Add($"UPDATE {dbModel.TbProfile.TableName} SET EndTime={s_endtime} WHERE ID = {localDb.CurrProfile.ID}");
}
dbModel.sqliteHelper.QueryTranAsync(sqls);
//本地数据备份
localDb.CurrProfile.EndTime = localDb.ProfileEndTime;
#region IDBShareService
if (updateEnd)
{
ProfileChanged?.Invoke(this, new ProfileChangedEventArgs()
{
isInsert = false,
profile = localDb.CurrProfile
});
}
#endregion
}
///
/// 不需设置 DB_TrendData 内 ProfileID, 自动设置!
///
public void AddSampleData(
Lc_Sample sampleData)
{
bool updateEnd = false;
//添加 数据库必要的 field
sampleData.ID = dbModel.TbSample.FreeID;
if (localDb.ProfileEndTime < sampleData.Time)
{
localDb.ProfileEndTime = sampleData.Time;
updateEnd = true;
}
//SQLs
List sqls = new List();
var db_sampledata = Lc_AutoMapperProfile.Mapper.Map(sampleData);
sqls.Add(SQLiteHelper.GetInsertCommandText(db_sampledata));
if (updateEnd)
{
string s_endtime = localDb.ProfileEndTime.ToStringOfSQLiteFieldType();
sqls.Add($"UPDATE {dbModel.TbProfile.TableName} SET EndTime={s_endtime} WHERE ID = {localDb.CurrProfile.ID}");
}
dbModel.sqliteHelper.QueryTranAsync(sqls);
//本地数据备份
localDb.CurrProfile.EndTime = localDb.ProfileEndTime;
#region IDBShareService
if (updateEnd)
{
ProfileChanged?.Invoke(this, new ProfileChangedEventArgs()
{
isInsert = false,
profile = localDb.CurrProfile
});
}
#endregion
}
///
///
///
///
public void AddErrorData(
DB_Error db_errorData
)
{
//添加 数据库必要的 field
db_errorData.ID = dbModel.TbError.FreeID;
//SQLs
List sqls = new List();
sqls.Add(SQLiteHelper.GetInsertCommandText(db_errorData));
dbModel.sqliteHelper.QueryTranAsync(sqls);
}
#region IDBShareService
///
///
///
///
///
public void GetProfile(AsyncCBHandler asyncDelegate, object asyncContext)
{
if (localDb.CurrProfile != null)
{
asyncDelegate.Invoke(asyncContext, localDb.CurrProfile);
}
else
{
asyncDelegate.Invoke(asyncContext, null);
}
}
#endregion
}
}