123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- using Edge.Core.Database;
- using Edge.Core.Processor;
- using Dfs.WayneChina.SpsDbManager;
- using Dfs.WayneChina.SpsDbManager.Models;
- using System;
- using System.Collections.Generic;
- using System.Timers;
- using System.Linq;
- using System.Threading.Tasks;
- using Edge.Core.Configuration;
- namespace Dfs.WayneChina.IMisPlus
- {
- public class ForecourtConfigManagerApp : IAppProcessor
- {
- #region Fields
- private string forecourtConfig;
- private ForecourtXml forecourtXml;
- private SpsManager spsManager;
- private Timer timer;
- #endregion
- #region Logger
- NLog.Logger logger = NLog.LogManager.LoadConfiguration("NLog.config").GetLogger("IMisPlusApp");
- #endregion
- #region Properties
-
- public string MetaConfigName { get; set; }
- #endregion
- #region Constructor
- public ForecourtConfigManagerApp(string enabled, int interval, string forecourtConfig)
- {
- bool enableCheck = Convert.ToBoolean(enabled);
- var processConfig =
- Configurator.Default.DeviceProcessorConfiguration.Processor.FirstOrDefault(p => p.Name.ToLower().Contains("misforecourt"));
- if (processConfig != null)
- {
- this.forecourtConfig = processConfig.Parameter.First(p => p.Name == "forecourtConfig").Value;
- }
- else
- {
- this.forecourtConfig = forecourtConfig;
- }
- spsManager = new SpsManager("server=localhost;database=sps_db;uid=root;password=HS1205;treattinyasboolean=false;convert zero datetime=true;");
- forecourtXml = new ForecourtXml();
- forecourtXml.Parse(forecourtConfig);
- InitTimer(enableCheck, interval);
- }
- private void InitTimer(bool enabled, int interval)
- {
- timer = new Timer();
- timer.Elapsed += Timer_Elapsed;
- timer.Interval = interval * 1000;
- timer.Enabled = enabled;
- }
- private void Timer_Elapsed(object sender, ElapsedEventArgs e)
- {
- logger.Info("Reaching timeout, initiate config check.");
- var currentConfig = forecourtXml.ForecourtConfig;
- if (currentConfig != null)
- {
- LogInfo($"Forecourt config, version: {forecourtXml.ForecourtConfig.CurrentVersion}");
- var fuelLists = new List<TFuellist>();
- foreach (var fuel in currentConfig.Fuels)
- {
- var fuelList = new TFuellist();
- fuelList.FuelNo = fuel.ProductCode;
- fuelList.ClassNo = fuel.ClassNo;
- fuelList.Name = fuel.Name;
- fuelList.Price = fuel.Price;
- fuelList.OldPrice = 0;
- fuelList.PriceTwo = 0;
- fuelList.OldPriceTwo = 0;
- fuelList.PriceThree = 0;
- fuelList.OldPriceThree = 0;
- fuelList.PriceFour = 0;
- fuelList.OldPriceFour = 0;
- fuelList.PriceFive = 0;
- fuelList.OldPriceFive = 0;
- fuelList.PriceSix = 0;
- fuelList.OldPriceSix = 0;
- fuelList.PriceSeven = 0;
- fuelList.OldPriceSeven = 0;
- fuelList.PriceEight = 0;
- fuelList.OldPriceEight = 0;
- fuelList.Unit = "升";
- fuelList.Storage = 0;
- fuelList.TaxPer = 0;
- fuelList.Density = "";
- fuelLists.Add(fuelList);
- }
- spsManager.InitializeFuelConfig(fuelLists.ToArray());
- //Write tank config into database
- foreach (var tank in currentConfig.Tanks)
- {
- var addTankResult = spsManager.AddVirtualTank(Convert.ToByte(tank.Id), tank.ProductCode);
- LogInfo($"Add tank, id={tank.Id}, success? {addTankResult}");
- }
- //Write pump and nozzle config into database
- foreach (var pump in currentConfig.Pumps)
- {
- var addPumpResult = spsManager.AddUpdatePump(pump.Id, pump.TankId, pump.PosId, Convert.ToString(pump.DispType),
- pump.AppProtocol, pump.ProtocolType, pump.Port, pump.SerialPort, pump.Mode, pump.PayStackSize, pump.CheckOutMode,
- pump.Node, pump.SubAddress, pump.NozzleCount, pump.PumpType, pump.MaxAmount, pump.MaxVolume);
- LogInfo($"Add pump, id={pump.Id}, success? {addPumpResult}");
- if (pump.Nozzles.Count > 0)
- {
- foreach (var nozzle in pump.Nozzles)
- {
- int? nullValue = null;
- int? state = string.IsNullOrEmpty(nozzle.State) ? nullValue : Convert.ToInt32(nozzle.State);
- var addNozzleResult = spsManager.AddUpdateNozzle(nozzle.SiteNozzleNo, nozzle.PhysicalId, nozzle.TankId,
- pump.Id, state, nozzle.ProductCode, nozzle.VehicleIdReaderAddress);
- LogInfo($"Add nozzle, No={nozzle.SiteNozzleNo}, success? {addNozzleResult}");
- }
- }
- }
- //Write terminal config into database
- var terminals = new List<TPayterm>();
- foreach (var terminal in currentConfig.Terminals)
- {
- TPayterm payterm = new TPayterm();
- payterm.PayDevId = terminal.Id;
- payterm.PayType = terminal.PayMode;
- payterm.Protocl = terminal.ProtocolType;
- payterm.Address = terminal.Address;
- }
- spsManager.UpdateTerminals(terminals.ToArray());
- //Write dispenser config into database
- foreach (var disp in currentConfig.Dispensers)
- {
-
- }
- }
- }
- #endregion
- #region IApplication implementation
- public void Init(IEnumerable<IProcessor> processors)
- {
- }
- public Task<bool> Start()
- {
- logger.Info("Forecourt Manager App starting");
- return Task.FromResult(true);
- }
- public Task<bool> Stop()
- {
- return Task.FromResult(true);
- }
- #endregion
- #region Logging
- private void LogInfo(string text)
- {
- logger.Info("\t" + text);
- }
- #endregion
- }
- }
|