FK_XZ_SyncService.cs 82 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861
  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. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"F3-Cxx-008\"}"));
  49. //var idList = _dingTalkService.GetFormIdList("{\"selectField_lwiuvaws\":\"日常费用付款\",\"selectField_lrnh633d\":\"结付\"}");
  50. //var idList = _dingTalkService.GetFormIdList("{\"textField_lvj2jklf\":\"FK2024070500023\"}");
  51. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  52. #region 获取NC中选项数据的Id
  53. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  54. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  55. #endregion
  56. #region 插入数据
  57. // 向NC插入数据
  58. foreach (var item in idList.Distinct())
  59. {
  60. string createTime = "";
  61. string modifyTime = "";
  62. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  63. var ncResData = new List<YiDaResDto>();
  64. #region 表头
  65. // 表头
  66. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  67. dataSource.付款类型 = "F3-Cxx-008";
  68. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  69. {
  70. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  71. {
  72. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  73. if (tempData != null)
  74. {
  75. dataSource.组织 = tempData.code; // 组织
  76. }
  77. }
  78. }
  79. dataSource.支付人 = "OA-NC";
  80. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  81. {
  82. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  83. }
  84. dataSource.创建人 = "OA-NC";
  85. dataSource.制单人 = "OA-NC";
  86. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  87. dataSource.生效人 = "OA-NC";
  88. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  89. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  90. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  91. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  92. dataSource.年份 = DateTime.Now.ToString("yyyy");
  93. dataSource.月份 = DateTime.Now.ToString("MM");
  94. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  95. // 价税合计
  96. #endregion
  97. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  98. #region 明细
  99. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  100. {
  101. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  102. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  103. {
  104. foreach (var objItem in detailObjList1)
  105. {
  106. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  107. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  108. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  109. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  110. // 含税金额
  111. detailItem.价税合计 = hsje.ToString();
  112. // 无税金额
  113. detailItem.无税金额 = hsje.ToString();
  114. // 税额
  115. detailItem.税额 = "0";
  116. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  117. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  118. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  119. if (a.Contains("PM"))
  120. detailItem.项目 = a;
  121. else
  122. detailItem.部门 = a;
  123. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  124. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  125. detailList.Add(detailItem);
  126. }
  127. }
  128. }
  129. #endregion
  130. dataSource.明细 = detailList;
  131. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  132. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  133. {
  134. var resData = new YiDaResDto();
  135. resData.bSuccess = false;
  136. resData.syncTime = DateTime.Now;
  137. resData.ncNo = "";
  138. resData.log = "付款银行账户为空,NC无法执行审批操作";
  139. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  140. continue;
  141. }
  142. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  143. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  144. XElement xE = XElement.Parse(results);
  145. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  146. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  147. if (resultcode == "1")
  148. {
  149. ncResData.Add(new YiDaResDto()
  150. {
  151. bSuccess = true,
  152. ncNo = xE.Element("sendresult").Element("content").Value,
  153. log = "同步成功!"
  154. });
  155. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  156. foreach (var recitem in recitemData)
  157. {
  158. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  159. recitem.scomment = a.摘要;
  160. _db_nc.Updateable(recitem).ExecuteCommand();
  161. }
  162. }
  163. else
  164. {
  165. ncResData.Add(new YiDaResDto()
  166. {
  167. bSuccess = false,
  168. ncNo = "",
  169. log = "同步失败!原因为【" + resultdescription + "】!"
  170. });
  171. }
  172. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  173. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  174. if (results_付款单审核.state == 0)
  175. {
  176. ncResData.Add(new YiDaResDto()
  177. {
  178. bSuccess = true,
  179. ncNo = "",
  180. log = "同步成功!"
  181. });
  182. }
  183. else
  184. {
  185. ncResData.Add(new YiDaResDto()
  186. {
  187. bSuccess = false,
  188. ncNo = "",
  189. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  190. });
  191. }
  192. var finalResData = new YiDaResDto();
  193. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  194. {
  195. finalResData.bSuccess = false;
  196. finalResData.syncTime = DateTime.Now;
  197. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  198. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  199. }
  200. else
  201. {
  202. finalResData.bSuccess = true;
  203. finalResData.syncTime = DateTime.Now;
  204. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  205. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  206. }
  207. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  208. }
  209. #endregion
  210. }
  211. public void DataSync_社保()
  212. {
  213. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  214. // 宜搭全量数据Id
  215. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"应付\",\"selectField_lwiuvaws\":\"发放社保\"}");
  216. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"发放社保\"}"));
  217. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"F3-Cxx-009\"}"));
  218. //var idList = _dingTalkService.GetFormIdList("{\"selectField_lwiuvaws\":\"日常费用付款\",\"selectField_lrnh633d\":\"结付\"}");
  219. //var idList = _dingTalkService.GetFormIdList("{\"textField_lvj2jklf\":\"FK2024070500023\"}");
  220. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  221. #region 获取NC中选项数据的Id
  222. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  223. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  224. #endregion
  225. #region 插入数据
  226. // 向NC插入数据
  227. foreach (var item in idList.Distinct())
  228. {
  229. string createTime = "";
  230. string modifyTime = "";
  231. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  232. var ncResData = new List<YiDaResDto>();
  233. #region 表头
  234. // 表头
  235. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  236. dataSource.付款类型 = "F3-Cxx-009";
  237. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  238. {
  239. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  240. {
  241. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  242. if (tempData != null)
  243. {
  244. dataSource.组织 = tempData.code; // 组织
  245. }
  246. }
  247. }
  248. dataSource.支付人 = "OA-NC";
  249. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  250. {
  251. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  252. }
  253. dataSource.创建人 = "OA-NC";
  254. dataSource.制单人 = "OA-NC";
  255. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  256. dataSource.生效人 = "OA-NC";
  257. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  258. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  259. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  260. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  261. dataSource.年份 = DateTime.Now.ToString("yyyy");
  262. dataSource.月份 = DateTime.Now.ToString("MM");
  263. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  264. // 价税合计
  265. #endregion
  266. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  267. #region 明细
  268. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  269. {
  270. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  271. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  272. {
  273. foreach (var objItem in detailObjList1)
  274. {
  275. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  276. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  277. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  278. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  279. // 含税金额
  280. detailItem.价税合计 = hsje.ToString();
  281. // 无税金额
  282. detailItem.无税金额 = hsje.ToString();
  283. // 税额
  284. detailItem.税额 = "0";
  285. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  286. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  287. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  288. if (a.Contains("PM"))
  289. detailItem.项目 = a;
  290. else
  291. detailItem.部门 = a;
  292. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  293. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  294. detailList.Add(detailItem);
  295. }
  296. }
  297. }
  298. #endregion
  299. dataSource.明细 = detailList;
  300. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  301. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  302. {
  303. var resData = new YiDaResDto();
  304. resData.bSuccess = false;
  305. resData.syncTime = DateTime.Now;
  306. resData.ncNo = "";
  307. resData.log = "付款银行账户为空,NC无法执行审批操作";
  308. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  309. continue;
  310. }
  311. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  312. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  313. XElement xE = XElement.Parse(results);
  314. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  315. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  316. if (resultcode == "1")
  317. {
  318. ncResData.Add(new YiDaResDto()
  319. {
  320. bSuccess = true,
  321. ncNo = xE.Element("sendresult").Element("content").Value,
  322. log = "同步成功!"
  323. });
  324. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  325. foreach (var recitem in recitemData)
  326. {
  327. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  328. recitem.scomment = a.摘要;
  329. _db_nc.Updateable(recitem).ExecuteCommand();
  330. }
  331. }
  332. else
  333. {
  334. ncResData.Add(new YiDaResDto()
  335. {
  336. bSuccess = false,
  337. ncNo = "",
  338. log = "同步失败!原因为【" + resultdescription + "】!"
  339. });
  340. }
  341. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  342. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  343. if (results_付款单审核.state == 0)
  344. {
  345. ncResData.Add(new YiDaResDto()
  346. {
  347. bSuccess = true,
  348. ncNo = "",
  349. log = "同步成功!"
  350. });
  351. }
  352. else
  353. {
  354. ncResData.Add(new YiDaResDto()
  355. {
  356. bSuccess = false,
  357. ncNo = "",
  358. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  359. });
  360. }
  361. var finalResData = new YiDaResDto();
  362. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  363. {
  364. finalResData.bSuccess = false;
  365. finalResData.syncTime = DateTime.Now;
  366. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  367. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  368. }
  369. else
  370. {
  371. finalResData.bSuccess = true;
  372. finalResData.syncTime = DateTime.Now;
  373. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  374. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  375. }
  376. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  377. }
  378. #endregion
  379. }
  380. public void DataSync_薪资()
  381. {
  382. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  383. // 宜搭全量数据Id
  384. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"薪资计提\"}");
  385. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"薪资发放\"}"));
  386. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"F3-Cxx-007\"}"));
  387. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  388. #region 获取NC中选项数据的Id
  389. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  390. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  391. #endregion
  392. #region 插入数据
  393. // 向NC插入数据
  394. foreach (var item in idList.Distinct())
  395. {
  396. string createTime = "";
  397. string modifyTime = "";
  398. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  399. var ncResData = new List<YiDaResDto>();
  400. #region 表头
  401. // 表头
  402. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  403. dataSource.付款类型 = "F3-Cxx-007";
  404. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  405. {
  406. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  407. {
  408. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  409. if (tempData != null)
  410. {
  411. dataSource.组织 = tempData.code; // 组织
  412. }
  413. }
  414. }
  415. dataSource.支付人 = "OA-NC";
  416. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  417. {
  418. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  419. }
  420. dataSource.创建人 = "OA-NC";
  421. dataSource.制单人 = "OA-NC";
  422. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  423. dataSource.生效人 = "OA-NC";
  424. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  425. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  426. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  427. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  428. dataSource.年份 = DateTime.Now.ToString("yyyy");
  429. dataSource.月份 = DateTime.Now.ToString("MM");
  430. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  431. // 价税合计
  432. #endregion
  433. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  434. #region 明细
  435. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  436. {
  437. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  438. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  439. {
  440. foreach (var objItem in detailObjList1)
  441. {
  442. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  443. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  444. object se_;
  445. decimal se = 0;
  446. if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v08", out se_))
  447. {
  448. se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  449. }
  450. object wsje_;
  451. decimal wsje = 0;
  452. if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v09", out wsje_))
  453. {
  454. wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  455. }
  456. // 含税金额
  457. detailItem.价税合计 = hsje.ToString();
  458. // 无税金额
  459. detailItem.无税金额 = wsje.ToString();
  460. // 税额
  461. detailItem.税额 = se.ToString();
  462. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  463. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  464. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  465. if (a.Contains("PM"))
  466. detailItem.项目 = a;
  467. else
  468. detailItem.部门 = a;
  469. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  470. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  471. detailList.Add(detailItem);
  472. }
  473. }
  474. }
  475. #endregion
  476. dataSource.明细 = detailList;
  477. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  478. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  479. {
  480. var resData = new YiDaResDto();
  481. resData.bSuccess = false;
  482. resData.syncTime = DateTime.Now;
  483. resData.ncNo = "";
  484. resData.log = "付款银行账户为空,NC无法执行审批操作";
  485. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  486. continue;
  487. }
  488. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  489. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  490. XElement xE = XElement.Parse(results);
  491. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  492. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  493. if (resultcode == "1")
  494. {
  495. ncResData.Add(new YiDaResDto()
  496. {
  497. bSuccess = true,
  498. ncNo = xE.Element("sendresult").Element("content").Value,
  499. log = "同步成功!"
  500. });
  501. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  502. foreach (var recitem in recitemData)
  503. {
  504. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  505. recitem.scomment = a.摘要;
  506. _db_nc.Updateable(recitem).ExecuteCommand();
  507. }
  508. }
  509. else
  510. {
  511. ncResData.Add(new YiDaResDto()
  512. {
  513. bSuccess = false,
  514. ncNo = "",
  515. log = "同步失败!原因为【" + resultdescription + "】!"
  516. });
  517. }
  518. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  519. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  520. if (results_付款单审核.state == 0)
  521. {
  522. ncResData.Add(new YiDaResDto()
  523. {
  524. bSuccess = true,
  525. ncNo = "",
  526. log = "同步成功!"
  527. });
  528. }
  529. else
  530. {
  531. ncResData.Add(new YiDaResDto()
  532. {
  533. bSuccess = false,
  534. ncNo = "",
  535. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  536. });
  537. }
  538. var finalResData = new YiDaResDto();
  539. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  540. {
  541. finalResData.bSuccess = false;
  542. finalResData.syncTime = DateTime.Now;
  543. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  544. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  545. }
  546. else
  547. {
  548. finalResData.bSuccess = true;
  549. finalResData.syncTime = DateTime.Now;
  550. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  551. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  552. }
  553. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  554. }
  555. #endregion
  556. }
  557. public void DataSync_发放人力外包工资()
  558. {
  559. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  560. // 宜搭全量数据Id
  561. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"发放人力外包工资\"}");
  562. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"人力资源外包付款\"}"));
  563. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"F3-Cxx-004\"}"));
  564. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  565. #region 获取NC中选项数据的Id
  566. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  567. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  568. #endregion
  569. #region 插入数据
  570. // 向NC插入数据
  571. foreach (var item in idList.Distinct())
  572. {
  573. string createTime = "";
  574. string modifyTime = "";
  575. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  576. var ncResData = new List<YiDaResDto>();
  577. #region 表头
  578. // 表头
  579. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  580. dataSource.付款类型 = "F3-Cxx-004";
  581. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  582. {
  583. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  584. {
  585. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  586. if (tempData != null)
  587. {
  588. dataSource.组织 = tempData.code; // 组织
  589. }
  590. }
  591. }
  592. dataSource.支付人 = "OA-NC";
  593. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  594. {
  595. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  596. }
  597. dataSource.创建人 = "OA-NC";
  598. dataSource.制单人 = "OA-NC";
  599. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  600. dataSource.生效人 = "OA-NC";
  601. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  602. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  603. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  604. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  605. dataSource.年份 = DateTime.Now.ToString("yyyy");
  606. dataSource.月份 = DateTime.Now.ToString("MM");
  607. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  608. // 价税合计
  609. #endregion
  610. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  611. #region 明细
  612. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  613. {
  614. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  615. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  616. {
  617. foreach (var objItem in detailObjList1)
  618. {
  619. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  620. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  621. object se_;
  622. decimal se = 0;
  623. if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v08", out se_))
  624. {
  625. se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  626. }
  627. object wsje_;
  628. decimal wsje = 0;
  629. if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v09", out wsje_))
  630. {
  631. wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  632. }
  633. // 含税金额
  634. detailItem.价税合计 = hsje.ToString();
  635. // 无税金额
  636. detailItem.无税金额 = wsje.ToString();
  637. // 税额
  638. detailItem.税额 = se.ToString();
  639. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  640. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  641. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  642. if (a.Contains("PM"))
  643. detailItem.项目 = a;
  644. else
  645. detailItem.部门 = a;
  646. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  647. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  648. detailList.Add(detailItem);
  649. }
  650. }
  651. }
  652. #endregion
  653. dataSource.明细 = detailList;
  654. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  655. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  656. {
  657. var resData = new YiDaResDto();
  658. resData.bSuccess = false;
  659. resData.syncTime = DateTime.Now;
  660. resData.ncNo = "";
  661. resData.log = "付款银行账户为空,NC无法执行审批操作";
  662. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  663. continue;
  664. }
  665. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  666. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  667. XElement xE = XElement.Parse(results);
  668. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  669. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  670. if (resultcode == "1")
  671. {
  672. ncResData.Add(new YiDaResDto()
  673. {
  674. bSuccess = true,
  675. ncNo = xE.Element("sendresult").Element("content").Value,
  676. log = "同步成功!"
  677. });
  678. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  679. foreach (var recitem in recitemData)
  680. {
  681. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  682. recitem.scomment = a.摘要;
  683. _db_nc.Updateable(recitem).ExecuteCommand();
  684. }
  685. }
  686. else
  687. {
  688. ncResData.Add(new YiDaResDto()
  689. {
  690. bSuccess = false,
  691. ncNo = "",
  692. log = "同步失败!原因为【" + resultdescription + "】!"
  693. });
  694. }
  695. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  696. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  697. if (results_付款单审核.state == 0)
  698. {
  699. ncResData.Add(new YiDaResDto()
  700. {
  701. bSuccess = true,
  702. ncNo = "",
  703. log = "同步成功!"
  704. });
  705. }
  706. else
  707. {
  708. ncResData.Add(new YiDaResDto()
  709. {
  710. bSuccess = false,
  711. ncNo = "",
  712. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  713. });
  714. }
  715. var finalResData = new YiDaResDto();
  716. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  717. {
  718. finalResData.bSuccess = false;
  719. finalResData.syncTime = DateTime.Now;
  720. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  721. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  722. }
  723. else
  724. {
  725. finalResData.bSuccess = true;
  726. finalResData.syncTime = DateTime.Now;
  727. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  728. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  729. }
  730. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  731. }
  732. #endregion
  733. }
  734. public void DataSync_公积金_预付()
  735. {
  736. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  737. // 宜搭全量数据Id
  738. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"发放公积金\"}");
  739. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"F3-Cxx-008\"}"));
  740. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  741. #region 获取NC中选项数据的Id
  742. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  743. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  744. #endregion
  745. #region 插入数据
  746. // 向NC插入数据
  747. foreach (var item in idList.Distinct())
  748. {
  749. string createTime = "";
  750. string modifyTime = "";
  751. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  752. var ncResData = new List<YiDaResDto>();
  753. #region 表头
  754. // 表头
  755. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  756. dataSource.付款类型 = "F3-Cxx-008";
  757. dataSource.是否预付 = "1";
  758. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  759. {
  760. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  761. {
  762. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  763. if (tempData != null)
  764. {
  765. dataSource.组织 = tempData.code; // 组织
  766. }
  767. }
  768. }
  769. dataSource.支付人 = "OA-NC";
  770. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  771. {
  772. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  773. }
  774. dataSource.创建人 = "OA-NC";
  775. dataSource.制单人 = "OA-NC";
  776. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  777. dataSource.生效人 = "OA-NC";
  778. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  779. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  780. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  781. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  782. dataSource.年份 = DateTime.Now.ToString("yyyy");
  783. dataSource.月份 = DateTime.Now.ToString("MM");
  784. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  785. // 价税合计
  786. #endregion
  787. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  788. #region 明细
  789. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  790. {
  791. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  792. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  793. {
  794. foreach (var objItem in detailObjList1)
  795. {
  796. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  797. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  798. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  799. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  800. // 含税金额
  801. detailItem.价税合计 = hsje.ToString();
  802. // 无税金额
  803. detailItem.无税金额 = hsje.ToString();
  804. // 税额
  805. detailItem.税额 = "0";
  806. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  807. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  808. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  809. if (a.Contains("PM"))
  810. detailItem.项目 = a;
  811. else
  812. detailItem.部门 = a;
  813. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  814. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  815. detailList.Add(detailItem);
  816. }
  817. }
  818. }
  819. #endregion
  820. dataSource.明细 = detailList;
  821. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  822. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  823. {
  824. var resData = new YiDaResDto();
  825. resData.bSuccess = false;
  826. resData.syncTime = DateTime.Now;
  827. resData.ncNo = "";
  828. resData.log = "付款银行账户为空,NC无法执行审批操作";
  829. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  830. continue;
  831. }
  832. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  833. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  834. XElement xE = XElement.Parse(results);
  835. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  836. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  837. if (resultcode == "1")
  838. {
  839. ncResData.Add(new YiDaResDto()
  840. {
  841. bSuccess = true,
  842. ncNo = xE.Element("sendresult").Element("content").Value,
  843. log = "同步成功!"
  844. });
  845. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  846. foreach (var recitem in recitemData)
  847. {
  848. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  849. recitem.scomment = a.摘要;
  850. _db_nc.Updateable(recitem).ExecuteCommand();
  851. }
  852. }
  853. else
  854. {
  855. ncResData.Add(new YiDaResDto()
  856. {
  857. bSuccess = false,
  858. ncNo = "",
  859. log = "同步失败!原因为【" + resultdescription + "】!"
  860. });
  861. }
  862. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  863. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  864. if (results_付款单审核.state == 0)
  865. {
  866. ncResData.Add(new YiDaResDto()
  867. {
  868. bSuccess = true,
  869. ncNo = "",
  870. log = "同步成功!"
  871. });
  872. }
  873. else
  874. {
  875. ncResData.Add(new YiDaResDto()
  876. {
  877. bSuccess = false,
  878. ncNo = "",
  879. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  880. });
  881. }
  882. var finalResData = new YiDaResDto();
  883. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  884. {
  885. finalResData.bSuccess = false;
  886. finalResData.syncTime = DateTime.Now;
  887. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  888. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  889. }
  890. else
  891. {
  892. finalResData.bSuccess = true;
  893. finalResData.syncTime = DateTime.Now;
  894. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  895. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  896. }
  897. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  898. }
  899. #endregion
  900. }
  901. public void DataSync_社保_预付()
  902. {
  903. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  904. // 宜搭全量数据Id
  905. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"发放社保\"}");
  906. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"F3-Cxx-009\"}"));
  907. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  908. #region 获取NC中选项数据的Id
  909. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  910. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  911. #endregion
  912. #region 插入数据
  913. // 向NC插入数据
  914. foreach (var item in idList.Distinct())
  915. {
  916. string createTime = "";
  917. string modifyTime = "";
  918. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  919. var ncResData = new List<YiDaResDto>();
  920. #region 表头
  921. // 表头
  922. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  923. dataSource.付款类型 = "F3-Cxx-009";
  924. dataSource.是否预付 = "1";
  925. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  926. {
  927. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  928. {
  929. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  930. if (tempData != null)
  931. {
  932. dataSource.组织 = tempData.code; // 组织
  933. }
  934. }
  935. }
  936. dataSource.支付人 = "OA-NC";
  937. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  938. {
  939. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  940. }
  941. dataSource.创建人 = "OA-NC";
  942. dataSource.制单人 = "OA-NC";
  943. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  944. dataSource.生效人 = "OA-NC";
  945. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  946. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  947. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  948. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  949. dataSource.年份 = DateTime.Now.ToString("yyyy");
  950. dataSource.月份 = DateTime.Now.ToString("MM");
  951. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  952. // 价税合计
  953. #endregion
  954. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  955. #region 明细
  956. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  957. {
  958. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  959. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  960. {
  961. foreach (var objItem in detailObjList1)
  962. {
  963. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  964. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  965. //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  966. //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  967. // 含税金额
  968. detailItem.价税合计 = hsje.ToString();
  969. // 无税金额
  970. detailItem.无税金额 = hsje.ToString();
  971. // 税额
  972. detailItem.税额 = "0";
  973. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  974. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  975. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  976. if (a.Contains("PM"))
  977. detailItem.项目 = a;
  978. else
  979. detailItem.部门 = a;
  980. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  981. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  982. detailList.Add(detailItem);
  983. }
  984. }
  985. }
  986. #endregion
  987. dataSource.明细 = detailList;
  988. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  989. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  990. {
  991. var resData = new YiDaResDto();
  992. resData.bSuccess = false;
  993. resData.syncTime = DateTime.Now;
  994. resData.ncNo = "";
  995. resData.log = "付款银行账户为空,NC无法执行审批操作";
  996. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  997. continue;
  998. }
  999. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  1000. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  1001. XElement xE = XElement.Parse(results);
  1002. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  1003. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  1004. if (resultcode == "1")
  1005. {
  1006. ncResData.Add(new YiDaResDto()
  1007. {
  1008. bSuccess = true,
  1009. ncNo = xE.Element("sendresult").Element("content").Value,
  1010. log = "同步成功!"
  1011. });
  1012. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  1013. foreach (var recitem in recitemData)
  1014. {
  1015. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  1016. recitem.scomment = a.摘要;
  1017. _db_nc.Updateable(recitem).ExecuteCommand();
  1018. }
  1019. }
  1020. else
  1021. {
  1022. ncResData.Add(new YiDaResDto()
  1023. {
  1024. bSuccess = false,
  1025. ncNo = "",
  1026. log = "同步失败!原因为【" + resultdescription + "】!"
  1027. });
  1028. }
  1029. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  1030. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  1031. if (results_付款单审核.state == 0)
  1032. {
  1033. ncResData.Add(new YiDaResDto()
  1034. {
  1035. bSuccess = true,
  1036. ncNo = "",
  1037. log = "同步成功!"
  1038. });
  1039. }
  1040. else
  1041. {
  1042. ncResData.Add(new YiDaResDto()
  1043. {
  1044. bSuccess = false,
  1045. ncNo = "",
  1046. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  1047. });
  1048. }
  1049. var finalResData = new YiDaResDto();
  1050. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  1051. {
  1052. finalResData.bSuccess = false;
  1053. finalResData.syncTime = DateTime.Now;
  1054. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  1055. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  1056. }
  1057. else
  1058. {
  1059. finalResData.bSuccess = true;
  1060. finalResData.syncTime = DateTime.Now;
  1061. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  1062. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  1063. }
  1064. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  1065. }
  1066. #endregion
  1067. }
  1068. public void DataSync_薪资_预付()
  1069. {
  1070. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  1071. // 宜搭全量数据Id
  1072. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"薪资计提\"}");
  1073. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"薪资发放\"}"));
  1074. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"F3-Cxx-007\"}"));
  1075. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  1076. #region 获取NC中选项数据的Id
  1077. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  1078. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  1079. #endregion
  1080. #region 插入数据
  1081. // 向NC插入数据
  1082. foreach (var item in idList.Distinct())
  1083. {
  1084. string createTime = "";
  1085. string modifyTime = "";
  1086. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  1087. var ncResData = new List<YiDaResDto>();
  1088. #region 表头
  1089. // 表头
  1090. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  1091. dataSource.付款类型 = "F3-Cxx-007";
  1092. dataSource.是否预付 = "1";
  1093. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  1094. {
  1095. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  1096. {
  1097. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  1098. if (tempData != null)
  1099. {
  1100. dataSource.组织 = tempData.code; // 组织
  1101. }
  1102. }
  1103. }
  1104. dataSource.支付人 = "OA-NC";
  1105. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  1106. {
  1107. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  1108. }
  1109. dataSource.创建人 = "OA-NC";
  1110. dataSource.制单人 = "OA-NC";
  1111. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1112. dataSource.生效人 = "OA-NC";
  1113. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1114. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  1115. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  1116. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  1117. dataSource.年份 = DateTime.Now.ToString("yyyy");
  1118. dataSource.月份 = DateTime.Now.ToString("MM");
  1119. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1120. // 价税合计
  1121. #endregion
  1122. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  1123. #region 明细
  1124. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  1125. {
  1126. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  1127. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  1128. {
  1129. foreach (var objItem in detailObjList1)
  1130. {
  1131. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  1132. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  1133. object se_;
  1134. decimal se = 0;
  1135. if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v08", out se_))
  1136. {
  1137. se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  1138. }
  1139. object wsje_;
  1140. decimal wsje = 0;
  1141. if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v09", out wsje_))
  1142. {
  1143. wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  1144. }
  1145. // 含税金额
  1146. detailItem.价税合计 = hsje.ToString();
  1147. // 无税金额
  1148. detailItem.无税金额 = wsje.ToString();
  1149. // 税额
  1150. detailItem.税额 = se.ToString();
  1151. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  1152. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  1153. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  1154. if (a.Contains("PM"))
  1155. detailItem.项目 = a;
  1156. else
  1157. detailItem.部门 = a;
  1158. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  1159. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  1160. detailList.Add(detailItem);
  1161. }
  1162. }
  1163. }
  1164. #endregion
  1165. dataSource.明细 = detailList;
  1166. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  1167. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  1168. {
  1169. var resData = new YiDaResDto();
  1170. resData.bSuccess = false;
  1171. resData.syncTime = DateTime.Now;
  1172. resData.ncNo = "";
  1173. resData.log = "付款银行账户为空,NC无法执行审批操作";
  1174. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  1175. continue;
  1176. }
  1177. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  1178. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  1179. XElement xE = XElement.Parse(results);
  1180. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  1181. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  1182. if (resultcode == "1")
  1183. {
  1184. ncResData.Add(new YiDaResDto()
  1185. {
  1186. bSuccess = true,
  1187. ncNo = xE.Element("sendresult").Element("content").Value,
  1188. log = "同步成功!"
  1189. });
  1190. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  1191. foreach (var recitem in recitemData)
  1192. {
  1193. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  1194. recitem.scomment = a.摘要;
  1195. _db_nc.Updateable(recitem).ExecuteCommand();
  1196. }
  1197. }
  1198. else
  1199. {
  1200. ncResData.Add(new YiDaResDto()
  1201. {
  1202. bSuccess = false,
  1203. ncNo = "",
  1204. log = "同步失败!原因为【" + resultdescription + "】!"
  1205. });
  1206. }
  1207. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  1208. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  1209. if (results_付款单审核.state == 0)
  1210. {
  1211. ncResData.Add(new YiDaResDto()
  1212. {
  1213. bSuccess = true,
  1214. ncNo = "",
  1215. log = "同步成功!"
  1216. });
  1217. }
  1218. else
  1219. {
  1220. ncResData.Add(new YiDaResDto()
  1221. {
  1222. bSuccess = false,
  1223. ncNo = "",
  1224. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  1225. });
  1226. }
  1227. var finalResData = new YiDaResDto();
  1228. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  1229. {
  1230. finalResData.bSuccess = false;
  1231. finalResData.syncTime = DateTime.Now;
  1232. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  1233. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  1234. }
  1235. else
  1236. {
  1237. finalResData.bSuccess = true;
  1238. finalResData.syncTime = DateTime.Now;
  1239. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  1240. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  1241. }
  1242. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  1243. }
  1244. #endregion
  1245. }
  1246. public void DataSync_发放人力外包工资_预付()
  1247. {
  1248. DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
  1249. // 宜搭全量数据Id
  1250. var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"发放人力外包工资\"}");
  1251. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"人力资源外包付款\"}"));
  1252. idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"F3-Cxx-004\"}"));
  1253. LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
  1254. #region 获取NC中选项数据的Id
  1255. var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
  1256. var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
  1257. #endregion
  1258. #region 插入数据
  1259. // 向NC插入数据
  1260. foreach (var item in idList.Distinct())
  1261. {
  1262. string createTime = "";
  1263. string modifyTime = "";
  1264. var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
  1265. var ncResData = new List<YiDaResDto>();
  1266. #region 表头
  1267. // 表头
  1268. var dataSource = new FK_XZ_SyncServiceModel.DataModel();
  1269. dataSource.付款类型 = "F3-Cxx-004";
  1270. dataSource.是否预付 = "1";
  1271. if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
  1272. {
  1273. if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
  1274. {
  1275. var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
  1276. if (tempData != null)
  1277. {
  1278. dataSource.组织 = tempData.code; // 组织
  1279. }
  1280. }
  1281. }
  1282. dataSource.支付人 = "OA-NC";
  1283. if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
  1284. {
  1285. dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
  1286. }
  1287. dataSource.创建人 = "OA-NC";
  1288. dataSource.制单人 = "OA-NC";
  1289. dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1290. dataSource.生效人 = "OA-NC";
  1291. dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1292. dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
  1293. dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
  1294. dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
  1295. dataSource.年份 = DateTime.Now.ToString("yyyy");
  1296. dataSource.月份 = DateTime.Now.ToString("MM");
  1297. dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  1298. // 价税合计
  1299. #endregion
  1300. var detailList = new List<FK_XZ_SyncServiceModel.DataModel.Item>();
  1301. #region 明细
  1302. if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
  1303. {
  1304. var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
  1305. if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
  1306. {
  1307. foreach (var objItem in detailObjList1)
  1308. {
  1309. var detailItem = new FK_XZ_SyncServiceModel.DataModel.Item();
  1310. var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
  1311. object se_;
  1312. decimal se = 0;
  1313. if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v08", out se_))
  1314. {
  1315. se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
  1316. }
  1317. object wsje_;
  1318. decimal wsje = 0;
  1319. if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v09", out wsje_))
  1320. {
  1321. wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
  1322. }
  1323. // 含税金额
  1324. detailItem.价税合计 = hsje.ToString();
  1325. // 无税金额
  1326. detailItem.无税金额 = wsje.ToString();
  1327. // 税额
  1328. detailItem.税额 = se.ToString();
  1329. detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
  1330. detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
  1331. var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
  1332. if (a.Contains("PM"))
  1333. detailItem.项目 = a;
  1334. else
  1335. detailItem.部门 = a;
  1336. var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
  1337. detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
  1338. detailList.Add(detailItem);
  1339. }
  1340. }
  1341. }
  1342. #endregion
  1343. dataSource.明细 = detailList;
  1344. dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
  1345. if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
  1346. {
  1347. var resData = new YiDaResDto();
  1348. resData.bSuccess = false;
  1349. resData.syncTime = DateTime.Now;
  1350. resData.ncNo = "";
  1351. resData.log = "付款银行账户为空,NC无法执行审批操作";
  1352. _dingTalkService.UpdateFormDataSyncDataById(resData, item);
  1353. continue;
  1354. }
  1355. var results = NCImportFunc.NCImport(FK_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
  1356. LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
  1357. XElement xE = XElement.Parse(results);
  1358. string resultcode = xE.Element("sendresult").Element("resultcode").Value;
  1359. string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
  1360. if (resultcode == "1")
  1361. {
  1362. ncResData.Add(new YiDaResDto()
  1363. {
  1364. bSuccess = true,
  1365. ncNo = xE.Element("sendresult").Element("content").Value,
  1366. log = "同步成功!"
  1367. });
  1368. var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
  1369. foreach (var recitem in recitemData)
  1370. {
  1371. var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
  1372. recitem.scomment = a.摘要;
  1373. _db_nc.Updateable(recitem).ExecuteCommand();
  1374. }
  1375. }
  1376. else
  1377. {
  1378. ncResData.Add(new YiDaResDto()
  1379. {
  1380. bSuccess = false,
  1381. ncNo = "",
  1382. log = "同步失败!原因为【" + resultdescription + "】!"
  1383. });
  1384. }
  1385. var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
  1386. LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
  1387. if (results_付款单审核.state == 0)
  1388. {
  1389. ncResData.Add(new YiDaResDto()
  1390. {
  1391. bSuccess = true,
  1392. ncNo = "",
  1393. log = "同步成功!"
  1394. });
  1395. }
  1396. else
  1397. {
  1398. ncResData.Add(new YiDaResDto()
  1399. {
  1400. bSuccess = false,
  1401. ncNo = "",
  1402. log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
  1403. });
  1404. }
  1405. var finalResData = new YiDaResDto();
  1406. if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
  1407. {
  1408. finalResData.bSuccess = false;
  1409. finalResData.syncTime = DateTime.Now;
  1410. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  1411. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  1412. }
  1413. else
  1414. {
  1415. finalResData.bSuccess = true;
  1416. finalResData.syncTime = DateTime.Now;
  1417. finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
  1418. finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
  1419. }
  1420. var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
  1421. }
  1422. #endregion
  1423. }
  1424. }
  1425. }