Global.asax 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <%@ Application Language="C#" %>
  2. <%@ Import Namespace="System.Data" %>
  3. <%@ Import Namespace="Curtain.DataAccess" %>
  4. <%@ Import Namespace="Curtain.Log" %>
  5. <%@ Import Namespace="DK.XuWei.WebMes" %>
  6. <%@ Import Namespace="Newtonsoft.Json.Linq" %>
  7. <script runat="server">
  8. void Application_Start(object sender, EventArgs e)
  9. {
  10. // 在应用程序启动时运行的代码
  11. string connStr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  12. DataAccess.DefaultParameterType = SQLParameterType.CDA;
  13. DataAccess.DefaultDataBaseType = Curtain.DataAccess.DataBaseType.Oracle;
  14. DataAccess.DefaultConnectionString = connStr;
  15. tr_Load();
  16. }
  17. void Application_End(object sender, EventArgs e)
  18. {
  19. // 在应用程序关闭时运行的代码
  20. }
  21. void Application_Error(object sender, EventArgs e)
  22. {
  23. // 在出现未处理的错误时运行的代码
  24. }
  25. void Session_Start(object sender, EventArgs e)
  26. {
  27. // 在新会话启动时运行的代码
  28. }
  29. void Session_End(object sender, EventArgs e)
  30. {
  31. // 在会话结束时运行的代码。
  32. // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
  33. // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
  34. // 或 SQLServer,则不引发该事件。
  35. }
  36. //定时器任务 自动结转数据===============================
  37. void tr_Load()
  38. {
  39. //取刷新时间
  40. int refreshTime = 60000;
  41. //设置timer
  42. System.Timers.Timer tr = new System.Timers.Timer(refreshTime);
  43. tr.Elapsed += new System.Timers.ElapsedEventHandler(tr_Elapsed);
  44. tr.Enabled = true;
  45. tr.AutoReset = true;
  46. }
  47. void tr_Elapsed(object sender, EventArgs e)
  48. {
  49. using (IDataAccess conn = DataAccess.Create())
  50. {
  51. string guid = Guid.NewGuid().ToString().Replace("-", "").ToUpper();
  52. try
  53. {
  54. #region 读取可结转的表
  55. DataTable dt = conn.ExecuteDatatable(@"
  56. SELECT
  57. S.*
  58. FROM
  59. JZ_SETTING S
  60. LEFT JOIN JZ_LOG L ON L.RPTGUID = S.GUID
  61. AND EXTRACT( YEAR FROM L.EXECUTEDATE ) = EXTRACT( YEAR FROM SYSDATE )
  62. AND EXTRACT( MONTH FROM L.EXECUTEDATE ) = EXTRACT( MONTH FROM SYSDATE )
  63. WHERE
  64. --结转时间在开始和截止范围内
  65. S.BEGINDATE <= SYSDATE AND S.ENDDATE >= SYSDATE
  66. --结转时间在当天的
  67. AND EXTRACT( DAY FROM S.EXECUTEDATE ) = EXTRACT( DAY FROM SYSDATE )
  68. --结转日志中没结转的,或最后一次结转没成功的
  69. AND ( L.EXECUTEDATE IS NULL OR (L.EXECUTESTATE = 0 AND L.EXECUTEDATE = (SELECT MAX(ML.EXECUTEDATE) FROM JZ_LOG ML WHERE ML.RPTGUID = S.GUID) ) )
  70. --没有正在结转的进程
  71. AND ( L.EXECUTEDATE IS NULL OR L.EXECUTESTATE <> -1)
  72. ");
  73. Logger.Debug("轮询结转配置表!");
  74. #endregion
  75. if (dt.Rows.Count > 0)
  76. {
  77. #region 开始结转
  78. string message = "开始结转:" + DateTime.Now.ToString();
  79. conn.ExecuteNonQuery(@"
  80. INSERT INTO JZ_LOG (
  81. GUID,
  82. RPTGUID,
  83. RPTDATE,
  84. EXECUTESTATE,
  85. EXECUTEMESSAGE,
  86. EXECUTEDATE
  87. ) VALUES (
  88. @GUID@,
  89. @RPTGUID@,
  90. @RPTDATE@,
  91. @EXECUTESTATE@,
  92. @EXECUTEMESSAGE@,
  93. @EXECUTEDATE@
  94. )
  95. ",
  96. new CDAParameter("GUID",guid),
  97. new CDAParameter("RPTGUID", dt.Rows[0]["GUID"]),
  98. new CDAParameter("RPTDATE", DateTime.Now.ToString("yyyyMM")),
  99. new CDAParameter("EXECUTESTATE", -1),
  100. new CDAParameter("EXECUTEMESSAGE", ""),
  101. new CDAParameter("EXECUTEDATE", DateTime.Now.ToString(), Curtain.DataAccess.DataType.DateTime)
  102. );
  103. Logger.Debug("表名:" + dt.Rows[0]["RPTNAME"].ToString() + " 开始结转!");
  104. #endregion
  105. #region 结转处理
  106. string jsonStr = JsonClient.Get(dt.Rows[0]["APIURL"].ToString(),3600000);
  107. JObject json = JObject.Parse(jsonStr);
  108. int apiState = json["success"].ToString().ToLower() == "true" ? 1 : 0;
  109. Logger.Debug("表名:" + dt.Rows[0]["RPTNAME"].ToString() + " 结转接口" + dt.Rows[0]["APIURL"].ToString() + "执行完成!");
  110. Logger.Debug(jsonStr);
  111. #endregion
  112. #region 结转完成,更新日志
  113. message += " 完成结转:" + DateTime.Now.ToString();
  114. conn.ExecuteNonQuery(@"
  115. UPDATE JZ_LOG
  116. SET
  117. EXECUTESTATE = @EXECUTESTATE@,
  118. EXECUTEMESSAGE = @EXECUTEMESSAGE@
  119. WHERE
  120. GUID = @GUID@
  121. ",
  122. new CDAParameter("EXECUTESTATE",apiState),
  123. new CDAParameter("EXECUTEMESSAGE",message),
  124. new CDAParameter("GUID",guid)
  125. );
  126. Logger.Debug("表名:" + dt.Rows[0]["RPTNAME"].ToString() + " 结转完成!");
  127. #endregion
  128. }
  129. }
  130. catch (Exception ex)
  131. {
  132. #region 结转失败
  133. conn.ExecuteNonQuery(@"
  134. UPDATE JZ_LOG
  135. SET
  136. EXECUTESTATE = @EXECUTESTATE@,
  137. EXECUTEMESSAGE = @EXECUTEMESSAGE@
  138. WHERE
  139. GUID = @GUID@
  140. ",
  141. new CDAParameter("EXECUTESTATE",0),
  142. new CDAParameter("EXECUTEMESSAGE","结转失败!"),
  143. new CDAParameter("GUID",guid)
  144. );
  145. Logger.Error(ex);
  146. #endregion
  147. }
  148. }
  149. }
  150. </script>