ScheduleMaintenanceDataManager.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Data;
  4. using System.Linq;
  5. using System.Runtime.Remoting.Metadata.W3cXsd2001;
  6. using System.Threading.Tasks;
  7. using Aitex.Core.Common;
  8. using Aitex.Core.RT.DBCore;
  9. using Aitex.Core.RT.Event;
  10. using Aitex.Core.RT.Log;
  11. using Aitex.Core.RT.OperationCenter;
  12. using Aitex.Core.Util;
  13. using DocumentFormat.OpenXml.Vml;
  14. using DocumentFormat.OpenXml.Wordprocessing;
  15. using MECF.Framework.Common.CommonData.EnumData;
  16. using MECF.Framework.Common.DBCore;
  17. using MECF.Framework.Common.Equipment;
  18. using MECF.Framework.Common.SubstrateTrackings;
  19. using MECF.Framework.Common.Utilities;
  20. namespace MECF.Framework.Common.DataCenter
  21. {
  22. public class ScheduleMaintenanceData
  23. {
  24. public ScheduleMaintenanceDataItem DataItem { get; private set; }
  25. public ScheduleMaintenanceData(string item, string unit, string path, string additionInformationName = "", string additionInformationDisplay = "", float startValue = 0, float limitValue = 0, string display = "", string maintenanceProcessing = "None", string associationProcessRecipeName = "", string additionInformationDisplaySupplement = "")
  26. {
  27. if (string.IsNullOrEmpty(display))
  28. display = item;
  29. ScheduleMaintenanceDataManager.Instance.Subscribe(item, display, unit, startValue, limitValue, maintenanceProcessing, path, additionInformationName, additionInformationDisplay, associationProcessRecipeName, additionInformationDisplaySupplement);
  30. DataItem = ScheduleMaintenanceDataManager.Instance.GetItem(item);
  31. }
  32. public float SetLimitValue(float value)
  33. {
  34. return ScheduleMaintenanceDataManager.Instance.SetLimitValue(DataItem.Item, value);
  35. }
  36. public string SetMaintenanceProcessing(string value)
  37. {
  38. return ScheduleMaintenanceDataManager.Instance.SetMaintenanceProcessing(DataItem.Item, value);
  39. }
  40. public void SetValue(float value)
  41. {
  42. ScheduleMaintenanceDataManager.Instance.SetValue(DataItem.Item, value);
  43. }
  44. public void SetStartValue(float value)
  45. {
  46. ScheduleMaintenanceDataManager.Instance.SetStartValue(DataItem.Item, value);
  47. }
  48. public float GetValue()
  49. {
  50. return ScheduleMaintenanceDataManager.Instance.GetValue(DataItem.Item);
  51. }
  52. public float Increase(float additionValue = 1)
  53. {
  54. return ScheduleMaintenanceDataManager.Instance.Increase(DataItem.Item, additionValue);
  55. }
  56. }
  57. public class ScheduleMaintenanceDataItem
  58. {
  59. public string Unit { get; set; }
  60. public string Item { get; set; }
  61. public float CurrentValue { get; set; }
  62. public float StartValue { get; set; }
  63. public float LimitValue { get; set; }
  64. public string MaintenanceProcessing { get; set; }
  65. public string AssociationProcessRecipeName { get; set; }
  66. public string Display { get; set; }
  67. public string Path { get; set; }
  68. public string AdditionInformationName { get; set; }
  69. public string AdditionInformationDisplay { get; set; }
  70. public string AdditionInformationDisplaySupplement { get; set; }
  71. }
  72. public class ScheduleMaintenanceDataManager : Singleton<ScheduleMaintenanceDataManager>
  73. {
  74. private Dictionary<string, ScheduleMaintenanceDataItem> _items = new Dictionary<string, ScheduleMaintenanceDataItem>();
  75. public Dictionary<string, ScheduleMaintenanceDataItem> Item { get => _items; }
  76. private object _locker = new object();
  77. public bool IsUpdateDbRecord = false;
  78. public ScheduleMaintenanceDataManager()
  79. {
  80. }
  81. public void IsUpdateData()
  82. {
  83. Task.Delay(1000).ContinueWith(a =>
  84. {
  85. IsUpdateDbRecord = true;
  86. });
  87. }
  88. public void Initialize()
  89. {
  90. try
  91. {
  92. OP.Subscribe("System.ScheduleMaintenance.SetCurrentValue", (method, args) =>
  93. {
  94. float.TryParse(args[1].ToString(), out float value);
  95. SetValue((string)args[0], value);
  96. return true;
  97. });
  98. OP.Subscribe("System.ScheduleMaintenance.SetMaintenanceName", (method, args) =>
  99. {
  100. SetMaintenanceName((string)args[0], args[1].ToString());
  101. return true;
  102. });
  103. OP.Subscribe("System.ScheduleMaintenance.SetMaintenanceProcessing", (method, args) =>
  104. {
  105. SetMaintenanceProcessing((string)args[0], args[1].ToString());
  106. return true;
  107. });
  108. OP.Subscribe("System.ScheduleMaintenance.SetAssociationProcessRecipeName", (method, args) =>
  109. {
  110. SetAssociationProcessRecipeName((string)args[0], args[1].ToString());
  111. return true;
  112. });
  113. OP.Subscribe("System.ScheduleMaintenance.SetLimitValue", (method, args) =>
  114. {
  115. float.TryParse(args[1].ToString(), out float value);
  116. SetLimitValue((string)args[0], value);
  117. return true;
  118. });
  119. OP.Subscribe("System.ScheduleMaintenance.SetStartValue", (method, args) =>
  120. {
  121. float.TryParse(args[1].ToString(), out float value);
  122. SetStartValue((string)args[0], value);
  123. return true;
  124. });
  125. OP.Subscribe("System.ScheduleMaintenance.SetAdditionInformationDisplayName", (method, args) =>
  126. {
  127. SetAdditionInformationDisplayName((string)args[0], args[1].ToString(), args.Length > 2 ? args[2].ToString() : "");
  128. return true;
  129. });
  130. RefershData();
  131. }
  132. catch (Exception ex)
  133. {
  134. LOG.Error("init stats data manager failed", ex);
  135. }
  136. }
  137. public void RefershData()
  138. {
  139. DataTable dt = DataQuery.Query("select * from \"schedule_maintenance\"");
  140. for (int i = 0; i < dt.Rows.Count; i++)
  141. {
  142. ScheduleMaintenanceDataItem item = new ScheduleMaintenanceDataItem();
  143. item.Item = dt.Rows[i]["maintenance_item"].ToString();
  144. item.Display = dt.Rows[i]["maintenance_display"].ToString();
  145. item.Unit = dt.Rows[i]["unit"].ToString();
  146. item.MaintenanceProcessing = dt.Rows[i]["maintenance_processing"].ToString();
  147. item.Path = dt.Rows[i]["path"].ToString();
  148. item.AdditionInformationName = dt.Rows[i]["addition_information_name"].ToString();
  149. item.AdditionInformationDisplay = dt.Rows[i]["addition_information_display"].ToString();
  150. item.AdditionInformationDisplaySupplement = dt.Rows[i]["addition_information_display_supplement"].ToString();
  151. item.AssociationProcessRecipeName = dt.Rows[i]["association_process_recipeName"].ToString();
  152. if (float.TryParse(dt.Rows[i]["current_value"].ToString(), out float value))
  153. item.CurrentValue = value;
  154. if (float.TryParse(dt.Rows[i]["scheduling_start_value"].ToString(), out value))
  155. item.StartValue = value;
  156. if (float.TryParse(dt.Rows[i]["maintenance_limit_value"].ToString(), out value))
  157. item.LimitValue = value;
  158. _items[item.Item] = item;
  159. }
  160. }
  161. public string SetMaintenanceName(string name, string display)
  162. {
  163. lock (_locker)
  164. {
  165. if (!_items.ContainsKey(name))
  166. {
  167. LOG.Error($"Can not set {name} maintenanceName value, not defined item");
  168. return "";
  169. }
  170. string preValue = _items[name].Display;
  171. _items[name].Display = display;
  172. string sql = string.Format(
  173. "UPDATE \"schedule_maintenance\" SET \"maintenance_display\"='{0}'WHERE \"maintenance_item\"='{1}';", display,
  174. name);
  175. DB.Insert(sql);
  176. IsUpdateData();
  177. EV.PostInfoLog("System", $"{name} schedule maintenance maintenanceName value changed from {preValue} to {display}");
  178. return display;
  179. }
  180. }
  181. public string SetAdditionInformationDisplayName(string name, string display, string displaySupplement = "")
  182. {
  183. lock (_locker)
  184. {
  185. if (!_items.ContainsKey(name))
  186. {
  187. LOG.Error($"Can not set {name} AdditionInformationDispla value, not defined item");
  188. return "";
  189. }
  190. string preValue = _items[name].AdditionInformationDisplay;
  191. _items[name].AdditionInformationDisplay = display;
  192. string sql = string.Format(
  193. "UPDATE \"schedule_maintenance\" SET \"addition_information_display\"='{0}' , \"addition_information_display_supplement\"='{2}'WHERE \"maintenance_item\"='{1}';", display,
  194. name, displaySupplement);
  195. DB.Insert(sql);
  196. IsUpdateData();
  197. EV.PostInfoLog("System", $"{name} schedule maintenance AdditionInformationDisplay value changed from {preValue} to {display}");
  198. return display;
  199. }
  200. }
  201. public string SetAssociationProcessRecipeName(string name, string associationProcessRecipeName)
  202. {
  203. lock (_locker)
  204. {
  205. if (!_items.ContainsKey(name))
  206. {
  207. LOG.Error($"Can not set {name} associationProcessRecipeName value, not defined item");
  208. return "";
  209. }
  210. string preValue = _items[name].AssociationProcessRecipeName;
  211. _items[name].AssociationProcessRecipeName = associationProcessRecipeName;
  212. string sql = string.Format(
  213. "UPDATE \"schedule_maintenance\" SET \"association_process_recipeName\"='{0}'WHERE \"maintenance_item\"='{1}';", associationProcessRecipeName,
  214. name);
  215. DB.Insert(sql);
  216. IsUpdateData();
  217. EV.PostInfoLog("System", $"{name} schedule maintenance associationProcessRecipeName value changed from {preValue} to {associationProcessRecipeName}");
  218. return associationProcessRecipeName;
  219. }
  220. }
  221. public string SetMaintenanceProcessing(string name, string maintenanceProcessing)
  222. {
  223. lock (_locker)
  224. {
  225. if (!_items.ContainsKey(name))
  226. {
  227. LOG.Error($"Can not set {name} maintenanceProcessing value, not defined item");
  228. return "";
  229. }
  230. string preValue = _items[name].MaintenanceProcessing;
  231. _items[name].MaintenanceProcessing = maintenanceProcessing;
  232. string sql = string.Format(
  233. "UPDATE \"schedule_maintenance\" SET \"maintenance_processing\"='{0}'WHERE \"maintenance_item\"='{1}';", maintenanceProcessing,
  234. name);
  235. DB.Insert(sql);
  236. IsUpdateData();
  237. EV.PostInfoLog("System", $"{name} schedule maintenance MaintenanceProcessing value changed from {preValue} to {maintenanceProcessing}");
  238. return maintenanceProcessing;
  239. }
  240. }
  241. public float SetLimitValue(string name, float value)
  242. {
  243. lock (_locker)
  244. {
  245. if (!_items.ContainsKey(name))
  246. {
  247. LOG.Error($"Can not set {name} limit value, not defined item");
  248. return -1;
  249. }
  250. float preValue = _items[name].LimitValue;
  251. _items[name].LimitValue = value;
  252. string sql = string.Format(
  253. "UPDATE \"schedule_maintenance\" SET \"maintenance_limit_value\"='{0}'WHERE \"maintenance_item\"='{1}';", _items[name].LimitValue,
  254. name);
  255. DB.Insert(sql);
  256. IsUpdateData();
  257. EV.PostInfoLog("System", $"{name} schedule maintenance limit value changed from {preValue} to {value}");
  258. return preValue;
  259. }
  260. }
  261. public void Terminate()
  262. {
  263. }
  264. public void Subscribe(string item, string display, string unit, float startValue, float limitValue, string maintenanceProcessing, string path, string additionInformationName, string additionInformationDisplay, string associationProcessRecipeName, string additionInformationDisplaySupplement)
  265. {
  266. lock (_locker)
  267. {
  268. if (!_items.ContainsKey(item))
  269. {
  270. _items[item] = new ScheduleMaintenanceDataItem()
  271. { Display = display, Item = item };
  272. string executeInsert = string.Format(
  273. @"Insert into ""schedule_maintenance""(""maintenance_item"",
  274. ""maintenance_display"",
  275. ""scheduling_start_value"",
  276. ""maintenance_limit_value"",
  277. ""maintenance_processing"",
  278. ""unit"",
  279. ""path"",
  280. ""addition_information_name"",
  281. ""addition_information_display"",
  282. ""association_process_recipeName"",
  283. ""addition_information_display_supplement""
  284. ) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}','{10}')",
  285. item, display, startValue, limitValue, maintenanceProcessing, unit, path, additionInformationName, additionInformationDisplay, associationProcessRecipeName, additionInformationDisplaySupplement);
  286. DB.Insert(executeInsert);
  287. IsUpdateData();
  288. }
  289. }
  290. }
  291. public void SetValue(string name, float value)
  292. {
  293. lock (_locker)
  294. {
  295. if (!_items.ContainsKey(name))
  296. {
  297. LOG.Error($"Can not set {name} value, not defined item");
  298. return;
  299. }
  300. _items[name].CurrentValue = value;
  301. string sql = string.Format(
  302. "UPDATE \"schedule_maintenance\" SET \"current_value\"='{0}' WHERE \"maintenance_item\"='{1}';",
  303. _items[name].CurrentValue,
  304. name);
  305. DB.Insert(sql);
  306. IsUpdateData();
  307. }
  308. }
  309. public void SetStartValue(string name, float value)
  310. {
  311. lock (_locker)
  312. {
  313. if (!_items.ContainsKey(name))
  314. {
  315. LOG.Error($"Can not set {name} scheduling_start_value, not defined item");
  316. return;
  317. }
  318. _items[name].StartValue = value;
  319. string sql = string.Format(
  320. "UPDATE \"schedule_maintenance\" SET \"scheduling_start_value\"='{0}' WHERE \"maintenance_item\"='{1}';",
  321. _items[name].StartValue,
  322. name);
  323. DB.Insert(sql);
  324. IsUpdateData();
  325. }
  326. }
  327. public float GetValue(string name)
  328. {
  329. lock (_locker)
  330. {
  331. if (_items.ContainsKey(name))
  332. {
  333. return _items[name].CurrentValue;
  334. }
  335. }
  336. LOG.Error($"Can not get {name} value, not defined item");
  337. return 0;
  338. }
  339. public ScheduleMaintenanceDataItem GetItem(string name)
  340. {
  341. lock (_locker)
  342. {
  343. if (_items.ContainsKey(name))
  344. {
  345. return _items[name];
  346. }
  347. }
  348. LOG.Error($"Can not get {name} value, not defined item");
  349. return null;
  350. }
  351. public bool CheckHasItem(string name)
  352. {
  353. if (_items.ContainsKey(name))
  354. return true;
  355. else
  356. return false;
  357. }
  358. public float Increase(string name, float additionValue = 1)
  359. {
  360. lock (_locker)
  361. {
  362. if (!_items.ContainsKey(name))
  363. {
  364. LOG.Error($"Can not increase {name} value, not defined item");
  365. return -1;
  366. }
  367. _items[name].CurrentValue += additionValue;
  368. string sql = string.Format(
  369. "UPDATE \"schedule_maintenance\" SET \"current_value\"='{0}' WHERE \"maintenance_item\"='{1}';",
  370. _items[name].CurrentValue,
  371. name);
  372. DB.Insert(sql);
  373. IsUpdateData();
  374. return _items[name].CurrentValue;
  375. }
  376. }
  377. #region
  378. #endregion
  379. }
  380. }