DefaultDBScanner.cs 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. using MediII.Adapter.ReceiveToScanModel;
  2. using MediII.Adapter.Scanner;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using Microsoft.Practices.EnterpriseLibrary.Data;
  8. using MediII.Adapter.BizComponent.Base;
  9. using System.Data;
  10. using System.Diagnostics;
  11. using IL.Common;
  12. namespace MediII.Adapter.BizComponent.UE
  13. {
  14. public abstract class DefaultDBScanner : DBScaner
  15. {
  16. private int SearchNum
  17. {
  18. get
  19. {
  20. var searchNum = System.Configuration.ConfigurationManager.AppSettings["SearchNum"];
  21. int num = 0;
  22. if (!int.TryParse(searchNum, out num))
  23. {
  24. num = 10;
  25. }
  26. return num;
  27. }
  28. }
  29. private DateTime SetTime
  30. {
  31. get
  32. {
  33. var SetTime = System.Configuration.ConfigurationManager.AppSettings["SetTime"];
  34. DateTime now = DateTime.Now;
  35. SetTime = string.Format("{0}{1}", now.ToString("yyyy-MM"), SetTime);
  36. return DateTime.Parse(SetTime);
  37. }
  38. }
  39. //private int EndTimeType
  40. //{
  41. // get
  42. // {
  43. // var etimeType = System.Configuration.ConfigurationManager.AppSettings["EndTimeType"];
  44. // int num = 0;
  45. // if (!int.TryParse(etimeType, out num))
  46. // {
  47. // num = 1;
  48. // }
  49. // return num;
  50. // }
  51. //}
  52. protected override long OnDo(DateTime dtEventTime, Action<LogModel> setLog)
  53. {
  54. Stopwatch stopwatch = new Stopwatch();
  55. var type = GetMessageType();
  56. stopwatch.Start();
  57. try
  58. {
  59. if (setLog != null)
  60. setLog(new LogModel { Message = "开始一次消息处理扫描 消息类型:" + type });
  61. //扫描时间
  62. if (DateTime.Now > SetTime)
  63. {
  64. //判断是否需要生成任务
  65. if (GetTaskFlag(SetTime,type) <= 0)
  66. {
  67. DateTime lastDay = new DateTime(DateTime.Now.AddMonths(-1).Year, DateTime.Now.AddMonths(-1).Month, 1).AddMonths(1).AddSeconds(-1);
  68. //按月初1号为结尾
  69. //if (EndTimeType == 2) {
  70. // lastDay = DateTime.Parse(string.Format("{0}-01 00:00:00", DateTime.Now.ToString("yyyy-MM")));
  71. //}
  72. //生成任务
  73. SetTask(string.Format("{0}-01 00:00:00", DateTime.Now.AddMonths(-1).ToString("yyyy-MM")), lastDay.ToString("yyyy-MM-dd HH:mm:ss"),
  74. SetTime.ToString("yyyy-MM-dd HH:mm:ss"), type);
  75. }
  76. }
  77. //使用任务
  78. RunExec(type, setLog);
  79. }
  80. finally
  81. {
  82. stopwatch.Stop();
  83. //LogHelper.LogError(string.Format("{0}耗时{1}-->{2}", type, stopwatch.Elapsed, stopwatch.ElapsedTicks), LogCatagories.AdapterScan);
  84. }
  85. return 1;
  86. }
  87. private void RunExec(string type, Action<LogModel> setLog)
  88. {
  89. var num = SearchNum;
  90. var orderSeq = string.Empty;
  91. //if (type == "MFN")
  92. //{
  93. // orderSeq = " Sequeue ASC,";
  94. //}
  95. var sql = @"select No, `TaskID`, `VisitNo`, `TaskType`, `TypeName`, `TaskStatus`, `Parameter1`, `Parameter2`, `Parameter3`, `ErrMsg`, `ErrNm`, `TaskTime`, `Reserve1`, `Reserve2`, `Reserve3`, `UpdateTime` ,SystemTime
  96. from TaskMessage
  97. where TaskStatus=1 and TaskTime='{0}' and TaskType='{1}' limit {2}";
  98. sql = string.Format(sql,SetTime.ToString("yyyy-MM-dd HH:mm:ss"), type, num);
  99. try
  100. {
  101. var listRow = MySqlDataAccess.ExecuteSqlStringAccessor<TaskMessage>(ctx, sql).Take(num).ToList();
  102. if (listRow.Count() > 0)
  103. {
  104. Process(listRow, setLog);
  105. }
  106. }
  107. catch (Exception ex)
  108. {
  109. LogHelper.LogError(ex, LogCatagories.AdapterScan);
  110. throw ex;
  111. }
  112. }
  113. private void Process(IEnumerable<TaskMessage> listRow, Action<LogModel> setLog)
  114. {
  115. listRow.ToList().ForEach(o =>
  116. {
  117. //验证
  118. var model = GetListRow(o.No.ToString());
  119. if (null != model)
  120. {
  121. try
  122. {
  123. if (setLog != null)
  124. setLog(new LogModel { Message = o.TaskType, MessageID = o.TaskID });
  125. SetStartBiz(o.No.ToString());
  126. string mesStruct = "ADT";
  127. var behavior = BizComponentFactory.GetBizComponent(mesStruct);
  128. var errMsg = behavior.Process(o,o.TaskType);
  129. SetEndBiz(o.No.ToString(), errMsg);
  130. }
  131. catch (Exception ex)
  132. {
  133. if (setLog != null)
  134. setLog(new LogModel { Message = o.TaskType, MessageID = o.No.ToString(), ErrorMsg = "消息处理错误 :" + ex.Message });
  135. SetEndBiz(o.No.ToString(), ex.Message);
  136. }
  137. }
  138. });
  139. }
  140. /// <summary>
  141. /// 获取消息类型
  142. /// </summary>
  143. /// <returns></returns>
  144. protected abstract string GetMessageType();
  145. /// <summary>
  146. /// 获取当前记录
  147. /// </summary>
  148. /// <param name="id">id</param>
  149. /// <returns></returns>
  150. protected TaskMessage GetListRow(string id)
  151. {
  152. var sql = "SELECT * FROM TaskMessage WHERE TaskStatus='1' and No='" + id + "'";
  153. var model = MySqlDataAccess.ExecuteSqlStringAccessor<TaskMessage>(ctx, sql).Take(1).FirstOrDefault();
  154. return model;
  155. }
  156. protected int GetTaskFlag(DateTime TaskTime,string TaskType)
  157. {
  158. var sql = string.Format(@"select count(1)
  159. from TaskMessage
  160. where TaskTime='{0}' and TaskType='{1}' ", TaskTime.ToString("yyyy-MM-dd HH:mm:ss"),TaskType);
  161. var cmd =ctx.DBGetSqlStringCommand(sql);
  162. var listRow = MySqlDataAccess.DBExecuteDataSet(ctx, cmd);
  163. var ret=listRow.Tables[0].Rows[0][0].ToString();
  164. return string.IsNullOrWhiteSpace(ret)?0:int.Parse(ret);
  165. }
  166. //开始时间
  167. protected int SetStartBiz(string id)
  168. {
  169. var sql = "UPDATE TaskMessage SET UpdateTime=SYSDATE() , TaskStatus='2' WHERE No=@ID";
  170. var cmd = MySqlDataAccess.GetSqlStringCommand(ctx, sql);
  171. MySqlDataAccess.AddInParameter(ctx, cmd, "ID", DbType.String, id);
  172. return MySqlDataAccess.ExecuteNonQuery(ctx, cmd);
  173. }
  174. //结束时间
  175. protected int SetEndBiz(string id, string errMsg)
  176. {
  177. var sql = "UPDATE TaskMessage SET TaskStatus=@TaskStatus,Reserve1=@TaskMsg WHERE No=@ID";
  178. var cmd = MySqlDataAccess.GetSqlStringCommand(ctx, sql);
  179. MySqlDataAccess.AddInParameter(ctx, cmd, "ID", DbType.String, id);
  180. if (!string.IsNullOrEmpty(errMsg))
  181. {
  182. MySqlDataAccess.AddInParameter(ctx, cmd, "TaskMsg", DbType.String, errMsg);
  183. MySqlDataAccess.AddInParameter(ctx, cmd, "TaskStatus", DbType.Int32, 3);
  184. }
  185. else
  186. {
  187. MySqlDataAccess.AddInParameter(ctx, cmd, "TaskMsg", DbType.String, DBNull.Value);
  188. MySqlDataAccess.AddInParameter(ctx, cmd, "TaskStatus", DbType.Int32, 4);
  189. }
  190. return MySqlDataAccess.ExecuteNonQuery(ctx, cmd);
  191. }
  192. protected int SetTask(string beginTime,string endTime,string taskTime,string TaskType)
  193. {
  194. var sql = string.Format(@"INSERT INTO TaskMessage( TaskID, VisitNo, TaskType, TypeName, TaskStatus, Parameter1, Parameter2, Parameter3, ErrMsg, ErrNm, TaskTime, Reserve1, Reserve2, Reserve3, UpdateTime)
  195. select MD5(UUID()),'',TaskCode,TaskName,1,'{0}','{1}','1',null,0,'{2}', NULL, NULL, TaskNum,NULL
  196. from TaskConfig
  197. where TaskType=2 and DelFlag=0 and TaskCode='{3}'", beginTime, endTime, taskTime,TaskType);
  198. var cmd = MySqlDataAccess.GetSqlStringCommand(ctx, sql);
  199. //MySqlDataAccess.AddInParameter(ctx, cmd, "TaskStatus", DbType.Int32, 3);
  200. return MySqlDataAccess.ExecuteNonQuery(ctx, cmd);
  201. }
  202. public void DebugMsg(IEnumerable<HL7_ReceiveEntity> list)
  203. {
  204. //Process(list, null);
  205. }
  206. }
  207. }