using FLY.OBJComponents.Server; using FLY.OBJComponents.Server.Model; using FLY.Thick.Blowing.IService; using FLY.Thick.Blowing.IService.IShareDBServicePack; using FLY.Thick.Blowing.Server.Model; using FObjBase; using SQLite; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FLY.Thick.BlowingScan.Server.Model { /// /// 对数据库写入操作 /// public class HistoryDb : IShareDbService { DbModel dbModel; OrgDbModel orgDbModel; public LocalDb localDb; public BufferError ErrorBuffer; #region IDBShareService /// /// 产品改变事件 /// public event ProfileChangedEventHandler ProfileChanged; /// /// 扫描图改变事件 /// public event ScanDataChangedEventHandler ScanDataChanged; #endregion /// /// /// /// 数据库对象 /// 原始数据.数据库对象 /// 数据库的本地版 public void Init(DbModel dbModel, OrgDbModel orgDbModel, LocalDb localDb) { this.dbModel = dbModel; this.orgDbModel = orgDbModel; 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 EndTime < {det_time_str}"); sqls.Add( $"DELETE FROM {dbModel.TbScanData.TableName}" + $" WHERE Time < {det_time_str}"); sqls.Add( $"DELETE FROM {dbModel.TbError.TableName}" + $" WHERE Time < {det_time_str}"); sqls.Add( $"DELETE FROM {dbModel.TbTrendData.TableName}" + $" WHERE Time < {det_time_str}"); sqls.Add( $"DELETE FROM {dbModel.TbSample.TableName}" + $" WHERE Time < {det_time_str}"); dbModel.sqliteHelper.QueryTran(sqls); } /// /// 按时间删除数据库 /// public void KeepOrgDbSize(int day) { if (day <= 2) day = 2; DateTime del_time = DateTime.Now - TimeSpan.FromDays(day); string det_time_str = del_time.ToStringOfSQLiteFieldType(); List sqls = new List(); sqls.Add( $"DELETE FROM {orgDbModel.TbSign.TableName}" + $" WHERE Time < {det_time_str}"); sqls.Add( $"DELETE FROM {orgDbModel.TbRoll.TableName}" + $" WHERE Time < {det_time_str}"); sqls.Add( $"DELETE FROM {orgDbModel.TbOrgScanData.TableName}" + $" WHERE Time < {det_time_str}"); orgDbModel.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 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) { 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 ScanDataChanged?.Invoke(this, new ScanDataChangedEventArgs() { isInsert = true, 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 } /// /// 需要通过 ID才能更新 /// public void UpdateScanData( Lc_ScanData scanData) { //添加 数据库必要的 field //SQLs List sqls = new List(); var db_scandata = Lc_AutoMapperProfile.Mapper.Map(scanData); sqls.Add(SQLiteHelper.GetUpdateCommandText(db_scandata, $"WHERE ID = {scanData.ID}")); dbModel.sqliteHelper.QueryTranAsync(sqls); #region IDBShareService ScanDataChanged?.Invoke(this, new ScanDataChangedEventArgs() { isInsert = false, scandata = scanData }); #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 原始数据 /// /// 记录 原始数据.转向信号 /// /// public void AddSignData( Lc_Sign lc_Sign ) { lc_Sign.ID = orgDbModel.TbSign.FreeID; //SQLs List sqls = new List(); var db_Sign = FLY.Thick.Blowing.Server.Model.OrgLc_AutoMapperProfile.Mapper.Map(lc_Sign); sqls.Add(SQLiteHelper.GetInsertCommandText(db_Sign)); orgDbModel.sqliteHelper.QueryTranAsync(sqls); } /// /// 记录 原始数据.辊信号 /// /// public void AddRollData( Lc_Roll lc_Roll ) { lc_Roll.ID = orgDbModel.TbRoll.FreeID; //SQLs List sqls = new List(); var db_Roll = FLY.Thick.Blowing.Server.Model.OrgLc_AutoMapperProfile.Mapper.Map(lc_Roll); sqls.Add(SQLiteHelper.GetInsertCommandText(db_Roll)); orgDbModel.sqliteHelper.QueryTranAsync(sqls); } /// /// 记录 原始数据.扫描数据 /// /// public void AddOrgScanDatas( List lc_OrgScanDatas ) { //SQLs List sqls = new List(); foreach (var lc_OrgScanData in lc_OrgScanDatas) { lc_OrgScanData.ID = orgDbModel.TbOrgScanData.FreeID; var db_OrgScanData = OrgLc_AutoMapperProfile.Mapper.Map(lc_OrgScanData); sqls.Add(SQLiteHelper.GetInsertCommandText(db_OrgScanData)); } orgDbModel.sqliteHelper.QueryTranAsync(sqls); } /// /// 记录 原始数据.样品 /// /// public void AddSampleData( Lc_Sample lc_Sample ) { lc_Sample.ID = dbModel.TbSample.FreeID; //SQLs List sqls = new List(); var db_Sample = Lc_AutoMapperProfile.Mapper.Map(lc_Sample); sqls.Add(SQLiteHelper.GetInsertCommandText(db_Sample)); dbModel.sqliteHelper.QueryTranAsync(sqls); } #endregion #region IDBShareService public void GetProfile(AsyncCBHandler asyncDelegate, object asyncContext) { if (localDb.CurrProfile != null) { asyncDelegate.Invoke(asyncContext, localDb.CurrProfile); } else { asyncDelegate.Invoke(asyncContext, null); } } #endregion } }