using DBHelper; using Microsoft.EntityFrameworkCore; using System; using System.ComponentModel; using WCS.Core; using WCS.Entity; namespace WCS.Service { [Description("数据清理")] internal class DataClearHandler : LogicHandler { public override void Start() { } private DateTime last = DateTime.MinValue; public override void Update(double milliseconds) { if ((DateTime.Now - last).TotalMilliseconds < 1000 * 60 * 60 * 24) return; last = DateTime.Now; DB.Do(db => { db.Default.Database.ExecuteSqlRaw("delete WCS_EXCEPTION where datediff(dd,UPDATETIME,getdate())>2"); db.Default.Database.ExecuteSqlRaw("delete WCS_StatusLog where datediff(dd,UPDATETIME,getdate())>365"); var ps = db.Default.GetType().GetProperties(); foreach (var p in ps) { if (!p.PropertyType.IsGenericType) continue; var tType = p.PropertyType.GenericTypeArguments[0]; if (!tType.IsSubclassOf(typeof(WCS_PROTOCOLDATA))) continue; var sSql = $"Delete {tType.Name} where datediff(dd,Frame,getdate())>2"; db.Default.Database.ExecuteSqlRaw(sSql); DBHelper.DbLog.DB_CLEAN(sSql); } var copySql = @"INSERT INTO WCS_TASK_OLD (ID,BARCODE,TYPE,STATUS,ADDRFROM,ADDRTO,ADDRNEXT,TUNNEL,FLOOR, DEVICE,SRMSTATION,CREATETIME,STARTTIME,ENDTIME,DOCID,PALLETTYPE,PRODLINE,FULLQTY,HEIGHT, WMSTASK,TaskGroupKey,UPLOADED,AgvTask,Priority,ManualRemarks,ENABLED,UPDATEUSER,UPDATETIME, Length,MaterialCode) SELECT ID,BARCODE,TYPE,STATUS,ADDRFROM,ADDRTO,ADDRNEXT,TUNNEL,FLOOR,DEVICE,SRMSTATION,CREATETIME, STARTTIME,ENDTIME,DOCID,PALLETTYPE,PRODLINE,FULLQTY,HEIGHT,WMSTASK,TaskGroupKey,UPLOADED,AgvTask, Priority,ManualRemarks,ENABLED,UPDATEUSER,UPDATETIME,Length,MaterialCode FROM WCS_TASK WHERE STATUS >=99 AND UPDATETIME < DATEADD(HOUR, -1, GETDATE())"; db.Default.Database.ExecuteSqlRaw(copySql); var clearSql = "DELETE FROM WCS_TASK WHERE STATUS >=99 AND UPDATETIME < DATEADD(HOUR, -1, GETDATE())"; db.Default.Database.ExecuteSqlRaw(clearSql); }); } } }