ForecourtConfigManager.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. using Edge.Core.Database;
  2. using Edge.Core.Processor;
  3. using Dfs.WayneChina.SpsDbManager;
  4. using Dfs.WayneChina.SpsDbManager.Models;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Timers;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. using Edge.Core.Configuration;
  11. namespace Dfs.WayneChina.IMisPlus
  12. {
  13. public class ForecourtConfigManagerApp : IAppProcessor
  14. {
  15. #region Fields
  16. private string forecourtConfig;
  17. private ForecourtXml forecourtXml;
  18. private SpsManager spsManager;
  19. private Timer timer;
  20. #endregion
  21. #region Logger
  22. NLog.Logger logger = NLog.LogManager.LoadConfiguration("NLog.config").GetLogger("IMisPlusApp");
  23. #endregion
  24. #region Properties
  25. public string MetaConfigName { get; set; }
  26. #endregion
  27. #region Constructor
  28. public ForecourtConfigManagerApp(string enabled, int interval, string forecourtConfig)
  29. {
  30. bool enableCheck = Convert.ToBoolean(enabled);
  31. var processConfig =
  32. Configurator.Default.DeviceProcessorConfiguration.Processor.FirstOrDefault(p => p.Name.ToLower().Contains("misforecourt"));
  33. if (processConfig != null)
  34. {
  35. this.forecourtConfig = processConfig.Parameter.First(p => p.Name == "forecourtConfig").Value;
  36. }
  37. else
  38. {
  39. this.forecourtConfig = forecourtConfig;
  40. }
  41. spsManager = new SpsManager("server=localhost;database=sps_db;uid=root;password=HS1205;treattinyasboolean=false;convert zero datetime=true;");
  42. forecourtXml = new ForecourtXml();
  43. forecourtXml.Parse(forecourtConfig);
  44. InitTimer(enableCheck, interval);
  45. }
  46. private void InitTimer(bool enabled, int interval)
  47. {
  48. timer = new Timer();
  49. timer.Elapsed += Timer_Elapsed;
  50. timer.Interval = interval * 1000;
  51. timer.Enabled = enabled;
  52. }
  53. private void Timer_Elapsed(object sender, ElapsedEventArgs e)
  54. {
  55. logger.Info("Reaching timeout, initiate config check.");
  56. var currentConfig = forecourtXml.ForecourtConfig;
  57. if (currentConfig != null)
  58. {
  59. LogInfo($"Forecourt config, version: {forecourtXml.ForecourtConfig.CurrentVersion}");
  60. var fuelLists = new List<TFuellist>();
  61. foreach (var fuel in currentConfig.Fuels)
  62. {
  63. var fuelList = new TFuellist();
  64. fuelList.FuelNo = fuel.ProductCode;
  65. fuelList.ClassNo = fuel.ClassNo;
  66. fuelList.Name = fuel.Name;
  67. fuelList.Price = fuel.Price;
  68. fuelList.OldPrice = 0;
  69. fuelList.PriceTwo = 0;
  70. fuelList.OldPriceTwo = 0;
  71. fuelList.PriceThree = 0;
  72. fuelList.OldPriceThree = 0;
  73. fuelList.PriceFour = 0;
  74. fuelList.OldPriceFour = 0;
  75. fuelList.PriceFive = 0;
  76. fuelList.OldPriceFive = 0;
  77. fuelList.PriceSix = 0;
  78. fuelList.OldPriceSix = 0;
  79. fuelList.PriceSeven = 0;
  80. fuelList.OldPriceSeven = 0;
  81. fuelList.PriceEight = 0;
  82. fuelList.OldPriceEight = 0;
  83. fuelList.Unit = "升";
  84. fuelList.Storage = 0;
  85. fuelList.TaxPer = 0;
  86. fuelList.Density = "";
  87. fuelLists.Add(fuelList);
  88. }
  89. spsManager.InitializeFuelConfig(fuelLists.ToArray());
  90. //Write tank config into database
  91. foreach (var tank in currentConfig.Tanks)
  92. {
  93. var addTankResult = spsManager.AddVirtualTank(Convert.ToByte(tank.Id), tank.ProductCode);
  94. LogInfo($"Add tank, id={tank.Id}, success? {addTankResult}");
  95. }
  96. //Write pump and nozzle config into database
  97. foreach (var pump in currentConfig.Pumps)
  98. {
  99. var addPumpResult = spsManager.AddUpdatePump(pump.Id, pump.TankId, pump.PosId, Convert.ToString(pump.DispType),
  100. pump.AppProtocol, pump.ProtocolType, pump.Port, pump.SerialPort, pump.Mode, pump.PayStackSize, pump.CheckOutMode,
  101. pump.Node, pump.SubAddress, pump.NozzleCount, pump.PumpType, pump.MaxAmount, pump.MaxVolume);
  102. LogInfo($"Add pump, id={pump.Id}, success? {addPumpResult}");
  103. if (pump.Nozzles.Count > 0)
  104. {
  105. foreach (var nozzle in pump.Nozzles)
  106. {
  107. int? nullValue = null;
  108. int? state = string.IsNullOrEmpty(nozzle.State) ? nullValue : Convert.ToInt32(nozzle.State);
  109. var addNozzleResult = spsManager.AddUpdateNozzle(nozzle.SiteNozzleNo, nozzle.PhysicalId, nozzle.TankId,
  110. pump.Id, state, nozzle.ProductCode, nozzle.VehicleIdReaderAddress);
  111. LogInfo($"Add nozzle, No={nozzle.SiteNozzleNo}, success? {addNozzleResult}");
  112. }
  113. }
  114. }
  115. //Write terminal config into database
  116. var terminals = new List<TPayterm>();
  117. foreach (var terminal in currentConfig.Terminals)
  118. {
  119. TPayterm payterm = new TPayterm();
  120. payterm.PayDevId = terminal.Id;
  121. payterm.PayType = terminal.PayMode;
  122. payterm.Protocl = terminal.ProtocolType;
  123. payterm.Address = terminal.Address;
  124. }
  125. spsManager.UpdateTerminals(terminals.ToArray());
  126. //Write dispenser config into database
  127. foreach (var disp in currentConfig.Dispensers)
  128. {
  129. }
  130. }
  131. }
  132. #endregion
  133. #region IApplication implementation
  134. public void Init(IEnumerable<IProcessor> processors)
  135. {
  136. }
  137. public Task<bool> Start()
  138. {
  139. logger.Info("Forecourt Manager App starting");
  140. return Task.FromResult(true);
  141. }
  142. public Task<bool> Stop()
  143. {
  144. return Task.FromResult(true);
  145. }
  146. #endregion
  147. #region Logging
  148. private void LogInfo(string text)
  149. {
  150. logger.Info("\t" + text);
  151. }
  152. #endregion
  153. }
  154. }