using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;
using ConsoleDataSync;
using System.Data.SqlClient;
using System.Configuration;
using Newtonsoft.Json;
namespace WindowsService
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
EventLog.WriteEntry("");
WriteLog("用户表同步服务启动");
System.Timers.Timer t = new System.Timers.Timer();
t.Interval = 1000;
t.Elapsed += new System.Timers.ElapsedEventHandler(ChkSrc);//到达时间执行该时间
t.AutoReset = true;//true为一直执行服务
t.Enabled = true;//是否设置执行System.Timers.Timer.Enabled事件
}
private void ChkSrc(object sender, System.Timers.ElapsedEventArgs e)
{
int Hour = e.SignalTime.Hour;
int Min = e.SignalTime.Minute;
int Second = e.SignalTime.Second;
if (Hour == 24 && Min == 00 && Second == 00)
{
try
{
System.Timers.Timer tt = (System.Timers.Timer)sender;
tt.Enabled = false;
SendMessge();
tt.Enabled = true;
}
catch (Exception err)
{
WriteLog(err.Message);
}
}
}
///
/// 开启服务
///
private void SendMessge()
{
WriteLog("同步服务开启");
string str = TableServer();
WriteLog(str);
}
///
/// 记录日志
///
/// 时间+
private void WriteLog(string str)
{
StreamWriter dout = new StreamWriter(@"c:/" + "server_userLog.txt", true);
dout.WriteLine("操作事件:" + str);
dout.WriteLine("操作时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
dout.WriteLine("----------------------------------------");
dout.Close();
}
///
/// 服务停止
///
protected override void OnStop()
{
WriteLog("服务停止");
EventLog.WriteEntry("服务停止");
}
public string TableServer()
{
string sendTableName = "SMSHasSend_" + DateTime.Now.ToString("yyyyMM");
string recvTableName = "SMSHasReceived_" + DateTime.Now.ToString("yyyyMM");
DataProvider.E(cmd =>
{
cmd.CommandText = "IF OBJECT_ID(N'" + sendTableName + "',N'U') IS NULL SELECT * INTO " + sendTableName + " FROM SMSHasSend " + "ELSE DELETE FROM " + sendTableName;
cmd.ExecuteNonQuery();
});
DataProvider.E(cmd =>
{
cmd.CommandText = "IF OBJECT_ID(N'" + recvTableName + "',N'U') IS NULL SELECT * INTO " + recvTableName + " FROM SMSHasReceived " + "ELSE DELETE FROM " + recvTableName;
cmd.ExecuteNonQuery();
});
DataProvider.E(cmd =>
{
cmd.CommandText = "DELETE FROM USERS";
cmd.ExecuteNonQuery();
});
WriteLog("创建表完成");
string[] sources = JsonConvert.DeserializeObject(ConfigurationManager.AppSettings["user-sources"]);
foreach (string s in sources)
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings[s].ConnectionString))
{
try
{
connection.Open();
DataSet ds = new DataSet();
SqlDataAdapter command = new SqlDataAdapter("SELECT * FROM USERS", connection);
command.Fill(ds, "Users");
DataProvider.Insert("Users", ds.Tables[0], ds.Tables[0].Rows.Count);
}
catch (SqlException ex)
{
return ex.Message;
}
}
}
sources = JsonConvert.DeserializeObject(ConfigurationManager.AppSettings["sms-sources"]);
foreach (string s in sources)
{
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings[s].ConnectionString))
{
try
{
connection.Open();
SqlDataAdapter command;
DataSet sendMsgs = new DataSet();
command = new SqlDataAdapter("IF OBJECT_ID(N'" + sendTableName + "', N'U') IS NOT NULL SELECT * FROM " + sendTableName, connection);
command.Fill(sendMsgs, sendTableName);
if (sendMsgs.Tables.Count > 0)
DataProvider.Insert(sendTableName, sendMsgs.Tables[0], sendMsgs.Tables[0].Rows.Count);
DataSet recvMsgs = new DataSet();
command = new SqlDataAdapter("IF OBJECT_ID(N'" + recvTableName + "', N'U') IS NOT NULL SELECT * FROM " + recvTableName, connection);
command.Fill(recvMsgs, recvTableName);
if (recvMsgs.Tables.Count > 0)
DataProvider.Insert(recvTableName, recvMsgs.Tables[0], recvMsgs.Tables[0].Rows.Count);
}
catch (SqlException ex)
{
return ex.Message;
}
}
}
return "数据同步成功";
}
}
}