UpdateJXDataFromIPEasyJob.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. using Microsoft.EntityFrameworkCore;
  2. using Quartz;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Threading;
  8. using System.Threading.Tasks;
  9. using wispro.sp.entity;
  10. namespace wispro.sp.api.Job
  11. {
  12. public class UpdateJXDataFromIPEasyJob : IJob
  13. {
  14. public void UpdateFromIPEasy(PerformanceItem Item,spDbContext spDb)
  15. {
  16. dynamic retObj = utility.IPEasyUtility.GetPerformanceRecord(Item.CaseNo, Item.DoItem, string.IsNullOrEmpty(Item.CaseStage) ? null : Item.CaseStage);
  17. var appealAJXS = spDb.AppealTypes.FirstOrDefault(p => p.Name.Contains("案件系数"));
  18. var appealCLSXXS = spDb.AppealTypes.FirstOrDefault(p => p.Name.Contains("处理事项系数"));
  19. var caseXS = (spDb.AppealRecords.FirstOrDefault(p => p.ItemId == Item.Id && p.TypeId == appealAJXS.Id && p.State == 1) == null);
  20. var doItemXS = (spDb.AppealRecords.FirstOrDefault(p => p.ItemId == Item.Id && p.TypeId == appealCLSXXS.Id && p.State == 1) == null);
  21. IDictionary<String, Object> keyValuePairs = (IDictionary<String, Object>)retObj;
  22. if (keyValuePairs.ContainsKey("DoItemCoefficient") && Item.DoItemCoefficient != retObj.DoItemCoefficient && doItemXS)
  23. {
  24. Item.DoItemCoefficient = retObj.DoItemCoefficient;
  25. }
  26. //if (keyValuePairs.ContainsKey("DoItemMemo") && Item.DoItemMemo != retObj.DoItemMemo && !string.IsNullOrEmpty(retObj.DoItemMemo))
  27. //{
  28. // Item.DoItemMemo = retObj.DoItemMemo;
  29. //}
  30. //if (keyValuePairs.ContainsKey("DoItemState") && Item.DoItemState != retObj.DoItemState && !string.IsNullOrEmpty(retObj.DoItemState))
  31. //{
  32. // Item.DoItemState = retObj.DoItemState;
  33. //}
  34. //if (keyValuePairs.ContainsKey("CustomerLimitDate"))
  35. //{
  36. // if (!string.IsNullOrEmpty(retObj.CustomerLimitDate))
  37. // {
  38. // DateTime date = DateTime.Parse(retObj.CustomerLimitDate);
  39. // if (date != Item.CustomerLimitDate)
  40. // Item.CustomerLimitDate = date;
  41. // }
  42. //}
  43. //if (keyValuePairs.ContainsKey("EntrustingDate"))
  44. //{
  45. // if (!string.IsNullOrEmpty(retObj.EntrustingDate))
  46. // {
  47. // DateTime date = DateTime.Parse(retObj.EntrustingDate);
  48. // if (date != Item.EntrustingDate)
  49. // Item.EntrustingDate = date;
  50. // }
  51. //}
  52. //if (keyValuePairs.ContainsKey("FinalizationDate"))
  53. //{
  54. // if (!string.IsNullOrEmpty(retObj.FinalizationDate))
  55. // {
  56. // DateTime date = DateTime.Parse(retObj.FinalizationDate);
  57. // if (date != Item.FinalizationDate)
  58. // Item.FinalizationDate = date;
  59. // }
  60. //}
  61. //if (keyValuePairs.ContainsKey("FinishedDate"))
  62. //{
  63. // if (!string.IsNullOrEmpty(retObj.FinishedDate))
  64. // {
  65. // DateTime date = DateTime.Parse(retObj.FinishedDate);
  66. // if (date != Item.FinishedDate)
  67. // Item.FinishedDate = date;
  68. // }
  69. //}
  70. //if (keyValuePairs.ContainsKey("FirstDraftDate"))
  71. //{
  72. // if (!string.IsNullOrEmpty(retObj.FirstDraftDate))
  73. // {
  74. // DateTime date = DateTime.Parse(retObj.FirstDraftDate);
  75. // if (date != Item.FirstDraftDate)
  76. // Item.FirstDraftDate = date;
  77. // }
  78. //}
  79. //if (keyValuePairs.ContainsKey("InternalDate"))
  80. //{
  81. // if (!string.IsNullOrEmpty(retObj.InternalDate))
  82. // {
  83. // DateTime date = DateTime.Parse(retObj.InternalDate);
  84. // if (date != Item.InternalDate)
  85. // Item.InternalDate = date;
  86. // }
  87. //}
  88. //if (keyValuePairs.ContainsKey("ReturnDate"))
  89. //{
  90. // if (!string.IsNullOrEmpty(retObj.ReturnDate))
  91. // {
  92. // DateTime date = DateTime.Parse(retObj.ReturnDate);
  93. // if (date != Item.ReturnDate)
  94. // Item.ReturnDate = date;
  95. // }
  96. //}
  97. if (keyValuePairs.ContainsKey("WordCount"))
  98. {
  99. if (!string.IsNullOrEmpty(retObj.WordCount))
  100. {
  101. var wordCount = int.Parse(retObj.WordCount);
  102. if (wordCount != Item.WordCount)
  103. Item.WordCount = wordCount;
  104. }
  105. }
  106. if (keyValuePairs.ContainsKey("Reviewer") && (Item.Reviewer == null || Item.Reviewer.Name != retObj.Reviewer) && !string.IsNullOrEmpty(retObj.Reviewer))
  107. {
  108. string name = retObj.Reviewer;
  109. if (!string.IsNullOrEmpty(name))
  110. {
  111. string temName = name.Split('-')[0].Trim();
  112. if (!name.Contains("君龙"))
  113. {
  114. temName = name;
  115. }
  116. var temReviewer = spDb.Staffs.Where<Staff>(s => s.Name == temName).FirstOrDefault();
  117. if (temReviewer == null)
  118. {
  119. //Item.Reviewer = new Staff() { Name = retObj.Reviewer };
  120. }
  121. else
  122. {
  123. //Item.Reviewer = temReviewer;
  124. Item.ReviewerId = temReviewer.Id;
  125. }
  126. }
  127. }
  128. if (keyValuePairs.ContainsKey("ApplicationType") && Item.ApplicationType != retObj.ApplicationType && !string.IsNullOrEmpty(retObj.ApplicationType))
  129. {
  130. Item.ApplicationType = retObj.ApplicationType;
  131. }
  132. //if (keyValuePairs.ContainsKey("BusinessType") && Item.BusinessType != retObj.BusinessType && !string.IsNullOrEmpty(retObj.BusinessType))
  133. //{
  134. // Item.BusinessType = retObj.BusinessType;
  135. //}
  136. if (keyValuePairs.ContainsKey("CaseCoefficient") && Item.CaseCoefficient != retObj.CaseCoefficient && caseXS)
  137. {
  138. if(!(retObj.CaseCoefficient == null && string.IsNullOrEmpty(Item.CaseCoefficient)))
  139. Item.CaseCoefficient = retObj.CaseCoefficient;
  140. }
  141. //if (keyValuePairs.ContainsKey("CaseMemo") && Item.CaseMemo != retObj.CaseMemo && !string.IsNullOrEmpty(retObj.CaseMemo))
  142. //{
  143. // Item.CaseMemo = retObj.CaseMemo;
  144. //}
  145. //if (keyValuePairs.ContainsKey("CaseStage") && Item.CaseStage != retObj.CaseStage && !string.IsNullOrEmpty(retObj.CaseStage))
  146. //{
  147. // Item.CaseStage = retObj.CaseStage;
  148. //}
  149. //if (keyValuePairs.ContainsKey("CaseState") && Item.CaseState != retObj.CaseState && !string.IsNullOrEmpty(retObj.CaseState))
  150. //{
  151. // Item.CaseState = retObj.CaseState;
  152. //}
  153. if (keyValuePairs.ContainsKey("CaseType") && Item.CaseType != retObj.CaseType && !string.IsNullOrEmpty(retObj.CaseType))
  154. {
  155. Item.CaseType = retObj.CaseType;
  156. }
  157. if (spDb.Entry(Item).State != EntityState.Unchanged)
  158. {
  159. if (Item.AgentFeedbackMemo != "特殊点数申诉")
  160. {
  161. //Utility.Utility.CalBasePoint(Item, spDb.BasePointRules.ToList());
  162. //spDb.SaveChanges();
  163. new Controllers.PerformanceItemController(spDb, new Services.FileTaskCacheService()).RefreshPoint(Item);
  164. }
  165. }
  166. }
  167. public void RefreshFromIPEasy(int type)
  168. {
  169. System.Threading.Thread t = new Thread(new ParameterizedThreadStart(RefreshFromIPEasy_BatchThread));
  170. t.Start(type);
  171. }
  172. /// <summary>
  173. /// 批量从IPEasy中更新数据
  174. /// </summary>
  175. /// <param name="type">
  176. /// 0:所有;
  177. /// 1:BasePoint为空记录;
  178. /// 2:新申请案件系数为空记录;
  179. /// 3:BasePoint为空记录 或者 新申请案件系数为空记录
  180. /// </param>
  181. /// <returns></returns>
  182. private void RefreshFromIPEasy_BatchThread(object type)
  183. {
  184. spDbContext spDb = new spDbContext();
  185. var Results = spDb.PerformanceItems.Include(p=>p.Customer).Where(p =>
  186. (p.AgentFeedbackMemo != "已算绩效" || p.AgentFeedbackMemo == null)
  187. && p.CalMonth.Status == 0
  188. && !p.CaseNo.StartsWith("J"));
  189. switch (type.ToString())
  190. {
  191. case "1":
  192. Results = Results.Where(p => p.BasePoint == null);
  193. break;
  194. case "2":
  195. Results = Results.Where(p => p.Type == "新申请" && p.CaseCoefficient == "");
  196. break;
  197. case "3":
  198. Results = Results.Where(p => p.BasePoint == null || (p.DoItem == "新申请" && p.CaseCoefficient == ""));
  199. break;
  200. }
  201. var listItems = Results.ToList();
  202. int i = 0;
  203. foreach (var Item in listItems)
  204. {
  205. int iTryCount = 0;
  206. TryAgain:
  207. try
  208. {
  209. iTryCount++;
  210. UpdateFromIPEasy(Item, spDb);
  211. Log($"{DateTime.Now}\t{++i}/{listItems.Count}\t{Item.CaseNo}");
  212. System.Diagnostics.Debug.WriteLine($"{DateTime.Now}\t{i}/{listItems.Count}\t{Item.CaseNo}");
  213. //}
  214. }
  215. catch (Exception ex)
  216. {
  217. if (iTryCount <= 3)
  218. {
  219. goto TryAgain;
  220. }
  221. System.Diagnostics.Debug.WriteLine(ex.ToString());
  222. Log($"{DateTime.Now}\t{++i}/{listItems.Count}\t{Item.CaseNo}\t更新失败!");
  223. }
  224. }
  225. }
  226. public Task Execute(IJobExecutionContext context)
  227. {
  228. spDbContext spDb = new spDbContext();
  229. var lstItem = spDb.PerformanceItems.Where<PerformanceItem>(p =>
  230. ((p.AgentFeedbackMemo != "已算绩效" || p.AgentFeedbackMemo==null )
  231. && p.CalMonth.Status == 0 &&
  232. !p.CaseNo.StartsWith("J")))
  233. .Include(p=>p.Reviewer)
  234. .Include(p=>p.CalMonth)
  235. .Include(p=>p.Customer)
  236. .Include(p=>p.ItemStaffs).ThenInclude(p=>p.DoPerson)
  237. .ToList<PerformanceItem>();
  238. if (lstItem != null)
  239. {
  240. int i = 0;
  241. foreach (var Item in lstItem)
  242. {
  243. int iTryCount = 0;
  244. TryAgain:
  245. try
  246. {
  247. iTryCount++;
  248. UpdateFromIPEasy(Item, spDb);
  249. Log($"{DateTime.Now}\t{++i}/{lstItem.Count}\t{Item.CaseNo}");
  250. System.Diagnostics.Debug.WriteLine($"{DateTime.Now}\t{i}/{lstItem.Count}\t{Item.CaseNo}");
  251. //}
  252. }
  253. catch(Exception ex)
  254. {
  255. if(iTryCount <= 3)
  256. {
  257. goto TryAgain;
  258. }
  259. System.Diagnostics.Debug.WriteLine(ex.ToString());
  260. Log($"{DateTime.Now}\t{++i}\t{Item.CaseNo}\r\n{ex.ToString()}");
  261. }
  262. }
  263. }
  264. return Task.CompletedTask;
  265. }
  266. private void Log(string strMessage)
  267. {
  268. StreamWriter sw = File.AppendText("c:\\temp\\log.txt");
  269. sw.WriteLine($"{strMessage}");
  270. sw.Flush();
  271. sw.Close();
  272. sw.Dispose();
  273. }
  274. }
  275. }