DataClearHandler.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using DBHelper_SqlSugar;
  2. using System;
  3. using System.ComponentModel;
  4. using WCS.Core;
  5. using WCS.Entity;
  6. namespace WCS.Service
  7. {
  8. [Description("数据清理")]
  9. internal class DataClearHandler : LogicHandler
  10. {
  11. public override void Start()
  12. {
  13. }
  14. private DateTime last = DateTime.MinValue;
  15. public override void Update(double milliseconds)
  16. {
  17. if ((DateTime.Now - last).TotalMilliseconds < 1000 * 60 * 60 * 24)
  18. return;
  19. last = DateTime.Now;
  20. Db.Do(db =>
  21. {
  22. db.Default.Ado.UseStoredProcedure().ExecuteCommand("delete WCS_EXCEPTION where datediff(dd, UPDATETIME, getdate()) > 7");
  23. var ps = db.Default.GetType().GetProperties();
  24. foreach (var p in ps)
  25. {
  26. if (!p.PropertyType.IsGenericType)
  27. continue;
  28. var tType = p.PropertyType.GenericTypeArguments[0];
  29. if (!tType.IsSubclassOf(typeof(WCS_PROTOCOLDATA)))
  30. continue;
  31. var sSql = $"Delete {tType.Name} where datediff(dd,Frame,getdate())>7";
  32. db.Default.Ado.UseStoredProcedure().ExecuteCommand(sSql);
  33. DBHelper.DbLog.DB_CLEAN(sSql);
  34. }
  35. var copySql = @"INSERT INTO WCS_TASK_OLD (ID,BARCODE,TYPE,STATUS,ADDRFROM,ADDRTO,ADDRNEXT,TUNNEL,FLOOR,
  36. DEVICE,SRMSTATION,CREATETIME,STARTTIME,ENDTIME,DOCID,PALLETTYPE,PRODLINE,FULLQTY,HEIGHT,
  37. WMSTASK,TaskGroupKey,UPLOADED,AgvTask,Priority,ManualRemarks,ENABLED,UPDATEUSER,UPDATETIME,
  38. Length,MaterialCode) SELECT
  39. ID,BARCODE,TYPE,STATUS,ADDRFROM,ADDRTO,ADDRNEXT,TUNNEL,FLOOR,DEVICE,SRMSTATION,CREATETIME,
  40. STARTTIME,ENDTIME,DOCID,PALLETTYPE,PRODLINE,FULLQTY,HEIGHT,WMSTASK,TaskGroupKey,UPLOADED,AgvTask,
  41. Priority,ManualRemarks,ENABLED,UPDATEUSER,UPDATETIME,Length,MaterialCode FROM WCS_TASK WHERE STATUS >=99 AND UPDATETIME < DATEADD(DAY, -3, GETDATE())";
  42. db.Default.Ado.UseStoredProcedure().ExecuteCommand(copySql);
  43. var clearSql = "DELETE FROM WCS_TASK WHERE STATUS >=99 AND UPDATETIME < DATEADD(DAY, -3, GETDATE())";
  44. db.Default.Ado.UseStoredProcedure().ExecuteCommand(clearSql);
  45. });
  46. }
  47. }
  48. }