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 QMAPP.FJC.Entity.EnergyManage; namespace MeterReadingService { public partial class MeterReadingService : ServiceBase { System.Threading.Timer readtimer; int _Period = 60000; List _MeterList = new List(); MeterReader.ElectricMeterReader reader = new MeterReader.ElectricMeterReader(); public MeterReadingService() { InitializeComponent(); } protected override void OnStart(string[] args) { QMAPP.FJC.BLL.EnergyManage.MeterBLL meterbll = new QMAPP.FJC.BLL.EnergyManage.MeterBLL(); _MeterList = meterbll.GetList(new Meter { }); string setperiod = System.Configuration.ConfigurationManager.AppSettings["ReadPeriod"]; if (!int.TryParse(setperiod, out _Period)) { _Period = 60000; } if (readtimer == null) { readtimer = new System.Threading.Timer(new System.Threading.TimerCallback(readertimer_tick)); } readtimer.Change(0, _Period); } protected override void OnStop() { if (readtimer != null) { readtimer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); readtimer.Dispose(); } _MeterList.Clear(); } private void readertimer_tick(object obj) { QMAPP.FJC.BLL.EnergyManage.MeterReadingsBLL mrbll = new QMAPP.FJC.BLL.EnergyManage.MeterReadingsBLL(); foreach (var meter in _MeterList) { var lastreading=mrbll.GetLastReading(meter.METER_CODE); var read = reader.Read(meter); MeterReadings newreading = new MeterReadings { DIFF_WITH_LAST = lastreading == null ? 0 : (decimal)read - lastreading.READING, ERROR = "", METER_PID = meter.PID, READING = (decimal)read, PID = Guid.NewGuid().ToString(), READ_RESULT = read > 0 ? "1" : "0", READ_TIME = DateTime.Now }; mrbll.Insert(newreading); } } } }