FK_XZ_SyncService.cs 59 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365
  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. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"发放公积金\"}"));
  48. //var idList = _dingTalkService.GetFormIdList("{\"selectField_lwiuvaws\":\"日常费用付款\",\"selectField_lrnh633d\":\"结付\"}");
  49. //var idList = _dingTalkService.GetFormIdList("{\"textField_lvj2jklf\":\"FK2024070500023\"}");
  50. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  51. #region 获取NC中选项数据的Id
  52. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  53. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  54. #endregion
  55. #region 插入数据
  56. // 向NC插入数据
  57. foreach (var item in idList)
  58. {
  59. string createTime = "";
  60. string modifyTime = "";
  61. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  62. var ncResData = new List<YiDaResDto>();
  63. #region 表头
  64. // 表头
  65. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  66. dataSource.付款类型 = "F3-Cxx-008";
  67. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  68. {
  69. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  70. {
  71. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  72. if (tempData != null)
  73. {
  74. dataSource.组织 = tempData.code; // 组织
  75. }
  76. }
  77. }
  78. dataSource.支付人 = "OA-NC";
  79. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  80. {
  81. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  82. }
  83. dataSource.创建人 = "OA-NC";
  84. dataSource.制单人 = "OA-NC";
  85. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  86. dataSource.生效人 = "OA-NC";
  87. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  88. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  89. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  90. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  91. dataSource.年份 = DateTime.Now.ToString("yyyy");
  92. dataSource.月份 = DateTime.Now.ToString("MM");
  93. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  94. // 价税合计
  95. #endregion
  96. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  97. #region 明细
  98. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  99. {
  100. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  101. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  102. {
  103. foreach (var objItem in detailObjList1)
  104. {
  105. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  106. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  107. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  108. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  109. // 含税金额
  110. detailItem.价税合计 = hsje.ToString();
  111. // 无税金额
  112. detailItem.无税金额 = hsje.ToString();
  113. // 税额
  114. detailItem.税额 = "0";
  115. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  116. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  117. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  118. if (a.Contains("PM"))
  119. detailItem.项目 = a;
  120. else
  121. detailItem.部门 = a;
  122. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  123. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  124. detailList.Add(detailItem);
  125. }
  126. }
  127. }
  128. #endregion
  129. dataSource.明细 = detailList;
  130. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  131. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  132. {
  133. var resData = new YiDaResDto();
  134. resData.bSuccess = false;
  135. resData.syncTime = DateTime.Now;
  136. resData.ncNo = "";
  137. resData.log = "付款银行账户为空,NC无法执行审批操作";
  138. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  139. continue;
  140. }
  141. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  142. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  143. XElement xE = XElement.Parse(results);
  144. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  145. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  146. if (resultcode == "1")
  147. {
  148. ncResData.Add(new YiDaResDto()
  149. {
  150. bSuccess = true,
  151. ncNo = xE.Element("sendresult").Element("content").Value,
  152. log = "同步成功!"
  153. });
  154. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  155. foreach (var recitem in recitemData)
  156. {
  157. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  158. recitem.scomment = a.摘要;
  159. _db_nc.Updateable(recitem).ExecuteCommand();
  160. }
  161. }
  162. else
  163. {
  164. ncResData.Add(new YiDaResDto()
  165. {
  166. bSuccess = false,
  167. ncNo = "",
  168. log = "同步失败!原因为【" + resultdescription + "】!"
  169. });
  170. }
  171. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  172. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  173. if (results_付款单审核.state == 0)
  174. {
  175. ncResData.Add(new YiDaResDto()
  176. {
  177. bSuccess = true,
  178. ncNo = "",
  179. log = "同步成功!"
  180. });
  181. }
  182. else
  183. {
  184. ncResData.Add(new YiDaResDto()
  185. {
  186. bSuccess = false,
  187. ncNo = "",
  188. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  189. });
  190. }
  191. var finalResData = new YiDaResDto();
  192. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  193. {
  194. finalResData.bSuccess = false;
  195. finalResData.syncTime = DateTime.Now;
  196. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  197. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  198. }
  199. else
  200. {
  201. finalResData.bSuccess = true;
  202. finalResData.syncTime = DateTime.Now;
  203. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  204. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  205. }
  206. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  207. }
  208. #endregion
  209. }
  210. public void DataSync_社保()
  211. {
  212. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  213. // 宜搭全量数据Id
  214. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"应付\",\"selectField_lwiuvaws\":\"发放社保\"}");
  215. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"发放社保\"}"));
  216. //var idList = _dingTalkService.GetFormIdList("{\"selectField_lwiuvaws\":\"日常费用付款\",\"selectField_lrnh633d\":\"结付\"}");
  217. //var idList = _dingTalkService.GetFormIdList("{\"textField_lvj2jklf\":\"FK2024070500023\"}");
  218. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  219. #region 获取NC中选项数据的Id
  220. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  221. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  222. #endregion
  223. #region 插入数据
  224. // 向NC插入数据
  225. foreach (var item in idList)
  226. {
  227. string createTime = "";
  228. string modifyTime = "";
  229. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  230. var ncResData = new List<YiDaResDto>();
  231. #region 表头
  232. // 表头
  233. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  234. dataSource.付款类型 = "F3-Cxx-009";
  235. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  236. {
  237. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  238. {
  239. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  240. if (tempData != null)
  241. {
  242. dataSource.组织 = tempData.code; // 组织
  243. }
  244. }
  245. }
  246. dataSource.支付人 = "OA-NC";
  247. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  248. {
  249. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  250. }
  251. dataSource.创建人 = "OA-NC";
  252. dataSource.制单人 = "OA-NC";
  253. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  254. dataSource.生效人 = "OA-NC";
  255. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  256. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  257. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  258. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  259. dataSource.年份 = DateTime.Now.ToString("yyyy");
  260. dataSource.月份 = DateTime.Now.ToString("MM");
  261. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  262. // 价税合计
  263. #endregion
  264. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  265. #region 明细
  266. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  267. {
  268. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  269. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  270. {
  271. foreach (var objItem in detailObjList1)
  272. {
  273. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  274. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  275. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  276. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  277. // 含税金额
  278. detailItem.价税合计 = hsje.ToString();
  279. // 无税金额
  280. detailItem.无税金额 = hsje.ToString();
  281. // 税额
  282. detailItem.税额 = "0";
  283. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  284. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  285. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  286. if (a.Contains("PM"))
  287. detailItem.项目 = a;
  288. else
  289. detailItem.部门 = a;
  290. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  291. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  292. detailList.Add(detailItem);
  293. }
  294. }
  295. }
  296. #endregion
  297. dataSource.明细 = detailList;
  298. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  299. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  300. {
  301. var resData = new YiDaResDto();
  302. resData.bSuccess = false;
  303. resData.syncTime = DateTime.Now;
  304. resData.ncNo = "";
  305. resData.log = "付款银行账户为空,NC无法执行审批操作";
  306. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  307. continue;
  308. }
  309. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  310. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  311. XElement xE = XElement.Parse(results);
  312. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  313. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  314. if (resultcode == "1")
  315. {
  316. ncResData.Add(new YiDaResDto()
  317. {
  318. bSuccess = true,
  319. ncNo = xE.Element("sendresult").Element("content").Value,
  320. log = "同步成功!"
  321. });
  322. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  323. foreach (var recitem in recitemData)
  324. {
  325. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  326. recitem.scomment = a.摘要;
  327. _db_nc.Updateable(recitem).ExecuteCommand();
  328. }
  329. }
  330. else
  331. {
  332. ncResData.Add(new YiDaResDto()
  333. {
  334. bSuccess = false,
  335. ncNo = "",
  336. log = "同步失败!原因为【" + resultdescription + "】!"
  337. });
  338. }
  339. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  340. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  341. if (results_付款单审核.state == 0)
  342. {
  343. ncResData.Add(new YiDaResDto()
  344. {
  345. bSuccess = true,
  346. ncNo = "",
  347. log = "同步成功!"
  348. });
  349. }
  350. else
  351. {
  352. ncResData.Add(new YiDaResDto()
  353. {
  354. bSuccess = false,
  355. ncNo = "",
  356. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  357. });
  358. }
  359. var finalResData = new YiDaResDto();
  360. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  361. {
  362. finalResData.bSuccess = false;
  363. finalResData.syncTime = DateTime.Now;
  364. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  365. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  366. }
  367. else
  368. {
  369. finalResData.bSuccess = true;
  370. finalResData.syncTime = DateTime.Now;
  371. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  372. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  373. }
  374. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  375. }
  376. #endregion
  377. }
  378. public void DataSync_薪资()
  379. {
  380. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  381. // 宜搭全量数据Id
  382. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"薪资计提\"}");
  383. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"薪资发放\"}"));
  384. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  385. #region 获取NC中选项数据的Id
  386. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  387. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  388. #endregion
  389. #region 插入数据
  390. // 向NC插入数据
  391. foreach (var item in idList)
  392. {
  393. string createTime = "";
  394. string modifyTime = "";
  395. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  396. var ncResData = new List<YiDaResDto>();
  397. #region 表头
  398. // 表头
  399. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  400. dataSource.付款类型 = "F3-Cxx-007";
  401. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  402. {
  403. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  404. {
  405. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  406. if (tempData != null)
  407. {
  408. dataSource.组织 = tempData.code; // 组织
  409. }
  410. }
  411. }
  412. dataSource.支付人 = "OA-NC";
  413. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  414. {
  415. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  416. }
  417. dataSource.创建人 = "OA-NC";
  418. dataSource.制单人 = "OA-NC";
  419. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  420. dataSource.生效人 = "OA-NC";
  421. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  422. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  423. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  424. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  425. dataSource.年份 = DateTime.Now.ToString("yyyy");
  426. dataSource.月份 = DateTime.Now.ToString("MM");
  427. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  428. // 价税合计
  429. #endregion
  430. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  431. #region 明细
  432. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  433. {
  434. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  435. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  436. {
  437. foreach (var objItem in detailObjList1)
  438. {
  439. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  440. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  441. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  442. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  443. // 含税金额
  444. detailItem.价税合计 = hsje.ToString();
  445. // 无税金额
  446. detailItem.无税金额 = hsje.ToString();
  447. // 税额
  448. detailItem.税额 = "0";
  449. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  450. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  451. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  452. if (a.Contains("PM"))
  453. detailItem.项目 = a;
  454. else
  455. detailItem.部门 = a;
  456. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  457. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  458. detailList.Add(detailItem);
  459. }
  460. }
  461. }
  462. #endregion
  463. dataSource.明细 = detailList;
  464. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  465. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  466. {
  467. var resData = new YiDaResDto();
  468. resData.bSuccess = false;
  469. resData.syncTime = DateTime.Now;
  470. resData.ncNo = "";
  471. resData.log = "付款银行账户为空,NC无法执行审批操作";
  472. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  473. continue;
  474. }
  475. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  476. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  477. XElement xE = XElement.Parse(results);
  478. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  479. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  480. if (resultcode == "1")
  481. {
  482. ncResData.Add(new YiDaResDto()
  483. {
  484. bSuccess = true,
  485. ncNo = xE.Element("sendresult").Element("content").Value,
  486. log = "同步成功!"
  487. });
  488. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  489. foreach (var recitem in recitemData)
  490. {
  491. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  492. recitem.scomment = a.摘要;
  493. _db_nc.Updateable(recitem).ExecuteCommand();
  494. }
  495. }
  496. else
  497. {
  498. ncResData.Add(new YiDaResDto()
  499. {
  500. bSuccess = false,
  501. ncNo = "",
  502. log = "同步失败!原因为【" + resultdescription + "】!"
  503. });
  504. }
  505. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  506. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  507. if (results_付款单审核.state == 0)
  508. {
  509. ncResData.Add(new YiDaResDto()
  510. {
  511. bSuccess = true,
  512. ncNo = "",
  513. log = "同步成功!"
  514. });
  515. }
  516. else
  517. {
  518. ncResData.Add(new YiDaResDto()
  519. {
  520. bSuccess = false,
  521. ncNo = "",
  522. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  523. });
  524. }
  525. var finalResData = new YiDaResDto();
  526. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  527. {
  528. finalResData.bSuccess = false;
  529. finalResData.syncTime = DateTime.Now;
  530. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  531. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  532. }
  533. else
  534. {
  535. finalResData.bSuccess = true;
  536. finalResData.syncTime = DateTime.Now;
  537. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  538. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  539. }
  540. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  541. }
  542. #endregion
  543. }
  544. public void DataSync_发放人力外包工资()
  545. {
  546. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  547. // 宜搭全量数据Id
  548. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"发放人力外包工资\"}");
  549. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  550. #region 获取NC中选项数据的Id
  551. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  552. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  553. #endregion
  554. #region 插入数据
  555. // 向NC插入数据
  556. foreach (var item in idList)
  557. {
  558. string createTime = "";
  559. string modifyTime = "";
  560. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  561. var ncResData = new List<YiDaResDto>();
  562. #region 表头
  563. // 表头
  564. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  565. dataSource.付款类型 = "F3-Cxx-004";
  566. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  567. {
  568. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  569. {
  570. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  571. if (tempData != null)
  572. {
  573. dataSource.组织 = tempData.code; // 组织
  574. }
  575. }
  576. }
  577. dataSource.支付人 = "OA-NC";
  578. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  579. {
  580. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  581. }
  582. dataSource.创建人 = "OA-NC";
  583. dataSource.制单人 = "OA-NC";
  584. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  585. dataSource.生效人 = "OA-NC";
  586. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  587. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  588. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  589. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  590. dataSource.年份 = DateTime.Now.ToString("yyyy");
  591. dataSource.月份 = DateTime.Now.ToString("MM");
  592. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  593. // 价税合计
  594. #endregion
  595. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  596. #region 明细
  597. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  598. {
  599. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  600. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  601. {
  602. foreach (var objItem in detailObjList1)
  603. {
  604. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  605. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  606. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  607. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  608. // 含税金额
  609. detailItem.价税合计 = hsje.ToString();
  610. // 无税金额
  611. detailItem.无税金额 = hsje.ToString();
  612. // 税额
  613. detailItem.税额 = "0";
  614. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  615. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  616. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  617. if (a.Contains("PM"))
  618. detailItem.项目 = a;
  619. else
  620. detailItem.部门 = a;
  621. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  622. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  623. detailList.Add(detailItem);
  624. }
  625. }
  626. }
  627. #endregion
  628. dataSource.明细 = detailList;
  629. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  630. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  631. {
  632. var resData = new YiDaResDto();
  633. resData.bSuccess = false;
  634. resData.syncTime = DateTime.Now;
  635. resData.ncNo = "";
  636. resData.log = "付款银行账户为空,NC无法执行审批操作";
  637. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  638. continue;
  639. }
  640. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  641. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  642. XElement xE = XElement.Parse(results);
  643. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  644. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  645. if (resultcode == "1")
  646. {
  647. ncResData.Add(new YiDaResDto()
  648. {
  649. bSuccess = true,
  650. ncNo = xE.Element("sendresult").Element("content").Value,
  651. log = "同步成功!"
  652. });
  653. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  654. foreach (var recitem in recitemData)
  655. {
  656. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  657. recitem.scomment = a.摘要;
  658. _db_nc.Updateable(recitem).ExecuteCommand();
  659. }
  660. }
  661. else
  662. {
  663. ncResData.Add(new YiDaResDto()
  664. {
  665. bSuccess = false,
  666. ncNo = "",
  667. log = "同步失败!原因为【" + resultdescription + "】!"
  668. });
  669. }
  670. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  671. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  672. if (results_付款单审核.state == 0)
  673. {
  674. ncResData.Add(new YiDaResDto()
  675. {
  676. bSuccess = true,
  677. ncNo = "",
  678. log = "同步成功!"
  679. });
  680. }
  681. else
  682. {
  683. ncResData.Add(new YiDaResDto()
  684. {
  685. bSuccess = false,
  686. ncNo = "",
  687. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  688. });
  689. }
  690. var finalResData = new YiDaResDto();
  691. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  692. {
  693. finalResData.bSuccess = false;
  694. finalResData.syncTime = DateTime.Now;
  695. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  696. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  697. }
  698. else
  699. {
  700. finalResData.bSuccess = true;
  701. finalResData.syncTime = DateTime.Now;
  702. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  703. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  704. }
  705. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  706. }
  707. #endregion
  708. }
  709. public void DataSync_公积金_预付()
  710. {
  711. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  712. // 宜搭全量数据Id
  713. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"发放公积金\"}");
  714. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  715. #region 获取NC中选项数据的Id
  716. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  717. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  718. #endregion
  719. #region 插入数据
  720. // 向NC插入数据
  721. foreach (var item in idList)
  722. {
  723. string createTime = "";
  724. string modifyTime = "";
  725. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  726. var ncResData = new List<YiDaResDto>();
  727. #region 表头
  728. // 表头
  729. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  730. dataSource.付款类型 = "F3-Cxx-008";
  731. dataSource.是否预付 = "1";
  732. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  733. {
  734. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  735. {
  736. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  737. if (tempData != null)
  738. {
  739. dataSource.组织 = tempData.code; // 组织
  740. }
  741. }
  742. }
  743. dataSource.支付人 = "OA-NC";
  744. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  745. {
  746. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  747. }
  748. dataSource.创建人 = "OA-NC";
  749. dataSource.制单人 = "OA-NC";
  750. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  751. dataSource.生效人 = "OA-NC";
  752. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  753. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  754. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  755. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  756. dataSource.年份 = DateTime.Now.ToString("yyyy");
  757. dataSource.月份 = DateTime.Now.ToString("MM");
  758. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  759. // 价税合计
  760. #endregion
  761. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  762. #region 明细
  763. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  764. {
  765. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  766. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  767. {
  768. foreach (var objItem in detailObjList1)
  769. {
  770. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  771. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  772. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  773. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  774. // 含税金额
  775. detailItem.价税合计 = hsje.ToString();
  776. // 无税金额
  777. detailItem.无税金额 = hsje.ToString();
  778. // 税额
  779. detailItem.税额 = "0";
  780. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  781. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  782. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  783. if (a.Contains("PM"))
  784. detailItem.项目 = a;
  785. else
  786. detailItem.部门 = a;
  787. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  788. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  789. detailList.Add(detailItem);
  790. }
  791. }
  792. }
  793. #endregion
  794. dataSource.明细 = detailList;
  795. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  796. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  797. {
  798. var resData = new YiDaResDto();
  799. resData.bSuccess = false;
  800. resData.syncTime = DateTime.Now;
  801. resData.ncNo = "";
  802. resData.log = "付款银行账户为空,NC无法执行审批操作";
  803. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  804. continue;
  805. }
  806. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  807. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  808. XElement xE = XElement.Parse(results);
  809. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  810. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  811. if (resultcode == "1")
  812. {
  813. ncResData.Add(new YiDaResDto()
  814. {
  815. bSuccess = true,
  816. ncNo = xE.Element("sendresult").Element("content").Value,
  817. log = "同步成功!"
  818. });
  819. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  820. foreach (var recitem in recitemData)
  821. {
  822. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  823. recitem.scomment = a.摘要;
  824. _db_nc.Updateable(recitem).ExecuteCommand();
  825. }
  826. }
  827. else
  828. {
  829. ncResData.Add(new YiDaResDto()
  830. {
  831. bSuccess = false,
  832. ncNo = "",
  833. log = "同步失败!原因为【" + resultdescription + "】!"
  834. });
  835. }
  836. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  837. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  838. if (results_付款单审核.state == 0)
  839. {
  840. ncResData.Add(new YiDaResDto()
  841. {
  842. bSuccess = true,
  843. ncNo = "",
  844. log = "同步成功!"
  845. });
  846. }
  847. else
  848. {
  849. ncResData.Add(new YiDaResDto()
  850. {
  851. bSuccess = false,
  852. ncNo = "",
  853. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  854. });
  855. }
  856. var finalResData = new YiDaResDto();
  857. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  858. {
  859. finalResData.bSuccess = false;
  860. finalResData.syncTime = DateTime.Now;
  861. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  862. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  863. }
  864. else
  865. {
  866. finalResData.bSuccess = true;
  867. finalResData.syncTime = DateTime.Now;
  868. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  869. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  870. }
  871. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  872. }
  873. #endregion
  874. }
  875. public void DataSync_社保_预付()
  876. {
  877. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  878. // 宜搭全量数据Id
  879. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"发放社保\"}");
  880. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  881. #region 获取NC中选项数据的Id
  882. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  883. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  884. #endregion
  885. #region 插入数据
  886. // 向NC插入数据
  887. foreach (var item in idList)
  888. {
  889. string createTime = "";
  890. string modifyTime = "";
  891. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  892. var ncResData = new List<YiDaResDto>();
  893. #region 表头
  894. // 表头
  895. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  896. dataSource.付款类型 = "F3-Cxx-009";
  897. dataSource.是否预付 = "1";
  898. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  899. {
  900. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  901. {
  902. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  903. if (tempData != null)
  904. {
  905. dataSource.组织 = tempData.code; // 组织
  906. }
  907. }
  908. }
  909. dataSource.支付人 = "OA-NC";
  910. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  911. {
  912. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  913. }
  914. dataSource.创建人 = "OA-NC";
  915. dataSource.制单人 = "OA-NC";
  916. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  917. dataSource.生效人 = "OA-NC";
  918. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  919. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  920. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  921. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  922. dataSource.年份 = DateTime.Now.ToString("yyyy");
  923. dataSource.月份 = DateTime.Now.ToString("MM");
  924. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  925. // 价税合计
  926. #endregion
  927. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  928. #region 明细
  929. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  930. {
  931. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  932. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  933. {
  934. foreach (var objItem in detailObjList1)
  935. {
  936. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  937. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  938. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  939. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  940. // 含税金额
  941. detailItem.价税合计 = hsje.ToString();
  942. // 无税金额
  943. detailItem.无税金额 = hsje.ToString();
  944. // 税额
  945. detailItem.税额 = "0";
  946. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  947. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  948. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  949. if (a.Contains("PM"))
  950. detailItem.项目 = a;
  951. else
  952. detailItem.部门 = a;
  953. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  954. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  955. detailList.Add(detailItem);
  956. }
  957. }
  958. }
  959. #endregion
  960. dataSource.明细 = detailList;
  961. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  962. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  963. {
  964. var resData = new YiDaResDto();
  965. resData.bSuccess = false;
  966. resData.syncTime = DateTime.Now;
  967. resData.ncNo = "";
  968. resData.log = "付款银行账户为空,NC无法执行审批操作";
  969. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  970. continue;
  971. }
  972. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  973. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  974. XElement xE = XElement.Parse(results);
  975. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  976. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  977. if (resultcode == "1")
  978. {
  979. ncResData.Add(new YiDaResDto()
  980. {
  981. bSuccess = true,
  982. ncNo = xE.Element("sendresult").Element("content").Value,
  983. log = "同步成功!"
  984. });
  985. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  986. foreach (var recitem in recitemData)
  987. {
  988. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  989. recitem.scomment = a.摘要;
  990. _db_nc.Updateable(recitem).ExecuteCommand();
  991. }
  992. }
  993. else
  994. {
  995. ncResData.Add(new YiDaResDto()
  996. {
  997. bSuccess = false,
  998. ncNo = "",
  999. log = "同步失败!原因为【" + resultdescription + "】!"
  1000. });
  1001. }
  1002. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  1003. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  1004. if (results_付款单审核.state == 0)
  1005. {
  1006. ncResData.Add(new YiDaResDto()
  1007. {
  1008. bSuccess = true,
  1009. ncNo = "",
  1010. log = "同步成功!"
  1011. });
  1012. }
  1013. else
  1014. {
  1015. ncResData.Add(new YiDaResDto()
  1016. {
  1017. bSuccess = false,
  1018. ncNo = "",
  1019. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  1020. });
  1021. }
  1022. var finalResData = new YiDaResDto();
  1023. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  1024. {
  1025. finalResData.bSuccess = false;
  1026. finalResData.syncTime = DateTime.Now;
  1027. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  1028. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  1029. }
  1030. else
  1031. {
  1032. finalResData.bSuccess = true;
  1033. finalResData.syncTime = DateTime.Now;
  1034. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  1035. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  1036. }
  1037. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  1038. }
  1039. #endregion
  1040. }
  1041. }
  1042. }