FK_XZ_SyncService.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
  1. using HH.YiDaSyncNC.Dtos;
  2. using HH.YiDaSyncNC.Dtos.NC;
  3. using HH.YiDaSyncNC.Helper;
  4. using HH.YiDaSyncNC.Models;
  5. using Newtonsoft.Json;
  6. using SqlSugar;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Configuration;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Xml.Linq;
  14. namespace HH.YiDaSyncNC.DataSync
  15. {
  16. class FK_XZ_SyncService
  17. {
  18. public string _AppType;
  19. public string _SystemToken;
  20. public string _UserId;
  21. public string _FormId;
  22. public SqlSugarClient _db;
  23. public SqlSugarClient _db_nc;
  24. public string _NCApiUrl;
  25. public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
  26. public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
  27. public FK_XZ_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
  28. {
  29. _AppType = AppType;
  30. _SystemToken = SystemToken;
  31. _UserId = UserId;
  32. _FormId = FormId;
  33. _db = db;
  34. _db_nc = db_nc;
  35. _NCApiUrl = NCApiUrl;
  36. }
  37. public class IdCodeModel
  38. {
  39. public int sourceId { get; set; }
  40. public string Id { get; set; }
  41. }
  42. public void DataSync_公积金()
  43. {
  44. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  45. // 宜搭全量数据Id
  46. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"应付\",\"selectField_lwiuvaws\":\"发放公积金\"}");
  47. //var idList = _dingTalkService.GetFormIdList("{\"selectField_lwiuvaws\":\"日常费用付款\",\"selectField_lrnh633d\":\"结付\"}");
  48. //var idList = _dingTalkService.GetFormIdList("{\"textField_lvj2jklf\":\"FK2024070500023\"}");
  49. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  50. #region 获取NC中选项数据的Id
  51. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  52. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  53. #endregion
  54. #region 插入数据
  55. // 向NC插入数据
  56. foreach (var item in idList)
  57. {
  58. string createTime = "";
  59. string modifyTime = "";
  60. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  61. var ncResData = new List<YiDaResDto>();
  62. #region 表头
  63. // 表头
  64. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  65. dataSource.付款类型 = "F3-Cxx-008";
  66. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  67. {
  68. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  69. {
  70. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  71. if (tempData != null)
  72. {
  73. dataSource.组织 = tempData.code; // 组织
  74. }
  75. }
  76. }
  77. dataSource.支付人 = "OA-NC";
  78. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  79. {
  80. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  81. }
  82. dataSource.创建人 = "OA-NC";
  83. dataSource.制单人 = "OA-NC";
  84. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  85. dataSource.生效人 = "OA-NC";
  86. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  87. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  88. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  89. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  90. dataSource.年份 = DateTime.Now.ToString("yyyy");
  91. dataSource.月份 = DateTime.Now.ToString("MM");
  92. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  93. // 价税合计
  94. #endregion
  95. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  96. #region 明细
  97. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  98. {
  99. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  100. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  101. {
  102. foreach (var objItem in detailObjList1)
  103. {
  104. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  105. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  106. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  107. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  108. // 含税金额
  109. detailItem.价税合计 = hsje.ToString();
  110. // 无税金额
  111. detailItem.无税金额 = hsje.ToString();
  112. // 税额
  113. detailItem.税额 = "0";
  114. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  115. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  116. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  117. if (a.Contains("PM"))
  118. detailItem.项目 = a;
  119. else
  120. detailItem.部门 = a;
  121. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  122. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  123. detailList.Add(detailItem);
  124. }
  125. }
  126. }
  127. #endregion
  128. dataSource.明细 = detailList;
  129. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  130. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  131. {
  132. var resData = new YiDaResDto();
  133. resData.bSuccess = false;
  134. resData.syncTime = DateTime.Now;
  135. resData.ncNo = "";
  136. resData.log = "付款银行账户为空,NC无法执行审批操作";
  137. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  138. continue;
  139. }
  140. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  141. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  142. XElement xE = XElement.Parse(results);
  143. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  144. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  145. if (resultcode == "1")
  146. {
  147. ncResData.Add(new YiDaResDto()
  148. {
  149. bSuccess = true,
  150. ncNo = xE.Element("sendresult").Element("content").Value,
  151. log = "同步成功!"
  152. });
  153. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  154. foreach (var recitem in recitemData)
  155. {
  156. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  157. recitem.scomment = a.摘要;
  158. _db_nc.Updateable(recitem).ExecuteCommand();
  159. }
  160. }
  161. else
  162. {
  163. ncResData.Add(new YiDaResDto()
  164. {
  165. bSuccess = false,
  166. ncNo = "",
  167. log = "同步失败!原因为【" + resultdescription + "】!"
  168. });
  169. }
  170. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  171. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  172. if (results_付款单审核.state == 0)
  173. {
  174. ncResData.Add(new YiDaResDto()
  175. {
  176. bSuccess = true,
  177. ncNo = "",
  178. log = "同步成功!"
  179. });
  180. }
  181. else
  182. {
  183. ncResData.Add(new YiDaResDto()
  184. {
  185. bSuccess = false,
  186. ncNo = "",
  187. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  188. });
  189. }
  190. var finalResData = new YiDaResDto();
  191. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  192. {
  193. finalResData.bSuccess = false;
  194. finalResData.syncTime = DateTime.Now;
  195. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  196. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  197. }
  198. else
  199. {
  200. finalResData.bSuccess = true;
  201. finalResData.syncTime = DateTime.Now;
  202. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  203. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  204. }
  205. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  206. }
  207. #endregion
  208. }
  209. public void DataSync_社保()
  210. {
  211. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  212. // 宜搭全量数据Id
  213. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"应付\",\"selectField_lwiuvaws\":\"发放社保\"}");
  214. //var idList = _dingTalkService.GetFormIdList("{\"selectField_lwiuvaws\":\"日常费用付款\",\"selectField_lrnh633d\":\"结付\"}");
  215. //var idList = _dingTalkService.GetFormIdList("{\"textField_lvj2jklf\":\"FK2024070500023\"}");
  216. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  217. #region 获取NC中选项数据的Id
  218. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  219. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  220. #endregion
  221. #region 插入数据
  222. // 向NC插入数据
  223. foreach (var item in idList)
  224. {
  225. string createTime = "";
  226. string modifyTime = "";
  227. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  228. var ncResData = new List<YiDaResDto>();
  229. #region 表头
  230. // 表头
  231. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  232. dataSource.付款类型 = "F3-Cxx-009";
  233. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  234. {
  235. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  236. {
  237. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  238. if (tempData != null)
  239. {
  240. dataSource.组织 = tempData.code; // 组织
  241. }
  242. }
  243. }
  244. dataSource.支付人 = "OA-NC";
  245. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  246. {
  247. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  248. }
  249. dataSource.创建人 = "OA-NC";
  250. dataSource.制单人 = "OA-NC";
  251. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  252. dataSource.生效人 = "OA-NC";
  253. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  254. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  255. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  256. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  257. dataSource.年份 = DateTime.Now.ToString("yyyy");
  258. dataSource.月份 = DateTime.Now.ToString("MM");
  259. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  260. // 价税合计
  261. #endregion
  262. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  263. #region 明细
  264. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  265. {
  266. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  267. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  268. {
  269. foreach (var objItem in detailObjList1)
  270. {
  271. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  272. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  273. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  274. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  275. // 含税金额
  276. detailItem.价税合计 = hsje.ToString();
  277. // 无税金额
  278. detailItem.无税金额 = hsje.ToString();
  279. // 税额
  280. detailItem.税额 = "0";
  281. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  282. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  283. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  284. if (a.Contains("PM"))
  285. detailItem.项目 = a;
  286. else
  287. detailItem.部门 = a;
  288. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  289. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  290. detailList.Add(detailItem);
  291. }
  292. }
  293. }
  294. #endregion
  295. dataSource.明细 = detailList;
  296. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  297. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  298. {
  299. var resData = new YiDaResDto();
  300. resData.bSuccess = false;
  301. resData.syncTime = DateTime.Now;
  302. resData.ncNo = "";
  303. resData.log = "付款银行账户为空,NC无法执行审批操作";
  304. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  305. continue;
  306. }
  307. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  308. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  309. XElement xE = XElement.Parse(results);
  310. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  311. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  312. if (resultcode == "1")
  313. {
  314. ncResData.Add(new YiDaResDto()
  315. {
  316. bSuccess = true,
  317. ncNo = xE.Element("sendresult").Element("content").Value,
  318. log = "同步成功!"
  319. });
  320. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  321. foreach (var recitem in recitemData)
  322. {
  323. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  324. recitem.scomment = a.摘要;
  325. _db_nc.Updateable(recitem).ExecuteCommand();
  326. }
  327. }
  328. else
  329. {
  330. ncResData.Add(new YiDaResDto()
  331. {
  332. bSuccess = false,
  333. ncNo = "",
  334. log = "同步失败!原因为【" + resultdescription + "】!"
  335. });
  336. }
  337. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  338. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  339. if (results_付款单审核.state == 0)
  340. {
  341. ncResData.Add(new YiDaResDto()
  342. {
  343. bSuccess = true,
  344. ncNo = "",
  345. log = "同步成功!"
  346. });
  347. }
  348. else
  349. {
  350. ncResData.Add(new YiDaResDto()
  351. {
  352. bSuccess = false,
  353. ncNo = "",
  354. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  355. });
  356. }
  357. var finalResData = new YiDaResDto();
  358. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  359. {
  360. finalResData.bSuccess = false;
  361. finalResData.syncTime = DateTime.Now;
  362. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  363. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  364. }
  365. else
  366. {
  367. finalResData.bSuccess = true;
  368. finalResData.syncTime = DateTime.Now;
  369. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  370. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  371. }
  372. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  373. }
  374. #endregion
  375. }
  376. }
  377. }