BZJ_HK_SyncService.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. using HH.YiDaSyncNC.Dtos.NC;
  2. using HH.YiDaSyncNC.Helper;
  3. using Newtonsoft.Json;
  4. using SqlSugar;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Configuration;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Xml.Linq;
  12. namespace HH.YiDaSyncNC.DataSync
  13. {
  14. class BZJ_HK_SyncService
  15. {
  16. public string _AppType;
  17. public string _SystemToken;
  18. public string _UserId;
  19. public string _FormId;
  20. public SqlSugarClient _db;
  21. public SqlSugarClient _db_nc;
  22. public string _NCApiUrl;
  23. public BZJ_HK_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
  24. {
  25. _AppType = AppType;
  26. _SystemToken = SystemToken;
  27. _UserId = UserId;
  28. _FormId = FormId;
  29. _db = db;
  30. _db_nc = db_nc;
  31. _NCApiUrl = NCApiUrl;
  32. }
  33. public class IdCodeModel
  34. {
  35. public int sourceId { get; set; }
  36. public string Id { get; set; }
  37. }
  38. public class FormItem
  39. {
  40. public string title { get; set; }
  41. }
  42. public class DetailItem
  43. {
  44. public decimal ncMoney { get; set; }
  45. public decimal ydMoney { get; set; }
  46. public long ncBilldate { get; set; }
  47. public bool bAll { get; set; }
  48. }
  49. public void DataSync()
  50. {
  51. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  52. //var idList = _dingTalkService.GetFormIdList("{\"radioField_m06hhw2p\":\"未回款\",\"textField_ltxyt75i\":\"同步成功\"}");
  53. //idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_m06hhw2p\":\"已回款\",\"textField_ltxyt75i\":\"同步成功\"}"));
  54. var idList = _dingTalkService.GetFormIdList("{\"textField_ltxyt75i\":\"同步成功\"}");
  55. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  56. #region 获取NC中选项数据的Id
  57. var ct_bondapplyList = _db_nc.Queryable<ct_bondapply>().Where(w => w.approvestatus != "-1").ToList();
  58. var ar_gatheritemList = _db_nc.Queryable<ar_gatheritem>().Where(w => ct_bondapplyList.Select(s => s.pk_bondapply).ToList().Contains(w.src_billid)).ToList();
  59. var ar_gatherbillList = _db_nc.Queryable<ar_gatherbill>().Where(w => ar_gatheritemList.Select(s => s.pk_gatherbill).ToList().Contains(w.pk_gatherbill) && w.billstatus == "1").Select(s => s.pk_gatherbill).ToList();
  60. #endregion
  61. var i = 1;
  62. #region 接口方式
  63. // 向NC插入数据
  64. foreach (var item in idList)
  65. {
  66. string createTime = "";
  67. string modifyTime = "";
  68. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  69. // 如果NC单据号为空,说明没有传入过NC,此时跳过
  70. if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
  71. {
  72. }
  73. else
  74. {
  75. continue;
  76. }
  77. // 如果NC单据号为空,说明没有传入过NC,此时跳过
  78. if (ydDataSource.FirstOrDefault(f => f.Key == "radioField_m06hhw2p").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["radioField_m06hhw2p"].ToString()) && ydDataSource["radioField_m06hhw2p"].ToString() == "回款完成")
  79. {
  80. LogHelper.WriteLog("", "回款完成,跳过");
  81. continue;
  82. }
  83. else
  84. {
  85. }
  86. LogHelper.WriteLog("", "【序号 " + i + " / " + idList.Count + "】" + item + " 开始回写");
  87. i++;
  88. var updateData = new Dictionary<string, string>();
  89. var billno = ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value.ToString();
  90. LogHelper.WriteLog(billno, "billno");
  91. LogHelper.WriteLog(JsonConvert.SerializeObject(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrmz8ehi")), "numberField_lrmz8ehi");
  92. LogHelper.WriteLog(JsonConvert.SerializeObject(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrpp7wpi")), "numberField_lrpp7wpi");
  93. #region 履约保证金
  94. if (ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrmz8ehi").Value != null)
  95. {
  96. var baData = ct_bondapplyList.FirstOrDefault(f => f.billno == billno);
  97. LogHelper.WriteLog(JsonConvert.SerializeObject(baData), "baData");
  98. var giData = ar_gatheritemList.Where(w => w.src_billid == baData.pk_bondapply && ar_gatherbillList.Contains(w.pk_gatherbill)).ToList();
  99. LogHelper.WriteLog(JsonConvert.SerializeObject(giData), "giData");
  100. if (giData.Count > 0)
  101. {
  102. var ncMoney = giData.Sum(s => s.money_cr);
  103. var lvMoney = Convert.ToDecimal(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrmz8ehi").Value.ToString());
  104. var syMoney = Convert.ToDecimal(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrpp7wph").Value.ToString());
  105. LogHelper.WriteLog(JsonConvert.SerializeObject(lvMoney), "lvMoney");
  106. LogHelper.WriteLog(JsonConvert.SerializeObject(syMoney), "syMoney");
  107. if (ncMoney > lvMoney)
  108. {
  109. // 当收款 > 保证金总额
  110. // 剩余金额 = 0
  111. updateData.Add("numberField_lrpp7wph", "0");
  112. updateData.Add("radioField_m06hhw2p", "回款完成");
  113. }
  114. else if (ncMoney == lvMoney)
  115. {
  116. // 当收款 == 保证金总额
  117. // 剩余金额 = 0
  118. updateData.Add("numberField_lrpp7wph", "0");
  119. updateData.Add("radioField_m06hhw2p", "回款完成");
  120. }
  121. if (ncMoney < lvMoney && ncMoney != syMoney)
  122. {
  123. // 当收款 < 保证金总额
  124. // 剩余金额 = 保证金总额 - 收款
  125. updateData.Add("numberField_lrpp7wph", (lvMoney - ncMoney).ToString("#0.00"));
  126. updateData.Add("radioField_m06hhw2p", "已回款");
  127. }
  128. LogHelper.WriteLog(JsonConvert.SerializeObject(updateData), "数据构建完成");
  129. // 回传状态
  130. updateData.Add("radioField_m4253oqe", "N");
  131. // 回传状态
  132. updateData.Add("textField_m4253oqd", "回传成功");
  133. var ydRes = _dingTalkService.UpdateFormDataById(updateData, item);
  134. LogHelper.WriteLog(JsonConvert.SerializeObject(ydRes), "ydRes 履约 回写完成------------------------------------------------");
  135. }
  136. else
  137. {
  138. updateData.Add("radioField_m06hhw2p", "未回款");
  139. LogHelper.WriteLog("无回款记录", "履约 回写完成------------------------------------------------");
  140. }
  141. }
  142. #endregion
  143. #region 投标保证金
  144. if (ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrpp7wpi").Value != null)
  145. {
  146. var baData = ct_bondapplyList.FirstOrDefault(f => f.billno == billno);
  147. LogHelper.WriteLog(JsonConvert.SerializeObject(baData), "baData");
  148. var giData = ar_gatheritemList.Where(w => w.src_billid == baData.pk_bondapply && ar_gatherbillList.Contains(w.pk_gatherbill)).ToList();
  149. LogHelper.WriteLog(JsonConvert.SerializeObject(giData), "giData");
  150. if (giData.Count > 0)
  151. {
  152. var ncMoney = giData.Sum(s => s.money_cr);
  153. var lvMoney = Convert.ToDecimal(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrpp7wpi").Value.ToString());
  154. var syMoney = Convert.ToDecimal(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrpocd42").Value.ToString());
  155. if (ncMoney > lvMoney)
  156. {
  157. // 当收款 > 保证金总额
  158. // 剩余金额 = 0
  159. updateData.Add("numberField_lrpocd42", "0");
  160. updateData.Add("radioField_m06hhw2p", "回款完成");
  161. }
  162. else if (ncMoney == lvMoney)
  163. {
  164. // 当收款 == 保证金总额
  165. // 剩余金额 = 0
  166. updateData.Add("numberField_lrpocd42", "0");
  167. updateData.Add("radioField_m06hhw2p", "回款完成");
  168. }
  169. if (ncMoney < lvMoney && ncMoney != syMoney)
  170. {
  171. // 当收款 < 保证金总额
  172. // 剩余金额 = 保证金总额 - 收款
  173. updateData.Add("numberField_lrpocd42", (lvMoney - ncMoney).ToString("#0.00"));
  174. updateData.Add("radioField_m06hhw2p", "已回款");
  175. }
  176. LogHelper.WriteLog(JsonConvert.SerializeObject(updateData), "数据构建完成");
  177. // 回传状态
  178. updateData.Add("radioField_m4253oqe", "N");
  179. // 回传状态
  180. updateData.Add("textField_m4253oqd", "回传成功");
  181. var ydRes = _dingTalkService.UpdateFormDataById(updateData, item);
  182. LogHelper.WriteLog(JsonConvert.SerializeObject(ydRes), "ydRes 履约 回写完成------------------------------------------------");
  183. }
  184. else
  185. {
  186. updateData.Add("radioField_m06hhw2p", "未回款");
  187. LogHelper.WriteLog("无回款记录", "履约 回写完成------------------------------------------------");
  188. }
  189. }
  190. #endregion
  191. }
  192. #endregion
  193. }
  194. }
  195. }