FK_XZ_SyncService.cs 94 KB

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