Program.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading;
  6. using System.Threading.Tasks;
  7. using Winsoft.GOV.Framework.Model;
  8. using Winsoft.GOV.Framework.Provider;
  9. using System.Configuration;
  10. namespace Winsoft.GOV.ConsoleSyncData
  11. {
  12. class Program
  13. {
  14. static Dictionary<County, PowerMattersDetail> countyOfLastUpdateTime = new Dictionary<County, PowerMattersDetail>();
  15. static void Main(string[] args)
  16. {
  17. foreach(County c in (County[])(Enum.GetValues(typeof(County)))){
  18. DateTime t = GetUpdateDate(c);
  19. PowerMattersDetail last = new PowerMattersDetail
  20. {
  21. UPDATE_DATE = t
  22. };
  23. countyOfLastUpdateTime.Add(c, last);
  24. }
  25. try
  26. {
  27. while (true)
  28. {
  29. if (pms != null && pms.Count() > 0)
  30. {
  31. t = pms.Last().UPDATE_DATE;
  32. continue;
  33. }
  34. else
  35. {
  36. SaveUpdateDate(t);
  37. Console.WriteLine("休眠1小时");
  38. Thread.Sleep(3600000);
  39. }
  40. }
  41. }
  42. catch(Exception e)
  43. {
  44. Console.WriteLine(e.Message);
  45. Console.ReadKey();
  46. }
  47. }
  48. static bool Update(County c)
  49. {
  50. do
  51. {
  52. DateTime t = countyOfLastUpdateTime[c].UPDATE_DATE;
  53. Console.WriteLine(c.ToString() + "最近更新时间:" + t.ToString());
  54. try
  55. {
  56. IEnumerable<PowerMattersDetail> pms = ProvidersFactory.GetQLSXProvider(c).Select(t);
  57. if (pms.Count() == 0)
  58. break;
  59. foreach (PowerMattersDetail pm in pms)
  60. {
  61. if (pm.QL_NAME.First<char>() == '$')
  62. {
  63. Console.WriteLine(String.Format("忽略--权力单位:{0}; 数据推送时间:{1}", pm.QL_DEP, pm.UPDATE_DATE.ToString()));
  64. continue;
  65. }
  66. Branch b = ProvidersFactory.GetBranchProvider(c).Find(pm.OUGUID);
  67. if (b == null)
  68. {
  69. b = new Branch()
  70. {
  71. ShortName = pm.QL_DEP,
  72. GUID = pm.OUGUID,
  73. Position = 999
  74. };
  75. ProvidersFactory.GetBranchProvider(c).Insert(b);
  76. }
  77. ProvidersFactory.GetPowerMettersDetailProvider(c).UpdateOrInsert(pm);
  78. PowerMattersBase p = new PowerMattersBase()
  79. {
  80. QL_NAME = pm.QL_NAME,
  81. QL_INNER_CODE = pm.QL_INNER_CODE,
  82. QL_DEP = b.ShortName,
  83. OUGUID = pm.OUGUID,
  84. QL_STATE = pm.QL_STATE
  85. };
  86. if (!ProvidersFactory.GetPowerMettersBaseProvider(c).IsExistByQL_INNER_CODE(pm.QL_INNER_CODE))
  87. {
  88. Console.WriteLine(String.Format("新增--权力单位:{0}; 数据推送时间:{1}", p.QL_DEP, pm.UPDATE_DATE.ToString()));
  89. ProvidersFactory.GetPowerMettersBaseProvider(c).Insert(p);
  90. }
  91. else
  92. {
  93. Console.WriteLine(String.Format("更新--权力单位:{0}; 数据推送时间:{1}", p.QL_DEP, pm.UPDATE_DATE.ToString()));
  94. ProvidersFactory.GetPowerMettersBaseProvider(c).Update(p);
  95. }
  96. }
  97. }
  98. catch(Exception e)
  99. {
  100. Console.WriteLine("更新" + c.ToString() + "权力数据库时,发生错误!");
  101. Console.WriteLine(e.Message);
  102. return false;
  103. }
  104. } while (true);
  105. return true;
  106. }
  107. private static DateTime GetUpdateDate(County c)
  108. {
  109. //获取Configuration对象
  110. DateTime t = DateTime.Now;
  111. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  112. if (config.AppSettings.Settings["UpdateDate"] == null)
  113. {
  114. t = ProvidersFactory.GetPowerMettersDetailProvider(c).FindLastUpdateDate();
  115. return t;
  116. }
  117. else
  118. {
  119. DateTime t2 = ProvidersFactory.GetPowerMettersDetailProvider(c).FindLastUpdateDate();
  120. if (DateTime.TryParse(config.AppSettings.Settings["UpdateDate"].Value, out t))
  121. {
  122. Console.WriteLine("是否指定开始时间?");
  123. if (Console.ReadKey().KeyChar == 'y')
  124. {
  125. return t;
  126. }
  127. return t > t2 ? t : t2;
  128. }
  129. else
  130. return t2;
  131. }
  132. }
  133. private static void SaveUpdateDate(DateTime t, County c)
  134. {
  135. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  136. if (config.AppSettings.Settings[c.ToString() + "UpdateDate"] == null)
  137. {
  138. config.AppSettings.Settings.Add(c.ToString() + "UpdateDate", t.ToString());
  139. }
  140. else
  141. {
  142. config.AppSettings.Settings[c.ToString() + "UpdateDate"].Value = t.ToString();
  143. }
  144. config.Save(ConfigurationSaveMode.Modified);
  145. ConfigurationManager.RefreshSection("appSettings");
  146. }
  147. }
  148. }