DBScaner.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using MediII.Adapter.Scan.Interface;
  6. using System.Collections.Concurrent;
  7. using Microsoft.Practices.EnterpriseLibrary.Common;
  8. using Microsoft.Practices.EnterpriseLibrary.Data;
  9. using System.Data.Common;
  10. using System.Threading.Tasks;
  11. using System.Data;
  12. using MediII.Adapter.ReceiveToScanModel;
  13. using IL.Common;
  14. namespace MediII.Adapter.Scanner
  15. {
  16. public abstract class DBScaner : BaseScan
  17. {
  18. DatabaseProviderFactory factory = new DatabaseProviderFactory();
  19. //数据库连接
  20. protected Database ctx;
  21. public DBScaner()
  22. {
  23. ctx = factory.CreateDefault();
  24. }
  25. protected override void OnStart()
  26. {
  27. string typeName = this.GetType().Name.Trim();
  28. MediII.Common.LogHelper.LogInfo(string.Format("Scaner:{0} Started...", typeName), Common.LogCatagories.MQAccess);
  29. var entity = GetSaoMiao(typeName);
  30. if (entity == null)
  31. {
  32. LastTime = GetNow().AddDays(-1);
  33. }
  34. else
  35. {
  36. if (entity.IsDel == 1)
  37. {
  38. this.Stop();
  39. return;
  40. }
  41. MediII.Common.LogHelper.LogInfo(string.Format("Scaner:{0} Started...", typeName), Common.LogCatagories.MQAccess);
  42. int minus = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["AddMinues"]);
  43. if (AddMinusDay)
  44. LastTime = entity.ExecuteTime.AddDays(-1);
  45. else
  46. LastTime = entity.ExecuteTime;
  47. //设置扫描间隔
  48. var jianGe = entity.IntervalTime;
  49. if (jianGe != null)
  50. {
  51. this.Interval = (int)jianGe;
  52. MediII.Common.LogHelper.LogInfo(string.Format("Scaner:{0} jianGe:{1}", typeName, this.Interval), Common.LogCatagories.MQAccess);
  53. }
  54. }
  55. }
  56. private HL7_MessageSetEntity GetSaoMiao(string typeName)
  57. {
  58. var sql = string.Format("select * from HL7_MessageSet where MessageType=2 and MessageId = '{0}'", typeName);
  59. var entity = SqlDataAccess.ExecuteSqlStringAccessor<HL7_MessageSetEntity>(ctx, sql).FirstOrDefault();
  60. return entity;
  61. }
  62. protected override void OnStop()
  63. {
  64. SetNewExecTime(LastTime);
  65. }
  66. protected override void OnElapsed(DateTime elapsedTime)
  67. {
  68. SetNewExecTime(elapsedTime);
  69. }
  70. /// <summary>
  71. /// 最后执行时间
  72. /// </summary>
  73. /// <param name="elapsedTime"></param>
  74. private void SetNewExecTime(DateTime elapsedTime)
  75. {
  76. try
  77. {
  78. var typeName = this.GetType().Name.Trim();
  79. var sql = "update HL7_MessageSet set ExecuteTime = @ExecuteTime where MessageId=@MessageId";
  80. var dbCommand = SqlDataAccess.GetSqlStringCommand(ctx, sql);
  81. SqlDataAccess.AddInParameter(ctx, dbCommand, "ExecuteTime", System.Data.DbType.DateTime, elapsedTime);
  82. SqlDataAccess.AddInParameter(ctx, dbCommand, "MessageId", System.Data.DbType.AnsiString, typeName);
  83. SqlDataAccess.ExecuteNonQuery(ctx, dbCommand);
  84. }
  85. catch (Exception ex)
  86. {
  87. MediII.Common.LogHelper.LogError(ex, Common.LogCatagories.MQAccess);
  88. }
  89. }
  90. public override long GetMaxSCN()
  91. {
  92. return 0;
  93. }
  94. protected override DateTime GetNow()
  95. {
  96. try
  97. {
  98. return (DateTime)SqlDataAccess.ExecuteScalar(ctx, CommandType.Text, "select GETDATE()");
  99. }
  100. catch (Exception ex)
  101. {
  102. MediII.Common.LogHelper.LogError(ex, Common.LogCatagories.MQAccess);
  103. return DateTime.Now;
  104. }
  105. }
  106. }
  107. }