using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.IO; using System.Timers; //using DeiNiu.Utils; namespace WindowsServiceOut { public partial class Service1 : ServiceBase {//记录到event log中,地址是 C:\Windows\System32\winevt\Logs (双击查看即可,文件名为MyNewLog) private static string logdir = "d:\\wmsJobLog"; private static EventLog eventLog1; private static int eventId = 1; private Timer timer1 = new Timer(), timer2 = new Timer(), timer3 = new Timer(), timerNewWorld = new Timer(), timer6 = new Timer(); private int intervalOut = 1, intervalIn = 2, intervalDoc = 3, intervalStockLack =180; private WindowsServiceOut.ServiceReferenceScheduledService.enumOutStockRequestStatus outStatus = WindowsServiceOut.ServiceReferenceScheduledService.enumOutStockRequestStatus.准备分拣; public Service1() { InitializeComponent(); eventLog1 = new System.Diagnostics.EventLog(); if (!System.Diagnostics.EventLog.SourceExists("ServiceOutRequestSyncSource")) { System.Diagnostics.EventLog.CreateEventSource( "ServiceOutRequestSyncSource", "ServiceOutRequestSyncLog"); } eventLog1.Source = "ServiceOutRequestSyncSource"; eventLog1.Log = "ServiceOutRequestSyncLog"; } void initialIntervals() { using (ServiceReferenceScheduledService.ScheduledServiceClient client = new ServiceReferenceScheduledService.ScheduledServiceClient()) { try { int[] ins = client.getJobInterVal(); intervalOut = ins[0] > 0 ? ins[0] * 60000 : intervalOut; intervalIn = ins[1] > 0 ? ins[1] * 60000 : intervalIn; intervalDoc = ins[2] > 0 ? ins[2] * 60000 : intervalDoc; intervalStockLack = ins[3] > 0 ? ins[3] * 60000 : intervalStockLack; log(string.Format("initialIntervals intervalOut:{0} intervalIn:{1} intervalDoc:{2} intervalStockLack:{3}", intervalOut/60000, intervalIn / 60000, intervalDoc / 60000, intervalStockLack / 60000)); /* if(interval1>0 & timer1.Interval!= interval1 ) { log(" new interal for out tasks . old is" + timer1.Interval / 60000 + ",...............new interval = " + interval1); timer1.Stop(); timer1.Interval = interval1; ; timer1.Start(); } if (interval2 > 0 & timer2.Interval != interval2) { log(" new interal for stock in tasks . old is" + timer2.Interval / 60000 + ",...............new interval = " + interval2); timer2.Stop(); timer2.Interval = interval2; ; timer2.Start(); } if (intervalDoc > 0 & timer3.Interval != intervalDoc) { log(" new interal for dictionary tasks . old is" + timer3.Interval / 60000 + ",...............new interval = " + intervalDoc); timer3.Stop(); timer3.Interval = intervalDoc; ; timer3.Start(); } if (intervalStockLack > 0 & timer4.Interval != intervalStockLack) { log(" new interal for stock enumOutStockRequestStatus tasks . old is" + timer4.Interval / 60000 + ",...............new interval = " + intervalStockLack/60000); timer4.Stop(); timer4.Interval = intervalStockLack; ; timer4.Start(); } */ } catch (Exception er) { log("initialIntervals exception:" + er.Message + "/n" + er.StackTrace); } } } protected override void OnStart(string[] args) { try { if (!Directory.Exists(logdir)) { Directory.CreateDirectory(logdir); } // eventLog1.WriteEntry("In OnStart."); log("In OnStart."); initialIntervals(); // Set up a timer that triggers every minute. 设置定时器 timer1.Interval = intervalOut ; // 1分执行一次 timer1.Elapsed += new ElapsedEventHandler(this.OnTimer_1); timer1.Start(); // timer2 = new Timer(); timer2.Interval = intervalIn ; // 2分执行一次 timer2.Elapsed += new ElapsedEventHandler(this.OnTimer_2); timer2.Start(); // timer3 = new Timer(); timer3.Interval = intervalDoc ; // 3分钟 timer3.Elapsed += new ElapsedEventHandler(this.OnTimer_3); timer3.Start(); #if DEBUG timerNewWorld.Interval = 18 * 60 * 60000; // 18 小时 timerNewWorld.Elapsed += new ElapsedEventHandler(this.OnTimer_NewWorld); timerNewWorld.Start(); #endif // timer4.Interval = intervalStockLack * 60000; // 3 小时 /* timer4.Stop(); timer4.Elapsed += new ElapsedEventHandler(this.OnTimer_4); timer4.Start(); */ timer6.Interval = 0.5 * 60000; // 30秒检查一次wave interval timer6.Elapsed += new ElapsedEventHandler(this.OnTimer_6); timer6.Start(); } catch (Exception er) { log(er.InnerException.ToString()); } } /// /// 停止服务 /// protected override void OnStop() { // eventLog1.WriteEntry("In OnStop."); log("In OnStop."); } /// /// 继续服务 /// protected override void OnContinue() { //eventLog1.WriteEntry("In OnContinue."); log("In OnContinue."); } int normalPrcocessCnt = 0; /// /// 出库相关任务处理 /// /// /// public void OnTimer_1(object sender, ElapsedEventArgs args) { // TODO: Insert monitoring activities here. // eventLog1.WriteEntry("OnTimer_10", EventLogEntryType.Information, eventId++); log("OnTimer_1 start"); timer1.Stop(); if (normalPrcocessCnt > intervalStockLack/intervalOut) { outStatus = WindowsServiceOut.ServiceReferenceScheduledService.enumOutStockRequestStatus.库存不足; normalPrcocessCnt = 0; } log("outStatus: "+ outStatus); normalPrcocessCnt++; using (ServiceReferenceScheduledService.ScheduledServiceClient client = new ServiceReferenceScheduledService.ScheduledServiceClient()) { try { log("start sync and create pickoutrequest ,status = " +outStatus); client.syncAndCreatePickRequest(outStatus); log("start createPDAPickTasks "); client.createPDAPickTasks(); log("start createPickWaves "); client.createPickWaves(); } catch (Exception er) { log("OnTimer_1 exception:" +er.Message +"/n"+ er.StackTrace ); } outStatus = WindowsServiceOut.ServiceReferenceScheduledService.enumOutStockRequestStatus.准备分拣; log("OnTimer_1 end "); } if (intervalOut > 0 & timer1.Interval != intervalOut) { log(" new interal for out tasks . old is" + timer1.Interval / 60000 + ",...............new interval = " + intervalOut / 60000); timer1.Interval = intervalOut; ; } timer1.Start(); } /// /// 入库相关的任务 /// /// /// public void OnTimer_2(object sender, ElapsedEventArgs args) { // TODO: Insert monitoring activities here. // eventLog1.WriteEntry("OnTimer_10", EventLogEntryType.Information, eventId++); log("OnTimer_2 begin"); timer2.Stop(); using (ServiceReferenceScheduledService.ScheduledServiceClient client = new ServiceReferenceScheduledService.ScheduledServiceClient()) { log("start sync in requests "); client.syncInRequest(); log("end sync in requests "); } if (intervalIn > 0 & timer2.Interval != intervalIn) { log(" new interal for stock in tasks . old is" + timer2.Interval / 60000 + ",...............new interval = " + intervalIn / 60000); timer2.Interval = intervalIn; ; } timer2.Start(); log("OnTimer_2 end"); } /// /// 基本资料同步 /// /// /// public void OnTimer_3(object sender, ElapsedEventArgs args) { // TODO: Insert monitoring activities here. //eventLog1.WriteEntry("OnTimer_60", EventLogEntryType.Information, eventId++); log("OnTimer_3 begin"); timer3.Stop(); using (ServiceReferenceScheduledService.ScheduledServiceClient client = new ServiceReferenceScheduledService.ScheduledServiceClient()) { try { log("start sync syncGoods "); client.syncGoods(); log("end sync syncGoods "); log("start sync syncNewOwners "); client.syncNewOwners(); log("end sync syncNewOwners "); log("start syncCustomer "); client.syncCustomer(); log("end syncCustomer "); } catch (Exception er) { log("OnTimer_3 exception:" + er.Message + "/n" + er.StackTrace); } } if (intervalDoc > 0 & timer3.Interval != intervalDoc) { log(" new interal for dictionary tasks . old is" + timer3.Interval / 60000 + ",...............new interval = " + intervalDoc / 60000); timer3.Interval = intervalDoc; ; } timer3.Start(); log("OnTimer_3 end"); } public void OnTimer_NewWorld(object sender, ElapsedEventArgs args) { log("OnTimer_NewWorld begin"); timerNewWorld.Stop(); using (ServiceReferenceScheduledService.ScheduledServiceClient client = new ServiceReferenceScheduledService.ScheduledServiceClient()) { #if DEBUG log("start truncate data..................to start new world! "); // client.truncateDataForTestOnly(); log(" new world begin ..... enjoy! "); #endif } timerNewWorld.Start(); log("OnTimer_NewWorld end"); } public void OnTimer_6(object sender, ElapsedEventArgs args) { log("OnTimer_6 begin"); timer6.Stop(); initialIntervals(); /* using (ServiceReferenceScheduledService.ScheduledServiceClient client = new ServiceReferenceScheduledService.ScheduledServiceClient()) { int interval = client.getWaveInterval(); if (interval > 0 && interval * 60000 != timer1.Interval) { log(" new interal for waves . old is"+ timer1.Interval/60000 +",...............new interval = " + interval); timer1.Stop(); timer1.Interval = interval * 60000; // 1分执行一次 timer1.Start(); log(" timer1 restarted "); } }*/ timer6.Start(); log("OnTimer_6 end"); } /// /// 记录到指定路径:D:\log.txt /// /// private static void log(string message) {//LogHelper.debug(typeof(Service1), message); try { eventLog1.WriteEntry(message, EventLogEntryType.Information, eventId++); string logName = string.Format("{0}-{1}-{2}-{3}.txt", logdir + "\\jobLog", DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day); using (FileStream stream = new FileStream(logName, FileMode.Append)) using (StreamWriter writer = new StreamWriter(stream)) { writer.WriteLine(String.Format("{0}:{1}", DateTime.Now, message)); } } catch (Exception er) { eventLog1.WriteEntry(er.Message, EventLogEntryType.Information, eventId++); } } } }