Program.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  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. InitCountySources();
  18. if (countyOfLastUpdateTime.Count == 0)
  19. {
  20. Console.WriteLine("没有配置需要同步的县市源,请按任意键退出。");
  21. Console.ReadKey();
  22. return;
  23. }
  24. IEnumerable<PowerMattersDetail> pms = null;
  25. while (true)
  26. {
  27. foreach (County c in countyOfLastUpdateTime.Keys)
  28. {
  29. Update(c);
  30. }
  31. Console.WriteLine("休眠1小时");
  32. Thread.Sleep(3600000);
  33. }
  34. }
  35. static bool Update(County c)
  36. {
  37. do
  38. {
  39. DateTime t = countyOfLastUpdateTime[c].UPDATE_DATE;
  40. Console.WriteLine(c.ToString() + "最近更新时间:" + t.ToString());
  41. try
  42. {
  43. IEnumerable<PowerMattersDetail> pms = ProvidersFactory.GetQLSXProvider(c).Select(t);
  44. if (pms.Count() == 0)
  45. break;
  46. foreach (PowerMattersDetail pm in pms)
  47. {
  48. if (pm.QL_NAME.First<char>() == '$')
  49. {
  50. Console.WriteLine(String.Format("忽略--权力单位:{0}; 数据推送时间:{1},原因:该事项是主项", pm.QL_DEP, pm.UPDATE_DATE.ToString()));
  51. continue;
  52. }
  53. Branch b = ProvidersFactory.GetBranchProvider(c).Find(pm.OUGUID);
  54. if (b == null)
  55. {
  56. Console.WriteLine(String.Format("忽略--权力单位:{0}; 数据推送时间:{1},原因:没有该事项部门", pm.QL_DEP, pm.UPDATE_DATE.ToString()));
  57. continue;
  58. //b = new Branch()
  59. //{
  60. // ShortName = pm.QL_DEP,
  61. // GUID = pm.OUGUID,
  62. // Position = 999
  63. //};
  64. //ProvidersFactory.GetBranchProvider(c).Insert(b);
  65. }
  66. ProvidersFactory.GetPowerMettersDetailProvider(c).UpdateOrInsert(pm);
  67. PowerMattersBase p = new PowerMattersBase()
  68. {
  69. QL_NAME = pm.QL_NAME,
  70. QL_INNER_CODE = pm.QL_INNER_CODE,
  71. QL_DEP = b.ShortName,
  72. OUGUID = pm.OUGUID,
  73. QL_STATE = pm.QL_STATE
  74. };
  75. if (!ProvidersFactory.GetPowerMettersBaseProvider(c).IsExistByQL_INNER_CODE(pm.QL_INNER_CODE))
  76. {
  77. Console.WriteLine(String.Format("新增--权力单位:{0}; 数据推送时间:{1}", p.QL_DEP, pm.UPDATE_DATE.ToString()));
  78. ProvidersFactory.GetPowerMettersBaseProvider(c).Insert(p);
  79. Notify(pm, p, c, ActionType.insert);
  80. }
  81. else
  82. {
  83. Console.WriteLine(String.Format("更新--权力单位:{0}; 数据推送时间:{1}", p.QL_DEP, pm.UPDATE_DATE.ToString()));
  84. ProvidersFactory.GetPowerMettersBaseProvider(c).Update(p);
  85. if (pm.QL_STATE == "1")
  86. Notify(pm, p, c, ActionType.update);
  87. else
  88. Notify(pm, p, c, ActionType.delete);
  89. }
  90. }
  91. if (pms != null && pms.Count() > 0)
  92. {
  93. countyOfLastUpdateTime[c].UPDATE_DATE = pms.Last().UPDATE_DATE;
  94. SaveUpdateDate(pms.Last().UPDATE_DATE, c);
  95. continue;
  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 void InitCountySources()
  108. {
  109. string strSources = ConfigurationManager.AppSettings["Countys"];
  110. string[] strs = strSources.Split(',');
  111. foreach(string s in strs)
  112. {
  113. County c;
  114. if (Enum.TryParse<County>(s, out c) && !countyOfLastUpdateTime.ContainsKey(c))
  115. {
  116. try
  117. {
  118. ProvidersFactory.GetNotificationOfActionProvider(c).CreateTable();
  119. }catch(Exception e)
  120. {
  121. Console.WriteLine(c.ToString() + "创建提醒数据表失败");
  122. Console.WriteLine(e.Message);
  123. continue;
  124. }
  125. DateTime t = GetUpdateDate(c);
  126. PowerMattersDetail last = new PowerMattersDetail
  127. {
  128. UPDATE_DATE = t
  129. };
  130. countyOfLastUpdateTime.Add(c, last);
  131. }
  132. }
  133. }
  134. private static void Notify(PowerMattersDetail p, PowerMattersBase pb, County c, ActionType a)
  135. {
  136. if(c == County.LS)
  137. {
  138. NotificationOfAction n = NotificationOfAction.CopyFrom(p);
  139. n.QL_DEP = pb.QL_DEP;
  140. n.AType = a;
  141. ProvidersFactory.GetNotificationOfActionProvider(c).InserOrUpdate(n);
  142. }
  143. }
  144. private static DateTime GetUpdateDate(County c)
  145. {
  146. //获取Configuration对象
  147. DateTime t = DateTime.Now;
  148. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  149. if (config.AppSettings.Settings["UpdateDate"] == null)
  150. {
  151. t = ProvidersFactory.GetPowerMettersDetailProvider(c).FindLastUpdateDate();
  152. return t;
  153. }
  154. else
  155. {
  156. DateTime t2 = ProvidersFactory.GetPowerMettersDetailProvider(c).FindLastUpdateDate();
  157. if (DateTime.TryParse(config.AppSettings.Settings["UpdateDate"].Value, out t))
  158. {
  159. Console.WriteLine("是否指定开始时间?");
  160. if (Console.ReadKey().KeyChar == 'y')
  161. {
  162. return t;
  163. }
  164. return t > t2 ? t : t2;
  165. }
  166. else
  167. return t2;
  168. }
  169. }
  170. private static void SaveUpdateDate(DateTime t, County c)
  171. {
  172. Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
  173. if (config.AppSettings.Settings[c.ToString() + "UpdateDate"] == null)
  174. {
  175. config.AppSettings.Settings.Add(c.ToString() + "UpdateDate", t.ToString());
  176. }
  177. else
  178. {
  179. config.AppSettings.Settings[c.ToString() + "UpdateDate"].Value = t.ToString();
  180. }
  181. config.Save(ConfigurationSaveMode.Modified);
  182. ConfigurationManager.RefreshSection("appSettings");
  183. }
  184. }
  185. }