Service1.cs 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.IO;
  7. using System.Linq;
  8. using System.ServiceProcess;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using ConsoleDataSync;
  12. using System.Data.SqlClient;
  13. using System.Configuration;
  14. using Newtonsoft.Json;
  15. namespace WindowsService
  16. {
  17. public partial class Service1 : ServiceBase
  18. {
  19. public Service1()
  20. {
  21. InitializeComponent();
  22. }
  23. protected override void OnStart(string[] args)
  24. {
  25. EventLog.WriteEntry("");
  26. WriteLog("用户表同步服务启动");
  27. System.Timers.Timer t = new System.Timers.Timer();
  28. t.Interval = 1000;
  29. t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrc);//到达时间执行该时间
  30. t.AutoReset = true;//true为一直执行服务
  31. t.Enabled = true;//是否设置执行System.Timers.Timer.Enabled事件
  32. }
  33. private void ChkSrc(object sender, System.Timers.ElapsedEventArgs e)
  34. {
  35. int Hour = e.SignalTime.Hour;
  36. int Min = e.SignalTime.Minute;
  37. int Second = e.SignalTime.Second;
  38. if (Hour == 24 && Min == 00 && Second == 00)
  39. {
  40. try
  41. {
  42. System.Timers.Timer tt = (System.Timers.Timer)sender;
  43. tt.Enabled = false;
  44. SendMessge();
  45. tt.Enabled = true;
  46. }
  47. catch (Exception err)
  48. {
  49. WriteLog(err.Message);
  50. }
  51. }
  52. }
  53. /// <summary>
  54. /// 开启服务
  55. /// </summary>
  56. private void SendMessge()
  57. {
  58. WriteLog("同步服务开启");
  59. string str = TableServer();
  60. WriteLog(str);
  61. }
  62. /// <summary>
  63. /// 记录日志
  64. /// </summary>
  65. /// <param name="str">时间</param>+
  66. private void WriteLog(string str)
  67. {
  68. StreamWriter dout = new StreamWriter(@"c:/" + "server_userLog.txt", true);
  69. dout.WriteLine("操作事件:" + str);
  70. dout.WriteLine("操作时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  71. dout.WriteLine("----------------------------------------");
  72. dout.Close();
  73. }
  74. /// <summary>
  75. /// 服务停止
  76. /// </summary>
  77. protected override void OnStop()
  78. {
  79. WriteLog("服务停止");
  80. EventLog.WriteEntry("服务停止");
  81. }
  82. public string TableServer()
  83. {
  84. string sendTableName = "SMSHasSend_" + DateTime.Now.ToString("yyyyMM");
  85. string recvTableName = "SMSHasReceived_" + DateTime.Now.ToString("yyyyMM");
  86. DataProvider.E(cmd =>
  87. {
  88. cmd.CommandText = "IF OBJECT_ID(N'" + sendTableName + "',N'U') IS NULL SELECT * INTO " + sendTableName + " FROM SMSHasSend " + "ELSE DELETE FROM " + sendTableName;
  89. cmd.ExecuteNonQuery();
  90. });
  91. DataProvider.E(cmd =>
  92. {
  93. cmd.CommandText = "IF OBJECT_ID(N'" + recvTableName + "',N'U') IS NULL SELECT * INTO " + recvTableName + " FROM SMSHasReceived " + "ELSE DELETE FROM " + recvTableName;
  94. cmd.ExecuteNonQuery();
  95. });
  96. DataProvider.E(cmd =>
  97. {
  98. cmd.CommandText = "DELETE FROM USERS";
  99. cmd.ExecuteNonQuery();
  100. });
  101. WriteLog("创建表完成");
  102. string[] sources = JsonConvert.DeserializeObject<string[]>(ConfigurationManager.AppSettings["user-sources"]);
  103. foreach (string s in sources)
  104. {
  105. using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings[s].ConnectionString))
  106. {
  107. try
  108. {
  109. connection.Open();
  110. DataSet ds = new DataSet();
  111. SqlDataAdapter command = new SqlDataAdapter("SELECT * FROM USERS", connection);
  112. command.Fill(ds, "Users");
  113. DataProvider.Insert("Users", ds.Tables[0], ds.Tables[0].Rows.Count);
  114. }
  115. catch (SqlException ex)
  116. {
  117. return ex.Message;
  118. }
  119. }
  120. }
  121. sources = JsonConvert.DeserializeObject<string[]>(ConfigurationManager.AppSettings["sms-sources"]);
  122. foreach (string s in sources)
  123. {
  124. using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings[s].ConnectionString))
  125. {
  126. try
  127. {
  128. connection.Open();
  129. SqlDataAdapter command;
  130. DataSet sendMsgs = new DataSet();
  131. command = new SqlDataAdapter("IF OBJECT_ID(N'" + sendTableName + "', N'U') IS NOT NULL SELECT * FROM " + sendTableName, connection);
  132. command.Fill(sendMsgs, sendTableName);
  133. if (sendMsgs.Tables.Count > 0)
  134. DataProvider.Insert(sendTableName, sendMsgs.Tables[0], sendMsgs.Tables[0].Rows.Count);
  135. DataSet recvMsgs = new DataSet();
  136. command = new SqlDataAdapter("IF OBJECT_ID(N'" + recvTableName + "', N'U') IS NOT NULL SELECT * FROM " + recvTableName, connection);
  137. command.Fill(recvMsgs, recvTableName);
  138. if (recvMsgs.Tables.Count > 0)
  139. DataProvider.Insert(recvTableName, recvMsgs.Tables[0], recvMsgs.Tables[0].Rows.Count);
  140. }
  141. catch (SqlException ex)
  142. {
  143. return ex.Message;
  144. }
  145. }
  146. }
  147. return "数据同步成功";
  148. }
  149. }
  150. }