chenkang11 hace 3 meses
commit
230fa8201c
Se han modificado 100 ficheros con 15033 adiciones y 0 borrados
  1. 8 0
      .gitignore
  2. 25 0
      HH.YiDaSyncNC.sln
  3. 1 0
      HH.YiDaSyncNC/.vs/HH.YiDaSyncNC.csproj.dtbcache.json
  4. 77 0
      HH.YiDaSyncNC/App.config
  5. 120 0
      HH.YiDaSyncNC/DataSync/BX_SyncService.cs
  6. 244 0
      HH.YiDaSyncNC/DataSync/BZJ_HK_SyncService.cs
  7. 613 0
      HH.YiDaSyncNC/DataSync/BZJ_SyncService.cs
  8. 247 0
      HH.YiDaSyncNC/DataSync/CGDD_SyncService.cs
  9. 412 0
      HH.YiDaSyncNC/DataSync/FKGL_SyncService.cs
  10. 177 0
      HH.YiDaSyncNC/DataSync/FKYF_SyncService.cs
  11. 316 0
      HH.YiDaSyncNC/DataSync/FK_CLBX_SyncService.cs
  12. 276 0
      HH.YiDaSyncNC/DataSync/FK_FKD_SyncService.cs
  13. 323 0
      HH.YiDaSyncNC/DataSync/FK_FYBX_SyncService.cs
  14. 276 0
      HH.YiDaSyncNC/DataSync/FK_SyncService.cs
  15. 2133 0
      HH.YiDaSyncNC/DataSync/FK_XZ_SyncService.cs
  16. 289 0
      HH.YiDaSyncNC/DataSync/FK_YF_SyncService.cs
  17. 205 0
      HH.YiDaSyncNC/DataSync/GYS_SyncService.cs
  18. 286 0
      HH.YiDaSyncNC/DataSync/HKD_GL_SyncService.cs
  19. 229 0
      HH.YiDaSyncNC/DataSync/KH_SyncService.cs
  20. 349 0
      HH.YiDaSyncNC/DataSync/KP_HK_SyncService.cs
  21. 605 0
      HH.YiDaSyncNC/DataSync/KP_SyncService.cs
  22. 576 0
      HH.YiDaSyncNC/DataSync/KP_TP_SyncService.cs
  23. 226 0
      HH.YiDaSyncNC/DataSync/WL_SyncService.cs
  24. 165 0
      HH.YiDaSyncNC/DataSync/XMD_SyncService.cs
  25. 372 0
      HH.YiDaSyncNC/DataSync/YF_FPRZ_SyncService.cs
  26. 158 0
      HH.YiDaSyncNC/DataSync/ZC_SyncService.cs
  27. 104 0
      HH.YiDaSyncNC/DataSync/ZC_ZJHX_SyncService.cs
  28. 286 0
      HH.YiDaSyncNC/DataSync/ZZD_GL_SyncService.cs
  29. 20 0
      HH.YiDaSyncNC/Dtos/NC/EnumType.cs
  30. 27 0
      HH.YiDaSyncNC/Dtos/NC/ap_paybill.cs
  31. 31 0
      HH.YiDaSyncNC/Dtos/NC/ap_payitem.cs
  32. 27 0
      HH.YiDaSyncNC/Dtos/NC/ar_gatherbill.cs
  33. 31 0
      HH.YiDaSyncNC/Dtos/NC/ar_gatheritem.cs
  34. 31 0
      HH.YiDaSyncNC/Dtos/NC/ar_recitem.cs
  35. 27 0
      HH.YiDaSyncNC/Dtos/NC/bd_branddoc.cs
  36. 27 0
      HH.YiDaSyncNC/Dtos/NC/bd_custclass.cs
  37. 28 0
      HH.YiDaSyncNC/Dtos/NC/bd_customer.cs
  38. 29 0
      HH.YiDaSyncNC/Dtos/NC/bd_defdoc.cs
  39. 28 0
      HH.YiDaSyncNC/Dtos/NC/bd_income.cs
  40. 27 0
      HH.YiDaSyncNC/Dtos/NC/bd_marbasclass.cs
  41. 27 0
      HH.YiDaSyncNC/Dtos/NC/bd_material.cs
  42. 27 0
      HH.YiDaSyncNC/Dtos/NC/bd_mattaxes.cs
  43. 29 0
      HH.YiDaSyncNC/Dtos/NC/bd_measdoc.cs
  44. 207 0
      HH.YiDaSyncNC/Dtos/NC/bd_project.cs
  45. 28 0
      HH.YiDaSyncNC/Dtos/NC/bd_projectclass.cs
  46. 30 0
      HH.YiDaSyncNC/Dtos/NC/bd_psndoc.cs
  47. 28 0
      HH.YiDaSyncNC/Dtos/NC/bd_stordoc.cs
  48. 29 0
      HH.YiDaSyncNC/Dtos/NC/bd_supplier.cs
  49. 27 0
      HH.YiDaSyncNC/Dtos/NC/bd_supplierclass.cs
  50. 29 0
      HH.YiDaSyncNC/Dtos/NC/ct_bondapply.cs
  51. 104 0
      HH.YiDaSyncNC/Dtos/NC/fa_card.cs
  52. 29 0
      HH.YiDaSyncNC/Dtos/NC/fa_cardhistory.cs
  53. 17 0
      HH.YiDaSyncNC/Dtos/NC/org_accountingbook.cs
  54. 30 0
      HH.YiDaSyncNC/Dtos/NC/org_dept.cs
  55. 28 0
      HH.YiDaSyncNC/Dtos/NC/org_orgs.cs
  56. 28 0
      HH.YiDaSyncNC/Dtos/NC/pam_addreducestyle.cs
  57. 29 0
      HH.YiDaSyncNC/Dtos/NC/po_order.cs
  58. 35 0
      HH.YiDaSyncNC/Dtos/NC/po_order_b.cs
  59. 131 0
      HH.YiDaSyncNC/Dtos/NC/po_order_bb.cs
  60. 30 0
      HH.YiDaSyncNC/Dtos/NC/sm_user.cs
  61. 25 0
      HH.YiDaSyncNC/Dtos/NC/so_saleinvoice.cs
  62. 48 0
      HH.YiDaSyncNC/Dtos/NC/so_saleinvoice_b.cs
  63. 117 0
      HH.YiDaSyncNC/Dtos/NC/so_saleorder.cs
  64. 210 0
      HH.YiDaSyncNC/Dtos/NC/so_saleorder_b.cs
  65. 22 0
      HH.YiDaSyncNC/Dtos/NC/so_saleorder_exe.cs
  66. 29 0
      HH.YiDaSyncNC/Dtos/NC/so_squareinv_d.cs
  67. 39 0
      HH.YiDaSyncNC/Dtos/NC/xx_idcontrast.cs
  68. 36 0
      HH.YiDaSyncNC/Dtos/SyncRecord_CGDD.cs
  69. 36 0
      HH.YiDaSyncNC/Dtos/SyncRecord_GYS.cs
  70. 36 0
      HH.YiDaSyncNC/Dtos/SyncRecord_KH.cs
  71. 36 0
      HH.YiDaSyncNC/Dtos/SyncRecord_WL.cs
  72. 36 0
      HH.YiDaSyncNC/Dtos/SyncRecord_XMD.cs
  73. 94 0
      HH.YiDaSyncNC/Dtos/YIDA/YiDa_FPRZD.cs
  74. 39 0
      HH.YiDaSyncNC/Dtos/YIDA/YiDa_FYBXD.cs
  75. 135 0
      HH.YiDaSyncNC/Dtos/YIDA/YiDa_SKDNC.cs
  76. 44 0
      HH.YiDaSyncNC/Dtos/YIDA/YiDa_ZZDA.cs
  77. 40 0
      HH.YiDaSyncNC/Dtos/YIDA/YiDa_ZZHX.cs
  78. 44 0
      HH.YiDaSyncNC/Dtos/YIDA/YiDa_ZZSQ.cs
  79. 17 0
      HH.YiDaSyncNC/Dtos/YiDaResDto.cs
  80. 275 0
      HH.YiDaSyncNC/HH.YiDaSyncNC.csproj
  81. 14 0
      HH.YiDaSyncNC/HH.YiDaSyncNC.csproj.user
  82. 22 0
      HH.YiDaSyncNC/Helper/AbPrivoder.cs
  83. 101 0
      HH.YiDaSyncNC/Helper/CommHelper.cs
  84. 106 0
      HH.YiDaSyncNC/Helper/DBHelper.cs
  85. 423 0
      HH.YiDaSyncNC/Helper/DingTalkService.cs
  86. 30 0
      HH.YiDaSyncNC/Helper/DocDicHelper.cs
  87. 102 0
      HH.YiDaSyncNC/Helper/HttpRequestHelper.cs
  88. 42 0
      HH.YiDaSyncNC/Helper/LogHelper.cs
  89. 62 0
      HH.YiDaSyncNC/Helper/NCImportFunc.cs
  90. 30 0
      HH.YiDaSyncNC/Helper/UnixTimeHelper.cs
  91. 312 0
      HH.YiDaSyncNC/Models/BZJ_SyncServiceModel.cs
  92. 244 0
      HH.YiDaSyncNC/Models/CGDD_SyncServiceModel.cs
  93. 319 0
      HH.YiDaSyncNC/Models/FKGL_SyncServiceModel.cs
  94. 339 0
      HH.YiDaSyncNC/Models/FKYF_SyncServiceModel.cs
  95. 237 0
      HH.YiDaSyncNC/Models/FK_CLBX_SyncServiceModel.cs
  96. 233 0
      HH.YiDaSyncNC/Models/FK_FKD_SyncServiceModel.cs
  97. 233 0
      HH.YiDaSyncNC/Models/FK_FYBX_SyncServiceModel.cs
  98. 233 0
      HH.YiDaSyncNC/Models/FK_SyncServiceModel.cs
  99. 240 0
      HH.YiDaSyncNC/Models/FK_XZ_SyncServiceModel.cs
  100. 0 0
      HH.YiDaSyncNC/Models/FK_YF_SyncServiceModel.cs

+ 8 - 0
.gitignore

@@ -0,0 +1,8 @@
+################################################################################
+# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。
+################################################################################
+
+/.vs
+/HH.YiDaSyncNC/bin/Debug
+/HH.YiDaSyncNC/obj
+/packages

+ 25 - 0
HH.YiDaSyncNC.sln

@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.34114.132
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HH.YiDaSyncNC", "HH.YiDaSyncNC\HH.YiDaSyncNC.csproj", "{0C9830B2-D208-41CC-966B-E3509B3B3FC6}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{0C9830B2-D208-41CC-966B-E3509B3B3FC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{0C9830B2-D208-41CC-966B-E3509B3B3FC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0C9830B2-D208-41CC-966B-E3509B3B3FC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{0C9830B2-D208-41CC-966B-E3509B3B3FC6}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {95463AC3-A790-4CF9-AEB6-B31B3DB06F3B}
+	EndGlobalSection
+EndGlobal

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 0
HH.YiDaSyncNC/.vs/HH.YiDaSyncNC.csproj.dtbcache.json


+ 77 - 0
HH.YiDaSyncNC/App.config

@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
+  </startup>
+  <appSettings>
+    <add key="CorpId" value="dingef2eb0ecba261b8935c2f4657eb6378f" />
+    <add key="AgentId" value="2871877887" />
+    <add key="AppKey" value="dingfwn4kpmb4g3dy4fj" />
+    <add key="AppSecret" value="OwdkUc9nvBivpwsg0AiaEcyWLtZ678fskqBJwP7B5CQNrycIoyKuWslFTCOOaZG4" />
+    <add key="Conn" value="server=60.204.209.15;uid=test;pwd=aaa111...;database=YiDaSyncNC_Test" />
+    <add key="Conn_NC" value="server=58.246.128.122,2433;uid=sa;pwd=!lanyunnc@2023#;database=lanyun" />
+    <add key="NCApiUrl" value="http://58.246.128.122:9090/service/XChangeServlet"/>
+    <!--<add key="NCApiUrl" value="http://60.204.136.100:9099/service/XChangeServlet"/>-->
+
+    <!--NC 审核 接口地址-->
+    <!--<add key="NCApporeApiUrl" value="http://60.204.136.100:9099/"/>-->
+    <add key="NCApporeApiUrl" value="http://58.246.128.122:9090/"/>
+
+    <!--宜搭配置-->
+    <add key="AppType" value="APP_ERBDTFS82HOVBPL3NFH0" />
+    <add key="SystemToken" value="RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP" />
+    <!--<add key="UserId" value="153218553429137210" />-->
+    <add key="UserId" value="026150181237-1254068060" />
+
+  <!--物料档案-->
+    <add key="FormId_WL" value="FORM-C106F33B9A73410FBE750E8FFB72C2775YCF" />
+    <!--供应商档案-->
+    <add key="FormId_GYS" value="FORM-87B1C91392824C5AA9330F574C157622855R" />
+    <add key="FormId_XMD" value="FORM-97BA6C6C8C50416A9E5854F2F4B5C3F3R4WC" />
+    <add key="FormId_KH" value="FORM-E95BF43276BC4BD78B269729F716AA63LDR2" />
+    <add key="FormId_ZC" value="FORM-F3695066AABE41F6AF241489F8558ACA78OI" />
+    <!--流程表单-->
+    <add key="FormCode_FYBXD" value="TPROC--J1A66U81S5VHPM8C8H1N1D11U8VL3VRWEHNRL3" />
+    <add key="FormCode_CLBXD" value="TPROC--5L666481BADIN79I7U3PV7NY34HC3M0CL1XSL3" />
+    <add key="FormCode_ZZSQ" value="TPROC--KW766OD1LVUH19EE9PQH67Q4JOZ03N5ULHNRL2" />
+    <add key="FormCode_FPRZD" value="TPROC--49866OC10V4L1RL8B5066DXHZCMK3O556F7WL0" />
+    <!--表单-->
+    <add key="FormId_FYBXD" value="FORM-0C15BF8B40EA475C898190288E3057D8UO5W" />
+    <add key="FormId_CLBXD" value="FORM-0851B163795E4EB78728C70D85132BE4QTN5" />
+    <add key="FormId_KP" value="FORM-6603375ED27B4D059CBB919C2BEFA44BZVOL" />
+    <add key="FormId_CGDD" value="FORM-61F329A9DFFE4CF0BBEC0FDC34C42C03QJKQ" />
+    <add key="FormId_FK" value="FORM-B8C2006FAA1645B4BC2A6E71F8CC35BFQ71Y" />
+    <add key="FormId_FYBX" value="FORM-0851B163795E4EB78728C70D85132BE4QTN5" />
+    <add key="FormId_ZZSQ" value="FORM-0D007913C9234D92BADE92375CA464A2MHB2" />
+    <add key="FormId_ZZDA" value="FORM-91E9DF06D7F14AEA9F71E1BB5410AA884D9C" />
+    <add key="FormId_ZZHX" value="FORM-8FC638B3417E47ED86983AB9FD9CAA447V39" />
+    <add key="FormId_BZJ" value="FORM-DFAA5190BC4C45D69D8A8A5566DDCCEEK18H" />
+    <add key="FormId_FPRZD" value="FORM-894C9445405B4A9FA8625DA1B7CDC6D6Y0B4" />
+
+    <!--NC写库主键配置-->
+    <add key="xx_idcontrast" value="DINGTALKIDC" />
+    <add key="bd_project" value="DINGTALKPRO" />
+    <add key="fa_card" value="DINGTALKFAC" />
+    <add key="so_saleorder" value="DINGTALKSAL" />
+    <add key="so_saleorder_b" value="DINGTALKSAB" />
+    <add key="po_order_bb" value="DINGTALKPBB" />
+    <add key="ct_bondapply" value="DINGTALKBDA" />
+    <add key="ct_bondapply_b" value="DINGTALKBDB" />
+
+    <!--NC关键字段信息-->
+    <!--集团组织主键-->
+    <add key="pk_org_jt" value="0001G11000000000066P" />
+  </appSettings>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
+      </dependentAssembly>
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>

+ 120 - 0
HH.YiDaSyncNC/DataSync/BX_SyncService.cs

@@ -0,0 +1,120 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Dtos.YIDA;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.Remoting.Messaging;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    public class BX_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public BX_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+        #region 宜搭费用报销单
+        public void DataSyncFYBX()
+        {
+            try
+            {
+
+                DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+                // 宜搭全量数据Id
+                var serchKeyListJson = new
+                {
+                    //radioField_lycrvvtk = "Y",
+                    //selectField_lrnh633d = "预付",
+
+                };
+                var idList = _dingTalkService.GetFormCodeList(JsonConvert.SerializeObject(serchKeyListJson));
+
+                //LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+                #region 获取NC中选项数据的Id
+                #endregion
+
+                foreach (var item in idList)
+                {
+                    var ydDataSource = _dingTalkService.GetFormDataByCode(item);
+                    string jsonData = JsonConvert.SerializeObject(ydDataSource);
+                    YiDa_FYBXD thisYiDaData = JsonConvert.DeserializeObject<YiDa_FYBXD>(jsonData);//模型还未完成
+                    
+
+                }
+            }
+            catch (Exception ex)
+            {
+
+                throw;
+            }
+        }
+
+        #endregion
+
+        #region 宜搭差旅报销单
+
+        public void DataSyncCLBX()
+        {
+            try
+            {
+
+                DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+                // 宜搭全量数据Id
+                var serchKeyListJson = new
+                {
+                    //radioField_lycrvvtk = "Y",
+                    //selectField_lrnh633d = "预付",
+
+                };
+                var idList = _dingTalkService.GetFormCodeList(JsonConvert.SerializeObject(serchKeyListJson));
+
+                //LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+                #region 获取NC中选项数据的Id
+                #endregion
+
+                foreach (var item in idList)
+                {
+                    var ydDataSource = _dingTalkService.GetFormDataByCode(item);
+                    string jsonData = JsonConvert.SerializeObject(ydDataSource);
+
+
+                }
+            }
+            catch (Exception ex)
+            {
+
+                throw;
+            }
+        }
+        #endregion
+    }
+}

+ 244 - 0
HH.YiDaSyncNC/DataSync/BZJ_HK_SyncService.cs

@@ -0,0 +1,244 @@
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class BZJ_HK_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public BZJ_HK_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public class FormItem
+        {
+            public string title { get; set; }
+        }
+
+        public class DetailItem
+        {
+            public decimal ncMoney { get; set; }
+            public decimal ydMoney { get; set; }
+            public long ncBilldate { get; set; }
+            public bool bAll { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            //var idList = _dingTalkService.GetFormIdList("{\"radioField_m06hhw2p\":\"未回款\",\"textField_ltxyt75i\":\"同步成功\"}");
+            //idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_m06hhw2p\":\"已回款\",\"textField_ltxyt75i\":\"同步成功\"}"));
+
+            var idList = _dingTalkService.GetFormIdList("{\"textField_ltxyt75i\":\"同步成功\"}");
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+            #region 获取NC中选项数据的Id
+            var ct_bondapplyList = _db_nc.Queryable<ct_bondapply>().Where(w => w.approvestatus != "-1").ToList();
+            var ar_gatheritemList = _db_nc.Queryable<ar_gatheritem>().Where(w => ct_bondapplyList.Select(s => s.pk_bondapply).ToList().Contains(w.src_billid)).ToList();
+            var ar_gatherbillList = _db_nc.Queryable<ar_gatherbill>().Where(w => ar_gatheritemList.Select(s => s.pk_gatherbill).ToList().Contains(w.pk_gatherbill) && w.billstatus == "1").Select(s => s.pk_gatherbill).ToList();
+            #endregion
+
+            var i = 1;
+
+            #region 接口方式
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                // 如果NC单据号为空,说明没有传入过NC,此时跳过
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+
+                }
+                else
+                {
+                    continue;
+                }
+
+                // 如果NC单据号为空,说明没有传入过NC,此时跳过
+                if (ydDataSource.FirstOrDefault(f => f.Key == "radioField_m06hhw2p").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["radioField_m06hhw2p"].ToString()) && ydDataSource["radioField_m06hhw2p"].ToString() == "回款完成")
+                {
+                    LogHelper.WriteLog("", "回款完成,跳过");
+                    continue;
+                }
+                else
+                {
+                    
+                }
+
+                LogHelper.WriteLog("", "【序号 " + i + " / " + idList.Count + "】" + item + " 开始回写");
+                i++;
+
+                var updateData = new Dictionary<string, string>();
+
+                var billno = ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value.ToString();
+
+                LogHelper.WriteLog(billno, "billno");
+                LogHelper.WriteLog(JsonConvert.SerializeObject(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrmz8ehi")), "numberField_lrmz8ehi");
+                LogHelper.WriteLog(JsonConvert.SerializeObject(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrpp7wpi")), "numberField_lrpp7wpi");
+
+                #region 履约保证金
+                if (ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrmz8ehi").Value != null)
+                {
+                    var baData = ct_bondapplyList.FirstOrDefault(f => f.billno == billno);
+
+                    LogHelper.WriteLog(JsonConvert.SerializeObject(baData), "baData");
+
+                    var giData = ar_gatheritemList.Where(w => w.src_billid == baData.pk_bondapply && ar_gatherbillList.Contains(w.pk_gatherbill)).ToList();
+
+                    LogHelper.WriteLog(JsonConvert.SerializeObject(giData), "giData");
+
+                    if (giData.Count > 0)
+                    {
+                        var ncMoney = giData.Sum(s => s.money_cr);
+
+
+                        var lvMoney = Convert.ToDecimal(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrmz8ehi").Value.ToString());
+                        var syMoney = Convert.ToDecimal(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrpp7wph").Value.ToString());
+
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(lvMoney), "lvMoney");
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(syMoney), "syMoney");
+
+                        if (ncMoney > lvMoney)
+                        {
+                            // 当收款 > 保证金总额
+                            // 剩余金额 = 0
+                            updateData.Add("numberField_lrpp7wph", "0");
+                            updateData.Add("radioField_m06hhw2p", "回款完成");
+                        }
+                        else if (ncMoney == lvMoney)
+                        {
+                            // 当收款 == 保证金总额
+                            // 剩余金额 = 0
+                            updateData.Add("numberField_lrpp7wph", "0");
+                            updateData.Add("radioField_m06hhw2p", "回款完成");
+                        }
+                        if (ncMoney < lvMoney && ncMoney != syMoney)
+                        {
+                            // 当收款 < 保证金总额
+                            // 剩余金额 = 保证金总额 - 收款
+                            updateData.Add("numberField_lrpp7wph", (lvMoney - ncMoney).ToString("#0.00"));
+                            updateData.Add("radioField_m06hhw2p", "已回款");
+                        }
+
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(updateData), "数据构建完成");
+
+                        // 回传状态
+                        updateData.Add("radioField_m4253oqe", "N");
+                        // 回传状态
+                        updateData.Add("textField_m4253oqd", "回传成功");
+
+
+                        var ydRes = _dingTalkService.UpdateFormDataById(updateData, item);
+
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(ydRes), "ydRes 履约 回写完成------------------------------------------------");
+                    }
+                    else
+                    {
+                        updateData.Add("radioField_m06hhw2p", "未回款");
+                        LogHelper.WriteLog("无回款记录", "履约 回写完成------------------------------------------------");
+                    }
+                }
+                #endregion
+
+                #region 投标保证金
+                if (ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrpp7wpi").Value != null)
+                {
+                    var baData = ct_bondapplyList.FirstOrDefault(f => f.billno == billno);
+
+                    LogHelper.WriteLog(JsonConvert.SerializeObject(baData), "baData");
+
+                    var giData = ar_gatheritemList.Where(w => w.src_billid == baData.pk_bondapply && ar_gatherbillList.Contains(w.pk_gatherbill)).ToList();
+
+                    LogHelper.WriteLog(JsonConvert.SerializeObject(giData), "giData");
+
+                    if (giData.Count > 0)
+                    {
+                        var ncMoney = giData.Sum(s => s.money_cr);
+
+
+                        var lvMoney = Convert.ToDecimal(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrpp7wpi").Value.ToString());
+                        var syMoney = Convert.ToDecimal(ydDataSource.FirstOrDefault(f => f.Key == "numberField_lrpocd42").Value.ToString());
+
+                        if (ncMoney > lvMoney)
+                        {
+                            // 当收款 > 保证金总额
+                            // 剩余金额 = 0
+                            updateData.Add("numberField_lrpocd42", "0");
+                            updateData.Add("radioField_m06hhw2p", "回款完成");
+                        }
+                        else if (ncMoney == lvMoney)
+                        {
+                            // 当收款 == 保证金总额
+                            // 剩余金额 = 0
+                            updateData.Add("numberField_lrpocd42", "0");
+                            updateData.Add("radioField_m06hhw2p", "回款完成");
+                        }
+                        if (ncMoney < lvMoney && ncMoney != syMoney)
+                        {
+                            // 当收款 < 保证金总额
+                            // 剩余金额 = 保证金总额 - 收款
+                            updateData.Add("numberField_lrpocd42", (lvMoney - ncMoney).ToString("#0.00"));
+                            updateData.Add("radioField_m06hhw2p", "已回款");
+                        }
+
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(updateData), "数据构建完成");
+
+                        // 回传状态
+                        updateData.Add("radioField_m4253oqe", "N");
+                        // 回传状态
+                        updateData.Add("textField_m4253oqd", "回传成功");
+
+
+                        var ydRes = _dingTalkService.UpdateFormDataById(updateData, item);
+
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(ydRes), "ydRes 履约 回写完成------------------------------------------------");
+                    }
+                    else
+                    {
+                        updateData.Add("radioField_m06hhw2p", "未回款");
+                        LogHelper.WriteLog("无回款记录", "履约 回写完成------------------------------------------------");
+                    }
+                }
+                #endregion
+            }
+
+            #endregion
+        }
+
+    }
+}

+ 613 - 0
HH.YiDaSyncNC/DataSync/BZJ_SyncService.cs

@@ -0,0 +1,613 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class BZJ_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_ct_bondapply = ConfigurationManager.AppSettings["ct_bondapply"];
+        public static string _Static_PK_ct_bondapply_b = ConfigurationManager.AppSettings["ct_bondapply_b"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public BZJ_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public class FormItem
+        {
+            public string title { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+           var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lvituew9\":\"正常\"}");
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+            // 获取当前最大Id
+            var newId = 100000001;
+            var maxData = _db_nc.Queryable<bd_project>().OrderByDescending(obd => obd.pk_project).First();
+            if (maxData != null && maxData.pk_project.Contains(_Static_PK_ct_bondapply))
+            {
+                newId = Convert.ToInt32(maxData.pk_project.Replace(_Static_PK_ct_bondapply, "")) + 1;
+            }
+
+            #region 获取NC中选项数据的Id
+            var bd_customerDic = _db_nc.Queryable<bd_customer>().ToList();
+            var bd_incomeDic = _db_nc.Queryable<bd_income>().ToList();
+            var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
+            var bd_materialDic = _db_nc.Queryable<bd_material>().ToList();
+            var bd_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
+            var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
+            var bd_psndocDic = _db_nc.Queryable<bd_psndoc>().ToList();
+            var sm_userDic = _db_nc.Queryable<sm_user>().ToList();
+            var bd_defdoc_kplx = _db_nc.Queryable<bd_defdoc>().Where(w => w.pk_defdoclist == "1001G1100000000016FV").ToList(); // 开票类型
+            var bd_defdoc_htywlx = _db_nc.Queryable<bd_defdoc>().Where(w => w.pk_defdoclist == "1001G1100000000010PV").ToList(); // 合同业务类型
+            #endregion
+
+
+
+            #region 接口方式
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                // 如果NC单据号为空,说明没有传入过NC,此时需要走此逻辑去创建销售订单等
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+                    continue;
+                }
+
+                var ncResData = new List<YiDaResDto>();
+
+
+                #region 表头
+                // 表头
+                var dataSource = new KP_SyncServiceModel.DataModel();
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vo").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vo"].ToString()))
+                    {
+                        var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvc9x4vo"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.组织 = tempData.code; // 组织
+                        }
+                    }
+                }
+
+                dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lw5ud9bk"].ToString()))
+                {
+                    dataSource.单据日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lw5ud9bk"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
+                }
+
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_lvdojfuj").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["textField_lvdojfuj"].ToString()))
+                    {
+                        var tempData = bd_customerDic.FirstOrDefault(f => f.code == ydDataSource["textField_lvdojfuj"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.客户 = tempData.code; // 客户
+                        }
+                    }
+                }
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vq").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vq"].ToString()))
+                    {
+                        var tempData = bd_incomeDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvc9x4vq"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.收款协议 = tempData.code; // 收款协议
+                        }
+                    }
+                }
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "departmentSelectField_lvc7mi3w").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["departmentSelectField_lvc7mi3w"].ToString()))
+                    {
+                        var tempData = org_deptDic.FirstOrDefault(f => f.name == JsonConvert.DeserializeObject<List<string>>(JsonConvert.SerializeObject(ydDataSource["departmentSelectField_lvc7mi3w"]))[0]);
+                        if (tempData != null)
+                        {
+                            dataSource.部门 = tempData.code; // 部门
+                        }
+                    }
+                }
+
+                dataSource.审批人 = "OA-NC";
+                dataSource.制单人 = "OA-NC";
+                dataSource.创建人 = "OA-NC";
+
+                dataSource.审批时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                dataSource.制单时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                dataSource.创建时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_lvdntzul").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["textField_lvdntzul"].ToString()))
+                    {
+                        var tempData = bd_projectDic.FirstOrDefault(f => f.project_code == ydDataSource["textField_lvdntzul"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.项目 = tempData.project_code; // 项目
+                        }
+                    }
+                }
+
+                dataSource.发票号 = ydDataSource["textField_lvd8pp35"].ToString();
+                dataSource.客户打印名称 = ydDataSource["selectField_lvdojfui"].ToString();
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vp").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vp"].ToString()))
+                    {
+                        var tempName = ydDataSource["selectField_lvc9x4vp"].ToString();
+                        if (ydDataSource["selectField_lvc9x4vp"].ToString() == "增值税专票")
+                        {
+                            tempName = "增值税专用发票";
+                        }
+
+                        if (ydDataSource["selectField_lvc9x4vp"].ToString() == "增值税普票")
+                        {
+                            tempName = "增值税普通发票";
+                        }
+
+                        var tempData = bd_defdoc_kplx.FirstOrDefault(f => f.name == tempName);
+                        if (tempData != null)
+                        {
+                            dataSource.开票类型 = tempData.pk_defdoc; // 开票类型
+                        }
+                    }
+                }
+
+                dataSource.OA单据号 = ydDataSource["textField_lvdosccc"].ToString();
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vn").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vn"].ToString()))
+                    {
+                        if (ydDataSource["selectField_lvc9x4vn"].ToString().Contains("一次性") || ydDataSource["selectField_lvc9x4vn"].ToString().Contains("工程订单"))
+                        {
+                            dataSource.合同业务类型 = "1001G11000000000113F";
+                        }
+                        else
+                        {
+                            var tempData = bd_defdoc_htywlx.FirstOrDefault(f => f.name == ydDataSource["selectField_lvc9x4vn"].ToString());
+                            if (tempData != null)
+                            {
+                                dataSource.合同业务类型 = tempData.pk_defdoc; // 合同业务类型
+                            }
+                        }
+                    }
+                }
+
+                dataSource.年份 = DateTime.Now.ToString("yyyy");
+                dataSource.月份 = DateTime.Now.ToString("MM");
+
+                #endregion
+
+                var detailList = new List<KP_SyncServiceModel.DataModel.OrderB>();
+
+                #region 大业主开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvc9x4vt").Value != null)
+                {
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvc9x4vt").Value != null)
+                    {
+                        var detailObjList1 = (List<object>)ydDataSource["tableField_lvc9x4vt"]; // 大业主开票明细
+
+                        if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["textField_lvdojfup"].ToString()))
+                        {
+
+                            foreach (var objItem in detailObjList1)
+                            {
+                                var detailItem = new KP_SyncServiceModel.DataModel.OrderB();
+
+                                if (!string.IsNullOrWhiteSpace(((Dictionary<string, object>)objItem)["associationFormField_lvynhq7p_id"].ToString()))
+                                {
+                                    var sourceStr = ((Dictionary<string, object>)objItem)["associationFormField_lvynhq7p_id"].ToString().Replace("\\", "");
+                                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                                    var materialData = bd_materialDic.FirstOrDefault(f => f.name == b[0].title);
+
+                                    detailItem.物料 = materialData.code; // 物料
+
+                                    var unitCode = bd_measdocDic.FirstOrDefault(f => f.pk_measdoc == materialData.pk_measdoc);
+
+                                    detailItem.计量单位 = unitCode.code; // 计量单位
+                                }
+
+                                var hsdj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2v"].ToString());
+                                var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2z"].ToString());
+                                var wsdj = hsdj - se;
+                                var sl = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2w"].ToString());
+                                var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp30"].ToString());
+                                var jshj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2y"].ToString());
+
+                                // 含税单价
+                                detailItem.含税单价 = hsdj.ToString();
+
+                                // 无税单价
+                                detailItem.无税单价 = wsdj.ToString();
+
+                                //  含税净价
+                                detailItem.含税净价 = hsdj.ToString();
+
+                                // 无税净价
+                                detailItem.无税净价 = wsdj.ToString();
+
+                                // 税额
+                                detailItem.税额 = se.ToString();
+
+                                // 无税金额
+                                detailItem.无税金额 = wsje.ToString();
+
+                                // 数量
+                                detailItem.数量 = sl.ToString();
+
+                                // 价税合计
+                                detailItem.价税合计 = jshj.ToString();
+
+                                detailItem.换算率 = "1.00/1.00";
+                                detailItem.税码 = "CN04"; // 税率码 
+                                detailItem.税率 = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2x"].ToString()).ToString(); // 税率
+
+                                detailItem.开票内容 = ((Dictionary<string, object>)objItem)["textField_lvd8pp2t"].ToString();
+
+                                detailItem.行id = ((Dictionary<string, object>)objItem)["textField_lvdojfup"].ToString();
+
+                                detailList.Add(detailItem);
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                #region 工程订单开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvd8pp44").Value != null)
+                {
+                    var detailObjList2 = (List<object>)ydDataSource["tableField_lvd8pp44"]; // 工程订单开票明细
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvd8pp44").Value != null)
+                    {
+                        if (detailObjList2.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList2.FirstOrDefault())["textField_lvdojfur"].ToString()))
+                        {
+                            dataSource.项目 = "PM99001";
+
+                            foreach (var objItem in detailObjList2)
+                            {
+                                var detailItem = new KP_SyncServiceModel.DataModel.OrderB();
+
+                                if (!string.IsNullOrWhiteSpace(((Dictionary<string, object>)objItem)["associationFormField_lvynrr6a_id"].ToString()))
+                                {
+                                    var sourceStr = ((Dictionary<string, object>)objItem)["associationFormField_lvynrr6a_id"].ToString().Replace("\\", "");
+                                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                                    var materialData = bd_materialDic.FirstOrDefault(f => f.name == b[0].title);
+
+                                    detailItem.物料 = materialData.code; // 物料
+
+                                    var unitCode = bd_measdocDic.FirstOrDefault(f => f.pk_measdoc == materialData.pk_measdoc);
+
+                                    detailItem.计量单位 = unitCode.code; // 计量单位
+                                }
+
+                                var hsdj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp3y"].ToString());
+                                var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp42"].ToString());
+                                var wsdj = hsdj - se;
+                                var sl = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp3z"].ToString());
+                                var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp43"].ToString());
+                                var jshj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp41"].ToString());
+
+                                // 含税单价
+                                detailItem.含税单价 = hsdj.ToString();
+
+                                // 无税单价
+                                detailItem.无税单价 = wsdj.ToString();
+
+                                //  含税净价
+                                detailItem.含税净价 = hsdj.ToString();
+
+                                // 无税净价
+                                detailItem.无税净价 = wsdj.ToString();
+
+                                // 税额
+                                detailItem.税额 = se.ToString();
+
+                                // 无税金额
+                                detailItem.无税金额 = wsje.ToString();
+
+                                // 数量
+                                detailItem.数量 = sl.ToString();
+
+                                // 价税合计
+                                detailItem.价税合计 = jshj.ToString();
+
+                                detailItem.换算率 = "1.00/1.00";
+                                detailItem.税码 = "CN04"; // 税率码 
+                                detailItem.税率 = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp40"].ToString()).ToString(); // 税率
+
+                                detailItem.开票内容 = ((Dictionary<string, object>)objItem)["textField_lvd8pp3w"].ToString();
+
+                                detailItem.行id = ((Dictionary<string, object>)objItem)["textField_lvdojfur"].ToString();
+
+                                detailList.Add(detailItem);
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                #region 小业主开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvdnme13").Value != null)
+                {
+                    var detailObjList3 = (List<object>)ydDataSource["tableField_lvdnme13"]; // 小业主
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvdnme13").Value != null)
+                    {
+                        if (detailObjList3.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList3.FirstOrDefault())["textField_lvdojfus"].ToString()))
+                        {
+
+                            foreach (var objItem in detailObjList3)
+                            {
+                                var detailItem = new KP_SyncServiceModel.DataModel.OrderB();
+
+                                if (!string.IsNullOrWhiteSpace(((Dictionary<string, object>)objItem)["associationFormField_lvynrr6c_id"].ToString()))
+                                {
+                                    var sourceStr = ((Dictionary<string, object>)objItem)["associationFormField_lvynrr6c_id"].ToString().Replace("\\", "");
+                                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                                    var materialData = bd_materialDic.FirstOrDefault(f => f.name == b[0].title);
+
+                                    detailItem.物料 = materialData.code; // 物料
+
+                                    var unitCode = bd_measdocDic.FirstOrDefault(f => f.pk_measdoc == materialData.pk_measdoc);
+
+                                    detailItem.计量单位 = unitCode.code; // 计量单位
+                                }
+
+                                var hsdj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0w"].ToString());
+                                var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme10"].ToString());
+                                var wsdj = hsdj - se;
+                                var sl = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0x"].ToString());
+                                var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme11"].ToString());
+                                var jshj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0z"].ToString());
+
+                                // 含税单价
+                                detailItem.含税单价 = hsdj.ToString();
+
+                                // 无税单价
+                                detailItem.无税单价 = wsdj.ToString();
+
+                                //  含税净价
+                                detailItem.含税净价 = hsdj.ToString();
+
+                                // 无税净价
+                                detailItem.无税净价 = wsdj.ToString();
+
+                                // 税额
+                                detailItem.税额 = se.ToString();
+
+                                // 无税金额
+                                detailItem.无税金额 = wsje.ToString();
+
+                                // 数量
+                                detailItem.数量 = sl.ToString();
+
+                                // 价税合计
+                                detailItem.价税合计 = jshj.ToString();
+
+                                detailItem.换算率 = "1.00/1.00";
+                                detailItem.税码 = "CN04"; // 税率码 
+                                detailItem.税率 = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0y"].ToString()).ToString(); // 税率
+
+                                detailItem.开票内容 = ((Dictionary<string, object>)objItem)["textField_lvdnme0u"].ToString();
+
+                                detailItem.行id = ((Dictionary<string, object>)objItem)["textField_lvdojfus"].ToString();
+
+                                detailList.Add(detailItem);
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                dataSource.明细 = detailList;
+
+                dataSource.数量 = dataSource.明细.Sum(s => Convert.ToDecimal(s.数量)).ToString();
+                dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
+
+
+                var results_销售订单 = NCImportFunc.NCImport(KP_SyncServiceModel.ImportXml_销售订单.TemplateHeade(), KP_SyncServiceModel.ImportXml_销售订单.Header(dataSource, item + DateTime.Now.ToString("MMddHHmmss")), _NCApiUrl + "?account=LY01&groupcode=0");
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_销售订单), "results_销售订单");
+
+                XElement xE_销售订单 = XElement.Parse(results_销售订单);
+                string resultcode_销售订单 = xE_销售订单.Element("sendresult").Element("resultcode").Value;
+                string resultdescription_销售订单 = xE_销售订单.Element("sendresult").Element("resultdescription")?.Value;
+
+                if (resultcode_销售订单 == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE_销售订单.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription_销售订单 + "】!"
+                    });
+
+                    continue;
+                }
+
+                // -------------------------------销售订单同步完,开始同步销售发票
+
+                var saleorderData = _db_nc.Queryable<so_saleorder>().First(f => f.csaleorderid == xE_销售订单.Element("sendresult").Element("content").Value);
+                var saleorderbData = _db_nc.Queryable<so_saleorder_b>().Where(f => f.csaleorderid == xE_销售订单.Element("sendresult").Element("content").Value).ToList();
+
+                dataSource.销售订单单据号 = saleorderData.vbillcode;
+                dataSource.销售订单主表id = saleorderData.csaleorderid;
+
+                foreach (var detailItem in dataSource.明细)
+                {
+                    detailItem.销售订单子表id = saleorderbData.FirstOrDefault(f => f.vbdef10 == detailItem.行id).csaleorderbid;
+                }
+
+                var results_销售发票 = NCImportFunc.NCImport(KP_SyncServiceModel.ImportXml_销售发票.TemplateHeade(), KP_SyncServiceModel.ImportXml_销售发票.Header(dataSource, item + DateTime.Now.ToString("MMddHHmmss")), _NCApiUrl + "?account=LY01&groupcode=0");
+
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_销售发票), "results_销售发票");
+
+                XElement xE_销售发票 = XElement.Parse(results_销售发票);
+                string resultcode_销售发票 = xE_销售发票.Element("sendresult").Element("resultcode").Value;
+                string resultdescription_销售发票 = xE_销售发票.Element("sendresult").Element("resultdescription")?.Value;
+
+                if (resultcode_销售发票 == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE_销售发票.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription_销售发票 + "】!"
+                    });
+                }
+
+                // -------------------------------销售发票同步完,开始同步应收
+
+                var saleinvoicebData = _db_nc.Queryable<so_saleinvoice_b>().Where(f => f.csaleinvoiceid == xE_销售发票.Element("sendresult").Element("content").Value).ToList();
+                var squareinvbData = _db_nc.Queryable<so_squareinv_d>().Where(f => f.csquarebillid == xE_销售发票.Element("sendresult").Element("content").Value).ToList();
+
+                dataSource.销售发票主表id = xE_销售发票.Element("sendresult").Element("content").Value;
+
+                //foreach (var detailItem in dataSource.明细)
+                //{
+                //    var a = saleinvoicebData.FirstOrDefault(f => f.vbdef10 == detailItem.行id).csaleinvoicebid;
+                //    var b = squareinvbData.FirstOrDefault(f => f.csquarebillbid == a);
+                //    detailItem.销售发票子表id = b.csalesquaredid;
+                //}
+
+                var results_应收单 = NCImportFunc.NCImport(KP_SyncServiceModel.ImportXml_应收单.TemplateHeade(), KP_SyncServiceModel.ImportXml_应收单.Header(dataSource, item + "02"), _NCApiUrl + "?account=01&groupcode=0");
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_应收单), "results_应收单");
+
+                XElement xE_应收单 = XElement.Parse(results_应收单);
+                string resultcode_应收单 = xE_应收单.Element("sendresult").Element("resultcode").Value;
+                string resultdescription_应收单 = xE_应收单.Element("sendresult").Element("resultdescription")?.Value;
+
+                var recitemData = _db_nc.Queryable<ar_recitem>().Where(w => w.pk_recbill == xE_应收单.Element("sendresult").Element("content").Value).ToList();
+
+                foreach (var recitem in recitemData)
+                {
+                    recitem.scomment = recitem.def1;
+
+                    _db_nc.Updateable(recitem).ExecuteCommand();
+                }
+
+
+                if (resultcode_应收单 == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE_应收单.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription_应收单 + "】!"
+                    });
+                }
+
+                var finalResData = new YiDaResDto();
+
+                if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
+                {
+                    finalResData.bSuccess = false;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE_销售订单.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+                else
+                {
+                    finalResData.bSuccess = true;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE_销售订单.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
+            }
+
+            #endregion
+        }
+    }
+}

+ 247 - 0
HH.YiDaSyncNC/DataSync/CGDD_SyncService.cs

@@ -0,0 +1,247 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class CGDD_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_po_order_bb = ConfigurationManager.AppSettings["po_order_bb"];
+
+        public CGDD_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\"}");
+
+            //var idList = _dingTalkService.GetFormIdList();
+
+            // var idList = _dingTalkService.GetFormIdList("{\"textField_lr26y1io\":\"TESTDD202505200001\"}");
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+
+
+
+            // 获取当前最大Id
+            var newId = 100000001;
+            var maxData = _db_nc.Queryable<po_order_bb>().Where(w => w.pk_order_bb.Contains(_Static_PK_po_order_bb)).OrderByDescending(obd => obd.pk_order_bb).First();
+            if (maxData != null && maxData.pk_order_bb.Contains(_Static_PK_po_order_bb))
+            {
+                newId = Convert.ToInt32(maxData.pk_order_bb.Replace(_Static_PK_po_order_bb, "")) + 1;
+            }
+
+            #region 获取NC中选项数据的Id
+            var bd_customerDic = _db_nc.Queryable<bd_customer>().ToList();
+            var bd_incomeDic = _db_nc.Queryable<bd_income>().ToList();
+            var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
+            var bd_materialDic = _db_nc.Queryable<bd_material>().ToList();
+            var bd_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
+            var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
+            var bd_psndocDic = _db_nc.Queryable<bd_psndoc>().ToList();
+            var sm_userDic = _db_nc.Queryable<sm_user>().ToList();
+            #endregion
+
+            #region 插入数据
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                // 如果NC单据号为空,说明没有传入过NC,此时正常走新增逻辑
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+                    LogHelper.WriteLog("", "有NC单据号,需走修订流程,此时跳过:" + ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value);
+                    continue;
+                }
+
+                var dataSource = new CGDD_SyncServiceModel.DataModel();
+                dataSource.集团 = "0";
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lr26l3h7").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lr26l3h7"].ToString()))
+                    {
+                        var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lr26l3h7"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.组织 = tempData.code; // 组织
+                        }
+                    }
+                }
+
+                dataSource.订单编号 = ydDataSource["textField_lr26y1io"].ToString();
+                dataSource.订单日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                dataSource.供应商 = ydDataSource["textField_lr26l3hf"].ToString();
+
+                dataSource.制单人 = "OA-NC";
+                dataSource.创建人 = "OA-NC";
+
+                dataSource.制单时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                dataSource.创建时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                var detailList = new List<CGDD_SyncServiceModel.DataModel.OrderB>();
+
+                var detailObjList = (List<object>)ydDataSource["tableField_ltxyt76f"]; // 采购物耗明细
+                foreach (var objItem in detailObjList)
+                {
+                    var detailItem = new CGDD_SyncServiceModel.DataModel.OrderB();
+
+                    detailItem.数量 = ((Dictionary<string, object>)objItem)["numberField_ltxyt75z"].ToString(); // 主数量
+
+                    if (detailItem.数量 == "0")
+                    {
+                        continue;
+                    }
+
+                    detailItem.物料编码 = ((Dictionary<string, object>)objItem)["textField_ltxyt75w"].ToString(); // 物料编码
+                    // detailItem.物料名称 = ((Dictionary<string, object>)objItem)["textField_ltxyt75x"].ToString(); // 物料编码
+
+                    if (!string.IsNullOrWhiteSpace(((Dictionary<string, object>)objItem)["textField_ltxyt75y"].ToString()))
+                    {
+                        DBHelper.WriteLog(((Dictionary<string, object>)objItem)["textField_ltxyt75y"].ToString(), "计量单位");
+                        detailItem.计量单位 = bd_measdocDic.FirstOrDefault(f => f.name.Trim() == ((Dictionary<string, object>)objItem)["textField_ltxyt75y"].ToString().Trim()).code; // 计量单位
+                    }
+
+                    detailItem.项目 = ((Dictionary<string, object>)objItem)["textField_lu23oe2w"].ToString(); // 项目编码
+
+                    detailItem.无税单价 = ((Dictionary<string, object>)objItem)["numberField_lutkmlw0"].ToString(); // 本币无税单价
+
+                    detailItem.含税单价 = ((Dictionary<string, object>)objItem)["numberField_ltxyt761"].ToString(); // 含税单价
+
+                    detailItem.无税金额 = ((Dictionary<string, object>)objItem)["numberField_lutkmlvz"].ToString(); // 无税金额
+
+                    detailItem.税额 = ((Dictionary<string, object>)objItem)["numberField_lutkmlw3"].ToString(); // 税额
+
+                    detailItem.价税合计 = ((Dictionary<string, object>)objItem)["numberField_ltxyt764"].ToString(); // 本币价税合计
+
+                    detailItem.联系人 = ((Dictionary<string, object>)objItem)["textField_lutkmlwb"].ToString(); // 
+
+                    detailItem.收货地址 = ((Dictionary<string, object>)objItem)["textField_ltxyt76a"].ToString(); // 
+
+                    detailList.Add(detailItem);
+                }
+
+                dataSource.pk_order_b = detailList;
+
+
+                dataSource.数量 = dataSource.pk_order_b.Sum(s => Convert.ToDecimal(s.数量)).ToString();
+                dataSource.价税合计 = dataSource.pk_order_b.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
+
+
+
+                var results = NCImportFunc.NCImport(CGDD_SyncServiceModel.ImportXml.TemplateHeade(), CGDD_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
+
+                DBHelper.WriteLog(results);
+                XElement xE = XElement.Parse(results);
+
+                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+
+                DBHelper.WriteLog($"状态码:" + resultcode);
+
+                string content = xE.Element("sendresult").Element("content")?.Value;
+
+                string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+
+                var ncResData = new YiDaResDto()
+                {
+                    syncTime = DateTime.Now,
+                };
+
+                // NC接口执行完成后的处理
+                if (resultcode == "1")
+                {
+                    DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作成功!");
+
+                    ncResData.bSuccess = true;
+                    ncResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    ncResData.log = "同步成功!";
+
+                    // 更新审核状态,并插入在途状态表
+                    var po_order = _db_nc.Queryable<po_order>().First(f => f.pk_order == xE.Element("sendresult").Element("content").Value);
+                    var po_order_b = _db_nc.Queryable<po_order_b>().Where(w => w.pk_order == xE.Element("sendresult").Element("content").Value).ToList();
+
+                    po_order.approver = "1001G1100000000B6553";
+                    po_order.forderstatus = "3";
+                    po_order.taudittime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                    _db_nc.Updateable(po_order).ExecuteCommand();
+
+                    foreach (var itemB in po_order_b)
+                    {
+                        var bb = new po_order_bb();
+                        bb.dplanarrvdate = itemB.dplanarrvdate;
+                        bb.nmaxhandlenum = itemB.nastnum;
+                        bb.nonwaynum = itemB.nastnum;
+
+                        bb.pk_group = itemB.pk_group;
+                        bb.pk_order = itemB.pk_order;
+                        bb.pk_order_b = itemB.pk_order_b;
+                        bb.pk_org = itemB.pk_org;
+                        bb.pk_org_v = itemB.pk_org_v;
+                        bb.ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                        bb.pk_order_bb = _Static_PK_po_order_bb + newId;
+
+                        _db_nc.Insertable(bb).ExecuteCommand();
+
+                        newId++;
+                    }
+                }
+                else
+                {
+
+                    DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作失败!" + resultdescription + ";");
+
+                    ncResData.bSuccess = false;
+                    ncResData.ncNo = "";
+                    ncResData.log = "同步失败!原因为【" + resultdescription + "】";
+                }
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
+            }
+
+            #endregion
+        }
+    }
+}

+ 412 - 0
HH.YiDaSyncNC/DataSync/FKGL_SyncService.cs

@@ -0,0 +1,412 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Dtos.YIDA;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Reflection;
+using System.Runtime.Remoting.Messaging;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    public class FKGL_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public FKGL_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public void DataSync()
+        {
+            //try
+            //{
+
+            //    DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            //    // 宜搭全量数据Id
+            //    var serchKeyListJson = new
+            //    {
+            //        radioField_lycrvvtk = "Y",
+            //        selectField_lrnh633d = "预付",
+
+            //    };
+            //    var idList = _dingTalkService.GetFormIdList(JsonConvert.SerializeObject(serchKeyListJson));
+            //    //LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+            //    #region 获取NC中选项数据的Id
+            //    var bd_customerDic = _db_nc.Queryable<bd_customer>().ToList();
+            //    var bd_incomeDic = _db_nc.Queryable<bd_income>().ToList();
+            //    var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            //    var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
+            //    var bd_materialDic = _db_nc.Queryable<bd_material>().ToList();
+            //    var bd_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
+            //    var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
+            //    var bd_psndocDic = _db_nc.Queryable<bd_psndoc>().ToList();
+            //    var sm_userDic = _db_nc.Queryable<sm_user>().ToList();
+            //    var org_accountingbookDic = _db_nc.Queryable<org_accountingbook>().ToList();
+            //    #endregion
+
+            //    foreach (var item in idList)
+            //    {
+            //        string createTime = "";
+            //        string modifyTime = "";
+
+            //        var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+            //        string jsonData = JsonConvert.SerializeObject(ydDataSource);
+            //        YiDa_SKDNC thisYiDaData = JsonConvert.DeserializeObject<YiDa_SKDNC>(jsonData);
+
+            //        if (string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb)) continue;
+            //        //取值 宜搭表单的某个字段当作凭证日期 如果 支付完成时间 为null,就用 提交时间
+            //        DateTime 凭证日期 = DateTime.Now;
+            //        //thisYiDaData.dateField_lwitiobz is null
+            //        //    ? UnixTimeHelper.ConvertMillisecondsToDateTime(thisYiDaData.dateField_lviv4sfy)
+            //        //    : UnixTimeHelper.ConvertMillisecondsToDateTime((long)thisYiDaData.dateField_lwitiobz);
+            //        string 组织 = "";
+            //        if (!string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb))
+            //        {
+            //            var tempData = org_orgsDic.FirstOrDefault(f => f.name == thisYiDaData.selectField_lvywoqmb);
+            //            if (tempData != null)
+            //            {
+            //                组织 = tempData.code; // 组织
+            //            }
+            //        }
+
+
+            //        string 账簿 = "";
+            //        if (!string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb))
+            //        {
+            //            var tempData = org_accountingbookDic.FirstOrDefault(f => f.name == thisYiDaData.selectField_lvywoqmb + "-蓝云账簿");
+            //            if (tempData != null)
+            //            {
+            //                账簿 = tempData.code; // 账簿
+            //            }
+            //        }
+            //        string 制单人 = "OA-NC";
+
+            //        // 表头
+            //        var headModel = new FKGL_SyncServiceModel.DataModel.voucher_header()
+            //        {
+            //            year = 凭证日期.ToString("yyyy"),//会计年度
+            //            prepareddate = 凭证日期.ToString("yyyy-MM-dd"),//制单日期
+            //            period = 凭证日期.ToString("MM"),//会计期间
+            //            pk_prepared = 制单人,//凭证制单人--操作员工工号
+            //            no = "",//凭证号
+            //            pk_accountingbook = 账簿,//账簿
+            //            org = 组织,//组织编码
+            //            pk_vouchertype = "03",//凭证类别 : 01-记账凭证 ,02-收款凭证 ,03-付款凭证 ,04-转账凭证 要确定
+            //        };
+            //        //表体
+            //        var detailList = new List<FKGL_SyncServiceModel.DataModel.voucher_body>();
+
+            //        #region 例子
+            //        //if (thisYiDaData.tableField_lrngrtgu != null)
+            //        //{
+            //            ////循环内是借方分录赋值
+            //            //foreach (var objItem in detailObjList1)
+            //            //{
+
+
+            //            //    var detailItem = new FKGL_SyncServiceModel.DataModel.voucher_body()
+            //            //    {
+            //            //        detailindex = index,
+            //            //        accsubjcode = objItem.textField_lwitioce,//科目编码 要确定
+            //            //        pk_accasoa = objItem.textField_lwitioce,//科目编码 要确定
+            //            //        explanation = objItem.textField_lvxa4v05,//摘要 要确定
+            //            //        verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+            //            //        price = "0.00000000",
+            //            //        excrate2 = "1",
+            //            //        debitquantity = "0.00000000",
+            //            //        debitamount = objItem.numberField_lvxa4v09.ToString(),//借方金额 要确定
+            //            //        groupdebitamount = "0.00000000",
+            //            //        globaldebitamount = "0.00000000",
+            //            //        localdebitamount = objItem.numberField_lvxa4v09.ToString(),//借方金额 要确定
+            //            //        creditquantity = "0.00000000",
+            //            //        creditamount = "0.00000000",
+            //            //        groupcreditamount = "0.00000000",
+            //            //        globalcreditamount = "0.00000000",
+            //            //        localcreditamount = "0.00000000",
+            //            //        billtype = "",
+            //            //        bankaccount = "",
+            //            //        checkstyle = "",
+            //            //        checkno = "",
+            //            //        checkdate = "",
+            //            //        bill_id = "",
+            //            //        bill_date = "",
+            //            //        pk_currtype = "CNY",
+            //            //        cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()//现金流 要确定
+            //            //        {
+            //            //            m_pk_currtype = "CNY",
+            //            //            money = objItem.numberField_lvxa4v09.ToString(),//金额 要确定
+            //            //            moneymain = objItem.numberField_lvxa4v09.ToString(),//金额 要确定
+            //            //            moneygroup = "",
+            //            //            moneyglobal = "",
+            //            //            pk_cashflow = "1124",//写死目前 要确定
+            //            //            pk_innercorp = "",
+            //            //        },
+            //            //        ass = new List<FKGL_SyncServiceModel.DataModel.ass>()//要确定
+            //            //        {
+            //            //            new FKGL_SyncServiceModel.DataModel.ass()
+            //            //            {
+            //            //                pk_Checktype ="0010",//0010-项目辅助核算 要确定
+            //            //                pk_Checkvalue = "XM00368",//项目编码 目前写死 要确定
+            //            //            }
+            //            //        },
+            //            //    };
+            //            //    detailList.Add(detailItem);
+            //            //    //销项税分录 要确认
+            //            //    detailList.Add(
+            //            //        new FKGL_SyncServiceModel.DataModel.voucher_body()
+            //            //        {
+            //            //            detailindex = index + 1,
+            //            //            accsubjcode = "22210103",//科目编码 要确定
+            //            //            pk_accasoa = "22210103",//科目编码 要确定
+            //            //            explanation = objItem.textField_lvxa4v05,//摘要 要确定
+            //            //            verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+            //            //            price = "0.00000000",
+            //            //            excrate2 = "1",
+            //            //            debitquantity = "0.00000000",
+            //            //            debitamount = objItem.numberField_lvxa4v08.ToString(),//借方金额 要确定
+            //            //            groupdebitamount = "0.00000000",
+            //            //            globaldebitamount = "0.00000000",
+            //            //            localdebitamount = objItem.numberField_lvxa4v08.ToString(),//借方金额 要确定
+            //            //            creditquantity = "0.00000000",
+            //            //            creditamount = "0.00000000",//贷方金额
+            //            //            groupcreditamount = "0.00000000",
+            //            //            globalcreditamount = "0.00000000",
+            //            //            localcreditamount = "0.00000000",//贷方金额
+            //            //            billtype = "",
+            //            //            bankaccount = "",
+            //            //            checkstyle = "",
+            //            //            checkno = "",
+            //            //            checkdate = "",
+            //            //            bill_id = "",
+            //            //            bill_date = "",
+            //            //            pk_currtype = "CNY",
+            //            //            cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()//现金流 要确定
+            //            //            {
+            //            //                m_pk_currtype = "CNY",
+            //            //                money = objItem.numberField_lvxa4v08.ToString(),//金额 要确定
+            //            //                moneymain = objItem.numberField_lvxa4v08.ToString(),//金额 要确定
+            //            //                moneygroup = "",
+            //            //                moneyglobal = "",
+            //            //                pk_cashflow = "1124",//写死目前 要确定
+            //            //                pk_innercorp = "",
+            //            //            },
+            //            //            ass = new List<FKGL_SyncServiceModel.DataModel.ass>()
+            //            //            {
+            //            //            },
+            //            //        }
+            //            //        );
+            //            //    index++;
+            //            //}
+            //            ////销项税分录 要确认
+            //            ////贷方
+            //            //detailList.Add(
+            //            //    new FKGL_SyncServiceModel.DataModel.voucher_body()
+            //            //    {
+            //            //        detailindex = index,
+            //            //        accsubjcode = "100204",//科目编码 要确定 用哪个贷方科目? 100204-光大银行
+            //            //        pk_accasoa = "100204",//科目编码 要确定 用哪个贷方科目?
+            //            //        explanation = "贷方摘要",//摘要 要确定
+            //            //        verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+            //            //        price = "0.00000000",
+            //            //        excrate2 = "1",
+            //            //        debitquantity = "0.00000000",
+            //            //        debitamount = "0.00000000",
+            //            //        groupdebitamount = "0.00000000",
+            //            //        globaldebitamount = "0.00000000",
+            //            //        localdebitamount = "0.00000000",
+            //            //        creditquantity = "0.00000000",
+            //            //        creditamount = thisYiDaData.numberField_lvua3j18.ToString(),//贷方金额 要确定
+            //            //        groupcreditamount = "0.00000000",
+            //            //        globalcreditamount = "0.00000000",
+            //            //        localcreditamount = thisYiDaData.numberField_lvua3j18.ToString(),//贷方金额 要确定
+            //            //        billtype = "",
+            //            //        bankaccount = "",
+            //            //        checkstyle = "",
+            //            //        checkno = "",
+            //            //        checkdate = "",
+            //            //        bill_id = "",
+            //            //        bill_date = "",
+            //            //        pk_currtype = "CNY",
+            //            //        cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()
+            //            //        {
+            //            //        },
+            //            //        ass = new List<FKGL_SyncServiceModel.DataModel.ass>()//辅助核算 要确定
+            //            //        {
+            //            //            new FKGL_SyncServiceModel.DataModel.ass()
+            //            //            {
+            //            //                pk_Checktype ="0011",//0011-银行账户辅助核算 要确定
+            //            //                pk_Checkvalue = "36640188000164043",//银行账户 目前写死(36640188000164043:上海蓝云环境科技有限公司(光大银行)) 要确定
+            //            //            }
+            //            //        },
+            //            //    }
+            //            //);
+            //        //}
+
+            //        #endregion
+
+            //        //借方分录
+            //        detailList.Add(new FKGL_SyncServiceModel.DataModel.voucher_body()
+            //        {
+            //            detailindex = 1,
+            //            accsubjcode = "1123",//科目编码 预付账款
+            //            pk_accasoa = "1123",//科目编码 
+            //            explanation = "借方摘要",//摘要 
+            //            verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+            //            price = "0.00000000",
+            //            excrate2 = "1",
+            //            debitquantity = "0.00000000",
+            //            debitamount = thisYiDaData.numberField_lvua3j18.ToString(),//借方金额 
+            //            groupdebitamount = "0.00000000",
+            //            globaldebitamount = "0.00000000",
+            //            localdebitamount = thisYiDaData.numberField_lvua3j18.ToString(),//借方金额
+            //            creditquantity = "0.00000000",
+            //            creditamount = "0.00000000",
+            //            groupcreditamount = "0.00000000",
+            //            globalcreditamount = "0.00000000",
+            //            localcreditamount = "0.00000000",
+            //            billtype = "",
+            //            bankaccount = "",
+            //            checkstyle = "",
+            //            checkno = "",
+            //            checkdate = "",
+            //            bill_id = "",
+            //            bill_date = "",
+            //            pk_currtype = "CNY",
+            //            cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()//现金流 
+            //            {
+            //                m_pk_currtype = "CNY",
+            //                money = thisYiDaData.numberField_lvua3j18.ToString(),//金额 
+            //                moneymain = thisYiDaData.numberField_lvua3j18.ToString(),//金额 
+            //                moneygroup = "",
+            //                moneyglobal = "",
+            //                pk_cashflow = "1124",//现金流编码 
+            //                pk_innercorp = "",
+            //            },
+            //            ass = new List<FKGL_SyncServiceModel.DataModel.ass>()//
+            //                    {
+            //                        new FKGL_SyncServiceModel.DataModel.ass()
+            //                        {
+            //                            pk_Checktype ="0019",//0019-供应商辅助核算
+            //                            pk_Checkvalue = thisYiDaData.textField_lwitiobt,//供应商编码
+            //                        }
+            //                    },
+            //        });
+
+            //        //贷方
+            //        detailList.Add(
+            //            new FKGL_SyncServiceModel.DataModel.voucher_body()
+            //            {
+            //                detailindex = 2,
+            //                accsubjcode = thisYiDaData.textField_lyodct8u,//科目编码 
+            //                pk_accasoa = thisYiDaData.textField_lyodct8u,//科目编码
+            //                explanation = "贷方摘要",//摘要 
+            //                verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+            //                price = "0.00000000",
+            //                excrate2 = "1",
+            //                debitquantity = "0.00000000",
+            //                debitamount = "0.00000000",
+            //                groupdebitamount = "0.00000000",
+            //                globaldebitamount = "0.00000000",
+            //                localdebitamount = "0.00000000",
+            //                creditquantity = "0.00000000",
+            //                creditamount = thisYiDaData.numberField_lvua3j18.ToString(),//贷方金额 
+            //                groupcreditamount = "0.00000000",
+            //                globalcreditamount = "0.00000000",
+            //                localcreditamount = thisYiDaData.numberField_lvua3j18.ToString(),//贷方金额 
+            //                billtype = "",
+            //                bankaccount = "",
+            //                checkstyle = "",
+            //                checkno = "",
+            //                checkdate = "",
+            //                bill_id = "",
+            //                bill_date = "",
+            //                pk_currtype = "CNY",
+            //                cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()
+            //                {
+            //                },
+            //                ass = new List<FKGL_SyncServiceModel.DataModel.ass>()//辅助核算 
+            //                {
+            //                        new FKGL_SyncServiceModel.DataModel.ass()
+            //                        {
+            //                            pk_Checktype ="0011",//0011-银行账户辅助核算 
+            //                            pk_Checkvalue =  thisYiDaData.textField_lrngrtgj,//银行账户 
+            //                        }
+            //                },
+            //            }
+            //        );
+
+            //        XElement xElement = FKGL_SyncServiceModel.ImportXml_凭证.TemplateHeade(headModel);
+            //        xElement.Add(FKGL_SyncServiceModel.ImportXml_凭证.Header(headModel));//添加表头数据
+            //        xElement.Element("voucher").Element("voucher_head").Element("details").Add(FKGL_SyncServiceModel.ImportXml_凭证.Bodydebit(detailList));
+            //        //生成凭证
+            //        var results_凭证 = NCImportFunc.NCImport2(xElement, _NCApiUrl + "?account=01&groupcode=0");
+
+            //        LogHelper.WriteLog(JsonConvert.SerializeObject(results_凭证), "results_凭证");
+
+
+            //        XElement xE = XElement.Parse(results_凭证);
+
+            //        string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+
+            //        string content = xE.Element("sendresult").Element("content")?.Value;
+
+            //        string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+            //        var ncResData = new YiDaResDto();
+            //        if (resultcode == "1")
+            //        {
+            //            ncResData = (new YiDaResDto()
+            //            {
+            //                bSuccess = true,
+            //                syncTime = DateTime.Now,
+            //                ncNo = resultdescription,//xE.Element("sendresult").Element("content").Value,
+            //                log = "同步成功!"
+            //            });
+            //        }
+            //        else
+            //        {
+            //            ncResData = (new YiDaResDto()
+            //            {
+            //                bSuccess = false,
+            //                syncTime = DateTime.Now,
+            //                ncNo = "",
+            //                log = "同步失败!原因为【" + resultdescription + "】!"
+            //            });
+            //        }
+            //        //更新同步标识
+            //        var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
+            //    }
+            //}
+            //catch (Exception ex)
+            //{
+
+            //    throw;
+            //}
+        }
+    }
+}

+ 177 - 0
HH.YiDaSyncNC/DataSync/FKYF_SyncService.cs

@@ -0,0 +1,177 @@
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Dtos.YIDA;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    public class FKYF_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public FKYF_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+
+        public void DataSync()
+        {
+            //DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            //// 宜搭全量数据Id
+            //var serchKeyListJson = new
+            //{
+            //    radioField_lycrvvtk = "Y",
+            //    selectField_lrnh633d = "预付",
+
+            //};
+            //var idList = _dingTalkService.GetFormIdList(JsonConvert.SerializeObject(serchKeyListJson));
+            ////LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+            //#region 获取NC中选项数据的Id
+            //var bd_customerDic = _db_nc.Queryable<bd_customer>().ToList();
+            //var bd_incomeDic = _db_nc.Queryable<bd_income>().ToList();
+            //var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            //var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
+            //var bd_materialDic = _db_nc.Queryable<bd_material>().ToList();
+            //var bd_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
+            //var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
+            //var bd_psndocDic = _db_nc.Queryable<bd_psndoc>().ToList();
+            //var sm_userDic = _db_nc.Queryable<sm_user>().ToList();
+            //var org_accountingbookDic = _db_nc.Queryable<org_accountingbook>().ToList();
+            //#endregion
+            //foreach (var item in idList)
+            //{
+            //    string createTime = "";
+            //    string modifyTime = "";
+
+            //    var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+            //    string jsonData = JsonConvert.SerializeObject(ydDataSource);
+            //    YiDa_SKDNC thisYiDaData = JsonConvert.DeserializeObject<YiDa_SKDNC>(jsonData);
+            //    if (string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb)) continue;
+            //    if (string.IsNullOrWhiteSpace(thisYiDaData.textField_lwitiobt)) continue;
+            //    var detailObjFPList1 = thisYiDaData.tableField_lsx02qv5; //发票明细
+            //    if (detailObjFPList1 is null || detailObjFPList1.Count == 0) continue;
+
+            //    DateTime 日期 = DateTime.Now;// UnixTimeHelper.ConvertMillisecondsToDateTime(thisYiDaData.dateField_lviv4sfy);
+
+            //    string 组织 = "";
+            //    if (!string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb))
+            //    {
+            //        var tempData = org_orgsDic.FirstOrDefault(f => f.name == thisYiDaData.selectField_lvywoqmb);
+            //        if (tempData != null)
+            //        {
+            //            组织 = tempData.code; // 组织
+            //        }
+            //    }
+
+            //    string 单据号 = "";
+            //    if (!string.IsNullOrWhiteSpace(thisYiDaData.serialNumberField_lwiz0n9f))
+            //    {
+
+            //        单据号 = thisYiDaData.serialNumberField_lwiz0n9f; // 组织
+            //    }
+
+            //    string 制单人 = "OA-NC";
+
+            //    // 表头
+            //    var headModel = new FKYF_SyncServiceModel.DataModel.voucher_header()
+            //    {
+            //        billdate = 日期.ToString("yyyy-MM-dd"),
+            //        billmaker = 制单人,
+            //        billno = 单据号,
+            //        billperiod = 日期.ToString("MM"),
+            //        billyear = 日期.ToString("yyyy"),
+            //        creationtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+            //        creator = 制单人,
+            //        local_money = thisYiDaData.numberField_lvua3j18.ToString(),
+            //        money = thisYiDaData.numberField_lvua3j18.ToString(),
+            //        pk_org = 组织,
+            //        pu_org = 组织,
+            //        pu_deptid = "",
+            //        pu_psndoc = "",
+
+            //    };
+
+            //    //表体
+            //    var detailList = new List<FKYF_SyncServiceModel.DataModel.voucher_body>();
+            //    if (thisYiDaData.tableField_lrngrtgu != null)
+            //    {
+            //        var detailObjList1 = thisYiDaData.tableField_lrngrtgu; //明细
+            //        int index = 1;
+
+            //        foreach (var objItem in detailObjList1)
+            //        {
+            //            var thisBody = new FKYF_SyncServiceModel.DataModel.voucher_body()
+            //            {
+            //                sett_org = 组织,
+            //                supplier = thisYiDaData.textField_lwitiobt,
+            //                pk_subjcode = objItem.textField_lwitioch,
+            //                subjcode = objItem.textField_lwitioce,
+            //                billdate = 日期.ToString("yyyy-MM-dd"),
+            //                busidate = 日期.ToString("yyyy-MM-dd"),
+            //                invoiceno = detailObjFPList1.FirstOrDefault().textField_lsx02qv8,
+            //                price = objItem.numberField_lvxa4v09.ToString(),// "单价",
+            //                taxprice = objItem.numberField_lvua3j17.ToString(),
+            //                quantity_cr = "1",//"贷方数量",
+            //                money_cr = objItem.numberField_lvua3j17.ToString(),//"贷方原币金额",
+            //                notax_cr = objItem.numberField_lvxa4v09.ToString(),//"贷方原币无税金额",
+            //                local_money_cr = objItem.numberField_lvua3j17.ToString(),//"组织本币金额(贷方)",
+            //                local_notax_cr = objItem.numberField_lvxa4v09.ToString(),//"组织本币无税金额(贷方)",
+            //                caltaxmny = objItem.numberField_lvxa4v09.ToString(),//"计税金额",
+            //                local_tax_cr = objItem.numberField_lvxa4v08.ToString() ?? "0",//"税额",
+            //                taxrate = "13",
+            //                pu_org = 组织,
+            //                rowno = index.ToString(),
+            //                ordercubasdoc = thisYiDaData.textField_lwitiobt,
+            //                pk_fiorg = 组织,
+            //                pk_org= 组织,
+            //                pu_deptid = "",
+            //                pk_psndoc ="",
+            //                pk_deptid ="",
+            //                material="",
+            //            };
+            //            detailList.Add(thisBody);
+            //            index++;
+            //        }
+
+
+            //        XElement xElement = FKYF_SyncServiceModel.ImportXml_应付单.TemplateHeade(headModel);
+            //        xElement.Add(FKYF_SyncServiceModel.ImportXml_应付单.Header(headModel));//添加表头数据
+            //        xElement.Element("bill").Element("billhead").Element("bodys").Add(FKYF_SyncServiceModel.ImportXml_应付单.Body(detailList));
+            //        //生成凭证
+            //        var results_应付单 = NCImportFunc.NCImport2(xElement, _NCApiUrl + "?account=01&groupcode=0");
+
+            //        LogHelper.WriteLog(JsonConvert.SerializeObject(results_应付单), "results_应付单");
+
+
+            //}
+            //}
+        }
+
+    }
+}

+ 316 - 0
HH.YiDaSyncNC/DataSync/FK_CLBX_SyncService.cs

@@ -0,0 +1,316 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class FK_CLBX_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public FK_CLBX_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public class FormItem
+        {
+            public string title { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+            var idList = _dingTalkService.GetFormCodeList("");
+
+            // var idList = _dingTalkService.GetFormIdList("{\"serialNumberField_lsx02quw\":\"FYBX202407070062\"}");
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+            #region 获取NC中选项数据的Id
+            var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
+            var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
+            var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
+            #endregion
+
+            #region 插入数据
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                // 如果NC单据号为空,说明没有传入过NC,此时需要走此逻辑去传输
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+                    continue;
+                }
+
+                var ncResData = new List<YiDaResDto>();
+
+                #region 表头
+
+                // 表头
+                var dataSource = new FK_CLBX_SyncServiceModel.DataModel();
+
+                if (!string.IsNullOrWhiteSpace(ydDataSource["associationFormField_lvyplgvg_id"].ToString()))
+                {
+                    var sourceStr = ydDataSource["associationFormField_lvyplgvg_id"].ToString().Replace("\\", "");
+                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                    var tempData = org_orgsDic.FirstOrDefault(f => f.name == b[0].title);
+                    if (tempData != null)
+                    {
+                        dataSource.组织 = tempData.code; // 组织
+                    }
+                }
+
+                dataSource.支付人 = "OA-NC";
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "dateField_lsx0pirp").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["dateField_lsx0pirp"].ToString()))
+                {
+                    dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lsx0pirp"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
+                }
+                else
+                {
+                    var resData = new YiDaResDto();
+                    resData.bSuccess = false;
+                    resData.syncTime = DateTime.Now;
+                    resData.ncNo = "";
+                    resData.log = "付款银行账户为空,NC无法执行审批操作";
+
+                    _dingTalkService.UpdateFormDataSyncDataById(resData, item);
+
+                    continue;
+                }
+
+                dataSource.创建人 = "OA-NC";
+                dataSource.制单人 = "OA-NC";
+                dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                dataSource.生效人 = "OA-NC";
+                dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                // dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
+                dataSource.付款银行账户 = ydDataSource["textField_lsx02qvj"].ToString().Trim().Replace(" ", "");
+
+                dataSource.年份 = DateTime.Now.ToString("yyyy");
+                dataSource.月份 = DateTime.Now.ToString("MM");
+
+                dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                // 判断是项目、或是部门
+                // 如果通过新字段取不到,则取老字段
+                var xmbmValue = "";
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lysgxw9d").Value != null)
+                {
+                    xmbmValue = ydDataSource["selectField_lysgxw9d"].ToString();
+                }
+                else
+                {
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "departmentSelectField_lvuaqzvf").Value != null)
+                    {
+                        if (!string.IsNullOrWhiteSpace(ydDataSource["departmentSelectField_lvuaqzvf"].ToString()))
+                        {
+                            xmbmValue = JsonConvert.DeserializeObject<List<string>>(JsonConvert.SerializeObject(ydDataSource["departmentSelectField_lvuaqzvf"]))[0];
+                        }
+                    }
+                }
+
+                var project = bd_projectDic.FirstOrDefault(f => f.project_name == xmbmValue); ;
+                var dept = org_deptDic.FirstOrDefault(f => f.name == xmbmValue);
+
+                if (project != null)
+                {
+                    dataSource.项目 = project.project_code;
+                }
+                else if (dept != null)
+                {
+                    dataSource.部门 = dept.code;
+                }
+
+                #endregion
+
+                var detailList = new List<FK_CLBX_SyncServiceModel.DataModel.Item>();
+
+                // 交通费(车船票)
+                if (ydDataSource.FirstOrDefault(f => f.Key == "numberField_lujixr38").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["numberField_lujixr38"].ToString()) && ydDataSource["numberField_lujixr38"].ToString() != "0")
+                {
+                    var detailItem = new FK_CLBX_SyncServiceModel.DataModel.Item();
+                    detailItem.收支项目 = "2";
+                    detailItem.价税合计 = ydDataSource["numberField_lujixr38"].ToString();
+                    detailItem.无税金额 = ydDataSource["numberField_lujixr38"].ToString();
+                    detailItem.税额 = "0";
+                    detailList.Add(detailItem);
+                }
+
+                // 住宿费
+                if (ydDataSource.FirstOrDefault(f => f.Key == "numberField_lvuk32z0").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["numberField_lvuk32z0"].ToString()) && ydDataSource["numberField_lvuk32z0"].ToString() != "0")
+                {
+                    var detailItem = new FK_CLBX_SyncServiceModel.DataModel.Item();
+                    detailItem.收支项目 = "1";
+                    detailItem.价税合计 = ydDataSource["numberField_lvuk32z0"].ToString();
+                    detailItem.无税金额 = ydDataSource["numberField_lvuk32z0"].ToString();
+                    detailItem.税额 = "0";
+                    detailList.Add(detailItem);
+                }
+
+                // 餐费
+                if (ydDataSource.FirstOrDefault(f => f.Key == "numberField_lujixr39").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["numberField_lujixr39"].ToString()) && ydDataSource["numberField_lujixr39"].ToString() != "0")
+                {
+                    var detailItem = new FK_CLBX_SyncServiceModel.DataModel.Item();
+                    detailItem.收支项目 = "3";
+                    detailItem.价税合计 = ydDataSource["numberField_lujixr39"].ToString();
+                    detailItem.无税金额 = ydDataSource["numberField_lujixr39"].ToString();
+                    detailItem.税额 = "0";
+                    detailList.Add(detailItem);
+                }
+
+                // 交通费
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_lujixr3b").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_lujixr3b"].ToString()) && ydDataSource["textField_lujixr3b"].ToString() != "0")
+                {
+                    var detailItem = new FK_CLBX_SyncServiceModel.DataModel.Item();
+                    detailItem.收支项目 = "2";
+                    detailItem.价税合计 = ydDataSource["textField_lujixr3b"].ToString();
+                    detailItem.无税金额 = ydDataSource["textField_lujixr3b"].ToString();
+                    detailItem.税额 = "0";
+                    detailList.Add(detailItem);
+                }
+
+                // 交通费(新版字段)
+                if (ydDataSource.FirstOrDefault(f => f.Key == "numberField_lz15kh79").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["numberField_lz15kh79"].ToString()) && ydDataSource["numberField_lz15kh79"].ToString() != "0")
+                {
+                    var detailItem = new FK_CLBX_SyncServiceModel.DataModel.Item();
+                    detailItem.收支项目 = "2";
+                    detailItem.价税合计 = ydDataSource["numberField_lz15kh79"].ToString();
+                    detailItem.无税金额 = ydDataSource["numberField_lz15kh79"].ToString();
+                    detailItem.税额 = "0";
+                    detailList.Add(detailItem);
+                }
+
+                dataSource.明细 = detailList;
+                dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
+
+                var results = NCImportFunc.NCImport(FK_CLBX_SyncServiceModel.ImportXml.TemplateHeade(), FK_CLBX_SyncServiceModel.ImportXml.Header(dataSource, item + "_clbx"), _NCApiUrl + "?account=LY01&groupcode=0");
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
+
+                XElement xE = XElement.Parse(results);
+                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+
+                if (resultcode == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+
+                    var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
+
+                    foreach (var recitem in recitemData)
+                    {
+                        var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
+
+                        recitem.scomment = a.摘要;
+
+                        _db_nc.Updateable(recitem).ExecuteCommand();
+                    }
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription + "】!"
+                    });
+                }
+
+                var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
+
+                if (results_付款单审核.state == 0)
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = "",
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
+                    });
+                }
+
+                var finalResData = new YiDaResDto();
+
+                if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
+                {
+                    finalResData.bSuccess = false;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+                else
+                {
+                    finalResData.bSuccess = true;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
+            }
+            #endregion
+        }
+    }
+}

+ 276 - 0
HH.YiDaSyncNC/DataSync/FK_FKD_SyncService.cs

@@ -0,0 +1,276 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class FK_FKD_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public FK_FKD_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",,\"selectField_lwiuvaws\":\"付款单\"}");
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+            #region 获取NC中选项数据的Id
+            var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
+            var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            #endregion
+
+            #region 插入数据
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                var ncResData = new List<YiDaResDto>();
+
+                #region 表头
+                // 表头
+                var dataSource = new FK_FKD_SyncServiceModel.DataModel();
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
+                    {
+                        var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.组织 = tempData.code; // 组织
+                        }
+                    }
+                }
+
+                dataSource.支付人 = "OA-NC";
+
+                if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
+                {
+                    dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
+                }
+
+                dataSource.创建人 = "OA-NC";
+                dataSource.制单人 = "OA-NC";
+                dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                dataSource.生效人 = "OA-NC";
+                dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
+
+                if (dataSource.发票号.Length > 98)
+                {
+                    dataSource.发票号 = dataSource.发票号.Substring(0, 98);
+                }
+
+                dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
+                dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
+
+                dataSource.年份 = DateTime.Now.ToString("yyyy");
+                dataSource.月份 = DateTime.Now.ToString("MM");
+
+                dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                // 价税合计
+
+                #endregion
+
+                var detailList = new List<FK_FKD_SyncServiceModel.DataModel.Item>();
+
+                #region 明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
+                {
+                    var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
+
+                    if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
+                    {
+                        foreach (var objItem in detailObjList1)
+                        {
+                            var detailItem = new FK_FKD_SyncServiceModel.DataModel.Item();
+
+                            var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
+
+                            object se_ = "";
+                            object wsje_ = "";
+
+                            decimal se = 0;
+                            decimal wsje = 0;
+
+                            if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v08", out se_))
+                            {
+                                se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
+                            }
+
+                            if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v09", out se_))
+                            {
+                                wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
+                            }
+
+                            // 含税金额
+                            detailItem.价税合计 = hsje.ToString();
+
+                            // 无税金额
+                            detailItem.无税金额 = wsje.ToString();
+
+                            // 税额
+                            detailItem.税额 = se.ToString();
+
+                            detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
+
+                            detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
+
+                            var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
+                            if (a.Contains("PM"))
+                                detailItem.项目 = a;
+                            else
+                                detailItem.部门 = a;
+
+                            detailList.Add(detailItem);
+                        }
+                    }
+                }
+                #endregion
+
+                dataSource.明细 = detailList;
+                dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
+
+                if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
+                {
+                    var resData = new YiDaResDto();
+                    resData.bSuccess = false;
+                    resData.syncTime = DateTime.Now;
+                    resData.ncNo = "";
+                    resData.log = "付款银行账户为空,NC无法执行审批操作";
+
+                    _dingTalkService.UpdateFormDataSyncDataById(resData, item);
+
+                    continue;
+                }
+
+                var results = NCImportFunc.NCImport(FK_FKD_SyncServiceModel.ImportXml.TemplateHeade(), FK_FKD_SyncServiceModel.ImportXml.Header(dataSource, item + "fkd"), _NCApiUrl + "?account=LY01&groupcode=0");
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
+
+                XElement xE = XElement.Parse(results);
+                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+
+                if (resultcode == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+
+                    var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
+
+                    foreach (var recitem in recitemData)
+                    {
+                        var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
+
+                        recitem.scomment = a.摘要;
+
+                        _db_nc.Updateable(recitem).ExecuteCommand();
+                    }
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription + "】!"
+                    });
+                }
+
+                var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
+
+                if (results_付款单审核.state == 0)
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = "",
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
+                    });
+                }
+
+                var finalResData = new YiDaResDto();
+
+                if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
+                {
+                    finalResData.bSuccess = false;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+                else
+                {
+                    finalResData.bSuccess = true;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
+            }
+            #endregion
+        }
+    }
+}

+ 323 - 0
HH.YiDaSyncNC/DataSync/FK_FYBX_SyncService.cs

@@ -0,0 +1,323 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class FK_FYBX_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public FK_FYBX_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public class FormItem
+        {
+            public string title { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+            // var idList = _dingTalkService.GetFormCodeList("");
+
+            var idList = _dingTalkService.GetFormIdList("{\"serialNumberField_lsx02quw\":\"FYBX202408010186\"}");
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+            #region 获取NC中选项数据的Id
+            var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
+            var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            #endregion
+
+            #region 插入数据
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                // 如果NC单据号为空,说明没有传入过NC,此时需要走此逻辑去传输
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+                    continue;
+                }
+
+                var ncResData = new List<YiDaResDto>();
+
+                #region 表头
+
+                // 表头
+                var dataSource = new FK_FYBX_SyncServiceModel.DataModel();
+
+                if (!string.IsNullOrWhiteSpace(ydDataSource["associationFormField_lvyplgvg_id"].ToString()))
+                {
+                    var sourceStr = ydDataSource["associationFormField_lvyplgvg_id"].ToString().Replace("\\", "");
+                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                    var tempData = org_orgsDic.FirstOrDefault(f => f.name == b[0].title);
+                    if (tempData != null)
+                    {
+                        dataSource.组织 = tempData.code; // 组织
+                    }
+                }
+
+                dataSource.支付人 = "OA-NC";
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "dateField_lsx0pirp").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["dateField_lsx0pirp"].ToString()))
+                {
+                    dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lsx0pirp"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
+                }
+                else
+                {
+                    var resData = new YiDaResDto();
+                    resData.bSuccess = false;
+                    resData.syncTime = DateTime.Now;
+                    resData.ncNo = "";
+                    resData.log = "付款银行账户为空,NC无法执行审批操作";
+
+                    _dingTalkService.UpdateFormDataSyncDataById(resData, item);
+
+                    continue;
+                }
+
+                dataSource.创建人 = "OA-NC";
+                dataSource.制单人 = "OA-NC";
+                dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                dataSource.生效人 = "OA-NC";
+                dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                // dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
+                dataSource.付款银行账户 = ydDataSource["textField_lsx02qvj"].ToString().Trim().Replace(" ", "");
+
+                dataSource.年份 = DateTime.Now.ToString("yyyy");
+                dataSource.月份 = DateTime.Now.ToString("MM");
+
+                dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                // 价税合计
+
+                #endregion
+
+                var detailList = new List<FK_FYBX_SyncServiceModel.DataModel.Item>();
+
+                #region 明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
+                {
+                    var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
+
+                    if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lrnh633o"].ToString()))
+                    {
+                        foreach (var objItem in detailObjList1)
+                        {
+                            var detailItem = new FK_FYBX_SyncServiceModel.DataModel.Item();
+
+                            var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lrnh633o"].ToString());
+
+                            decimal se = 0;
+
+                            if (((Dictionary<string, object>)objItem).FirstOrDefault(f => f.Key == "numberField_lrnh633p").Value != null)
+                            {
+                                se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lrnh633p"].ToString());
+                            }
+
+                            decimal wsje = 0;
+
+                            if (((Dictionary<string, object>)objItem).FirstOrDefault(f => f.Key == "numberField_lrnh633q").Value != null)
+                            {
+                                wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lrnh633q"].ToString());
+                            }
+
+                            // 含税金额
+                            detailItem.价税合计 = hsje.ToString();
+
+                            // 无税金额
+                            detailItem.无税金额 = wsje.ToString();
+
+                            // 税额
+                            detailItem.税额 = se.ToString();
+
+                            detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lrngrtgy"].ToString();
+
+                            detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lrnh633r"].ToString();
+
+                            if (((Dictionary<string, object>)objItem).FirstOrDefault(f => f.Key == "textField_ly7257rx").Value != null)
+                            {
+                                var a = ((Dictionary<string, object>)objItem)["textField_ly7257rx"].ToString();
+                                if (a.Contains("PM"))
+                                    detailItem.项目 = a;
+                                else
+                                    detailItem.部门 = a;
+                            }
+
+                            detailList.Add(detailItem);
+                        }
+                    }
+                }
+                #endregion
+
+                if (detailList.FirstOrDefault(f => !string.IsNullOrWhiteSpace(f.项目)) == null && detailList.FirstOrDefault(f => !string.IsNullOrWhiteSpace(f.部门)) == null)
+                {
+                    var resData = new YiDaResDto();
+                    resData.bSuccess = false;
+                    resData.syncTime = DateTime.Now;
+                    resData.ncNo = "";
+                    resData.log = "明细行中项目或部门ID为空";
+
+                    _dingTalkService.UpdateFormDataSyncDataById(resData, item);
+
+                    continue;
+                }
+
+                dataSource.明细 = detailList;
+                dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
+
+                var invNumList = new List<string>();
+
+                #region 发票明细(用于拼接发票号)
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvuaqzva").Value != null)
+                {
+                    var detailObjList1 = (List<object>)ydDataSource["tableField_lvuaqzva"];
+
+                    if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["textField_lvuaqzvb"].ToString()))
+                    {
+                        foreach (var objItem in detailObjList1)
+                        {
+                            invNumList.Add(((Dictionary<string, object>)objItem)["textField_lvuaqzvb"].ToString());
+                        }
+                    }
+                }
+                #endregion
+
+                if (invNumList.Count > 0)
+                {
+                    dataSource.发票号 = string.Join(",", invNumList);
+
+                    if (dataSource.发票号.Length >= 101)
+                        dataSource.发票号 = dataSource.发票号.Substring(1, 100);
+                }
+
+                var results = NCImportFunc.NCImport(FK_FYBX_SyncServiceModel.ImportXml.TemplateHeade(), FK_FYBX_SyncServiceModel.ImportXml.Header(dataSource, item + "fybx"), _NCApiUrl + "?account=LY01&groupcode=0");
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
+
+                XElement xE = XElement.Parse(results);
+                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+
+                if (resultcode == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+
+                    var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
+
+                    foreach (var recitem in recitemData)
+                    {
+                        var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
+
+                        recitem.scomment = a.摘要;
+
+                        _db_nc.Updateable(recitem).ExecuteCommand();
+                    }
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription + "】!"
+                    });
+                }
+
+                var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
+
+                if (results_付款单审核.state == 0)
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = "",
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
+                    });
+                }
+
+                var finalResData = new YiDaResDto();
+
+                if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
+                {
+                    finalResData.bSuccess = false;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+                else
+                {
+                    finalResData.bSuccess = true;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
+            }
+            #endregion
+        }
+    }
+}

+ 276 - 0
HH.YiDaSyncNC/DataSync/FK_SyncService.cs

@@ -0,0 +1,276 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class FK_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public FK_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",\"selectField_lwiuvaws\":\"日常费用付款\"}");
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+            #region 获取NC中选项数据的Id
+            var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
+            var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            #endregion
+
+            #region 插入数据
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                var ncResData = new List<YiDaResDto>();
+
+                #region 表头
+                // 表头
+                var dataSource = new FK_SyncServiceModel.DataModel();
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
+                    {
+                        var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.组织 = tempData.code; // 组织
+                        }
+                    }
+                }
+
+                dataSource.支付人 = "OA-NC";
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "dateField_lwitiobz").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
+                {
+                    dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
+                }
+
+                dataSource.创建人 = "OA-NC";
+                dataSource.制单人 = "OA-NC";
+                dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                dataSource.生效人 = "OA-NC";
+                dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
+
+                if (dataSource.发票号.Length > 98)
+                {
+                    dataSource.发票号 = dataSource.发票号.Substring(0, 98);
+                }
+
+                dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
+                dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
+
+                dataSource.年份 = DateTime.Now.ToString("yyyy");
+                dataSource.月份 = DateTime.Now.ToString("MM");
+
+                dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                // 价税合计
+
+                #endregion
+
+                var detailList = new List<FK_SyncServiceModel.DataModel.Item>();
+
+                #region 明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
+                {
+                    var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
+
+                    if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
+                    {
+                        foreach (var objItem in detailObjList1)
+                        {
+                            var detailItem = new FK_SyncServiceModel.DataModel.Item();
+
+                            var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
+
+                            object se_ = "";
+                            object wsje_ = "";
+
+                            decimal se = 0;
+                            decimal wsje = 0;
+
+                            if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v08",out se_))
+                            {
+                                se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
+                            }
+
+                            if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v09", out se_))
+                            {
+                                wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
+                            }
+
+                            // 含税金额
+                            detailItem.价税合计 = hsje.ToString();
+
+                            // 无税金额
+                            detailItem.无税金额 = wsje.ToString();
+
+                            // 税额
+                            detailItem.税额 = se.ToString();
+
+                            detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
+
+                            detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
+
+                            var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
+                            if (a.Contains("PM"))
+                                detailItem.项目 = a;
+                            else
+                                detailItem.部门 = a;
+
+                            detailList.Add(detailItem);
+                        }
+                    }
+                }
+                #endregion
+
+                dataSource.明细 = detailList;
+                dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
+
+                if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
+                {
+                    var resData = new YiDaResDto();
+                    resData.bSuccess = false;
+                    resData.syncTime = DateTime.Now;
+                    resData.ncNo = "";
+                    resData.log = "付款银行账户为空,NC无法执行审批操作";
+
+                    _dingTalkService.UpdateFormDataSyncDataById(resData, item);
+
+                    continue;
+                }
+
+                var results = NCImportFunc.NCImport(FK_SyncServiceModel.ImportXml.TemplateHeade(), FK_SyncServiceModel.ImportXml.Header(dataSource, item), _NCApiUrl + "?account=LY01&groupcode=0");
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
+
+                XElement xE = XElement.Parse(results);
+                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+
+                if (resultcode == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+
+                    var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
+
+                    foreach (var recitem in recitemData)
+                    {
+                        var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
+
+                        recitem.scomment = a.摘要;
+
+                        _db_nc.Updateable(recitem).ExecuteCommand();
+                    }
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription + "】!"
+                    });
+                }
+
+                var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
+
+                if (results_付款单审核.state == 0)
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = "",
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
+                    });
+                }
+
+                var finalResData = new YiDaResDto();
+
+                if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
+                {
+                    finalResData.bSuccess = false;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+                else
+                {
+                    finalResData.bSuccess = true;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
+            }
+            #endregion
+        }
+    }
+}

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 2133 - 0
HH.YiDaSyncNC/DataSync/FK_XZ_SyncService.cs


+ 289 - 0
HH.YiDaSyncNC/DataSync/FK_YF_SyncService.cs

@@ -0,0 +1,289 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class FK_YF_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public FK_YF_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"预付\",\"selectField_lwiuvaws\":\"日常费用付款\"}");
+
+            //var idList = _dingTalkService.GetFormIdList("{\"selectField_lwiuvaws\":\"日常费用付款\",\"selectField_lrnh633d\":\"结付\"}");
+
+            // var idList = _dingTalkService.GetFormIdList("{\"textField_lvj2jklf\":\"FK2024072400058\"}");
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+            #region 获取NC中选项数据的Id
+            var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
+            var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            #endregion
+
+            #region 插入数据
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                // 如果NC单据号不为空,说明付款单已经生成
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+                    continue;
+                }
+                else
+                {
+
+                }
+
+                var ncResData = new List<YiDaResDto>();
+
+                #region 表头
+                // 表头
+                var dataSource = new FK_YF_SyncServiceModel.DataModel();
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
+                    {
+                        var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.组织 = tempData.code; // 组织
+                        }
+                    }
+                }
+
+                dataSource.支付人 = "OA-NC";
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "dateField_lwitiobz").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
+                {
+                    dataSource.支付日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lwitiobz"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
+                }
+
+                dataSource.创建人 = "OA-NC";
+                dataSource.制单人 = "OA-NC";
+                dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                dataSource.生效人 = "OA-NC";
+                dataSource.生效日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
+
+                if (dataSource.发票号.Length > 98)
+                {
+                    dataSource.发票号 = dataSource.发票号.Substring(0, 98);
+                }
+
+                dataSource.供应商 = ydDataSource["textField_lwitiobt"].ToString();
+                dataSource.付款银行账户 = ydDataSource["textField_lrngrtgj"].ToString().Trim().Replace(" ", "");
+
+                dataSource.年份 = DateTime.Now.ToString("yyyy");
+                dataSource.月份 = DateTime.Now.ToString("MM");
+
+                dataSource.起算日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                // 价税合计
+
+                #endregion
+
+                var detailList = new List<FK_YF_SyncServiceModel.DataModel.Item>();
+
+                #region 明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrngrtgu").Value != null)
+                {
+                    var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
+
+                    if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
+                    {
+                        foreach (var objItem in detailObjList1)
+                        {
+                            var detailItem = new FK_YF_SyncServiceModel.DataModel.Item();
+
+                            var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
+
+                            object se_;
+                            decimal se = 0;
+
+                            if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v08", out se_))
+                            {
+                                se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
+                            }
+
+                            object wsje_;
+                            decimal wsje = 0;
+
+                            if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvxa4v09", out wsje_))
+                            {
+                                wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
+                            }
+
+                            // 含税金额
+                            detailItem.价税合计 = hsje.ToString();
+
+                            // 无税金额
+                            detailItem.无税金额 = wsje.ToString();
+
+                            // 税额
+                            detailItem.税额 = se.ToString();
+
+                            detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
+
+                            detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
+
+                            var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
+                            if (a.Contains("PM"))
+                                detailItem.项目 = a;
+                            else
+                                detailItem.部门 = a;
+
+                            detailList.Add(detailItem);
+                        }
+                    }
+                }
+                #endregion
+
+                dataSource.明细 = detailList;
+                dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
+
+                if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
+                {
+                    var resData = new YiDaResDto();
+                    resData.bSuccess = false;
+                    resData.syncTime = DateTime.Now;
+                    resData.ncNo = "";
+                    resData.log = "付款银行账户为空,NC无法执行审批操作";
+
+                    _dingTalkService.UpdateFormDataSyncDataById(resData, item);
+
+                    continue;
+                }
+
+                var results = NCImportFunc.NCImport(FK_YF_SyncServiceModel.ImportXml.TemplateHeade(), FK_YF_SyncServiceModel.ImportXml.Header(dataSource, item + "03"), _NCApiUrl + "?account=LY01&groupcode=0");
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results), "results");
+
+                XElement xE = XElement.Parse(results);
+                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+
+                if (resultcode == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+
+                    var recitemData = _db_nc.Queryable<ap_payitem>().Where(w => w.pk_paybill == xE.Element("sendresult").Element("content").Value).ToList();
+
+                    foreach (var recitem in recitemData)
+                    {
+                        var a = dataSource.明细.FirstOrDefault(f => f.无税金额 == recitem.def11);
+
+                        recitem.scomment = a.摘要;
+
+                        _db_nc.Updateable(recitem).ExecuteCommand();
+                    }
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription + "】!"
+                    });
+                }
+
+                var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
+
+                if (results_付款单审核.state == 0)
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = "",
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + results_付款单审核.msg + "】!"
+                    });
+                }
+
+                var finalResData = new YiDaResDto();
+
+                if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
+                {
+                    finalResData.bSuccess = false;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+                else
+                {
+                    finalResData.bSuccess = true;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
+            }
+            #endregion
+        }
+    }
+}

+ 205 - 0
HH.YiDaSyncNC/DataSync/GYS_SyncService.cs

@@ -0,0 +1,205 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class GYS_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_xx_idcontrast = ConfigurationManager.AppSettings["xx_idcontrast"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public GYS_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            //宜搭全量数据Id
+            var idList = _dingTalkService.GetFormIdList();
+
+            // NC ID对照表数据
+            var ncDataIdList = _db_nc.Queryable<xx_idcontrast>().Where(w => w.bill_type == "supplier").ToList();
+
+            // 获取当前最大Id
+            var newId = 100000001;
+            var maxData = ncDataIdList.OrderByDescending(obd => Convert.ToDateTime(obd.ts)).FirstOrDefault();
+            if (maxData != null && maxData.pk_idcontra.Contains(_Static_PK_xx_idcontrast))
+            {
+                newId = Convert.ToInt32(maxData.pk_idcontra.Replace(_Static_PK_xx_idcontrast, "")) + 1;
+            }
+
+            #region 获取NC中选项数据的Id
+            var pk_supplierclassDic = _db_nc.Queryable<bd_supplierclass>().ToList();
+            #endregion
+
+            #region 循环数据处理业务逻辑
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                var suplinkmanDataList = new List<GYS_SyncServiceModel.DataModel.SuplinkmanItem>();
+
+                //tableField_lrn5j23r
+
+                var suplinkmanObjList = new List<object>();
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrn5j24e").Value != null)
+                    suplinkmanObjList = (List<object>)ydDataSource["tableField_lrn5j24e"];
+
+                foreach (var objItem in suplinkmanObjList)
+                {
+                    suplinkmanDataList.Add(new GYS_SyncServiceModel.DataModel.SuplinkmanItem()
+                    {
+                        name = ((Dictionary<string, object>)objItem)["textField_lrn5j244"].ToString(),
+                        cell = ((Dictionary<string, object>)objItem)["textField_lrn5j245"].ToString(),
+                    });
+                }
+
+
+                var dataSource = new GYS_SyncServiceModel.DataModel()
+                {
+                    pk_group = "0",
+                    pk_org = "0",
+                    code = ydDataSource["textField_lrhgjspd"].ToString(),
+                    name = ydDataSource["textField_lrhgjspc"].ToString(),
+                    taxpayerid = ydDataSource["textField_lrhgjspr"].ToString(),
+                };
+
+                if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lrn5j22q"].ToString()))
+                {
+                    var a = pk_supplierclassDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lrn5j22q"].ToString());
+                    if (a != null)
+                        dataSource.pk_supplierclass = a.code; // 分类s
+                }
+                if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lrn5j22p"].ToString()))
+                {
+
+                    switch (ydDataSource["selectField_lrn5j22p"].ToString())
+                    {
+                        case "启用":
+                            dataSource.enablestate = ((int)EnumType.enablestate.已启用).ToString();
+                            break;
+                        case "未启用":
+                            dataSource.enablestate = ((int)EnumType.enablestate.已停用).ToString();
+                            break;
+                    }
+                }
+
+                dataSource.suplinkman = suplinkmanDataList;
+
+                var xmlData = GYS_SyncServiceModel.ImportXml.Header(dataSource, item);
+                XElement tempData = GYS_SyncServiceModel.ImportXml.TemplateHeade();
+
+                var results = NCImportFunc.NCImport(tempData, xmlData, _NCApiUrl + "?account=01&groupcode=0");
+
+                XElement xE = XElement.Parse(results);
+                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+
+                var ncResData = new YiDaResDto()
+                {
+                    syncTime = DateTime.Now,
+                };
+
+                // NC接口执行完成后的处理
+                if (resultcode == "1")
+                {
+                    DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作成功!");
+
+                    ncResData.bSuccess = true;
+                    ncResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                    ncResData.log = "同步成功!";
+                }
+                else
+                {
+                    if (resultdescription.Contains("不允许重复"))
+                    {
+                        // 已存在数据,绑定Id
+                        var nowData = _db_nc.Queryable<bd_supplier>().First(f => f.code == dataSource.code && f.pk_org == _Static_pk_org_jt);
+
+                        var idcData = new xx_idcontrast()
+                        {
+                            bill_type = "supplier",
+                            dr = 0,
+                            file_id = item,
+                            pk_bill = nowData.pk_supplier,
+                            pk_idcontra = _Static_PK_xx_idcontrast + newId
+                        };
+                        _db_nc.Insertable(idcData).ExecuteCommand();
+
+                        newId++;
+
+                        ncResData.bSuccess = true;
+                        ncResData.ncNo = nowData.pk_supplier;
+                        ncResData.log = "数据已存在,无需同步,已自动对照!";
+                    }
+                    else
+                    {
+                        DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作失败!" + resultdescription + ";");
+
+                        ncResData.bSuccess = false;
+                        ncResData.ncNo = "";
+                        ncResData.log = "同步失败!原因为【" + resultdescription + "】";
+                    }
+
+
+                    //DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作失败!" + resultdescription + ";");
+
+                    //if (resultdescription.Contains("不允许重复"))
+                    //{
+                    //    ncResData.bSuccess = true;
+                    //    ncResData.ncNo = "";
+                    //    ncResData.log = "数据已存在,无需同步!";
+                    //}
+                    //else
+                    //{
+                    //    ncResData.bSuccess = false;
+                    //    ncResData.ncNo = "";
+                    //    ncResData.log = "同步失败!原因为【" + resultdescription + "】";
+                    //}
+                }
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
+            }
+            #endregion
+        }
+    }
+}

+ 286 - 0
HH.YiDaSyncNC/DataSync/HKD_GL_SyncService.cs

@@ -0,0 +1,286 @@
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+using HH.YiDaSyncNC.Dtos.YIDA;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    public class HKD_GL_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+        public HKD_GL_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public void DataSync()
+        {
+            try
+            {
+
+                DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+
+                var idList = _dingTalkService.GetFormCodeList("");
+                LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+                #region 获取NC中选项数据的Id
+                var bd_customerDic = _db_nc.Queryable<bd_customer>().ToList();
+                var bd_incomeDic = _db_nc.Queryable<bd_income>().ToList();
+                var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+                var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
+                var bd_materialDic = _db_nc.Queryable<bd_material>().ToList();
+                var bd_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
+                var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
+                var bd_psndocDic = _db_nc.Queryable<bd_psndoc>().ToList();
+                var sm_userDic = _db_nc.Queryable<sm_user>().ToList();
+                var org_accountingbookDic = _db_nc.Queryable<org_accountingbook>().ToList();
+                #endregion
+
+                foreach (var item in idList)
+                {
+                    try
+                    {
+                        var ydDataSource = _dingTalkService.GetFormDataByCode(item);
+                        string jsonData = JsonConvert.SerializeObject(ydDataSource);
+
+                        // 如果NC单据号为空,说明没有传入过NC,此时需要走此逻辑去传输
+                        if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                        {
+                            continue;
+                        }
+
+
+                        YiDa_ZZHX thisYiDaData = JsonConvert.DeserializeObject<YiDa_ZZHX>(jsonData);
+
+                        DateTime 凭证日期 = DateTime.Now;
+
+                        string 组织 = "";
+                        if (!string.IsNullOrWhiteSpace(thisYiDaData.textField_lw0ef16v))
+                        {
+                            var tempData = org_orgsDic.FirstOrDefault(f => f.name == thisYiDaData.textField_lw0ef16v);
+                            if (tempData != null)
+                            {
+                                组织 = tempData.code; // 组织
+                            }
+                        }
+
+
+                        string 账簿 = "";
+                        if (!string.IsNullOrWhiteSpace(thisYiDaData.textField_lw0ef16v))
+                        {
+                            var tempData = org_accountingbookDic.FirstOrDefault(f => f.name == thisYiDaData.textField_lw0ef16v + "-蓝云账簿");
+                            if (tempData != null)
+                            {
+                                账簿 = tempData.code; // 账簿
+                            }
+                        }
+
+
+                        string 人员编码 = "";//测试
+                        if (thisYiDaData.employeeField_lviv4sfw != null && thisYiDaData.employeeField_lviv4sfw.Count > 0)
+                        {
+                            var firstName = thisYiDaData.employeeField_lviv4sfw.FirstOrDefault();
+                            var tempData = bd_psndocDic.FirstOrDefault(f => firstName.Contains(f.name));
+                            if (tempData != null)
+                            {
+                                人员编码 = tempData.code; // 账簿
+                            }
+                        }
+
+
+
+                        string 制单人 = "OA-NC";
+
+                        // 表头
+                        var headModel = new HKD_GL_SyncServiceModel.DataModel.voucher_header()
+                        {
+                            year = 凭证日期.ToString("yyyy"),//会计年度
+                            prepareddate = 凭证日期.ToString("yyyy-MM-dd"),//制单日期
+                            period = 凭证日期.ToString("MM"),//会计期间
+                            pk_prepared = 制单人,//凭证制单人--操作员工工号
+                            no = "",//凭证号
+                            pk_accountingbook = 账簿,//账簿
+                            org = 组织,//组织编码
+                            pk_vouchertype = "02",//凭证类别 : 01-记账凭证 ,02-收款凭证 ,03-付款凭证 ,04-转账凭证 要确定
+                        };
+                        //表体
+                        var detailList = new List<HKD_GL_SyncServiceModel.DataModel.voucher_body>();
+
+
+                        //贷方
+                        detailList.Add(new HKD_GL_SyncServiceModel.DataModel.voucher_body()
+                        {
+                            detailindex = 1,
+                            accsubjcode = "122105",//科目编码 其他应收款-人员借款 
+                            pk_accasoa = "122105",//科目编码  
+                            explanation = "贷方摘要",//摘要  1
+                            verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+                            price = "0.00000000",
+                            excrate2 = "1",
+                            creditamount = thisYiDaData.numberField_lvuc0gtq.ToString(),//贷方金额  1
+                            localcreditamount = thisYiDaData.numberField_lvuc0gtq.ToString(),//贷方金额  1
+                            debitquantity = "0.00000000",
+                            debitamount = "0.00000000",
+                            groupdebitamount = "0.00000000",
+                            globaldebitamount = "0.00000000",
+                            localdebitamount = "0.00000000",
+                            creditquantity = "0.00000000",
+                            groupcreditamount = "0.00000000",
+                            globalcreditamount = "0.00000000",
+                            billtype = "",
+                            bankaccount = "",
+                            checkstyle = "",
+                            checkno = "",
+                            checkdate = "",
+                            bill_id = "",
+                            bill_date = "",
+                            pk_currtype = "CNY",
+                            cash_flow = new HKD_GL_SyncServiceModel.DataModel.cash_flow()//现金流 
+                            {
+                                m_pk_currtype = "CNY",
+                                pk_cashflow = "1113",//现金流编码 
+                                money = thisYiDaData.numberField_lvuc0gtq.ToString(),//金额  1
+                                moneymain = thisYiDaData.numberField_lvuc0gtq.ToString(),//金额  1
+                                moneygroup = "",
+                                moneyglobal = "",
+                                pk_innercorp = "",
+                            },
+                            ass = new List<HKD_GL_SyncServiceModel.DataModel.ass>()//
+                                {
+                                    new HKD_GL_SyncServiceModel.DataModel.ass()
+                                    {
+                                        pk_Checktype ="0001",//0019-部门
+                                        pk_Checkvalue = thisYiDaData.textField_lyzc1mpt,//部门编码 1
+                                    },
+                                     new HKD_GL_SyncServiceModel.DataModel.ass()
+                                    {
+                                        pk_Checktype ="0002",//0019-人员
+                                        pk_Checkvalue = 人员编码,//人员编码 1
+                                    }
+                                },
+                        });
+
+                        //借方
+                        detailList.Add(
+                            new HKD_GL_SyncServiceModel.DataModel.voucher_body()
+                            {
+                                detailindex = 2,
+                                accsubjcode = thisYiDaData.textField_lyocuyp3,//科目编码  1
+                                pk_accasoa = thisYiDaData.textField_lyocuyp3,//科目编码 1
+                                explanation = "借方摘要",//摘要 
+                                verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+                                price = "0.00000000",
+                                excrate2 = "1",
+                                debitamount = thisYiDaData.numberField_lvuc0gtq.ToString(),//借方金额  1
+                                localdebitamount = thisYiDaData.numberField_lvuc0gtq.ToString(),//借方金额 1
+                                debitquantity = "0.00000000",
+                                groupdebitamount = "0.00000000",
+                                globaldebitamount = "0.00000000",
+                                creditquantity = "0.00000000",
+                                creditamount = "0.00000000",
+                                groupcreditamount = "0.00000000",
+                                globalcreditamount = "0.00000000",
+                                localcreditamount = "0.00000000",
+                                billtype = "",
+                                bankaccount = "",
+                                checkstyle = "",
+                                checkno = "",
+                                checkdate = "",
+                                bill_id = "",
+                                bill_date = "",
+                                pk_currtype = "CNY",
+                                cash_flow = new HKD_GL_SyncServiceModel.DataModel.cash_flow()
+                                {
+                                },
+                                ass = new List<HKD_GL_SyncServiceModel.DataModel.ass>()//辅助核算 
+                                {
+                                    new HKD_GL_SyncServiceModel.DataModel.ass()
+                                    {
+                                        pk_Checktype ="0011",//0011-银行账户辅助核算 
+                                        pk_Checkvalue =  thisYiDaData.textField_lsx02qvj.Replace(" ",""),//银行账户  1
+                                    }
+                                },
+                            }
+                        );
+
+                        XElement xElement = HKD_GL_SyncServiceModel.ImportXml_凭证.TemplateHeade(headModel);
+                        xElement.Add(HKD_GL_SyncServiceModel.ImportXml_凭证.Header(headModel));//添加表头数据
+                        xElement.Element("voucher").Element("voucher_head").Element("details").Add(HKD_GL_SyncServiceModel.ImportXml_凭证.Bodydebit(detailList));
+                        //生成凭证
+                        var results_凭证 = NCImportFunc.NCImport2(xElement, _NCApiUrl + "?account=LY01&groupcode=0");
+
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(results_凭证), "results_凭证");
+
+
+                        XElement xE = XElement.Parse(results_凭证);
+
+                        string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+
+                        string content = xE.Element("sendresult").Element("content")?.Value;
+
+                        string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+                        var ncResData = new YiDaResDto();
+                        if (resultcode == "1")
+                        {
+                            ncResData = (new YiDaResDto()
+                            {
+                                bSuccess = true,
+                                syncTime = DateTime.Now,
+                                ncNo = resultdescription,//xE.Element("sendresult").Element("content").Value,
+                                log = "同步成功!"
+                            });
+                        }
+                        else
+                        {
+                            ncResData = (new YiDaResDto()
+                            {
+                                bSuccess = false,
+                                syncTime = DateTime.Now,
+                                ncNo = "",
+                                log = "同步失败!原因为【" + resultdescription + "】!"
+                            });
+                        }
+                        //更新同步标识
+                        var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
+                    }
+                    catch (Exception ex)
+                    {
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(ex.ToString()), "HKD循环内错误");
+                    }
+                    
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.WriteLog(JsonConvert.SerializeObject(ex.ToString()), "HKD");
+                throw;
+            }
+        }
+    }
+}

+ 229 - 0
HH.YiDaSyncNC/DataSync/KH_SyncService.cs

@@ -0,0 +1,229 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class KH_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public KH_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            {
+                var codeList = new string[] { "KH01748" };
+                var ncNo = new string[] { "1001G1100000000F2XJU" };
+
+                for (int i = 0; i < codeList.Count(); i++)
+                {
+                    var idList1 = _dingTalkService.GetFormIdList("{\"serialNumberField_ls14do3x\":\"" + codeList[i] + "\"}");
+
+                    var ncResData1 = new YiDaResDto()
+                    {
+                        syncTime = DateTime.Now,
+                    };
+
+                    ncResData1.bSuccess = true;
+                    ncResData1.ncNo = ncNo[i];//1001G1100000000DVG2J    1001G1100000000DVG3B
+                    ncResData1.log = "同步成功!";
+
+                    var ydRes1 = _dingTalkService.UpdateFormDataSyncDataById(ncResData1, idList1.FirstOrDefault());
+                }
+            }
+
+
+            {
+                //var codeList = new string[] { "KH01717" };
+
+                //for (int i = 0; i < codeList.Count(); i++)
+                //{
+                //    var idList1 = _dingTalkService.GetFormIdList("{\"serialNumberField_ls14do3x\":\"" + codeList[i] + "\"}");
+
+                //    var ncResData1 = new YiDaResDto()
+                //    {
+                //        syncTime = DateTime.Now,
+                //    };
+
+                //    ncResData1.bSuccess = false;
+                //    ncResData1.ncNo = "";
+                //    ncResData1.log = "同步失败!【纳税人识别号已存在】";
+
+                //    var ydRes1 = _dingTalkService.UpdateFormDataSyncDataById(ncResData1, idList1.FirstOrDefault());
+                //}
+            }
+
+
+
+            //// 宜搭全量数据Id
+            //var idList = _dingTalkService.GetFormIdList("{\"serialNumberField_ls14do3x\":\"KH01523\"}");
+
+            ////var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\"}");
+
+            ////// 获取当前最大Id
+            ////var newId = 100000001;
+            ////var maxData = _db_nc.Queryable<bd_project>().OrderByDescending(obd => Convert.ToDateTime(obd.creationtime)).First();
+            ////if (maxData != null && maxData.pk_project.Contains(_Static_PK_bd_project))
+            ////{
+            ////    newId = Convert.ToInt32(maxData.pk_project.Replace(_Static_PK_bd_project, "")) + 1;
+            ////}
+
+            //#region 获取NC中选项数据的Id
+            //var bd_custclassDic = _db_nc.Queryable<bd_custclass>().ToList();
+            //#endregion
+
+            //#region 插入数据
+            ////// 向NC插入数据
+            ////foreach (var item in idList)
+            ////{
+
+            ////    string createTime = "";
+            ////    string modifyTime = "";
+
+            ////    var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+            ////    var suplinkmanDataList = new List<KH_SyncServiceModel.DataModel.SuplinkmanItem>();
+
+            ////    var suplinkmanObjList = new List<object>();
+
+            ////    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lrhhdm5m").Value != null)
+            ////        suplinkmanObjList = (List<object>)ydDataSource["tableField_lrhhdm5m"];
+
+            ////    foreach (var objItem in suplinkmanObjList)
+            ////    {
+            ////        suplinkmanDataList.Add(new KH_SyncServiceModel.DataModel.SuplinkmanItem()
+            ////        {
+            ////            name = ((Dictionary<string, object>)objItem)["textField_lrhhdm5n"].ToString(),
+            ////            cell = ((Dictionary<string, object>)objItem)["textField_lrhhdm5o"].ToString(),
+            ////            vjob = ((Dictionary<string, object>)objItem)["textField_lrhhdm5p"].ToString()
+            ////        });
+            ////    }
+
+
+            ////    var dataSource = new KH_SyncServiceModel.DataModel()
+            ////    {
+            ////        pk_group = "0",
+            ////        pk_org = "0",
+            ////        code = ydDataSource["serialNumberField_ls14do3x"].ToString(),
+            ////        name = ydDataSource["textField_lr25icbn"].ToString(),
+            ////        taxpayerid = ydDataSource["textField_lt425f37"].ToString(),
+            ////        custprop = "0",
+
+            ////    };
+
+            ////    if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lrrdx03y").Value != null)
+            ////    {
+            ////        if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lrrdx03y"].ToString()))
+            ////        {
+            ////            var a = bd_custclassDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lrrdx03y"].ToString());
+            ////            if (a != null)
+            ////                dataSource.pk_custclass = a.code; // 分类s
+            ////        }
+            ////    }
+
+            ////    dataSource.suplinkman = suplinkmanDataList;
+
+            ////    var xmlData = KH_SyncServiceModel.ImportXml.Header(dataSource, item);
+
+            ////    XElement tempData = KH_SyncServiceModel.ImportXml.TemplateHeade();
+
+            ////    var results = NCImportFunc.NCImport(tempData, xmlData, _NCApiUrl + "?account=01&groupcode=0");
+
+            ////    // DBHelper.WriteLog(results);
+            ////    XElement xE = XElement.Parse(results);
+
+            ////    string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+
+            ////    // DBHelper.WriteLog($"状态码:" + resultcode);
+
+            ////    string content = xE.Element("sendresult").Element("content")?.Value;
+
+            ////    string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+
+            ////    var ncResData = new YiDaResDto()
+            ////    {
+            ////        syncTime = DateTime.Now,
+            ////    };
+
+            ////    // NC接口执行完成后的处理
+            ////    if (resultcode == "1")
+            ////    {
+
+            ////        DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作成功!");
+
+            ////        ncResData.bSuccess = true;
+            ////        ncResData.ncNo = xE.Element("sendresult").Element("content").Value;
+            ////        ncResData.log = "同步成功!";
+            ////    }
+            ////    else
+            ////    {
+            ////        DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作失败!" + resultdescription + ";");
+
+            ////        if (resultdescription.Contains("不允许重复"))
+            ////        {
+            ////            ncResData.bSuccess = true;
+            ////            ncResData.ncNo = "";
+            ////            ncResData.log = "数据已存在,无需同步!";
+            ////        }
+            ////        else
+            ////        {
+            ////            ncResData.bSuccess = false;
+            ////            ncResData.ncNo = "";
+            ////            ncResData.log = "同步失败!原因为【" + resultdescription + "】";
+            ////        }
+            ////    }
+
+            ////    var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
+            ////}
+            //#endregion
+
+            //var ncResData = new YiDaResDto()
+            //{
+            //    syncTime = DateTime.Now,
+            //};
+
+            //ncResData.bSuccess = true;
+            //ncResData.ncNo = "1001G1100000000DVKOQ";//1001G1100000000DVG2J    1001G1100000000DVG3B
+            //ncResData.log = "同步成功!";
+
+            //var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, idList.FirstOrDefault());
+        }
+    }
+}

+ 349 - 0
HH.YiDaSyncNC/DataSync/KP_HK_SyncService.cs

@@ -0,0 +1,349 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class KP_HK_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_so_saleorder = ConfigurationManager.AppSettings["so_saleorder"];
+        public static string _Static_PK_so_saleorder_b = ConfigurationManager.AppSettings["so_saleorder_b"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public KP_HK_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public class FormItem
+        {
+            public string title { get; set; }
+        }
+
+        public class DetailItem
+        {
+            public decimal ncMoney { get; set; }
+            public decimal ydMoney { get; set; }
+            public long ncBilldate { get; set; }
+            public bool bAll { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+
+            {
+
+
+                //var idList2= _dingTalkService.GetFormIdList("{\"textField_ltxyt75i\":\"" + "同步完成" + "\"}");
+                //foreach (var item in idList2)
+                //{
+                //    var ydRes1 = _dingTalkService.UpdateFormDataSyncDataByIdOnlyState(item);
+                //}
+            }
+
+
+            // 宜搭全量数据Id
+            //var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lvituew9\":\"正常\"}");
+            //var idList = _dingTalkService.GetFormIdList("{\"textField_lvdosccc\":\"KP_2025030300450\"}");
+
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_m06hhw2p\":\"未回款\",\"textField_ltxyt75i\":\"同步成功\"}");
+            idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_m06hhw2p\":\"已回款\",\"textField_ltxyt75i\":\"同步成功\"}"));
+            idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_m06hhw2p\":\"未回款\",\"textField_ltxyt75i\":\"同步失败\"}"));
+            idList.AddRange(_dingTalkService.GetFormIdList("{\"radioField_m06hhw2p\":\"已回款\",\"textField_ltxyt75i\":\"同步失败\"}"));
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+            #region 获取NC中选项数据的Id
+            var so_saleorder_bList = _db_nc.Queryable<so_saleorder_b>().Where(w => w.vbdef10 != "~" && w.dr == 0).ToList();
+            var ar_gatheritemList = _db_nc.Queryable<ar_gatheritem>().Where(w => so_saleorder_bList.Select(s => s.csaleorderbid).ToList().Contains(w.src_itemid)).ToList();
+            var ar_gatherbillList = _db_nc.Queryable<ar_gatherbill>().Where(w => ar_gatheritemList.Select(s => s.pk_gatherbill).ToList().Contains(w.pk_gatherbill) && w.billstatus == "1").Select(s => s.pk_gatherbill).ToList();
+            #endregion
+
+            var i = 1;
+
+            #region 接口方式
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                // 如果NC单据号为空,说明没有传入过NC,此时跳过
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+
+                }
+                else
+                {
+                    continue;
+                }
+
+                LogHelper.WriteLog("", "【序号 " + i + " / " + idList.Count + "】" + item + " 开始回写");
+                i++;
+
+                var updateData = new Dictionary<string, string>();
+                var detailData = new List<DetailItem>();
+
+                #region 大业主开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvc9x4vt").Value != null)
+                {
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvc9x4vt").Value != null)
+                    {
+                        var detailObjList1 = (List<object>)ydDataSource["tableField_lvc9x4vt"]; // 大业主开票明细
+
+                        if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["textField_lvdojfup"].ToString()))
+                        {
+                            var bChange = false;
+                            foreach (var objItem in detailObjList1)
+                            {
+                                var rowId = ((Dictionary<string, object>)objItem)["textField_lvdojfup"].ToString();
+
+                                var sbData = so_saleorder_bList.Where(f => f.vbdef10 == rowId);
+                                if (sbData != null)
+                                {
+                                    var giData = ar_gatheritemList.Where(w => sbData.Select(s => s.csaleorderbid).ToList().Contains(w.src_itemid) && ar_gatherbillList.Contains(w.pk_gatherbill)).ToList();
+                                    if (giData.Count > 0)
+                                    {
+                                        var ncMoney = giData.Sum(s => s.money_cr);
+                                        var ydMoney = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2y"].ToString());
+
+                                        decimal ydReMoney = 0;
+                                        object ydReMoney_;
+
+                                        if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvg084lb", out ydReMoney_))
+                                        {
+                                            ydReMoney = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvg084lb"].ToString());
+                                        }
+
+                                        var ncBilldate = UnixTimeHelper.ConvertToMilliseconds(Convert.ToDateTime(giData.OrderByDescending(ob => Convert.ToDateTime(ob.billdate)).FirstOrDefault().billdate));
+
+                                        //var detailItem = new DetailItem()
+                                        //{
+                                        //    ncMoney = (ncMoney + ydReMoney) > ydMoney ? ydMoney : (ncMoney + ydReMoney),
+                                        //    ydMoney = ydMoney,
+                                        //    ncBilldate = ncBilldate,
+                                        //    bAll = ((ncMoney + ydReMoney) >= ydMoney)
+                                        //};
+
+                                        var detailItem = new DetailItem()
+                                        {
+                                            ncMoney = ncMoney > ydMoney ? ydMoney : ncMoney,
+                                            ydMoney = ydMoney,
+                                            ncBilldate = ncBilldate,
+                                            bAll = ncMoney >= ydMoney
+                                        };
+
+                                        detailData.Add(detailItem);
+
+                                        ((Dictionary<string, object>)objItem)["numberField_lvg084lb"] = (detailItem.ncMoney).ToString("#0.00");
+                                        ((Dictionary<string, object>)objItem)["dateField_m0f55roc"] = ncBilldate.ToString();
+
+                                        bChange = true;
+                                    }
+                                }
+                            }
+
+                            if (bChange)
+                                updateData.Add("tableField_lvc9x4vt", JsonConvert.SerializeObject(detailObjList1));
+                        }
+                    }
+                }
+                #endregion
+
+                #region 工程订单开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvd8pp44").Value != null)
+                {
+                    var detailObjList2 = (List<object>)ydDataSource["tableField_lvd8pp44"]; // 工程订单开票明细
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvd8pp44").Value != null)
+                    {
+                        if (detailObjList2.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList2.FirstOrDefault())["textField_lvdojfur"].ToString()))
+                        {
+                            var bChange = false;
+                            foreach (var objItem in detailObjList2)
+                            {
+                                var rowId = ((Dictionary<string, object>)objItem)["textField_lvdojfur"].ToString();
+
+                                var sbData = so_saleorder_bList.Where(f => f.vbdef10 == rowId);
+                                if (sbData != null)
+                                {
+                                    var giData = ar_gatheritemList.Where(w => sbData.Select(s => s.csaleorderbid).ToList().Contains(w.src_itemid) && ar_gatherbillList.Contains(w.pk_gatherbill)).ToList();
+                                    if (giData.Count > 0)
+                                    {
+                                        var ncMoney = giData.Sum(s => s.money_cr);
+                                        var ydMoney = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp41"].ToString());
+
+                                        decimal ydReMoney = 0;
+                                        object ydReMoney_;
+
+                                        if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvg084l9", out ydReMoney_))
+                                        {
+                                            ydReMoney = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvg084l9"].ToString());
+                                        }
+
+                                        var ncBilldate = UnixTimeHelper.ConvertToMilliseconds(Convert.ToDateTime(giData.OrderByDescending(ob => Convert.ToDateTime(ob.billdate)).FirstOrDefault().billdate));
+
+                                        //var detailItem = new DetailItem()
+                                        //{
+                                        //    ncMoney = (ncMoney + ydReMoney) > ydMoney ? ydMoney : (ncMoney + ydReMoney),
+                                        //    ydMoney = ydMoney,
+                                        //    ncBilldate = ncBilldate,
+                                        //    bAll = ((ncMoney + ydReMoney) >= ydMoney)
+                                        //};
+
+                                        var detailItem = new DetailItem()
+                                        {
+                                            ncMoney = ncMoney > ydMoney ? ydMoney : ncMoney,
+                                            ydMoney = ydMoney,
+                                            ncBilldate = ncBilldate,
+                                            bAll = ncMoney >= ydMoney
+                                        };
+
+                                        detailData.Add(detailItem);
+
+                                        ((Dictionary<string, object>)objItem)["numberField_lvg084l9"] = (detailItem.ncMoney).ToString("#0.00");
+                                        ((Dictionary<string, object>)objItem)["dateField_m0dp1g0e"] = ncBilldate.ToString();
+
+                                        bChange = true;
+                                    }
+                                }
+                            }
+
+                            if (bChange)
+                                updateData.Add("tableField_lvd8pp44", JsonConvert.SerializeObject(detailObjList2));
+                        }
+                    }
+                }
+                #endregion
+
+                #region 小业主开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvdnme13").Value != null)
+                {
+                    var detailObjList3 = (List<object>)ydDataSource["tableField_lvdnme13"]; // 小业主
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvdnme13").Value != null)
+                    {
+                        if (detailObjList3.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList3.FirstOrDefault())["textField_lvdojfus"].ToString()))
+                        {
+                            var bChange = false;
+                            foreach (var objItem in detailObjList3)
+                            {
+                                var rowId = ((Dictionary<string, object>)objItem)["textField_lvdojfus"].ToString();
+
+                                var sbData = so_saleorder_bList.Where(f => f.vbdef10 == rowId);
+                                if (sbData != null)
+                                {
+                                    var giData = ar_gatheritemList.Where(w => sbData.Select(s => s.csaleorderbid).ToList().Contains(w.src_itemid) && ar_gatherbillList.Contains(w.pk_gatherbill)).ToList();
+                                    if (giData.Count > 0)
+                                    {
+                                        var ncMoney = giData.Sum(s => s.money_cr);
+                                        var ydMoney = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0z"].ToString());
+
+                                        decimal ydReMoney = 0;
+                                        object ydReMoney_;
+
+                                        if (((Dictionary<string, object>)objItem).TryGetValue("numberField_lvg084la", out ydReMoney_))
+                                        {
+                                            ydReMoney = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvg084la"].ToString());
+                                        }
+
+                                        var ncBilldate = UnixTimeHelper.ConvertToMilliseconds(Convert.ToDateTime(giData.OrderByDescending(ob => Convert.ToDateTime(ob.billdate)).FirstOrDefault().billdate));
+
+                                        //var detailItem = new DetailItem()
+                                        //{
+                                        //    ncMoney = (ncMoney + ydReMoney) > ydMoney ? ydMoney : (ncMoney + ydReMoney),
+                                        //    ydMoney = ydMoney,
+                                        //    ncBilldate = ncBilldate,
+                                        //    bAll = ((ncMoney + ydReMoney) >= ydMoney)
+                                        //};
+
+                                        var detailItem = new DetailItem()
+                                        {
+                                            ncMoney = ncMoney > ydMoney ? ydMoney : ncMoney,
+                                            ydMoney = ydMoney,
+                                            ncBilldate = ncBilldate,
+                                            bAll = ncMoney >= ydMoney
+                                        };
+
+                                        detailData.Add(detailItem);
+
+                                        ((Dictionary<string, object>)objItem)["numberField_lvg084la"] = (detailItem.ncMoney).ToString("#0.00");
+                                        ((Dictionary<string, object>)objItem)["dateField_m0f55roe"] = ncBilldate.ToString();
+
+                                        bChange = true;
+                                    }
+                                }
+                            }
+
+                            if (bChange)
+                                updateData.Add("tableField_lvdnme13", JsonConvert.SerializeObject(detailObjList3));
+                        }
+                    }
+                }
+                #endregion
+
+                if (detailData.Count > 0)
+                {
+                    // 回款时间
+                    updateData.Add("dateField_m0f5xiio", detailData.OrderByDescending(ob => ob.ncBilldate).FirstOrDefault().ncBilldate.ToString());
+
+                    // 已回款金额
+                    updateData.Add("numberField_m0f55roa", detailData.Sum(s => s.ncMoney).ToString("#0.00"));
+
+                    // 回款状态
+                    updateData.Add("radioField_m06hhw2p", detailData.FirstOrDefault(f => !f.bAll) != null ? "已回款" : "回款完成");
+
+                    LogHelper.WriteLog(JsonConvert.SerializeObject(updateData), "数据构建完成");
+
+                    // 回传状态
+                    updateData.Add("radioField_m4253oqe", "N");
+                    // 回传状态
+                    updateData.Add("textField_m4253oqd", "回传成功");
+
+
+                    var ydRes = _dingTalkService.UpdateFormDataById(updateData, item);
+
+                    LogHelper.WriteLog(JsonConvert.SerializeObject(ydRes), "ydRes 回写完成------------------------------------------------");
+                }
+                else
+                {
+                    LogHelper.WriteLog("无回款记录", "回写完成------------------------------------------------");
+                }
+            }
+
+            #endregion
+        }
+    }
+}

+ 605 - 0
HH.YiDaSyncNC/DataSync/KP_SyncService.cs

@@ -0,0 +1,605 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class KP_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_so_saleorder = ConfigurationManager.AppSettings["so_saleorder"];
+        public static string _Static_PK_so_saleorder_b = ConfigurationManager.AppSettings["so_saleorder_b"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public KP_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public class FormItem
+        {
+            public string title { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+            //var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lvituew9\":\"正常\"}");
+            //var idList = _dingTalkService.GetFormIdList("{\"textField_lvdosccc\":\"KP_2024071700252\"}");
+
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\"}");
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+            #region 获取NC中选项数据的Id
+            var bd_customerDic = _db_nc.Queryable<bd_customer>().ToList();
+            var bd_incomeDic = _db_nc.Queryable<bd_income>().ToList();
+            var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
+            var bd_materialDic = _db_nc.Queryable<bd_material>().ToList();
+            var bd_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
+            var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
+            var bd_psndocDic = _db_nc.Queryable<bd_psndoc>().ToList();
+            var sm_userDic = _db_nc.Queryable<sm_user>().ToList();
+            var bd_defdoc_kplx = _db_nc.Queryable<bd_defdoc>().Where(w => w.pk_defdoclist == "1001G1100000000016FV").ToList(); // 开票类型
+            var bd_defdoc_htywlx = _db_nc.Queryable<bd_defdoc>().Where(w => w.pk_defdoclist == "1001G1100000000010PV").ToList(); // 合同业务类型
+            #endregion
+
+            #region 接口方式
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                // 如果NC单据号为空,说明没有传入过NC,此时需要走此逻辑去创建销售订单等
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+                    continue;
+                }
+
+                var ncResData = new List<YiDaResDto>();
+
+
+                #region 表头
+                // 表头
+                var dataSource = new KP_SyncServiceModel.DataModel();
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vo").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vo"].ToString()))
+                    {
+                        var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvc9x4vo"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.组织 = tempData.code; // 组织
+                        }
+                    }
+                }
+
+                dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lw5ud9bk"].ToString()))
+                {
+                    dataSource.单据日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lw5ud9bk"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
+                }
+
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_lvdojfuj").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["textField_lvdojfuj"].ToString()))
+                    {
+                        var tempData = bd_customerDic.FirstOrDefault(f => f.code == ydDataSource["textField_lvdojfuj"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.客户 = tempData.code; // 客户
+                        }
+                    }
+                }
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vq").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vq"].ToString()))
+                    {
+                        var tempData = bd_incomeDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvc9x4vq"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.收款协议 = tempData.code; // 收款协议
+                        }
+                    }
+                }
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "departmentSelectField_lvc7mi3w").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["departmentSelectField_lvc7mi3w"].ToString()))
+                    {
+                        var tempData = org_deptDic.FirstOrDefault(f => f.name == JsonConvert.DeserializeObject<List<string>>(JsonConvert.SerializeObject(ydDataSource["departmentSelectField_lvc7mi3w"]))[0]);
+                        if (tempData != null)
+                        {
+                            dataSource.部门 = tempData.code; // 部门
+                        }
+                    }
+                }
+
+                dataSource.审批人 = "OA-NC";
+                dataSource.制单人 = "OA-NC";
+                dataSource.创建人 = "OA-NC";
+
+                dataSource.审批时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                dataSource.制单时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                dataSource.创建时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_lvdntzul").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["textField_lvdntzul"].ToString()))
+                    {
+                        var tempData = bd_projectDic.FirstOrDefault(f => f.project_code == ydDataSource["textField_lvdntzul"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.项目 = tempData.project_code; // 项目
+                        }
+                    }
+                }
+
+                dataSource.发票号 = ydDataSource["textField_lvd8pp35"].ToString();
+                dataSource.客户打印名称 = ydDataSource["selectField_lvdojfui"].ToString();
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vp").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vp"].ToString()))
+                    {
+                        var tempName = ydDataSource["selectField_lvc9x4vp"].ToString();
+                        if (ydDataSource["selectField_lvc9x4vp"].ToString() == "增值税专票")
+                        {
+                            tempName = "增值税专用发票";
+                        }
+
+                        if (ydDataSource["selectField_lvc9x4vp"].ToString() == "增值税普票")
+                        {
+                            tempName = "增值税普通发票";
+                        }
+
+                        var tempData = bd_defdoc_kplx.FirstOrDefault(f => f.name == tempName);
+                        if (tempData != null)
+                        {
+                            dataSource.开票类型 = tempData.pk_defdoc; // 开票类型
+                        }
+                    }
+                }
+
+                dataSource.OA单据号 = ydDataSource["textField_lvdosccc"].ToString();
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vn").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vn"].ToString()))
+                    {
+                        if (ydDataSource["selectField_lvc9x4vn"].ToString().Contains("一次性") || ydDataSource["selectField_lvc9x4vn"].ToString().Contains("工程订单"))
+                        {
+                            dataSource.合同业务类型 = "1001G11000000000113F";
+                        }
+                        else
+                        {
+                            var tempData = bd_defdoc_htywlx.FirstOrDefault(f => f.name == ydDataSource["selectField_lvc9x4vn"].ToString());
+                            if (tempData != null)
+                            {
+                                dataSource.合同业务类型 = tempData.pk_defdoc; // 合同业务类型
+                            }
+                        }
+                    }
+                }
+
+                dataSource.年份 = DateTime.Now.ToString("yyyy");
+                dataSource.月份 = DateTime.Now.ToString("MM");
+
+                #endregion
+
+                var detailList = new List<KP_SyncServiceModel.DataModel.OrderB>();
+
+                #region 大业主开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvc9x4vt").Value != null)
+                {
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvc9x4vt").Value != null)
+                    {
+                        var detailObjList1 = (List<object>)ydDataSource["tableField_lvc9x4vt"]; // 大业主开票明细
+
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(detailObjList1.FirstOrDefault()), "大业主0");
+
+                        if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["textField_lvdojfup"].ToString())
+                            && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["textField_lvynhq7q"].ToString()))
+                        {
+                            LogHelper.WriteLog(JsonConvert.SerializeObject(dataSource), "大业主1");
+
+                            foreach (var objItem in detailObjList1)
+                            {
+                                var detailItem = new KP_SyncServiceModel.DataModel.OrderB();
+
+                                if (!string.IsNullOrWhiteSpace(((Dictionary<string, object>)objItem)["associationFormField_lvynhq7p_id"].ToString()))
+                                {
+                                    var sourceStr = ((Dictionary<string, object>)objItem)["associationFormField_lvynhq7p_id"].ToString().Replace("\\", "");
+                                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                                    var materialData = bd_materialDic.FirstOrDefault(f => f.name == b[0].title);
+
+                                    detailItem.物料 = materialData.code; // 物料
+
+                                    var unitCode = bd_measdocDic.FirstOrDefault(f => f.pk_measdoc == materialData.pk_measdoc);
+
+                                    detailItem.计量单位 = unitCode.code; // 计量单位
+                                }
+
+                                var hsdj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2v"].ToString());
+                                var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2z"].ToString());
+                                var wsdj = hsdj - se;
+                                var sl = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2w"].ToString());
+                                var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp30"].ToString());
+                                var jshj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2y"].ToString());
+
+                                // 含税单价
+                                detailItem.含税单价 = hsdj.ToString();
+
+                                // 无税单价
+                                detailItem.无税单价 = wsdj.ToString();
+
+                                //  含税净价
+                                detailItem.含税净价 = hsdj.ToString();
+
+                                // 无税净价
+                                detailItem.无税净价 = wsdj.ToString();
+
+                                // 税额
+                                detailItem.税额 = se.ToString();
+
+                                // 无税金额
+                                detailItem.无税金额 = wsje.ToString();
+
+                                // 数量
+                                detailItem.数量 = sl.ToString();
+
+                                // 价税合计
+                                detailItem.价税合计 = jshj.ToString();
+
+                                detailItem.换算率 = "1.00/1.00";
+                                detailItem.税码 = ydDataSource["selectField_lvc9x4vp"].ToString() == "增值税普票" ? "CN11" : "CN04"; // 税率码 
+                                detailItem.税率 = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2x"].ToString()).ToString(); // 税率
+
+                                detailItem.开票内容 = ((Dictionary<string, object>)objItem)["textField_lvd8pp2t"].ToString();
+
+                                detailItem.行id = ((Dictionary<string, object>)objItem)["textField_lvdojfup"].ToString();
+
+                                detailList.Add(detailItem);
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                #region 工程订单开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvd8pp44").Value != null)
+                {
+                    var detailObjList2 = (List<object>)ydDataSource["tableField_lvd8pp44"]; // 工程订单开票明细
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvd8pp44").Value != null)
+                    {
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(detailObjList2.FirstOrDefault()), "gc0");
+
+                        if (detailObjList2.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList2.FirstOrDefault())["textField_lvdojfur"].ToString())
+                            && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList2.FirstOrDefault())["numberField_lvd8pp3y_value"].ToString()))
+                        {
+                            LogHelper.WriteLog(JsonConvert.SerializeObject(detailObjList2.FirstOrDefault()), "gc1");
+
+                            dataSource.项目 = "PM99001";
+
+                            foreach (var objItem in detailObjList2)
+                            {
+                                var detailItem = new KP_SyncServiceModel.DataModel.OrderB();
+
+                                if (!string.IsNullOrWhiteSpace(((Dictionary<string, object>)objItem)["associationFormField_lvynrr6a_id"].ToString()))
+                                {
+                                    var sourceStr = ((Dictionary<string, object>)objItem)["associationFormField_lvynrr6a_id"].ToString().Replace("\\", "");
+                                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                                    var materialData = bd_materialDic.FirstOrDefault(f => f.name == b[0].title);
+
+                                    detailItem.物料 = materialData.code; // 物料
+
+                                    var unitCode = bd_measdocDic.FirstOrDefault(f => f.pk_measdoc == materialData.pk_measdoc);
+
+                                    detailItem.计量单位 = unitCode.code; // 计量单位
+                                }
+
+                                var hsdj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp3y"].ToString());
+                                var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp42"].ToString());
+                                var wsdj = hsdj - se;
+                                var sl = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp3z"].ToString());
+                                var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp43"].ToString());
+                                var jshj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp41"].ToString());
+
+                                // 含税单价
+                                detailItem.含税单价 = hsdj.ToString();
+
+                                // 无税单价
+                                detailItem.无税单价 = wsdj.ToString();
+
+                                //  含税净价
+                                detailItem.含税净价 = hsdj.ToString();
+
+                                // 无税净价
+                                detailItem.无税净价 = wsdj.ToString();
+
+                                // 税额
+                                detailItem.税额 = se.ToString();
+
+                                // 无税金额
+                                detailItem.无税金额 = wsje.ToString();
+
+                                // 数量
+                                detailItem.数量 = sl.ToString();
+
+                                // 价税合计
+                                detailItem.价税合计 = jshj.ToString();
+
+                                detailItem.换算率 = "1.00/1.00";
+                                detailItem.税码 = ydDataSource["selectField_lvc9x4vp"].ToString() == "增值税普票" ? "CN11" : "CN04"; // 税率码 
+                                detailItem.税率 = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp40"].ToString()).ToString(); // 税率
+
+                                detailItem.开票内容 = ((Dictionary<string, object>)objItem)["textField_lvd8pp3w"].ToString();
+
+                                detailItem.行id = ((Dictionary<string, object>)objItem)["textField_lvdojfur"].ToString();
+
+                                detailList.Add(detailItem);
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                #region 小业主开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvdnme13").Value != null)
+                {
+                    var detailObjList3 = (List<object>)ydDataSource["tableField_lvdnme13"]; // 小业主
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvdnme13").Value != null)
+                    {
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(detailObjList3.FirstOrDefault()), "x0");
+
+                        if (detailObjList3.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList3.FirstOrDefault())["textField_lvdojfus"].ToString())
+                             && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList3.FirstOrDefault())["numberField_lvdnme0w_value"].ToString()))
+                        {
+                            LogHelper.WriteLog(JsonConvert.SerializeObject(detailObjList3.FirstOrDefault()), "x1");
+
+                            foreach (var objItem in detailObjList3)
+                            {
+                                var detailItem = new KP_SyncServiceModel.DataModel.OrderB();
+
+                                if (!string.IsNullOrWhiteSpace(((Dictionary<string, object>)objItem)["associationFormField_lvynrr6c_id"].ToString()))
+                                {
+                                    var sourceStr = ((Dictionary<string, object>)objItem)["associationFormField_lvynrr6c_id"].ToString().Replace("\\", "");
+                                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                                    var materialData = bd_materialDic.FirstOrDefault(f => f.name == b[0].title);
+
+                                    detailItem.物料 = materialData.code; // 物料
+
+                                    var unitCode = bd_measdocDic.FirstOrDefault(f => f.pk_measdoc == materialData.pk_measdoc);
+
+                                    detailItem.计量单位 = unitCode.code; // 计量单位
+                                }
+
+                                var hsdj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0w"].ToString());
+                                var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme10"].ToString());
+                                var wsdj = hsdj - se;
+                                var sl = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0x"].ToString());
+                                var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme11"].ToString());
+                                var jshj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0z"].ToString());
+
+                                // 含税单价
+                                detailItem.含税单价 = hsdj.ToString();
+
+                                // 无税单价
+                                detailItem.无税单价 = wsdj.ToString();
+
+                                //  含税净价
+                                detailItem.含税净价 = hsdj.ToString();
+
+                                // 无税净价
+                                detailItem.无税净价 = wsdj.ToString();
+
+                                // 税额
+                                detailItem.税额 = se.ToString();
+
+                                // 无税金额
+                                detailItem.无税金额 = wsje.ToString();
+
+                                // 数量
+                                detailItem.数量 = sl.ToString();
+
+                                // 价税合计
+                                detailItem.价税合计 = jshj.ToString();
+
+                                detailItem.换算率 = "1.00/1.00";
+                                detailItem.税码 = ydDataSource["selectField_lvc9x4vp"].ToString() == "增值税普票" ? "CN11" : "CN04"; // 税率码 
+                                detailItem.税率 = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0y"].ToString()).ToString(); // 税率
+
+                                detailItem.开票内容 = ((Dictionary<string, object>)objItem)["textField_lvdnme0u"].ToString();
+
+                                detailItem.行id = ((Dictionary<string, object>)objItem)["textField_lvdojfus"].ToString();
+
+                                detailList.Add(detailItem);
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                dataSource.明细 = detailList;
+
+                dataSource.数量 = dataSource.明细.Sum(s => Convert.ToDecimal(s.数量)).ToString();
+                dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
+
+
+                var results_销售订单 = NCImportFunc.NCImport(KP_SyncServiceModel.ImportXml_销售订单.TemplateHeade(), KP_SyncServiceModel.ImportXml_销售订单.Header(dataSource, item + DateTime.Now.ToString("MMddHHmmss")), _NCApiUrl + "?account=LY01&groupcode=0");
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_销售订单), "results_销售订单");
+
+                XElement xE_销售订单 = XElement.Parse(results_销售订单);
+                string resultcode_销售订单 = xE_销售订单.Element("sendresult").Element("resultcode").Value;
+                string resultdescription_销售订单 = xE_销售订单.Element("sendresult").Element("resultdescription")?.Value;
+
+                if (resultcode_销售订单 == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE_销售订单.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription_销售订单 + "】!"
+                    });
+
+                    continue;
+                }
+
+                // -------------------------------销售订单同步完,开始同步销售发票
+
+                var saleorderData = _db_nc.Queryable<so_saleorder>().First(f => f.csaleorderid == xE_销售订单.Element("sendresult").Element("content").Value);
+                var saleorderbData = _db_nc.Queryable<so_saleorder_b>().Where(f => f.csaleorderid == xE_销售订单.Element("sendresult").Element("content").Value).ToList();
+
+                dataSource.销售订单单据号 = saleorderData.vbillcode;
+                dataSource.销售订单主表id = saleorderData.csaleorderid;
+
+                foreach (var detailItem in dataSource.明细)
+                {
+                    detailItem.销售订单子表id = saleorderbData.FirstOrDefault(f => f.vbdef10 == detailItem.行id).csaleorderbid;
+                }
+
+                var results_销售发票 = NCImportFunc.NCImport(KP_SyncServiceModel.ImportXml_销售发票.TemplateHeade(), KP_SyncServiceModel.ImportXml_销售发票.Header(dataSource, item + DateTime.Now.ToString("MMddHHmmss")), _NCApiUrl + "?account=LY01&groupcode=0");
+
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_销售发票), "results_销售发票");
+
+                XElement xE_销售发票 = XElement.Parse(results_销售发票);
+                string resultcode_销售发票 = xE_销售发票.Element("sendresult").Element("resultcode").Value;
+                string resultdescription_销售发票 = xE_销售发票.Element("sendresult").Element("resultdescription")?.Value;
+
+                if (resultcode_销售发票 == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE_销售发票.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription_销售发票 + "】!"
+                    });
+                }
+
+                // -------------------------------销售发票同步完,开始同步应收  (新版)应收不同步,改为调用审核接口,让NC自动取生成应收单
+
+                var results_销售发票审核 = HttpRequestHelper.ApporeNCCSOBill(xE_销售发票.Element("sendresult").Element("content").Value);
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_销售发票审核), "results_销售发票审核");
+
+                if (results_销售发票审核.state == 0)
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = "",
+                        log = "同步成功!"
+                    });
+
+                    if (ydDataSource["selectField_lvc9x4vp"].ToString() == "增值税普票")
+                    {
+                        _db_nc.Ado.ExecuteCommand($"UPDATE SO_SALEINVOICE SET VTRANTYPECODE='32-Cxx-01',CTRANTYPEID='1001G11000000000036J' WHERE CSALEINVOICEID='{xE_销售发票.Element("sendresult").Element("content").Value}'");
+
+                        LogHelper.WriteLog("执行更新sql", "results_销售发票");
+                    }
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + results_销售发票审核.msg + "】!"
+                    });
+                }
+
+                var finalResData = new YiDaResDto();
+
+                if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
+                {
+                    finalResData.bSuccess = false;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE_销售订单.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+                else
+                {
+                    finalResData.bSuccess = true;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = xE_销售订单.Element("sendresult").Element("content").Value;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+
+                if (ydDataSource["selectField_lvituew9"].ToString() == "已红冲" && finalResData.bSuccess)
+                {
+                    finalResData.bNeedSync = "Y";
+                }
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
+            }
+
+            #endregion
+        }
+    }
+}

+ 576 - 0
HH.YiDaSyncNC/DataSync/KP_TP_SyncService.cs

@@ -0,0 +1,576 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class KP_TP_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_so_saleorder = ConfigurationManager.AppSettings["so_saleorder"];
+        public static string _Static_PK_so_saleorder_b = ConfigurationManager.AppSettings["so_saleorder_b"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public KP_TP_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public class FormItem
+        {
+            public string title { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lvituew9\":\"已红冲\"}");
+            //var idList = _dingTalkService.GetFormIdList("{\"textField_lvdosccc\":\"KP_2024071700252\"}");
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+            #region 获取NC中选项数据的Id
+            var bd_customerDic = _db_nc.Queryable<bd_customer>().ToList();
+            var bd_incomeDic = _db_nc.Queryable<bd_income>().ToList();
+            var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+            var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
+            var bd_materialDic = _db_nc.Queryable<bd_material>().ToList();
+            var bd_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
+            var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
+            var bd_psndocDic = _db_nc.Queryable<bd_psndoc>().ToList();
+            var sm_userDic = _db_nc.Queryable<sm_user>().ToList();
+            var bd_defdoc_kplx = _db_nc.Queryable<bd_defdoc>().Where(w => w.pk_defdoclist == "1001G1100000000016FV").ToList(); // 开票类型
+            var bd_defdoc_htywlx = _db_nc.Queryable<bd_defdoc>().Where(w => w.pk_defdoclist == "1001G1100000000010PV").ToList(); // 合同业务类型
+            #endregion
+
+            #region 接口方式
+            // 向NC插入数据
+            foreach (var item in idList)
+            {
+                string createTime = "";
+                string modifyTime = "";
+
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                // 如果NC单据号不为空,说明正数发票及销售订单已经传入NC,此时按照此流程传输红票
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+
+                }
+                else
+                {
+                    continue;
+                }
+
+                var ncResData = new List<YiDaResDto>();
+
+
+                #region 表头
+                // 表头
+                var dataSource = new KP_SyncServiceModel.DataModel();
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vo").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vo"].ToString()))
+                    {
+                        var tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvc9x4vo"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.组织 = tempData.code; // 组织
+                        }
+                    }
+                }
+
+                dataSource.单据日期 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                //if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lw5ud9bk"].ToString()))
+                //{
+                //    dataSource.单据日期 = UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_lw5ud9bk"].ToString())).ToString("yyyy-MM-dd HH:mm:ss");
+                //}
+
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_lvdojfuj").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["textField_lvdojfuj"].ToString()))
+                    {
+                        var tempData = bd_customerDic.FirstOrDefault(f => f.code == ydDataSource["textField_lvdojfuj"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.客户 = tempData.code; // 客户
+                        }
+                    }
+                }
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vq").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vq"].ToString()))
+                    {
+                        var tempData = bd_incomeDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvc9x4vq"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.收款协议 = tempData.code; // 收款协议
+                        }
+                    }
+                }
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "departmentSelectField_lvc7mi3w").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["departmentSelectField_lvc7mi3w"].ToString()))
+                    {
+                        var tempData = org_deptDic.FirstOrDefault(f => f.name == JsonConvert.DeserializeObject<List<string>>(JsonConvert.SerializeObject(ydDataSource["departmentSelectField_lvc7mi3w"]))[0]);
+                        if (tempData != null)
+                        {
+                            dataSource.部门 = tempData.code; // 部门
+                        }
+                    }
+                }
+
+                dataSource.审批人 = "OA-NC";
+                dataSource.制单人 = "OA-NC";
+                dataSource.创建人 = "OA-NC";
+
+                dataSource.审批时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                dataSource.制单时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                dataSource.创建时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_lvdntzul").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["textField_lvdntzul"].ToString()))
+                    {
+                        var tempData = bd_projectDic.FirstOrDefault(f => f.project_code == ydDataSource["textField_lvdntzul"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.项目 = tempData.project_code; // 项目
+                        }
+                    }
+                }
+
+                dataSource.发票号 = ydDataSource["textField_lwsth4o3"].ToString(); // 取重开发票号
+                dataSource.客户打印名称 = ydDataSource["selectField_lvdojfui"].ToString();
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vp").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vp"].ToString()))
+                    {
+                        var tempName = ydDataSource["selectField_lvc9x4vp"].ToString();
+                        if (ydDataSource["selectField_lvc9x4vp"].ToString() == "增值税专票")
+                        {
+                            tempName = "增值税专用发票";
+                        }
+
+                        if (ydDataSource["selectField_lvc9x4vp"].ToString() == "增值税普票")
+                        {
+                            tempName = "增值税普通发票";
+                        }
+
+                        var tempData = bd_defdoc_kplx.FirstOrDefault(f => f.name == tempName);
+                        if (tempData != null)
+                        {
+                            dataSource.开票类型 = tempData.pk_defdoc; // 开票类型
+                        }
+                    }
+                }
+
+                dataSource.OA单据号 = ydDataSource["textField_lvdosccc"].ToString();
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvc9x4vn").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvc9x4vn"].ToString()))
+                    {
+                        if (ydDataSource["selectField_lvc9x4vn"].ToString().Contains("一次性") || ydDataSource["selectField_lvc9x4vn"].ToString().Contains("工程订单"))
+                        {
+                            dataSource.合同业务类型 = "1001G11000000000113F";
+                        }
+                        else
+                        {
+                            var tempData = bd_defdoc_htywlx.FirstOrDefault(f => f.name == ydDataSource["selectField_lvc9x4vn"].ToString());
+                            if (tempData != null)
+                            {
+                                dataSource.合同业务类型 = tempData.pk_defdoc; // 合同业务类型
+                            }
+                        }
+                    }
+                }
+
+                dataSource.年份 = DateTime.Now.ToString("yyyy");
+                dataSource.月份 = DateTime.Now.ToString("MM");
+
+                #endregion
+
+                var detailList = new List<KP_SyncServiceModel.DataModel.OrderB>();
+
+                #region 大业主开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvc9x4vt").Value != null)
+                {
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvc9x4vt").Value != null)
+                    {
+                        var detailObjList1 = (List<object>)ydDataSource["tableField_lvc9x4vt"]; // 大业主开票明细
+
+                        if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["textField_lvdojfup"].ToString()))
+                        {
+
+                            foreach (var objItem in detailObjList1)
+                            {
+                                var detailItem = new KP_SyncServiceModel.DataModel.OrderB();
+
+                                if (!string.IsNullOrWhiteSpace(((Dictionary<string, object>)objItem)["associationFormField_lvynhq7p_id"].ToString()))
+                                {
+                                    var sourceStr = ((Dictionary<string, object>)objItem)["associationFormField_lvynhq7p_id"].ToString().Replace("\\", "");
+                                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                                    var materialData = bd_materialDic.FirstOrDefault(f => f.name == b[0].title);
+
+                                    detailItem.物料 = materialData.code; // 物料
+
+                                    var unitCode = bd_measdocDic.FirstOrDefault(f => f.pk_measdoc == materialData.pk_measdoc);
+
+                                    detailItem.计量单位 = unitCode.code; // 计量单位
+                                }
+
+                                var hsdj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2v"].ToString());
+                                var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2z"].ToString());
+                                var wsdj = hsdj - se;
+                                var sl = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2w"].ToString());
+                                var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp30"].ToString());
+                                var jshj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2y"].ToString());
+
+                                // 含税单价
+                                detailItem.含税单价 = hsdj.ToString();
+
+                                // 无税单价
+                                detailItem.无税单价 = wsdj.ToString();
+
+                                //  含税净价
+                                detailItem.含税净价 = hsdj.ToString();
+
+                                // 无税净价
+                                detailItem.无税净价 = wsdj.ToString();
+
+                                // 税额
+                                detailItem.税额 = se.ToString();
+
+                                // 无税金额
+                                detailItem.无税金额 = wsje.ToString();
+
+                                // 数量
+                                detailItem.数量 = sl.ToString();
+
+                                // 价税合计
+                                detailItem.价税合计 = jshj.ToString();
+
+                                detailItem.换算率 = "1.00/1.00";
+                                detailItem.税码 = "CN04"; // 税率码 
+                                detailItem.税率 = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp2x"].ToString()).ToString(); // 税率
+
+                                detailItem.开票内容 = ((Dictionary<string, object>)objItem)["textField_lvd8pp2t"].ToString();
+
+                                detailItem.行id = ((Dictionary<string, object>)objItem)["textField_lvdojfup"].ToString();
+
+                                detailList.Add(detailItem);
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                #region 工程订单开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvd8pp44").Value != null)
+                {
+                    var detailObjList2 = (List<object>)ydDataSource["tableField_lvd8pp44"]; // 工程订单开票明细
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvd8pp44").Value != null)
+                    {
+                        if (detailObjList2.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList2.FirstOrDefault())["textField_lvdojfur"].ToString()))
+                        {
+                            dataSource.项目 = "PM99001";
+
+                            foreach (var objItem in detailObjList2)
+                            {
+                                var detailItem = new KP_SyncServiceModel.DataModel.OrderB();
+
+                                if (!string.IsNullOrWhiteSpace(((Dictionary<string, object>)objItem)["associationFormField_lvynrr6a_id"].ToString()))
+                                {
+                                    var sourceStr = ((Dictionary<string, object>)objItem)["associationFormField_lvynrr6a_id"].ToString().Replace("\\", "");
+                                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                                    var materialData = bd_materialDic.FirstOrDefault(f => f.name == b[0].title);
+
+                                    detailItem.物料 = materialData.code; // 物料
+
+                                    var unitCode = bd_measdocDic.FirstOrDefault(f => f.pk_measdoc == materialData.pk_measdoc);
+
+                                    detailItem.计量单位 = unitCode.code; // 计量单位
+                                }
+
+                                var hsdj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp3y"].ToString());
+                                var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp42"].ToString());
+                                var wsdj = hsdj - se;
+                                var sl = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp3z"].ToString());
+                                var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp43"].ToString());
+                                var jshj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp41"].ToString());
+
+                                // 含税单价
+                                detailItem.含税单价 = hsdj.ToString();
+
+                                // 无税单价
+                                detailItem.无税单价 = wsdj.ToString();
+
+                                //  含税净价
+                                detailItem.含税净价 = hsdj.ToString();
+
+                                // 无税净价
+                                detailItem.无税净价 = wsdj.ToString();
+
+                                // 税额
+                                detailItem.税额 = se.ToString();
+
+                                // 无税金额
+                                detailItem.无税金额 = wsje.ToString();
+
+                                // 数量
+                                detailItem.数量 = sl.ToString();
+
+                                // 价税合计
+                                detailItem.价税合计 = jshj.ToString();
+
+                                detailItem.换算率 = "1.00/1.00";
+                                detailItem.税码 = "CN04"; // 税率码 
+                                detailItem.税率 = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvd8pp40"].ToString()).ToString(); // 税率
+
+                                detailItem.开票内容 = ((Dictionary<string, object>)objItem)["textField_lvd8pp3w"].ToString();
+
+                                detailItem.行id = ((Dictionary<string, object>)objItem)["textField_lvdojfur"].ToString();
+
+                                detailList.Add(detailItem);
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                #region 小业主开票明细
+                if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvdnme13").Value != null)
+                {
+                    var detailObjList3 = (List<object>)ydDataSource["tableField_lvdnme13"]; // 小业主
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "tableField_lvdnme13").Value != null)
+                    {
+                        if (detailObjList3.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList3.FirstOrDefault())["textField_lvdojfus"].ToString()))
+                        {
+
+                            foreach (var objItem in detailObjList3)
+                            {
+                                var detailItem = new KP_SyncServiceModel.DataModel.OrderB();
+
+                                if (!string.IsNullOrWhiteSpace(((Dictionary<string, object>)objItem)["associationFormField_lvynrr6c_id"].ToString()))
+                                {
+                                    var sourceStr = ((Dictionary<string, object>)objItem)["associationFormField_lvynrr6c_id"].ToString().Replace("\\", "");
+                                    var a = sourceStr = sourceStr.Substring(1, sourceStr.Length - 2);
+                                    var b = JsonConvert.DeserializeObject<List<FormItem>>(a);
+
+                                    var materialData = bd_materialDic.FirstOrDefault(f => f.name == b[0].title);
+
+                                    detailItem.物料 = materialData.code; // 物料
+
+                                    var unitCode = bd_measdocDic.FirstOrDefault(f => f.pk_measdoc == materialData.pk_measdoc);
+
+                                    detailItem.计量单位 = unitCode.code; // 计量单位
+                                }
+
+                                var hsdj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0w"].ToString());
+                                var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme10"].ToString());
+                                var wsdj = hsdj - se;
+                                var sl = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0x"].ToString());
+                                var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme11"].ToString());
+                                var jshj = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0z"].ToString());
+
+                                // 含税单价
+                                detailItem.含税单价 = hsdj.ToString();
+
+                                // 无税单价
+                                detailItem.无税单价 = wsdj.ToString();
+
+                                //  含税净价
+                                detailItem.含税净价 = hsdj.ToString();
+
+                                // 无税净价
+                                detailItem.无税净价 = wsdj.ToString();
+
+                                // 税额
+                                detailItem.税额 = se.ToString();
+
+                                // 无税金额
+                                detailItem.无税金额 = wsje.ToString();
+
+                                // 数量
+                                detailItem.数量 = sl.ToString();
+
+                                // 价税合计
+                                detailItem.价税合计 = jshj.ToString();
+
+                                detailItem.换算率 = "1.00/1.00";
+                                detailItem.税码 = "CN04"; // 税率码 
+                                detailItem.税率 = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvdnme0y"].ToString()).ToString(); // 税率
+
+                                detailItem.开票内容 = ((Dictionary<string, object>)objItem)["textField_lvdnme0u"].ToString();
+
+                                detailItem.行id = ((Dictionary<string, object>)objItem)["textField_lvdojfus"].ToString();
+
+                                detailList.Add(detailItem);
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                var 旧发票号 = ydDataSource["textField_lvd8pp35"].ToString();
+                var 新发票号 = ydDataSource["textField_lwsth4o3"].ToString();
+
+                foreach (var detailItem in detailList)
+                {
+                    // 替换明细中,开票内容字段中的发票号
+                    detailItem.开票内容 = detailItem.开票内容.Replace(旧发票号, 新发票号);
+
+                    // 将金额和数量都改为负数
+                    detailItem.数量 = "-" + detailItem.数量;
+
+                    detailItem.含税单价 = "-" + detailItem.含税单价;
+                    detailItem.无税单价 = "-" + detailItem.无税单价;
+                    detailItem.含税净价 = "-" + detailItem.含税净价;
+                    detailItem.无税净价 = "-" + detailItem.无税净价;
+                    detailItem.税额 = "-" + detailItem.税额;
+                    detailItem.无税金额 = "-" + detailItem.无税金额;
+                    detailItem.价税合计 = "-" + detailItem.价税合计;
+                }
+
+                dataSource.明细 = detailList;
+
+                dataSource.数量 = dataSource.明细.Sum(s => Convert.ToDecimal(s.数量)).ToString();
+                dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
+
+                // 销售订单主表id
+                var csaleorderid = ydDataSource["textField_ltxyt75m"].ToString();
+
+                // -------------------------------销售订单同步完,开始同步销售发票
+
+                var saleorderData = _db_nc.Queryable<so_saleorder>().First(f => f.csaleorderid == csaleorderid);
+                var saleorderbData = _db_nc.Queryable<so_saleorder_b>().Where(f => f.csaleorderid == csaleorderid).ToList();
+
+                dataSource.销售订单单据号 = saleorderData.vbillcode;
+                dataSource.销售订单主表id = saleorderData.csaleorderid;
+
+                foreach (var detailItem in dataSource.明细)
+                {
+                    detailItem.销售订单子表id = saleorderbData.FirstOrDefault(f => f.vbdef10 == detailItem.行id).csaleorderbid;
+                }
+
+                var results_销售发票 = NCImportFunc.NCImport(KP_SyncServiceModel.ImportXml_销售发票.TemplateHeade(), KP_SyncServiceModel.ImportXml_销售发票.Header(dataSource, item + "_tp"), _NCApiUrl + "?account=LY01&groupcode=0");
+
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_销售发票), "results_销售发票");
+
+                XElement xE_销售发票 = XElement.Parse(results_销售发票);
+                string resultcode_销售发票 = xE_销售发票.Element("sendresult").Element("resultcode").Value;
+                string resultdescription_销售发票 = xE_销售发票.Element("sendresult").Element("resultdescription")?.Value;
+
+                if (resultcode_销售发票 == "1")
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = xE_销售发票.Element("sendresult").Element("content").Value,
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription_销售发票 + "】!"
+                    });
+                }
+
+                // -------------------------------销售发票同步完,开始同步应收  (新版)应收不同步,改为调用审核接口,让NC自动取生成应收单
+
+                var results_销售发票审核 = HttpRequestHelper.ApporeNCCSOBill(xE_销售发票.Element("sendresult").Element("content").Value);
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_销售发票审核), "results_销售发票审核");
+
+                if (results_销售发票审核.state == 0)
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = true,
+                        ncNo = "",
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + results_销售发票审核.msg + "】!"
+                    });
+                }
+
+
+                var finalResData = new YiDaResDto();
+
+                if (ncResData.FirstOrDefault(f => !f.bSuccess) != null)
+                {
+                    finalResData.bSuccess = false;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = csaleorderid;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+                else
+                {
+                    finalResData.bSuccess = true;
+                    finalResData.syncTime = DateTime.Now;
+                    finalResData.ncNo = csaleorderid;
+                    finalResData.log = string.Join(" || ", ncResData.Select(s => s.log));
+                }
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
+            }
+
+            #endregion
+        }
+    }
+}

+ 226 - 0
HH.YiDaSyncNC/DataSync/WL_SyncService.cs

@@ -0,0 +1,226 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class WL_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_xx_idcontrast = ConfigurationManager.AppSettings["xx_idcontrast"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public WL_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DBHelper.WriteLog($"进入程序");
+
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\"}");
+
+            DBHelper.WriteLog(JsonConvert.SerializeObject(idList), "idList");
+
+            // NC ID对照表数据
+            var ncDataIdList = _db_nc.Queryable<xx_idcontrast>().Where(w => w.bill_type == "material").ToList();
+
+            // 获取当前最大Id
+            var newId = 100000001;
+            var maxData = ncDataIdList.OrderByDescending(obd => Convert.ToDateTime(obd.ts)).FirstOrDefault();
+            if (maxData != null && maxData.pk_idcontra.Contains(_Static_PK_xx_idcontrast))
+            {
+                newId = Convert.ToInt32(maxData.pk_idcontra.Replace(_Static_PK_xx_idcontrast, "")) + 1;
+            }
+
+            #region 获取NC中选项数据的Id
+            var pk_marbasclassDic = _db_nc.Queryable<bd_marbasclass>().ToList();
+            var pk_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
+            var pk_mattaxesDic = _db_nc.Queryable<bd_mattaxes>().ToList();
+            var pk_brandDic = _db_nc.Queryable<bd_branddoc>().ToList();
+            #endregion
+
+            #region 循环数据处理业务逻辑
+            foreach (var item in idList.Where(w => !ncDataIdList.Select(s => s.file_id).ToList().Contains(w)))
+            {
+
+                DBHelper.WriteLog($"进入程序1");
+
+                // 获取此条数据详情
+                string createTime = "";
+                string modifyTime = "";
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+
+                DBHelper.WriteLog(ydDataSource["radioField_lycrvvtk"].ToString(), "222");
+
+                if (ydDataSource["radioField_lycrvvtk"].ToString() == "Y")
+                {
+                    DBHelper.WriteLog($"进入程序2");
+
+                    #region 构建数据体
+                    var dataSource = new WL_SyncServiceModel.DataModel()
+                    {
+                        pk_group = "0",
+                        pk_org = "0",
+                        code = ydDataSource["textField_lr3axfje"].ToString(),
+                        name = ydDataSource["textField_lr383i4h"].ToString(),
+                        ename = ydDataSource["textField_lwitq6vu"].ToString(),
+
+                        materialshortname = ydDataSource["textField_lwitq6vv"].ToString(),
+                        materialspec = ydDataSource["textField_ltxy3kh3"].ToString(),
+                        materialtype = ydDataSource["textField_ltxy3kh4"].ToString(),
+                        ematerialspec = ydDataSource["textField_lwitq6vw"].ToString(),
+                        materialmnecode = ydDataSource["textField_lwitq6vx"].ToString(),
+                    };
+
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lwitq6w4").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["selectField_lwitq6w4"].ToString()))
+                    {
+                        var data = pk_marbasclassDic.FirstOrDefault(f => f.name.Trim() == ydDataSource["selectField_lwitq6w4"].ToString());
+                        if (data != null)
+                        {
+                            dataSource.pk_marbasclass = data.code; // 分类
+                        }
+                    }
+                    else
+                    {
+                        var resData = new YiDaResDto();
+                        resData.bSuccess = false;
+                        resData.syncTime = DateTime.Now;
+                        resData.ncNo = "";
+                        resData.log = "物料分类为空,无法传入NC";
+
+                        _dingTalkService.UpdateFormDataSyncDataById(resData, item);
+
+                        continue;
+                    }
+
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lwitq6w5"].ToString()))
+                    {
+                        dataSource.pk_measdoc = pk_measdocDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lwitq6w5"].ToString()).code; // 主计量单位
+                    }
+
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lwitq6w6").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["selectField_lwitq6w6"].ToString()))
+                    {
+                        dataSource.pk_mattaxes = pk_mattaxesDic.FirstOrDefault(f => f.mattaxesname == ydDataSource["selectField_lwitq6w6"].ToString()).mattaxescode; // 税类
+                    }
+                    //if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lwitq6we"].ToString()))
+                    //{
+                    //    dataSource.pk_brand = pk_brandDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lwitq6we"].ToString()).code; // 品牌
+                    //}
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_ltxy3kh6"].ToString()))
+                    {
+
+                        switch (ydDataSource["selectField_ltxy3kh6"].ToString())
+                        {
+                            case "启用":
+                                dataSource.enablestate = ((int)EnumType.enablestate.已启用).ToString();
+                                break;
+                            case "停用":
+                                dataSource.enablestate = ((int)EnumType.enablestate.已停用).ToString();
+                                break;
+                        }
+                    }
+                    #endregion
+
+                    #region 数据传入NC并获取结果
+                    var xmlData = WL_SyncServiceModel.ImportXml.Header(dataSource, item);
+                    XElement tempData = WL_SyncServiceModel.ImportXml.TemplateHeade();
+
+                    var results = NCImportFunc.NCImport(tempData, xmlData, _NCApiUrl + "?account=LY01&groupcode=0");
+
+                    DBHelper.WriteLog($"进入程序3");
+
+                    XElement xE = XElement.Parse(results);
+                    string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                    string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+                    #endregion
+
+                    #region 回写状态
+                    var ncResData = new YiDaResDto()
+                    {
+                        syncTime = DateTime.Now,
+                    };
+
+                    if (resultcode == "1")
+                    {
+                        DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作成功!");
+
+                        ncResData.bSuccess = true;
+                        ncResData.ncNo = xE.Element("sendresult").Element("content").Value;
+                        ncResData.log = "同步成功!";
+                    }
+                    else
+                    {
+                        if (resultdescription.Contains("不允许重复"))
+                        {
+                            // 已存在数据,绑定Id
+                            var nowData = _db_nc.Queryable<bd_material>().First(f => f.code == dataSource.code && f.pk_org == _Static_pk_org_jt);
+
+                            var idcData = new xx_idcontrast()
+                            {
+                                bill_type = "material",
+                                dr = 0,
+                                file_id = item,
+                                pk_bill = nowData.pk_material,
+                                pk_idcontra = _Static_PK_xx_idcontrast + newId
+                            };
+                            _db_nc.Insertable(idcData).ExecuteCommand();
+
+                            newId++;
+
+                            ncResData.bSuccess = true;
+                            ncResData.ncNo = nowData.pk_material;
+                            ncResData.log = "数据已存在,无需同步,已自动对照!";
+                        }
+                        else
+                        {
+                            DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作失败!" + resultdescription + ";");
+
+                            ncResData.bSuccess = false;
+                            ncResData.ncNo = "";
+                            ncResData.log = "同步失败!原因为【" + resultdescription + "】";
+                        }
+                    }
+
+                    var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
+                    #endregion
+                }
+            }
+            #endregion
+        }
+    }
+}

+ 165 - 0
HH.YiDaSyncNC/DataSync/XMD_SyncService.cs

@@ -0,0 +1,165 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class XMD_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public XMD_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+
+            // 宜搭全量数据Id
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"textField_ltxrn8h1\":\"PM00408\"}");
+            //var idList = _dingTalkService.GetFormIdList("");
+
+            // 获取当前最大Id
+            var newId = 100000001;
+            var maxData = _db_nc.Queryable<bd_project>().OrderByDescending(obd => obd.pk_project).First();
+            if (maxData != null && maxData.pk_project.Contains(_Static_PK_bd_project))
+            {
+                newId = Convert.ToInt32(maxData.pk_project.Replace(_Static_PK_bd_project, "")) + 1;
+            }
+
+            #region 获取NC中选项数据的Id
+            var bd_projectclassDic = _db_nc.Queryable<bd_projectclass>().ToList();
+            var bd_stordocDic = _db_nc.Queryable<bd_stordoc>().ToList();
+            #endregion
+
+            #region 循环数据处理业务逻辑
+            foreach (var item in idList)
+            {
+                // 获取此条数据详情
+                string createTime = "";
+                string modifyTime = "";
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                if (ydDataSource["radioField_lycrvvtk"].ToString() == "Y")
+                {
+
+                    #region 构建数据体
+                    var data = new bd_project();
+                    data.begin_flag = "N";
+                    data.bill_type = "4D10";
+                    data.creationtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                    data.ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                    data.creator = "1001G1100000000B6553";
+                    data.def6 = ydDataSource["textField_lrim7i38"].ToString(); // 项目地址
+                    data.def7 = ydDataSource["textField_lrn2oy4n"].ToString(); // 体系
+                    data.enablestate = 2;
+
+
+                    data.pk_eps = "";
+                    data.pk_group = _Static_pk_org_jt;
+                    data.pk_org = _Static_pk_org_jt;
+                    // data.pk_projectclass = "";
+
+                    if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lrhjdu45").Value != null)
+                    {
+                        if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lrhjdu45"].ToString()))
+                        {
+                            var tempData = bd_projectclassDic.FirstOrDefault(f => f.type_name == ydDataSource["selectField_lrhjdu45"].ToString());
+                            if (tempData != null)
+                            {
+                                data.pk_projectclass = tempData.pk_projectclass; // 项目类型
+                            }
+                        }
+                    }
+
+                    //if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lrn2oy4c").Value != null)
+                    //{
+                    //    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lrn2oy4c"].ToString()))
+                    //    {
+                    //        var tempData = bd_stordocDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lrn2oy4c"].ToString());
+                    //        if (tempData != null)
+                    //        {
+                    //            data.pk_stordoc1 = tempData.pk_stordoc; // 仓库
+                    //        }
+                    //    }
+                    //}
+
+                    data.project_code = ydDataSource["textField_ltxrn8h1"].ToString();
+                    data.project_name = ydDataSource["textField_lrr3rg6i"].ToString();
+                    data.transi_type = "4D10-01";
+
+
+
+                    #endregion
+
+                    #region 数据传入NC并获取结果
+                    var nowData = _db_nc.Queryable<bd_project>().First(f => f.project_code == data.project_code);
+                    if (nowData == null)
+                    {
+                        data.pk_project = _Static_PK_bd_project + newId;
+                        _db_nc.Insertable(data).ExecuteCommand();
+
+                        newId++;
+                    }
+                    else
+                    {
+                        data.pk_project = nowData.pk_project;
+                        _db_nc.Updateable(data).ExecuteCommand();
+                    }
+
+                    #endregion
+
+                    #region 回写状态
+                    var ncResData = new YiDaResDto()
+                    {
+                        syncTime = DateTime.Now,
+                    };
+
+                    DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作成功!");
+
+                    ncResData.bSuccess = true;
+                    ncResData.ncNo = data.pk_project;
+                    ncResData.log = "同步成功!";
+
+                    var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
+                    #endregion
+                }
+            }
+            #endregion
+        }
+    }
+}

+ 372 - 0
HH.YiDaSyncNC/DataSync/YF_FPRZ_SyncService.cs

@@ -0,0 +1,372 @@
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Dtos.YIDA;
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    public class YF_FPRZ_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public YF_FPRZ_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+        public void DataSync()
+        {
+            try
+            {
+
+                DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+                var searchKey = new
+                {
+
+                    radioField_lycrvvtk = "Y",
+                    //textField_lvj2jklf = "FPRZ2024102100029",
+                    selectField_lrnh633d = "预付",
+
+
+                };
+
+                var idList = _dingTalkService.GetFormCodeList(JsonConvert.SerializeObject(searchKey));
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(idList), "发票入账数据");
+
+                #region 获取NC中选项数据的Id
+                var bd_customerDic = _db_nc.Queryable<bd_customer>().ToList();
+                var bd_incomeDic = _db_nc.Queryable<bd_income>().ToList();
+                var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+                var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
+                var bd_materialDic = _db_nc.Queryable<bd_material>().ToList();
+                var bd_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
+                var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
+                var bd_psndocDic = _db_nc.Queryable<bd_psndoc>().ToList();
+                var sm_userDic = _db_nc.Queryable<sm_user>().ToList();
+                var org_accountingbookDic = _db_nc.Queryable<org_accountingbook>().ToList();
+                #endregion
+
+                foreach (var item in idList)
+                {
+                    string createTime = "";
+                    string modifyTime = "";
+
+
+                    var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                    //var ydDataSource = _dingTalkService.GetFormDataByCode(item);//之前的有bug,表体大于50行 获取不到
+
+                    LogHelper.WriteLog(JsonConvert.SerializeObject(ydDataSource), "发票入账数据执行");
+
+                    string jsonData = JsonConvert.SerializeObject(ydDataSource);
+                    YiDa_FPRZD thisYiDaData = JsonConvert.DeserializeObject<YiDa_FPRZD>(jsonData);
+
+                    if (string.IsNullOrWhiteSpace(thisYiDaData.textField_lzh0m1lg))
+                    {
+
+                        LogHelper.WriteLog("供应商为空", "发票入账数据执行");
+                        continue;
+
+                    }
+                    if (string.IsNullOrWhiteSpace(thisYiDaData.textField_lzh0m1lh))
+                    {
+
+                        LogHelper.WriteLog("成本组织为空", "发票入账数据执行");
+                        continue;
+
+                    }
+                    if (thisYiDaData.associationFormField_lzh0m1le_id is null)
+                    {
+
+                        LogHelper.WriteLog("供应商为空", "发票入账数据执行");
+                        continue;
+
+                    }
+                    var 供应商编码 = thisYiDaData.textField_lzhtchrg;
+                    if (string.IsNullOrWhiteSpace(供应商编码))
+                    {
+
+                        LogHelper.WriteLog("供应商编码为空", "发票入账数据执行");
+                        continue;
+
+                    }
+                    if (thisYiDaData.tableField_lsx02qv5 is null || thisYiDaData.tableField_lsx02qv5.Count == 0)
+                    {
+
+                        LogHelper.WriteLog("发票明细为空", "发票入账数据执行");
+                        continue;
+
+                    }
+                    if (thisYiDaData.tableField_lrngrtgu is null || thisYiDaData.tableField_lrngrtgu.Count == 0)
+                    {
+
+                        LogHelper.WriteLog("入账明细为空", "发票入账数据执行");
+                        continue;
+
+                    }
+                    if (thisYiDaData.tableField_lsx02qv5.Any(s => string.IsNullOrWhiteSpace(s.textField_lsx02qv8)))
+                    {
+                        LogHelper.WriteLog("发票明细-发票号为空", "发票入账数据执行");
+                        continue;
+                    }
+
+
+                    //取值 宜搭表单的某个字段当作凭证日期 如果 支付完成时间 为null,就用 提交时间
+                    DateTime 凭证日期 = DateTime.Now;
+                    //thisYiDaData.dateField_lwitiobz is null
+                    //    ? UnixTimeHelper.ConvertMillisecondsToDateTime(thisYiDaData.dateField_lviv4sfy)
+                    //    : UnixTimeHelper.ConvertMillisecondsToDateTime((long)thisYiDaData.dateField_lwitiobz);
+                    string 组织 = "";
+                    if (!string.IsNullOrWhiteSpace(thisYiDaData.textField_lzh0m1lh))
+                    {
+                        var tempData = org_orgsDic.FirstOrDefault(f => f.name == thisYiDaData.textField_lzh0m1lh);
+                        if (tempData != null)
+                        {
+                            组织 = tempData.code; // 组织
+                        }
+                    }
+
+
+                    string 账簿 = "";
+                    if (!string.IsNullOrWhiteSpace(thisYiDaData.textField_lzh0m1lh))
+                    {
+                        var tempData = org_accountingbookDic.FirstOrDefault(f => f.name == thisYiDaData.textField_lzh0m1lh + "-蓝云账簿");
+                        if (tempData != null)
+                        {
+                            账簿 = tempData.code; // 账簿
+                        }
+                    }
+
+
+                    string 制单人 = "OA-NC";
+
+
+
+                    string 发票拼接 = string.Join("/", thisYiDaData.tableField_lsx02qv5.Select(s => s.textField_lsx02qv8).ToList());
+
+                    // 表头
+                    var headModel = new FKGL_SyncServiceModel.DataModel.voucher_header()
+                    {
+                        year = 凭证日期.ToString("yyyy"),//会计年度
+                        prepareddate = 凭证日期.ToString("yyyy-MM-dd"),//制单日期
+                        period = 凭证日期.ToString("MM"),//会计期间
+                        pk_prepared = 制单人,//凭证制单人--操作员工工号
+                        no = "",//凭证号
+                        pk_accountingbook = 账簿,//账簿
+                        org = 组织,//组织编码
+                        pk_vouchertype = "04",//凭证类别 : 01-记账凭证 ,02-收款凭证 ,03-付款凭证 ,04-转账凭证 
+                    };
+                    //表体
+                    var detailList = new List<FKGL_SyncServiceModel.DataModel.voucher_body>();
+                    int index = 1;
+                    foreach (var dataObj in thisYiDaData.tableField_lrngrtgu)
+                    {
+                        var 项目编码 = dataObj.radioField_ly71lpio == "项目" ? dataObj.textField_ly7257rx : "";
+                        var 部门编码 = dataObj.radioField_ly71lpio == "机关" ? dataObj.textField_ly7257rx : "";
+
+                        var assList = new List<FKGL_SyncServiceModel.DataModel.ass>();
+                        if (!string.IsNullOrWhiteSpace(项目编码))
+                        {
+                            assList.Add(new FKGL_SyncServiceModel.DataModel.ass()
+                            {
+                                pk_Checktype = "0010",//0010-项目辅助核算
+                                pk_Checkvalue = 项目编码,//供应商编码
+                            });
+                        }
+                        if (!string.IsNullOrWhiteSpace(部门编码))
+                        {
+                            assList.Add(new FKGL_SyncServiceModel.DataModel.ass()
+                            {
+                                pk_Checktype = "0001",//0001-部门辅助核算
+                                pk_Checkvalue = 部门编码,//供应商编码
+                            });
+                        }
+
+
+                        //借方分录
+                        detailList.Add(new FKGL_SyncServiceModel.DataModel.voucher_body()
+                        {
+                            detailindex = index,
+                            accsubjcode = dataObj.textField_lrnh633r,//科目编码 预付账款
+                            pk_accasoa = dataObj.textField_lrnh633r,//科目编码 
+                            explanation = (dataObj?.textField_lvxa4v05?.Length ?? 0) > 59 ? dataObj.textField_lvxa4v05.Substring(0, 59) : $"{dataObj.textField_lvxa4v05}",//摘要 
+                            verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+                            price = "0.00000000",
+                            excrate2 = "1",
+                            debitamount = dataObj.numberField_lvxa4v09.ToString(),//借方金额 
+                            localdebitamount = dataObj.numberField_lvxa4v09.ToString(),//借方金额
+                            debitquantity = "0.00000000",
+                            groupdebitamount = "0.00000000",
+                            globaldebitamount = "0.00000000",
+                            creditquantity = "0.00000000",
+                            creditamount = "0.00000000",
+                            groupcreditamount = "0.00000000",
+                            globalcreditamount = "0.00000000",
+                            localcreditamount = "0.00000000",
+                            billtype = "",
+                            bankaccount = "",
+                            checkstyle = "",
+                            checkno = "",
+                            checkdate = "",
+                            bill_id = "",
+                            bill_date = "",
+                            pk_currtype = "CNY",
+                            cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()//现金流 
+                            {
+
+                            },
+                            ass = assList,
+                        });
+
+                        index++;
+                    }
+
+                    //借方分录 应交增值税\应交税费 - 进项税
+                    var sjSum = thisYiDaData.tableField_lrngrtgu.Sum(s => s.numberField_lvxa4v08);
+                    if (sjSum > 0)
+                    {
+                        detailList.Add(new FKGL_SyncServiceModel.DataModel.voucher_body()
+                        {
+                            detailindex = index,
+                            accsubjcode = "22210103",//科目编码 应交税费 - 进项税
+                            pk_accasoa = "22210103",//科目编码 
+                            explanation = $"{发票拼接}".Length > 59 ? $"{发票拼接}".Substring(0,59) : $"{发票拼接}",//摘要 
+                            verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+                            price = "0.00000000",
+                            excrate2 = "1",
+                            debitamount = sjSum.ToString(),//借方金额 
+                            localdebitamount = sjSum.ToString(),//借方金额
+                            debitquantity = "0.00000000",
+                            groupdebitamount = "0.00000000",
+                            globaldebitamount = "0.00000000",
+                            creditquantity = "0.00000000",
+                            creditamount = "0.00000000",
+                            groupcreditamount = "0.00000000",
+                            globalcreditamount = "0.00000000",
+                            localcreditamount = "0.00000000",
+                            billtype = "",
+                            bankaccount = "",
+                            checkstyle = "",
+                            checkno = "",
+                            checkdate = "",
+                            bill_id = "",
+                            bill_date = "",
+                            pk_currtype = "CNY",
+                            cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow(),//现金流
+                            ass = new List<FKGL_SyncServiceModel.DataModel.ass>(),//辅助核算
+                        });
+                        index++;
+                    }
+
+                    //贷方
+                    detailList.Add(new FKGL_SyncServiceModel.DataModel.voucher_body()
+                    {
+                        detailindex = index,
+                        accsubjcode = "1123",//科目编码 预付账款
+                        pk_accasoa = "1123",//科目编码 
+                        explanation = "贷方摘要",//摘要 
+                        verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+                        price = "0.00000000",
+                        excrate2 = "1",
+                        creditamount = thisYiDaData.numberField_lu2habj9.ToString(),//贷方金额 
+                        localcreditamount = thisYiDaData.numberField_lu2habj9.ToString(),//贷方金额 
+                        debitquantity = "0.00000000",
+                        debitamount = "0.00000000",
+                        groupdebitamount = "0.00000000",
+                        globaldebitamount = "0.00000000",
+                        localdebitamount = "0.00000000",
+                        creditquantity = "0.00000000",
+                        groupcreditamount = "0.00000000",
+                        globalcreditamount = "0.00000000",
+                        billtype = "",
+                        bankaccount = "",
+                        checkstyle = "",
+                        checkno = "",
+                        checkdate = "",
+                        bill_id = "",
+                        bill_date = "",
+                        pk_currtype = "CNY",
+                        cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow(),//现金流 
+                        ass = new List<FKGL_SyncServiceModel.DataModel.ass>()
+                                {
+                                    new FKGL_SyncServiceModel.DataModel.ass()
+                                    {
+                                        pk_Checktype ="0019",//0019-供应商辅助核算
+                                        pk_Checkvalue = 供应商编码,//供应商编码
+                                    }
+                                },
+                    });
+
+                    XElement xElement = FKGL_SyncServiceModel.ImportXml_凭证.TemplateHeade(headModel);
+                    xElement.Add(FKGL_SyncServiceModel.ImportXml_凭证.Header(headModel));//添加表头数据
+                    xElement.Element("voucher").Element("voucher_head").Element("details").Add(FKGL_SyncServiceModel.ImportXml_凭证.Bodydebit(detailList));
+                    //生成凭证
+                    var results_凭证 = NCImportFunc.NCImport2(xElement, _NCApiUrl + "?account=LY01&groupcode=0");
+
+                    LogHelper.WriteLog(JsonConvert.SerializeObject(results_凭证), "results_凭证");
+
+
+                    XElement xE = XElement.Parse(results_凭证);
+                    string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                    string content = xE.Element("sendresult").Element("content")?.Value;
+                    string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+
+                    var ncResData = new YiDaResDto();
+                    if (resultcode == "1")
+                    {
+                        ncResData = (new YiDaResDto()
+                        {
+                            bSuccess = true,
+                            syncTime = DateTime.Now,
+                            ncNo = resultdescription,//xE.Element("sendresult").Element("content").Value,
+                            log = "同步成功!"
+                        });
+                    }
+                    else
+                    {
+                        ncResData = (new YiDaResDto()
+                        {
+                            bSuccess = false,
+                            syncTime = DateTime.Now,
+                            ncNo = "",
+                            log = "同步失败!原因为【" + resultdescription + "】!"
+                        });
+                    }
+                    //更新同步标识
+                    var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
+                }
+            }
+            catch (Exception ex)
+            {
+
+                throw;
+            }
+        }
+    }
+}

+ 158 - 0
HH.YiDaSyncNC/DataSync/ZC_SyncService.cs

@@ -0,0 +1,158 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class ZC_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_fa_card = ConfigurationManager.AppSettings["fa_card"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public ZC_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public class IdCodeModel
+        {
+            public int sourceId { get; set; }
+            public string Id { get; set; }
+        }
+
+        public void DataSync()
+        {
+
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            // 宜搭全量数据Id
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\"}");
+
+            // 获取当前最大Id
+            var newId = 100000001;
+            var maxData = _db_nc.Queryable<fa_card>().OrderByDescending(obd => Convert.ToDateTime(obd.creationtime)).First();
+            if (maxData != null && maxData.pk_card.Contains(_Static_PK_fa_card))
+            {
+                newId = Convert.ToInt32(maxData.pk_card.Replace(_Static_PK_fa_card, "")) + 1;
+            }
+
+            #region 获取NC中选项数据的Id
+            var pam_addreducestyleDic = _db_nc.Queryable<pam_addreducestyle>().ToList();
+            #endregion
+
+            // 资产部门ID textField_lydsc49c
+            // 管理部门ID textField_lydsc49b
+
+            #region 循环数据处理业务逻辑
+            foreach (var item in idList)
+            {
+                // 获取此条数据详情
+                string createTime = "";
+                string modifyTime = "";
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                #region 构建数据体
+                var data = new fa_card();
+                data.archarea = 0;
+                data.asset_code = ydDataSource["textField_lty0oyv4"].ToString();
+                data.asset_name = ydDataSource["textField_lty0oyuj"].ToString();
+                data.begin_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                data.bill_source = "handin";
+                data.bill_type = "H1";
+                data.billmaker = "1001G110000000000ADH";
+                data.billmaketime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                data.business_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                data.creationtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+                data.creator = "1001G110000000000ADH";
+                data.currmoney = 0;
+                data.dismant_cost = 0;
+                data.dy_flag = "N";
+                data.install_fee = 0;
+                data.machinepower = 0;
+                data.machinequan = 0;
+                data.nettonnage = 0;
+                data.other_cost = 0;
+                data.pk_group = _Static_pk_org_jt;
+                data.pk_org = "0001G110000000001MVP";
+                data.pk_org_v = "0001G110000000001MVO";
+                data.card_code = "0000001242";
+                data.assetsuit_code = "营运部(项目)0354";
+
+                // 主键
+                data.pk_currency = "1002Z0100000000001K1";
+                data.pk_transitype = "0001G110000000001B48";
+                data.transi_type = "H1-00";
+                data.ts = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+                var ncResData = new YiDaResDto()
+                {
+                    syncTime = DateTime.Now,
+                };
+
+                ncResData.bSuccess = false;
+                ncResData.ncNo = "";
+                ncResData.log = "同步失败【使用部门为空!】";
+
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
+
+
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lwk48b8s").Value != null)
+                {
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lwk48b8s"].ToString()))
+                    {
+                        var tempData = pam_addreducestyleDic.FirstOrDefault(f => f.style_name == ydDataSource["selectField_lwk48b8s"].ToString());
+                        if (tempData != null)
+                        {
+                            data.pk_addreducestyle = tempData.pk_addreducestyle; // 增加方式
+                        }
+                    }
+                }
+
+                #endregion
+
+                #region 数据传入NC并获取结果
+                var nowData = _db_nc.Queryable<fa_card>().First(f => f.asset_code == data.asset_code);
+                if (nowData == null)
+                {
+                    data.pk_card = "DINGTALKFAC100000006"; //_Static_PK_fa_card + newId;
+                    _db_nc.Insertable(data).ExecuteCommand();
+
+                    newId++;
+                }
+                else
+                {
+                    data.pk_card = nowData.pk_card;
+                    _db_nc.Updateable(data).ExecuteCommand();
+                }
+
+                #endregion
+
+            }
+#endregion
+        }
+    }
+}

+ 104 - 0
HH.YiDaSyncNC/DataSync/ZC_ZJHX_SyncService.cs

@@ -0,0 +1,104 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    class ZC_ZJHX_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_fa_card = ConfigurationManager.AppSettings["fa_card"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+
+        public ZC_ZJHX_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public void DataSync()
+        {
+            DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"N\",\"textField_ltxyt75i\":\"同步成功\"}").ToList();
+
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+            LogHelper.WriteLog(JsonConvert.SerializeObject(idList), "idListValue");
+
+            var fa_cardList = _db_nc.Queryable<fa_card>().ToList();
+            var fa_cardhistoryList = _db_nc.Queryable<fa_cardhistory>().ToList();
+
+            var i = 1;
+
+            foreach (var item in idList)
+            {
+                string createTime = "";
+                string modifyTime = "";
+                var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
+
+                // 如果NC单据号为空,说明没有传入过NC,此时跳过
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+
+                }
+                else
+                {
+                    continue;
+                }
+
+                LogHelper.WriteLog("", "【序号 " + i + " / " + idList.Count + "】" + item + " 开始回写");
+                i++;
+
+
+                var fa_card = fa_cardList.FirstOrDefault(f => f.pk_card == ydDataSource["textField_ltxyt75m"].ToString());
+                var fa_cardhistory = fa_cardhistoryList.FirstOrDefault(f => f.pk_card == ydDataSource["textField_ltxyt75m"].ToString() && f.laststate_flag == "Y");
+
+                var fa_cardhistoryHis = fa_cardhistoryList.Where(f => f.pk_card == ydDataSource["textField_ltxyt75m"].ToString() && f.usedmonth != "0").ToList();
+
+                if (fa_card != null && fa_cardhistory != null)
+                {
+
+                    var updateData = new Dictionary<string, string>();
+
+                    // 原值
+                    updateData.Add("numberField_lty0oyv8", fa_card.currmoney == null ? "0" : fa_card.currmoney.Value.ToString("#0.00"));
+
+                    //// 折旧额
+                    //updateData.Add("numberField_lu2eb47d", fa_cardhistory.accudep_cal);
+
+                    // 净值
+                    updateData.Add("numberField_lu2ejqd4", fa_card.currmoney == null ? "0" : (fa_card.currmoney.Value - Convert.ToDecimal(fa_cardhistory.accudep_cal)).ToString("#0.00"));
+
+                    // 计提期数
+                    updateData.Add("numberField_lutjo2dt", fa_cardhistoryHis.OrderByDescending(ob => ob.usedmonth).FirstOrDefault()==null?"0" : fa_cardhistoryHis.OrderByDescending(ob => ob.usedmonth).FirstOrDefault().usedmonth);
+
+                    var ydRes = _dingTalkService.UpdateFormDataById(updateData, item);
+
+                }
+
+            }
+        }
+    }
+}

+ 286 - 0
HH.YiDaSyncNC/DataSync/ZZD_GL_SyncService.cs

@@ -0,0 +1,286 @@
+using HH.YiDaSyncNC.Dtos;
+using HH.YiDaSyncNC.Dtos.NC;
+using HH.YiDaSyncNC.Dtos.YIDA;
+using HH.YiDaSyncNC.Helper;
+using HH.YiDaSyncNC.Models;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.DataSync
+{
+    public class ZZD_GL_SyncService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+        public SqlSugarClient _db;
+        public SqlSugarClient _db_nc;
+        public string _NCApiUrl;
+
+        public static string _Static_PK_bd_project = ConfigurationManager.AppSettings["bd_project"];
+        public static string _Static_pk_org_jt = ConfigurationManager.AppSettings["pk_org_jt"];
+        public ZZD_GL_SyncService(string AppType, string SystemToken, string UserId, string FormId, SqlSugarClient db, SqlSugarClient db_nc, string NCApiUrl)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+            _db = db;
+            _db_nc = db_nc;
+            _NCApiUrl = NCApiUrl;
+        }
+
+        public void DataSync()
+        {
+            try
+            {
+
+                DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
+
+                var idList = _dingTalkService.GetFormCodeList("");
+                LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
+
+                #region 获取NC中选项数据的Id
+                var bd_customerDic = _db_nc.Queryable<bd_customer>().ToList();
+                var bd_incomeDic = _db_nc.Queryable<bd_income>().ToList();
+                var org_orgsDic = _db_nc.Queryable<org_orgs>().ToList();
+                var bd_projectDic = _db_nc.Queryable<bd_project>().ToList();
+                var bd_materialDic = _db_nc.Queryable<bd_material>().ToList();
+                var bd_measdocDic = _db_nc.Queryable<bd_measdoc>().ToList();
+                var org_deptDic = _db_nc.Queryable<org_dept>().ToList();
+                var bd_psndocDic = _db_nc.Queryable<bd_psndoc>().ToList();
+                var sm_userDic = _db_nc.Queryable<sm_user>().ToList();
+                var org_accountingbookDic = _db_nc.Queryable<org_accountingbook>().ToList();
+                #endregion
+
+                foreach (var item in idList)
+                {
+                    try
+                    {
+                        string createTime = "";
+                        string modifyTime = "";
+                        //var ydDataSource = _dingTalkService.GetFormDataByCode(item, out createTime, out modifyTime);
+                        var ydDataSource = _dingTalkService.GetFormDataByCode(item);
+                        string jsonData = JsonConvert.SerializeObject(ydDataSource);
+
+                        // 如果NC单据号为空,说明没有传入过NC,此时需要走此逻辑去传输
+                        if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                        {
+                            continue;
+                        }
+
+
+                        YiDa_ZZSQ thisYiDaData = JsonConvert.DeserializeObject<YiDa_ZZSQ>(jsonData);
+
+                        DateTime 凭证日期 = DateTime.Now;
+
+                        string 组织 = "";
+                        if (!string.IsNullOrWhiteSpace(thisYiDaData.textField_lw7jwkfh))
+                        {
+                            var tempData = org_orgsDic.FirstOrDefault(f => f.name == thisYiDaData.textField_lw7jwkfh);
+                            if (tempData != null)
+                            {
+                                组织 = tempData.code; // 组织
+                            }
+                        }
+
+
+                        string 账簿 = "";
+                        if (!string.IsNullOrWhiteSpace(thisYiDaData.textField_lw7jwkfh))
+                        {
+                            var tempData = org_accountingbookDic.FirstOrDefault(f => f.name == thisYiDaData.textField_lw7jwkfh + "-蓝云账簿");
+                            if (tempData != null)
+                            {
+                                账簿 = tempData.code; // 账簿
+                            }
+                        }
+                        string 人员编码 = "";
+                        if (thisYiDaData.employeeField_lviv4sfw != null && thisYiDaData.employeeField_lviv4sfw.Count > 0)
+                        {
+                            var firstName = thisYiDaData.employeeField_lviv4sfw.FirstOrDefault();
+                            var tempData = bd_psndocDic.FirstOrDefault(f => firstName.Contains(f.name));
+                            if (tempData != null)
+                            {
+                                人员编码 = tempData.code; // 账簿
+                            }
+                        }
+
+
+
+                        string 制单人 = "OA-NC";
+
+                        // 表头
+                        var headModel = new ZZD_GL_SyncServiceModel.DataModel.voucher_header()
+                        {
+                            year = 凭证日期.ToString("yyyy"),//会计年度
+                            prepareddate = 凭证日期.ToString("yyyy-MM-dd"),//制单日期
+                            period = 凭证日期.ToString("MM"),//会计期间
+                            pk_prepared = 制单人,//凭证制单人--操作员工工号
+                            no = "",//凭证号
+                            pk_accountingbook = 账簿,//账簿
+                            org = 组织,//组织编码
+                            pk_vouchertype = "03",//凭证类别 : 01-记账凭证 ,02-收款凭证 ,03-付款凭证 ,04-转账凭证 要确定
+                        };
+                        //表体
+                        var detailList = new List<ZZD_GL_SyncServiceModel.DataModel.voucher_body>();
+
+
+                        //借方分录
+                        detailList.Add(new ZZD_GL_SyncServiceModel.DataModel.voucher_body()
+                        {
+                            detailindex = 1,
+                            accsubjcode = "122105",//科目编码 其他应收款-人员借款 
+                            pk_accasoa = "122105",//科目编码  
+                            explanation = "借方摘要",//摘要 
+                            verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+                            price = "0.00000000",
+                            excrate2 = "1",
+                            debitquantity = "0.00000000",
+                            debitamount = thisYiDaData.numberField_lrnhnsxp.ToString(),//借方金额  1
+                            groupdebitamount = "0.00000000",
+                            globaldebitamount = "0.00000000",
+                            localdebitamount = thisYiDaData.numberField_lrnhnsxp.ToString(),//借方金额 1
+                            creditquantity = "0.00000000",
+                            creditamount = "0.00000000",
+                            groupcreditamount = "0.00000000",
+                            globalcreditamount = "0.00000000",
+                            localcreditamount = "0.00000000",
+                            billtype = "",
+                            bankaccount = "",
+                            checkstyle = "",
+                            checkno = "",
+                            checkdate = "",
+                            bill_id = "",
+                            bill_date = "",
+                            pk_currtype = "CNY",
+                            cash_flow = new ZZD_GL_SyncServiceModel.DataModel.cash_flow()//现金流 
+                            {
+                                m_pk_currtype = "CNY",
+                                pk_cashflow = "1124",//现金流编码 
+                                money = thisYiDaData.numberField_lrnhnsxp.ToString(),//金额  1
+                                moneymain = thisYiDaData.numberField_lrnhnsxp.ToString(),//金额  1
+                                moneygroup = "",
+                                moneyglobal = "",
+                                pk_innercorp = "",
+                            },
+                            ass = new List<ZZD_GL_SyncServiceModel.DataModel.ass>()//
+                                {
+                                    new ZZD_GL_SyncServiceModel.DataModel.ass()
+                                    {
+                                        pk_Checktype ="0001",//0019-部门
+                                        pk_Checkvalue = thisYiDaData.textField_ly7257rx,//部门编码 1
+                                    },
+                                     new ZZD_GL_SyncServiceModel.DataModel.ass()
+                                    {
+                                        pk_Checktype ="0002",//0019-人员
+                                        pk_Checkvalue = 人员编码,//人员编码 1
+                                    }
+                                },
+                        });
+
+                        //贷方
+                        detailList.Add(
+                            new ZZD_GL_SyncServiceModel.DataModel.voucher_body()
+                            {
+                                detailindex = 2,
+                                accsubjcode = thisYiDaData.textField_lyocuyp3,//科目编码  1
+                                pk_accasoa = thisYiDaData.textField_lyocuyp3,//科目编码 1
+                                explanation = "贷方摘要",//摘要  1
+                                verifydate = 凭证日期.ToString("yyyy-MM-dd"),
+                                price = "0.00000000",
+                                excrate2 = "1",
+                                debitquantity = "0.00000000",
+                                debitamount = "0.00000000",
+                                groupdebitamount = "0.00000000",
+                                globaldebitamount = "0.00000000",
+                                localdebitamount = "0.00000000",
+                                creditquantity = "0.00000000",
+                                creditamount = thisYiDaData.numberField_lrnhnsxp.ToString(),//贷方金额  1
+                                groupcreditamount = "0.00000000",
+                                globalcreditamount = "0.00000000",
+                                localcreditamount = thisYiDaData.numberField_lrnhnsxp.ToString(),//贷方金额  1
+                                billtype = "",
+                                bankaccount = "",
+                                checkstyle = "",
+                                checkno = "",
+                                checkdate = "",
+                                bill_id = "",
+                                bill_date = "",
+                                pk_currtype = "CNY",
+                                cash_flow = new ZZD_GL_SyncServiceModel.DataModel.cash_flow()
+                                {
+                                },
+                                ass = new List<ZZD_GL_SyncServiceModel.DataModel.ass>()//辅助核算 
+                                {
+                                    new ZZD_GL_SyncServiceModel.DataModel.ass()
+                                    {
+                                        pk_Checktype ="0011",//0011-银行账户辅助核算 
+                                        pk_Checkvalue =  thisYiDaData.textField_lsx02qvj.Replace(" ",""),//银行账户  1
+                                    }
+                                },
+                            }
+                        );
+
+                        XElement xElement = ZZD_GL_SyncServiceModel.ImportXml_凭证.TemplateHeade(headModel);
+                        xElement.Add(ZZD_GL_SyncServiceModel.ImportXml_凭证.Header(headModel));//添加表头数据
+                        xElement.Element("voucher").Element("voucher_head").Element("details").Add(ZZD_GL_SyncServiceModel.ImportXml_凭证.Bodydebit(detailList));
+                        //生成凭证
+                        var results_凭证 = NCImportFunc.NCImport2(xElement, _NCApiUrl + "?account=LY01&groupcode=0");
+
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(results_凭证), "results_凭证");
+
+
+                        XElement xE = XElement.Parse(results_凭证);
+
+                        string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+
+                        string content = xE.Element("sendresult").Element("content")?.Value;
+
+                        string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+                        var ncResData = new YiDaResDto();
+                        if (resultcode == "1")
+                        {
+                            ncResData = (new YiDaResDto()
+                            {
+                                bSuccess = true,
+                                syncTime = DateTime.Now,
+                                ncNo = resultdescription,//xE.Element("sendresult").Element("content").Value,
+                                log = "同步成功!"
+                            });
+                        }
+                        else
+                        {
+                            ncResData = (new YiDaResDto()
+                            {
+                                bSuccess = false,
+                                syncTime = DateTime.Now,
+                                ncNo = "",
+                                log = "同步失败!原因为【" + resultdescription + "】!"
+                            });
+                        }
+                        //更新同步标识
+                        var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item);
+                    }
+                    catch (Exception ex)
+                    {
+                        LogHelper.WriteLog(JsonConvert.SerializeObject(ex.ToString()), "ZZD循环内错误");
+                    }
+                    
+                }
+            }
+            catch (Exception ex)
+            {
+                LogHelper.WriteLog(JsonConvert.SerializeObject(ex.ToString()), "ZZD");
+                throw;
+            }
+        }
+    }
+}

+ 20 - 0
HH.YiDaSyncNC/Dtos/NC/EnumType.cs

@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    public class EnumType
+    {
+        #region 启用/停用
+        public enum enablestate
+        {
+            未启用 = 1,
+            已启用 = 2,
+            已停用 = 3
+        }
+        #endregion
+    }
+}

+ 27 - 0
HH.YiDaSyncNC/Dtos/NC/ap_paybill.cs

@@ -0,0 +1,27 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("ap_paybill")]
+    public class ap_paybill
+    {
+        public ap_paybill()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_paybill { get; set; }
+
+        public string invoiceno { get; set; }
+    }
+}

+ 31 - 0
HH.YiDaSyncNC/Dtos/NC/ap_payitem.cs

@@ -0,0 +1,31 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("ap_payitem")]
+    public class ap_payitem
+    {
+        public ap_payitem()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_payitem { get; set; }
+
+        public string pk_paybill { get; set; }
+
+        public string scomment { get; set; }
+
+        public string def11 { get; set; }
+    }
+}

+ 27 - 0
HH.YiDaSyncNC/Dtos/NC/ar_gatherbill.cs

@@ -0,0 +1,27 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("ar_gatherbill")]
+    public class ar_gatherbill
+    {
+        public ar_gatherbill()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_gatherbill { get; set; }
+
+        public string billstatus { get; set; }
+    }
+}

+ 31 - 0
HH.YiDaSyncNC/Dtos/NC/ar_gatheritem.cs

@@ -0,0 +1,31 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("ar_gatheritem")]
+    public class ar_gatheritem
+    {
+        public ar_gatheritem()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_gatheritem { get; set; }
+
+        public string pk_gatherbill { get; set; }
+        public string src_itemid { get; set; }
+        public string src_billid { get; set; }
+        public string billdate { get; set; }
+        public decimal money_cr { get; set; }
+    }
+}

+ 31 - 0
HH.YiDaSyncNC/Dtos/NC/ar_recitem.cs

@@ -0,0 +1,31 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("ar_recitem")]
+    public class ar_recitem
+    {
+        public ar_recitem()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_recitem { get; set; }
+
+        public string pk_recbill { get; set; }
+
+        public string scomment { get; set; }
+
+        public string def1 { get; set; }
+    }
+}

+ 27 - 0
HH.YiDaSyncNC/Dtos/NC/bd_branddoc.cs

@@ -0,0 +1,27 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_branddoc")]
+    public class bd_branddoc
+    {
+        public bd_branddoc()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public string code { get; set; }
+
+        public string name { get; set; }
+    }
+}

+ 27 - 0
HH.YiDaSyncNC/Dtos/NC/bd_custclass.cs

@@ -0,0 +1,27 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_custclass")]
+    public class bd_custclass
+    {
+        public bd_custclass()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public string code { get; set; }
+
+        public string name { get; set; }
+    }
+}

+ 28 - 0
HH.YiDaSyncNC/Dtos/NC/bd_customer.cs

@@ -0,0 +1,28 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_customer")]
+    public class bd_customer
+    {
+        public bd_customer()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_customer { get; set; }
+
+        public string code { get; set; }
+        public string name { get; set; }
+    }
+}

+ 29 - 0
HH.YiDaSyncNC/Dtos/NC/bd_defdoc.cs

@@ -0,0 +1,29 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_defdoc")]
+    public class bd_defdoc
+    {
+        public bd_defdoc()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_defdoc { get; set; }
+
+        public string code { get; set; }
+        public string name { get; set; }
+        public string pk_defdoclist { get; set; }
+    }
+}

+ 28 - 0
HH.YiDaSyncNC/Dtos/NC/bd_income.cs

@@ -0,0 +1,28 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_income")]
+    public class bd_income
+    {
+        public bd_income()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_income { get; set; }
+
+        public string code { get; set; }
+        public string name { get; set; }
+    }
+}

+ 27 - 0
HH.YiDaSyncNC/Dtos/NC/bd_marbasclass.cs

@@ -0,0 +1,27 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_marbasclass")]
+    public class bd_marbasclass
+    {
+        public bd_marbasclass()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public string code { get; set; }
+
+        public string name { get; set; }
+    }
+}

+ 27 - 0
HH.YiDaSyncNC/Dtos/NC/bd_material.cs

@@ -0,0 +1,27 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_material")]
+    public class bd_material
+    {
+        public bd_material()
+        {
+
+        }
+
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_material { get; set; }
+
+        public string code { get; set; }
+        public string name { get; set; }
+        public string pk_org { get; set; }
+
+        public string pk_measdoc { get; set; }
+    }
+}

+ 27 - 0
HH.YiDaSyncNC/Dtos/NC/bd_mattaxes.cs

@@ -0,0 +1,27 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_mattaxes")]
+    public class bd_mattaxes
+    {
+        public bd_mattaxes()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public string mattaxescode { get; set; }
+
+        public string mattaxesname { get; set; }
+    }
+}

+ 29 - 0
HH.YiDaSyncNC/Dtos/NC/bd_measdoc.cs

@@ -0,0 +1,29 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_measdoc")]
+    public class bd_measdoc
+    {
+        public bd_measdoc()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_measdoc { get; set; }
+
+        public string code { get; set; }
+
+        public string name { get; set; }
+    }
+}

+ 207 - 0
HH.YiDaSyncNC/Dtos/NC/bd_project.cs

@@ -0,0 +1,207 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_project")]
+    public class bd_project
+    {
+        public bd_project()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_project { get; set; }
+
+        public string actu_finish_date { get; set; }
+        public string actu_start_date { get; set; }
+        public int? actuduration { get; set; }
+        public string begin_flag { get; set; }
+        public string bill_type { get; set; }
+        public string check_date { get; set; }
+        public string creationstate { get; set; } = "~";
+        public string creationtime { get; set; }
+        public string creator { get; set; }
+        public string def1 { get; set; } = "~";
+        public string def10 { get; set; } = "~";
+        public string def11 { get; set; } = "~";
+        public string def12 { get; set; } = "~";
+        public string def13 { get; set; } = "~";
+        public string def14 { get; set; } = "~";
+        public string def15 { get; set; } = "~";
+        public string def16 { get; set; } = "~";
+        public string def17 { get; set; } = "~";
+        public string def18 { get; set; } = "~";
+        public string def19 { get; set; } = "~";
+        public string def2 { get; set; } = "~";
+        public string def20 { get; set; } = "~";
+        public string def21 { get; set; } = "~";
+        public string def22 { get; set; } = "~";
+        public string def23 { get; set; } = "~";
+        public string def24 { get; set; } = "~";
+        public string def25 { get; set; } = "~";
+        public string def26 { get; set; } = "~";
+        public string def27 { get; set; } = "~";
+        public string def28 { get; set; } = "~";
+        public string def29 { get; set; } = "~";
+        public string def3 { get; set; } = "~";
+        public string def30 { get; set; } = "~";
+        public string def31 { get; set; } = "~";
+        public string def32 { get; set; } = "~";
+        public string def33 { get; set; } = "~";
+        public string def34 { get; set; } = "~";
+        public string def35 { get; set; } = "~";
+        public string def36 { get; set; } = "~";
+        public string def37 { get; set; } = "~";
+        public string def38 { get; set; } = "~";
+        public string def39 { get; set; } = "~";
+        public string def4 { get; set; } = "~";
+        public string def40 { get; set; } = "~";
+        public string def41 { get; set; } = "~";
+        public string def42 { get; set; } = "~";
+        public string def43 { get; set; } = "~";
+        public string def44 { get; set; } = "~";
+        public string def45 { get; set; } = "~";
+        public string def46 { get; set; } = "~";
+        public string def47 { get; set; } = "~";
+        public string def48 { get; set; } = "~";
+        public string def49 { get; set; } = "~";
+        public string def5 { get; set; } = "~";
+        public string def50 { get; set; } = "~";
+        public string def6 { get; set; }
+        public string def7 { get; set; } = "~";
+        public string def8 { get; set; } = "~";
+        public string def9 { get; set; } = "~";
+        public int? deletestate { get; set; }
+        public string delperson { get; set; } = "~";
+        public string deltime { get; set; }
+        public Int16? dr { get; set; } = 0;
+        public int? enablestate { get; set; }
+        public decimal? estimate_global { get; set; }
+        public decimal? estimate_group { get; set; }
+        public decimal? estimate_mny { get; set; }
+        public string finish_work_date { get; set; }
+        public decimal? general_global { get; set; }
+        public decimal? general_group { get; set; }
+        public decimal? general_mny { get; set; }
+        public string hdef100 { get; set; }  = "~";
+        public string hdef51 { get; set; }   = "~";
+        public string hdef52 { get; set; }   = "~";
+        public string hdef53 { get; set; }   = "~";
+        public string hdef54 { get; set; }   = "~";
+        public string hdef55 { get; set; }   = "~";
+        public string hdef56 { get; set; }   = "~";
+        public string hdef57 { get; set; }   = "~";
+        public string hdef58 { get; set; }   = "~";
+        public string hdef59 { get; set; }   = "~";
+        public string hdef60 { get; set; }   = "~";
+        public string hdef61 { get; set; }   = "~";
+        public string hdef62 { get; set; }   = "~";
+        public string hdef63 { get; set; }   = "~";
+        public string hdef64 { get; set; }   = "~";
+        public string hdef65 { get; set; }   = "~";
+        public string hdef66 { get; set; }   = "~";
+        public string hdef67 { get; set; }   = "~";
+        public string hdef68 { get; set; }   = "~";
+        public string hdef69 { get; set; }   = "~";
+        public string hdef70 { get; set; }   = "~";
+        public string hdef71 { get; set; }   = "~";
+        public string hdef72 { get; set; }   = "~";
+        public string hdef73 { get; set; }   = "~";
+        public string hdef74 { get; set; }   = "~";
+        public string hdef75 { get; set; }   = "~";
+        public string hdef76 { get; set; }   = "~";
+        public string hdef77 { get; set; }   = "~";
+        public string hdef78 { get; set; }   = "~";
+        public string hdef79 { get; set; }   = "~";
+        public string hdef80 { get; set; }   = "~";
+        public string hdef81 { get; set; }   = "~";
+        public string hdef82 { get; set; }   = "~";
+        public string hdef83 { get; set; }   = "~";
+        public string hdef84 { get; set; }   = "~";
+        public string hdef85 { get; set; }   = "~";
+        public string hdef86 { get; set; }   = "~";
+        public string hdef87 { get; set; }   = "~";
+        public string hdef88 { get; set; }   = "~";
+        public string hdef89 { get; set; }   = "~";
+        public string hdef90 { get; set; }   = "~";
+        public string hdef91 { get; set; }   = "~";
+        public string hdef92 { get; set; }   = "~";
+        public string hdef93 { get; set; }   = "~";
+        public string hdef94 { get; set; }   = "~";
+        public string hdef95 { get; set; }   = "~";
+        public string hdef96 { get; set; }   = "~";
+        public string hdef97 { get; set; }   = "~";
+        public string hdef98 { get; set; }   = "~";
+        public string hdef99 { get; set; } = "~";
+        public string memo { get; set; }
+        public string modifiedtime { get; set; }
+        public string modifier { get; set; } = "~";
+        public string order_finish_date { get; set; }
+        public string order_start_date { get; set; }
+        public int? orderduration { get; set; }
+        public int? ordermethod { get; set; }
+        public string pk_busitype { get; set; }      = "~";
+        public string pk_currtype { get; set; }      = "~";
+        public string pk_dutier { get; set; }        = "~";
+        public string pk_duty_dept { get; set; }     = "~";
+        public string pk_duty_dept_v { get; set; }   = "~";
+        public string pk_duty_org { get; set; }      = "~";
+        public string pk_duty_org_v { get; set; }    = "~";
+        public string pk_eps { get; set; }           = "~";
+        public string pk_group { get; set; }         = "~";
+        public string pk_org { get; set; }           = "~";
+        public string pk_org_v { get; set; } = "~";
+        public string pk_parentpro { get; set; } = "~";
+        public string pk_parenttask { get; set; }    = "~";
+        public string pk_planmaker { get; set; }     = "~";
+
+        public string pk_projectclass { get; set; }
+        public string pk_projectstate { get; set; } = "~";
+        public string pk_transitype { get; set; }      = "~";
+        public string pk_wbstemplate { get; set; }     = "~";
+        public string pk_workcalendar { get; set; } = "~";
+        public string pk_yearplan_b { get; set; }
+        public int? plan_auth { get; set; }
+        public string plan_finish_date { get; set; }
+        public string plan_start_date { get; set; }
+        public int? planduration { get; set; }
+        public int? planmodel { get; set; }
+        public int? planpriority { get; set; }
+        public string project_code { get; set; }
+        public string project_name { get; set; }
+        public string project_name2 { get; set; }
+        public string project_name3 { get; set; }
+        public string project_name4 { get; set; }
+        public string project_name5 { get; set; }
+        public string project_name6 { get; set; }
+        public string project_ot_name { get; set; }
+        public string project_sh_name { get; set; }
+        public string req_finish_date { get; set; }
+        public string req_start_date { get; set; }
+        public int? reqduration { get; set; }
+        public string src_bill_code { get; set; }
+        public string src_bill_type { get; set; }
+        public string src_pk_bill { get; set; } = "~";
+        public string src_pk_transitype { get; set; }
+        public string src_transi_type { get; set; }
+        public string start_work_date { get; set; }
+        public string status_date { get; set; }
+        public string tax_flag { get; set; } = "N";
+        public string transi_type { get; set; }
+        public string ts { get; set; }
+        public string upload_flag { get; set; } = "N";
+        public string pk_stordoc1 { get; set; }
+
+
+    }
+}

+ 28 - 0
HH.YiDaSyncNC/Dtos/NC/bd_projectclass.cs

@@ -0,0 +1,28 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_projectclass")]
+    public class bd_projectclass
+    {
+        public bd_projectclass()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_projectclass { get; set; }
+
+        public string type_code { get; set; }
+        public string type_name { get; set; }
+    }
+}

+ 30 - 0
HH.YiDaSyncNC/Dtos/NC/bd_psndoc.cs

@@ -0,0 +1,30 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_psndoc")]
+    public class bd_psndoc
+    {
+        public bd_psndoc()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_psndoc { get; set; }
+
+        public string code { get; set; }
+        public string name { get; set; }
+
+
+    }
+}

+ 28 - 0
HH.YiDaSyncNC/Dtos/NC/bd_stordoc.cs

@@ -0,0 +1,28 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_stordoc")]
+    public class bd_stordoc
+    {
+        public bd_stordoc()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_stordoc { get; set; }
+
+        public string code { get; set; }
+        public string name { get; set; }
+    }
+}

+ 29 - 0
HH.YiDaSyncNC/Dtos/NC/bd_supplier.cs

@@ -0,0 +1,29 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_supplier")]
+    public class bd_supplier
+    {
+        public bd_supplier()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public string pk_supplier { get; set; }
+
+        public string pk_org { get; set; }
+        public string code { get; set; }
+        public string name { get; set; }
+    }
+}

+ 27 - 0
HH.YiDaSyncNC/Dtos/NC/bd_supplierclass.cs

@@ -0,0 +1,27 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("bd_supplierclass")]
+    public class bd_supplierclass
+    {
+        public bd_supplierclass()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public string code { get; set; }
+
+        public string name { get; set; }
+    }
+}

+ 29 - 0
HH.YiDaSyncNC/Dtos/NC/ct_bondapply.cs

@@ -0,0 +1,29 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("ct_bondapply")]
+    public class ct_bondapply
+    {
+        public ct_bondapply()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_bondapply { get; set; }
+
+        public string billno { get; set; }
+
+        public string approvestatus { get; set; }
+    }
+}

+ 104 - 0
HH.YiDaSyncNC/Dtos/NC/fa_card.cs

@@ -0,0 +1,104 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("fa_card")]
+    public class fa_card
+    {
+        public fa_card()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_card { get; set; }
+
+        public decimal? archarea { get; set; }
+        public string asset_code { get; set; }
+        public string asset_name { get; set; }
+        public string asset_name2 { get; set; }
+        public string asset_name3 { get; set; }
+        public string asset_name4 { get; set; }
+        public string asset_name5 { get; set; }
+        public string asset_name6 { get; set; }
+        public string assetsuit_code { get; set; }
+        public string bar_code { get; set; }
+        public string begin_date { get; set; }
+        public string bill_code_src { get; set; }
+        public string bill_source { get; set; }
+        public string bill_type { get; set; }
+        public string billmaker { get; set; }
+        public string billmaketime { get; set; }
+        public string business_date { get; set; }
+        public string card_code { get; set; }
+        public string card_model { get; set; }
+        public string close_date { get; set; }
+        public string contrator { get; set; }
+        public string creationtime { get; set; }
+        public string creator { get; set; }
+        public decimal? currmoney { get; set; }
+        public string deploy_flag { get; set; }
+        public decimal? dismant_cost { get; set; }
+        public Int16? dr { get; set; } = 0;
+        public string dy_flag { get; set; }
+        public string fundorigin { get; set; }
+        public decimal? install_fee { get; set; }
+        public string leave_date { get; set; }
+        public string license { get; set; }
+        public decimal? machinepower { get; set; }
+        public int machinequan { get; set; }
+        public string measureunit { get; set; } = "~";
+        public string modifiedtime { get; set; } = "~";
+        public string modifier { get; set; } = "~";
+        public decimal? nettonnage { get; set; }
+        public decimal? other_cost { get; set; }
+        public string pk_addreducestyle { get; set; }
+        public string pk_assetgroup { get; set; } = "~";
+        public string pk_assetuser { get; set; } = "~";
+        public string pk_bill_b_src { get; set; } = "~";
+        public string pk_bill_source { get; set; } = "~";
+        public string pk_bill_src { get; set; } = "~";
+
+        public string pk_currency { get; set; }
+        public string pk_equip { get; set; } = "~";
+        public string pk_equip_usedept { get; set; } = "~";
+        public string pk_equip_usedept_v { get; set; } = "~";
+        public string pk_group { get; set; }
+        public string pk_org { get; set; }
+        public string pk_org_v { get; set; }
+        public string pk_raorg { get; set; } = "~";
+        public string pk_raorg_v { get; set; } = "~";
+        public string pk_receipt { get; set; } = "~";
+        public string pk_transitype { get; set; }
+        public string pk_user { get; set; } = "~";
+        public string position { get; set; }
+        public string position2 { get; set; }
+        public string position3 { get; set; }
+        public string position4 { get; set; }
+        public string position5 { get; set; }
+        public string position6 { get; set; }
+        public string producer { get; set; }
+        public string provider { get; set; } = "~";
+        public int quantity { get; set; } = 0;
+        public decimal? revalued_amount { get; set; } = 0;
+        public decimal? soilarea { get; set; } = 0;
+        public string soillevel { get; set; }
+        public string spec { get; set; }
+        public decimal? tax_cost { get; set; } = 0;
+        public string transi_type { get; set; }
+        public string ts { get; set; }
+        public string workcenter { get; set; } = "~";
+
+
+
+    }
+}

+ 29 - 0
HH.YiDaSyncNC/Dtos/NC/fa_cardhistory.cs

@@ -0,0 +1,29 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("fa_cardhistory")]
+    public class fa_cardhistory
+    {
+        public fa_cardhistory()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_card { get; set; }
+
+        public string laststate_flag { get; set; }
+        public string accudep_cal { get; set; }
+        public string usedmonth { get; set; }
+    }
+}

+ 17 - 0
HH.YiDaSyncNC/Dtos/NC/org_accountingbook.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    /// <summary>
+    /// NC账簿表
+    /// </summary>
+    public class org_accountingbook
+    {
+        public string name { get; set; }
+        public string code { get; set; }
+    }
+}

+ 30 - 0
HH.YiDaSyncNC/Dtos/NC/org_dept.cs

@@ -0,0 +1,30 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("org_dept")]
+    public class org_dept
+    {
+        public org_dept()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_dept { get; set; }
+
+        public string code { get; set; }
+        public string name { get; set; }
+
+
+    }
+}

+ 28 - 0
HH.YiDaSyncNC/Dtos/NC/org_orgs.cs

@@ -0,0 +1,28 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("org_orgs")]
+    public class org_orgs
+    {
+        public org_orgs()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_org { get; set; }
+
+        public string code { get; set; }
+        public string name { get; set; }
+    }
+}

+ 28 - 0
HH.YiDaSyncNC/Dtos/NC/pam_addreducestyle.cs

@@ -0,0 +1,28 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("pam_addreducestyle")]
+    public class pam_addreducestyle
+    {
+        public pam_addreducestyle()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_addreducestyle { get; set; }
+
+        public string style_code { get; set; }
+        public string style_name { get; set; }
+    }
+}

+ 29 - 0
HH.YiDaSyncNC/Dtos/NC/po_order.cs

@@ -0,0 +1,29 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("po_order")]
+    public class po_order
+    {
+        public po_order()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_order { get; set; }
+
+        public string approver { get; set; } = "~";
+        public string forderstatus { get; set; }
+        public string taudittime { get; set; }
+    }
+}

+ 35 - 0
HH.YiDaSyncNC/Dtos/NC/po_order_b.cs

@@ -0,0 +1,35 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("po_order_b")]
+    public class po_order_b
+    {
+        public po_order_b()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_order_b { get; set; }
+
+        public string pk_order { get; set; } = "~";
+
+        public string pk_group { get; set; } = "~";
+        public string pk_org { get; set; } = "~";
+        public string pk_org_v { get; set; } = "~";
+
+        public decimal? nastnum { get; set; }
+
+        public string dplanarrvdate { get; set; }
+    }
+}

+ 131 - 0
HH.YiDaSyncNC/Dtos/NC/po_order_bb.cs

@@ -0,0 +1,131 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("po_order_bb")]
+    public class po_order_bb
+    {
+        public po_order_bb()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_order_bb { get; set; }
+
+        public string ccarrier { get; set; } = "~";
+        public string ccasecode { get; set; }
+        public string clandport { get; set; } = "~";
+        public string cloadport { get; set; } = "~";
+        public string cshipline { get; set; } = "~";
+        public string cshipname { get; set; }
+        public string dbilldate { get; set; }
+        public string dplanarrvdate { get; set; }
+        public string dplanfreightdate { get; set; }
+        public Int16? dr { get; set; } = 0;
+        public int? fonwaystatus { get; set; } = 8;
+        public string isoperated { get; set; } = "N";
+
+        public decimal? nmaxhandlenum { get; set; }
+        public decimal? nonwaynum { get; set; }
+        public string pk_group { get; set; }
+        public string pk_order { get; set; }
+        public string pk_order_b { get; set; }
+        public string pk_org { get; set; }
+        public string pk_org_v { get; set; }
+        public string ts { get; set; }
+
+        public string vbdef1 { get; set; } = "~";
+        public string vbdef10 { get; set; } = "~";
+        public string vbdef11 { get; set; } = "~";
+        public string vbdef12 { get; set; } = "~";
+        public string vbdef13 { get; set; } = "~";
+        public string vbdef14 { get; set; } = "~";
+        public string vbdef15 { get; set; } = "~";
+        public string vbdef16 { get; set; } = "~";
+        public string vbdef17 { get; set; } = "~";
+        public string vbdef18 { get; set; } = "~";
+        public string vbdef19 { get; set; } = "~";
+        public string vbdef2 { get; set; } = "~";
+        public string vbdef20 { get; set; } = "~";
+        public string vbdef21 { get; set; } = "~";
+        public string vbdef22 { get; set; } = "~";
+        public string vbdef23 { get; set; } = "~";
+        public string vbdef24 { get; set; } = "~";
+        public string vbdef25 { get; set; } = "~";
+        public string vbdef26 { get; set; } = "~";
+        public string vbdef27 { get; set; } = "~";
+        public string vbdef28 { get; set; } = "~";
+        public string vbdef29 { get; set; } = "~";
+        public string vbdef3 { get; set; } = "~";
+        public string vbdef30 { get; set; } = "~";
+        public string vbdef31 { get; set; } = "~";
+        public string vbdef32 { get; set; } = "~";
+        public string vbdef33 { get; set; } = "~";
+        public string vbdef34 { get; set; } = "~";
+        public string vbdef35 { get; set; } = "~";
+        public string vbdef36 { get; set; } = "~";
+        public string vbdef37 { get; set; } = "~";
+        public string vbdef38 { get; set; } = "~";
+        public string vbdef39 { get; set; } = "~";
+        public string vbdef4 { get; set; } = "~";
+        public string vbdef40 { get; set; } = "~";
+        public string vbdef5 { get; set; } = "~";
+        public string vbdef6 { get; set; } = "~";
+        public string vbdef7 { get; set; } = "~";
+        public string vbdef8 { get; set; } = "~";
+        public string vbdef9 { get; set; } = "~";
+        public string vbillcode { get; set; }
+        public string vhdef1 { get; set; } = "~";
+        public string vhdef10 { get; set; } = "~";
+        public string vhdef11 { get; set; } = "~";
+        public string vhdef12 { get; set; } = "~";
+        public string vhdef13 { get; set; } = "~";
+        public string vhdef14 { get; set; } = "~";
+        public string vhdef15 { get; set; } = "~";
+        public string vhdef16 { get; set; } = "~";
+        public string vhdef17 { get; set; } = "~";
+        public string vhdef18 { get; set; } = "~";
+        public string vhdef19 { get; set; } = "~";
+        public string vhdef2 { get; set; } = "~";
+        public string vhdef20 { get; set; } = "~";
+        public string vhdef21 { get; set; } = "~";
+        public string vhdef22 { get; set; } = "~";
+        public string vhdef23 { get; set; } = "~";
+        public string vhdef24 { get; set; } = "~";
+        public string vhdef25 { get; set; } = "~";
+        public string vhdef26 { get; set; } = "~";
+        public string vhdef27 { get; set; } = "~";
+        public string vhdef28 { get; set; } = "~";
+        public string vhdef29 { get; set; } = "~";
+        public string vhdef3 { get; set; } = "~";
+        public string vhdef30 { get; set; } = "~";
+        public string vhdef31 { get; set; } = "~";
+        public string vhdef32 { get; set; } = "~";
+        public string vhdef33 { get; set; } = "~";
+        public string vhdef34 { get; set; } = "~";
+        public string vhdef35 { get; set; } = "~";
+        public string vhdef36 { get; set; } = "~";
+        public string vhdef37 { get; set; } = "~";
+        public string vhdef38 { get; set; } = "~";
+        public string vhdef39 { get; set; } = "~";
+        public string vhdef4 { get; set; } = "~";
+        public string vhdef40 { get; set; } = "~";
+        public string vhdef5 { get; set; } = "~";
+        public string vhdef6 { get; set; } = "~";
+        public string vhdef7 { get; set; } = "~";
+        public string vhdef8 { get; set; } = "~";
+        public string vhdef9 { get; set; } = "~";
+        public string vvendororderrow { get; set; }
+
+    }
+}

+ 30 - 0
HH.YiDaSyncNC/Dtos/NC/sm_user.cs

@@ -0,0 +1,30 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("sm_user")]
+    public class sm_user
+    {
+        public sm_user()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string cuserid { get; set; }
+
+        public string user_code { get; set; }
+        public string user_name { get; set; }
+
+
+    }
+}

+ 25 - 0
HH.YiDaSyncNC/Dtos/NC/so_saleinvoice.cs

@@ -0,0 +1,25 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("so_saleinvoice")]
+    public class so_saleinvoice
+    {
+        public so_saleinvoice()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string csaleinvoiceid { get; set; }
+    }
+}

+ 48 - 0
HH.YiDaSyncNC/Dtos/NC/so_saleinvoice_b.cs

@@ -0,0 +1,48 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("so_saleinvoice_b")]
+    public class so_saleinvoice_b
+    {
+        public so_saleinvoice_b()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string csaleinvoicebid { get; set; }
+
+        public string csaleinvoiceid { get; set; }
+
+        public string vbdef1 { get; set; } = "~";
+        public string vbdef10 { get; set; } = "~";
+        public string vbdef11 { get; set; } = "~";
+        public string vbdef12 { get; set; } = "~";
+        public string vbdef13 { get; set; } = "~";
+        public string vbdef14 { get; set; } = "~";
+        public string vbdef15 { get; set; } = "~";
+        public string vbdef16 { get; set; } = "~";
+        public string vbdef17 { get; set; } = "~";
+        public string vbdef18 { get; set; } = "~";
+        public string vbdef19 { get; set; } = "~";
+        public string vbdef2 { get; set; } = "~";
+        public string vbdef20 { get; set; } = "~";
+        public string vbdef3 { get; set; } = "~";
+        public string vbdef4 { get; set; } = "~";
+        public string vbdef5 { get; set; } = "~";
+        public string vbdef6 { get; set; } = "~";
+        public string vbdef7 { get; set; } = "~";
+        public string vbdef8 { get; set; } = "~";
+        public string vbdef9 { get; set; } = "~";
+    }
+}

+ 117 - 0
HH.YiDaSyncNC/Dtos/NC/so_saleorder.cs

@@ -0,0 +1,117 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("so_saleorder")]
+    public class so_saleorder
+    {
+        public so_saleorder()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string csaleorderid { get; set; }
+
+        public string approver { get; set; } = "~";
+        public string badvfeeflag { get; set; }
+        public string barsettleflag { get; set; }
+        public string bcooptopoflag { get; set; }
+        public string bcostsettleflag { get; set; }
+        public string bfreecustflag { get; set; }
+        public string billmaker { get; set; }
+        public string binvoicendflag { get; set; }
+        public string boffsetflag { get; set; }
+        public string boutendflag { get; set; }
+        public string bpocooptomeflag { get; set; }
+        public string bpreceiveflag { get; set; }
+        public string bsendendflag { get; set; }
+        public string carsubtypeid { get; set; } = "~";
+        public string cbalancetypeid { get; set; } = "~";
+        public string cbillsrcid { get; set; } = "~";
+        public string cbiztypeid { get; set; }
+        public string cchanneltypeid { get; set; } = "~";
+        public string ccustbankaccid { get; set; } = "~";
+        public string ccustbankid { get; set; } = "~";
+        public string ccustomerid { get; set; }
+        public string cdeptid { get; set; }
+        public string cdeptvid { get; set; }
+        public string cemployeeid { get; set; } = "~";
+        public string cfreecustid { get; set; } = "~";
+        public string chreceiveaddid { get; set; } = "~";
+        public string chreceivecustid { get; set; }
+        public string cinvoicecustid { get; set; }
+        public string corigcurrencyid { get; set; }
+        public string cpaytermid { get; set; }
+        public string creationtime { get; set; }
+        public string creator { get; set; }
+        public string creviserid { get; set; } = "~";
+        public string ctradewordid { get; set; } = "~";
+        public string ctransporttypeid { get; set; } = "~";
+        public string ctrantypeid { get; set; }
+        public string dbilldate { get; set; }
+        public string dmakedate { get; set; }
+        public Int16? dr { get; set; }
+        public Int16? fpfstatusflag { get; set; }
+        public Int16? fstatusflag { get; set; }
+        public int? iprintcount { get; set; }
+        public int? iversion { get; set; }
+        public string modifiedtime { get; set; }
+        public string modifier { get; set; } = "~";
+        public decimal? ndiscountrate { get; set; }
+        public decimal? nlrgtotalorigmny { get; set; }
+        public decimal? npreceivemny { get; set; }
+        public decimal? npreceivequota { get; set; }
+        public decimal? npreceiverate { get; set; }
+        public decimal? nreceivedmny { get; set; }
+        public decimal? ntotalnum { get; set; }
+        public decimal? ntotalorigmny { get; set; }
+        public decimal? ntotalorigsubmny { get; set; }
+        public decimal? ntotalpiece { get; set; }
+        public decimal? ntotalvolume { get; set; }
+        public decimal? ntotalweight { get; set; }
+        public string pk_group { get; set; }
+        public string pk_org { get; set; }
+        public string pk_org_v { get; set; }
+        public string taudittime { get; set; }
+        public string trevisetime { get; set; }
+        public string ts { get; set; }
+        public string vbillcode { get; set; }
+        public string vbillsrctype { get; set; } = "~";
+        public string vcooppohcode { get; set; }
+        public string vcreditnum { get; set; } = "~";
+        public string vdef1 { get; set; }
+        public string vdef10 { get; set; }   = "~";
+        public string vdef11 { get; set; }   = "~";
+        public string vdef12 { get; set; }   = "~";
+        public string vdef13 { get; set; }   = "~";
+        public string vdef14 { get; set; }   = "~";
+        public string vdef15 { get; set; }   = "~";
+        public string vdef16 { get; set; }   = "~";
+        public string vdef17 { get; set; }   = "~";
+        public string vdef18 { get; set; }   = "~";
+        public string vdef19 { get; set; }   = "~";
+        public string vdef2 { get; set; }    = "~";
+        public string vdef20 { get; set; }   = "~";
+        public string vdef3 { get; set; } = "~";
+        public string vdef4 { get; set; }
+        public string vdef5 { get; set; }
+        public string vdef6 { get; set; } = "~";
+        public string vdef7 { get; set; } = "~";
+        public string vdef8 { get; set; }
+        public string vdef9 { get; set; } = "~";
+        public string vnote { get; set; }
+        public string vrevisereason { get; set; }
+        public string vtrantypecode { get; set; }
+
+    }
+}

+ 210 - 0
HH.YiDaSyncNC/Dtos/NC/so_saleorder_b.cs

@@ -0,0 +1,210 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("so_saleorder_b")]
+    public class so_saleorder_b
+    {
+        public so_saleorder_b()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string csaleorderbid { get; set; }
+
+        public string barrangedflag { get; set; } = "~";
+        public string bbarsettleflag { get; set; } = "~";
+        public string bbcostsettleflag { get; set; } = "~";
+        public string bbindflag { get; set; } = "~";
+        public string bbinvoicendflag { get; set; } = "~";
+        public string bboutendflag { get; set; } = "~";
+        public string bbsendendflag { get; set; } = "~";
+        public string bdiscountflag { get; set; } = "~";
+        public string bjczxsflag { get; set; } = "~";
+        public string blaborflag { get; set; } = "~";
+        public string blargessflag { get; set; } = "~";
+        public string blrgcashflag { get; set; } = "~";
+        public string btriatradeflag { get; set; } = "~";
+        public string carorgid { get; set; } = "~";
+        public string carorgvid { get; set; } = "~";
+        public string carrangepersonid { get; set; } = "~";
+        public string castunitid { get; set; } = "~";
+        public string cbindsrcid { get; set; } = "~";
+        public string cbuylargessactid { get; set; } = "~";
+        public string cbuylargessid { get; set; } = "~";
+        public string cbuypromottypeid { get; set; } = "~";
+        public string cctmanagebid { get; set; } = "~";
+        public string cctmanageid { get; set; } = "~";
+        public string ccurrencyid { get; set; } = "~";
+        public string ccustmaterialid { get; set; } = "~";
+        public string cexchangesrcretid { get; set; } = "~";
+        public string cfactoryid { get; set; } = "~";
+        public string cfirstbid { get; set; } = "~";
+        public string cfirstid { get; set; } = "~";
+        public string clargesssrcid { get; set; } = "~";
+        public string cmaterialid { get; set; } = "~";
+        public string cmaterialvid { get; set; } = "~";
+        public string cmffileid { get; set; } = "~";
+        public string corigareaid { get; set; } = "~";
+        public string corigcountryid { get; set; } = "~";
+        public string cprcpromottypeid { get; set; } = "~";
+        public string cpriceformid { get; set; } = "~";
+        public string cpriceitemid { get; set; } = "~";
+        public string cpriceitemtableid { get; set; } = "~";
+        public string cpricepolicyid { get; set; } = "~";
+        public string cpricepromtactid { get; set; } = "~";
+        public string cprodlineid { get; set; } = "~";
+        public string cproductorid { get; set; } = "~";
+        public string cprofitcenterid { get; set; } = "~";
+        public string cprofitcentervid { get; set; } = "~";
+        public string cprojectid { get; set; } = "~";
+        public string cpromotpriceid { get; set; } = "~";
+        public string cqtunitid { get; set; } = "~";
+        public string cqualitylevelid { get; set; } = "~";
+        public string crececountryid { get; set; } = "~";
+        public string creceiveadddocid { get; set; } = "~";
+        public string creceiveaddrid { get; set; } = "~";
+        public string creceiveareaid { get; set; } = "~";
+        public string creceivecustid { get; set; } = "~";
+        public string cretpolicyid { get; set; } = "~";
+        public string cretreasonid { get; set; } = "~";
+        public string crowno { get; set; } = "~";
+                                                            
+        public string csaleorderid { get; set; } = "~";
+        public string csendcountryid { get; set; } = "~";
+        public string csendstockorgid { get; set; } = "~";
+        public string csendstockorgvid { get; set; } = "~";
+        public string csendstordocid { get; set; } = "~";
+        public string csettleorgid { get; set; } = "~";
+        public string csettleorgvid { get; set; } = "~";
+        public string csprofitcenterid { get; set; } = "~";
+        public string csprofitcentervid { get; set; } = "~";
+        public string csrcbid { get; set; } = "~";
+        public string csrcid { get; set; } = "~";
+        public string ctaxcodeid { get; set; } = "~";
+        public string ctaxcountryid { get; set; } = "~";
+        public string ctrafficorgid { get; set; } = "~";
+        public string ctrafficorgvid { get; set; } = "~";
+        public string cunitid { get; set; } = "~";
+        public string cvendorid { get; set; } = "~";
+        public string dbilldate { get; set; } = "~";
+        public Int16? dr { get; set; } = 0;
+        public string dreceivedate { get; set; } = "~";
+        public string dsenddate { get; set; } = "~";
+        public int? fbuysellflag { get; set; }
+        public int? flargesstypeflag { get; set; }
+        public int? fretexchange { get; set; } = 0;
+        public int? frowstatus { get; set; } = 1;
+        public int? ftaxtypeflag { get; set; }
+        public decimal? naccprice { get; set; }
+        public decimal? naskqtorignetprice { get; set; }
+        public decimal? naskqtorigprice { get; set; }
+        public decimal? naskqtorigtaxprc { get; set; }
+        public decimal? naskqtorigtxntprc { get; set; }
+        public decimal? nastnum { get; set; }
+        public decimal? ncaltaxmny { get; set; }
+        public decimal? ndiscount { get; set; }
+        public decimal? ndiscountrate { get; set; }
+        public decimal? nexchangerate { get; set; }
+        public decimal? nglobalexchgrate { get; set; }
+        public decimal? nglobalmny { get; set; }
+        public decimal? nglobaltaxmny { get; set; }
+        public decimal? ngroupexchgrate { get; set; }
+        public decimal? ngroupmny { get; set; }
+        public decimal? ngrouptaxmny { get; set; }
+        public decimal? nitemdiscountrate { get; set; }
+        public decimal? nlargessmny { get; set; }
+        public decimal? nlargesstaxmny { get; set; }
+        public decimal? nmffileprice { get; set; }
+        public decimal? nmny { get; set; }
+        public decimal? nnetprice { get; set; }
+        public decimal? nnum { get; set; }
+        public decimal? norigdiscount { get; set; }
+        public decimal? norigmny { get; set; }
+        public decimal? norignetprice { get; set; }
+        public decimal? norigprice { get; set; }
+        public decimal? norigtaxmny { get; set; }
+        public decimal? norigtaxnetprice { get; set; }
+        public decimal? norigtaxprice { get; set; }
+        public decimal? npiece { get; set; }
+        public decimal? nprice { get; set; }
+        public decimal? nqtnetprice { get; set; }
+        public decimal? nqtorignetprice { get; set; }
+        public decimal? nqtorigprice { get; set; }
+        public decimal? nqtorigtaxnetprc { get; set; }
+        public decimal? nqtorigtaxprice { get; set; }
+        public decimal? nqtprice { get; set; }
+        public decimal? nqttaxnetprice { get; set; }
+        public decimal? nqttaxprice { get; set; }
+        public decimal? nqtunitnum { get; set; }
+        public decimal? ntax { get; set; }
+        public decimal? ntaxmny { get; set; }
+        public decimal? ntaxnetprice { get; set; }
+        public decimal? ntaxprice { get; set; }
+        public decimal? ntaxrate { get; set; }
+        public decimal? nvolume { get; set; }
+        public decimal? nweight { get; set; }
+        public string pk_batchcode { get; set; } = "~";
+        public string pk_group { get; set; } = "~";
+        public string pk_org { get; set; } = "~";
+        public string tlastarrangetime { get; set; }
+        public string ts { get; set; }
+        public string vbatchcode { get; set; }
+        public string vbdef1 { get; set; } = "~";
+        public string vbdef10 { get; set; } = "~";
+        public string vbdef11 { get; set; } = "~";
+        public string vbdef12 { get; set; } = "~";
+        public string vbdef13 { get; set; } = "~";
+        public string vbdef14 { get; set; } = "~";
+        public string vbdef15 { get; set; } = "~";
+        public string vbdef16 { get; set; } = "~";
+        public string vbdef17 { get; set; } = "~";
+        public string vbdef18 { get; set; } = "~";
+        public string vbdef19 { get; set; } = "~";
+        public string vbdef2 { get; set; } = "~";
+        public string vbdef20 { get; set; } = "~";
+        public string vbdef3 { get; set; } = "~";
+        public string vbdef4 { get; set; } = "~";
+        public string vbdef5 { get; set; } = "~";
+        public string vbdef6 { get; set; } = "~";
+        public string vbdef7 { get; set; } = "~";
+        public string vbdef8 { get; set; } = "~";
+        public string vbdef9 { get; set; } = "~";
+        public string vbrevisereason { get; set; }
+        public string vchangerate { get; set; } = "~";
+        public string vclosereason { get; set; }
+        public string vctcode { get; set; } 
+        public string vcustombillcode { get; set; } 
+        public string vfirstcode { get; set; } 
+        public string vfirstrowno { get; set; } = "~";
+        public string vfirsttrantype { get; set; } = "~";
+        public string vfirsttype { get; set; } = "~";
+        public string vfree1 { get; set; } = "~";
+        public string vfree10 { get; set; } = "~";
+        public string vfree2 { get; set; } = "~";
+        public string vfree3 { get; set; } = "~";
+        public string vfree4 { get; set; } = "~";
+        public string vfree5 { get; set; } = "~";
+        public string vfree6 { get; set; } = "~";
+        public string vfree7 { get; set; } = "~";
+        public string vfree8 { get; set; } = "~";
+        public string vfree9 { get; set; } = "~";
+        public string vqtunitrate { get; set; } = "~";
+        public string vreturnmode { get; set; } 
+        public string vrownote { get; set; } = "~";
+        public string vsrccode { get; set; } 
+        public string vsrcrowno { get; set; } = "~";
+        public string vsrctrantype { get; set; } = "~";
+        public string vsrctype { get; set; } = "~";
+    }
+}

+ 22 - 0
HH.YiDaSyncNC/Dtos/NC/so_saleorder_exe.cs

@@ -0,0 +1,22 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("so_saleorder_exe")]
+    public class so_saleorder_exe
+    {
+        public so_saleorder_exe()
+        {
+
+        }
+
+        public string csaleorderbid { get; set; } = "~";
+        public Int16? dr { get; set; } = 0;
+        public string ts { get; set; } = "~";
+    }
+}

+ 29 - 0
HH.YiDaSyncNC/Dtos/NC/so_squareinv_d.cs

@@ -0,0 +1,29 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    [SugarTable("so_squareinv_d")]
+    public class so_squareinv_d
+    {
+        public so_squareinv_d()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string csalesquaredid { get; set; }
+
+        public string csquarebillbid { get; set; }
+
+        public string csquarebillid { get; set; }
+    }
+}

+ 39 - 0
HH.YiDaSyncNC/Dtos/NC/xx_idcontrast.cs

@@ -0,0 +1,39 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.NC
+{
+    /// <summary>
+    /// ID对照表
+    /// </summary>
+    [SugarTable("xx_idcontrast")]
+    public class xx_idcontrast
+    {
+        public xx_idcontrast()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true)]
+        public string pk_idcontra { get; set; }
+
+        public string bill_type { get; set; }
+        public Int16? dr { get; set; } = 0;
+        public string file_id { get; set; }
+        public string isdelete { get; set; }
+        public string pk_bill { get; set; }
+
+        public string sub_mark { get; set; }
+        public string sub_mark_b { get; set; }
+        public string ts { get; set; } = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+
+    }
+}

+ 36 - 0
HH.YiDaSyncNC/Dtos/SyncRecord_CGDD.cs

@@ -0,0 +1,36 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos
+{
+    ///<summary>
+    ///
+    ///</summary>
+    [SugarTable("SyncRecord_CGDD")]
+    public partial class SyncRecord_CGDD
+    {
+        public SyncRecord_CGDD()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public int Id { get; set; }
+
+        public string DataId { get; set; }
+        public string DataJson { get; set; }
+        public string CreateTime { get; set; }
+        public string ModifyTime { get; set; }
+        public bool Ps { get; set; }
+
+
+    }
+}

+ 36 - 0
HH.YiDaSyncNC/Dtos/SyncRecord_GYS.cs

@@ -0,0 +1,36 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos
+{
+    ///<summary>
+    ///
+    ///</summary>
+    [SugarTable("SyncRecord_GYS")]
+    public partial class SyncRecord_GYS
+    {
+        public SyncRecord_GYS()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public int Id { get; set; }
+
+        public string DataId { get; set; }
+        public string DataJson { get; set; }
+        public string CreateTime { get; set; }
+        public string ModifyTime { get; set; }
+        public bool Ps { get; set; }
+
+
+    }
+}

+ 36 - 0
HH.YiDaSyncNC/Dtos/SyncRecord_KH.cs

@@ -0,0 +1,36 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos
+{
+    ///<summary>
+    ///
+    ///</summary>
+    [SugarTable("SyncRecord_KH")]
+    public partial class SyncRecord_KH
+    {
+        public SyncRecord_KH()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public int Id { get; set; }
+
+        public string DataId { get; set; }
+        public string DataJson { get; set; }
+        public string CreateTime { get; set; }
+        public string ModifyTime { get; set; }
+        public bool Ps { get; set; }
+
+
+    }
+}

+ 36 - 0
HH.YiDaSyncNC/Dtos/SyncRecord_WL.cs

@@ -0,0 +1,36 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos
+{
+    ///<summary>
+    ///
+    ///</summary>
+    [SugarTable("SyncRecord_WL")]
+    public partial class SyncRecord_WL
+    {
+        public SyncRecord_WL()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public int Id { get; set; }
+
+        public string DataId { get; set; }
+        public string DataJson { get; set; }
+        public string CreateTime { get; set; }
+        public string ModifyTime { get; set; }
+        public bool Ps { get; set; }
+
+
+    }
+}

+ 36 - 0
HH.YiDaSyncNC/Dtos/SyncRecord_XMD.cs

@@ -0,0 +1,36 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos
+{
+    ///<summary>
+    ///
+    ///</summary>
+    [SugarTable("SyncRecord_XMD")]
+    public partial class SyncRecord_XMD
+    {
+        public SyncRecord_XMD()
+        {
+
+        }
+        /// <summary>
+        /// Desc:
+        /// Default:
+        /// Nullable:False
+        /// </summary>           
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
+        public int Id { get; set; }
+
+        public string DataId { get; set; }
+        public string DataJson { get; set; }
+        public string CreateTime { get; set; }
+        public string ModifyTime { get; set; }
+        public bool Ps { get; set; }
+
+
+    }
+}

+ 94 - 0
HH.YiDaSyncNC/Dtos/YIDA/YiDa_FPRZD.cs

@@ -0,0 +1,94 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.YIDA
+{
+    public class YiDa_FPRZD
+    {
+        /// <summary>
+        /// 关联供应商 供应商编码
+        /// </summary>
+        public string associationFormField_lzh0m1le_id { get; set; }
+        /// <summary>
+        /// 供应商编号
+        /// </summary>
+        public string textField_lzhtchrg { get; set; }
+        /// <summary>
+        /// 供应商名称
+        /// </summary>
+        public string textField_lzh0m1lg { get; set; }
+        /// <summary>
+        /// 成本组织
+        /// </summary>
+        public string textField_lzh0m1lh { get; set; }
+        /// <summary>
+        /// 关联预付单
+        /// </summary>
+        public object tableField_lzgzznq8 { get; set; }
+        /// <summary>
+        /// 入账明细
+        /// </summary>
+        public List<RZMX> tableField_lrngrtgu { get; set; }
+        /// <summary>
+        /// 发票明细
+        /// </summary>
+        public List<FPMX> tableField_lsx02qv5 { get; set; }
+        /// <summary>
+        /// 发票金额合计
+        /// </summary>
+        public decimal numberField_lu2habj9 { get; set; }
+    }
+    public class RZMX
+    {
+
+        /// <summary>
+        /// 摘要
+        /// </summary>
+        public string textField_lvxa4v05 { get; set; }
+        /// <summary>
+        /// 项目/部门(成本分摊)
+        /// </summary>
+        public object selectField_ly7257rv { get; set; }
+        /// <summary>
+        /// 项目/部门ID
+        /// </summary>
+        public string textField_ly7257rx { get; set; }
+        /// <summary>
+        /// 项目/部门类型
+        /// </summary>
+        public string radioField_ly71lpio { get; set; }
+        /// <summary>
+        /// 科目编码
+        /// </summary>
+        public string textField_lrnh633r { get; set; }
+        /// <summary>
+        /// 金额
+        /// </summary>
+        public decimal numberField_lvua3j17 { get; set; }
+        /// <summary>
+        /// 税金
+        /// </summary>
+        public decimal numberField_lvxa4v08 { get; set; }
+        /// <summary>
+        /// 无税金额
+        /// </summary>
+        public decimal numberField_lvxa4v09 { get; set; }
+    }
+
+
+    public class FPMX
+    {
+        /// <summary>
+        /// 发票号
+        /// </summary>
+        public string textField_lsx02qv8 { get; set; }
+    }
+
+    public class GYS
+    {
+        public string title { get; set; }
+    }
+}

+ 39 - 0
HH.YiDaSyncNC/Dtos/YIDA/YiDa_FYBXD.cs

@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.YIDA
+{
+    /// <summary>
+    /// 宜搭 费用报销单模型
+    /// </summary>
+    public class YiDa_FYBXD
+    {
+        /// <summary>
+        /// 请款组织
+        /// </summary>
+        public object associationFormField_lvyplgvg { get; set; }
+        /// <summary>
+        /// 实际收款人
+        /// </summary>
+        public List<string> employeeField_lrnhhk3w { get; set; }
+        /// <summary>
+        /// 当前暂支
+        /// </summary>
+        public string numberField_lvuaqzv6 { get; set; }
+        /// <summary>
+        /// 是否核销暂支金额
+        /// </summary>
+        public string selectField_lvuaqzv7 { get; set; }
+        /// <summary>
+        /// 备注
+        /// </summary>
+        public string textareaField_lvxhfrg6 { get; set; }
+        /// <summary>
+        /// 实际报销金额
+        /// </summary>
+        public decimal numberField_lvxanqe1 { get; set; }
+    }
+}

+ 135 - 0
HH.YiDaSyncNC/Dtos/YIDA/YiDa_SKDNC.cs

@@ -0,0 +1,135 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.YIDA
+{
+    /// <summary>
+    /// 宜搭NC收款单 模型
+    /// </summary>
+    public class YiDa_SKDNC
+    {
+        /// <summary>
+        /// 供应商编码
+        /// </summary>
+        public string textField_lwitiobt { get; set; }
+        /// <summary>
+        /// 供应商名称
+        /// </summary>
+        public string textField_lw7f953v { get; set; }
+        /// <summary>
+        /// 发票拼接
+        /// </summary>
+        public string textField_lw7erc7d { get; set; }
+        /// <summary>
+        /// 价税合计
+        /// </summary>
+        public decimal numberField_lvua3j18 { get; set; }
+        /// <summary>
+        /// 支付完成时间
+        /// </summary>
+        public long? dateField_lwitiobz { get; set; }
+        /// <summary>
+        /// 成本组织
+        /// </summary>
+        public string selectField_lvywoqmb { get; set; }
+        /// <summary>
+        /// 我司付款银行
+        /// </summary>
+        public string textField_lsx02qvi { get; set; }
+        /// <summary>
+        /// 银行-科目编码
+        /// </summary>
+        public string textField_lyodct8u { get; set; }
+        /// <summary>
+        /// 银行账户
+        /// </summary>
+        public string textField_lrngrtgj { get; set; }
+        /// <summary>
+        /// 单据类型
+        /// </summary>
+        public string selectField_lwiuvaws { get; set; }
+        /// <summary>
+        /// 单据编号
+        /// </summary>
+        public string serialNumberField_lwiz0n9f { get; set; }
+        /// <summary>
+        /// 提交时间
+        /// </summary>
+        public long dateField_lviv4sfy { get; set; }
+        /// <summary>
+        /// 付款明细
+        /// </summary>
+        public List<YiDa_SKDNCDetails> tableField_lrngrtgu { get; set; }
+        /// <summary>
+        /// 发票明细
+        /// </summary>
+        public List<YiDa_SKDNCFPDetails> tableField_lsx02qv5 { get; set; }
+    }
+    public class YiDa_SKDNCDetails
+    {
+        /// <summary>
+        /// 金额
+        /// </summary>
+        public decimal numberField_lvua3j17 { get; set; }
+        /// <summary>
+        /// 无税金额
+        /// </summary>
+        public decimal numberField_lvxa4v09 { get; set; }
+        /// <summary>
+        /// 税金
+        /// </summary>
+        public decimal numberField_lvxa4v08 { get; set; }
+        /// <summary>
+        /// 摘要
+        /// </summary>
+        public string textField_lvxa4v05 { get; set; }
+        /// <summary>
+        /// 科目编码
+        /// </summary>
+        public string textField_lwitioce { get; set; }
+        /// <summary>
+        /// 项目编码
+        /// </summary>
+        public string textField_lwitiocd { get; set; }
+        /// <summary>
+        /// 项目/部门(成本分摊)
+        /// </summary>
+        public string selectField_ly7257rv { get; set; }
+        /// <summary>
+        /// 项目/部门类型
+        /// </summary>
+        public string radioField_lypfw8rv { get; set; }
+        /// <summary>
+        /// 项目/部门ID
+        /// </summary>
+        public string textField_lypfw8rw { get; set; }
+        /// <summary>
+        /// 科目名称
+        /// </summary>
+        public string selectField_lvxa4v06 { get; set; }
+        /// <summary>
+        /// 科目大类
+        /// </summary>
+        public string textField_ly73a9bn { get; set; }
+        /// <summary>
+        /// 承担主体
+        /// </summary>
+        public string selectField_lwiufn1k { get; set; }
+        /// <summary>
+        /// 收支项目
+        /// </summary>
+        public string textField_lwitioch { get; set; }
+    }
+
+    public class YiDa_SKDNCFPDetails
+    {
+        /// <summary>
+        /// 发票
+        /// </summary>
+        public string textField_lsx02qv8 { get; set; }
+      
+    }
+}

+ 44 - 0
HH.YiDaSyncNC/Dtos/YIDA/YiDa_ZZDA.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.YIDA
+{
+    public class YiDa_ZZDA
+    {
+        /// <summary>
+        /// 请款组织
+        /// </summary>
+        public string associationFormField_lvyplgvg { get; set; }
+        /// <summary>
+        /// 成本组织 用这个获取组织
+        /// </summary>
+        public string textField_lw0ef16v { get; set; }
+        /// <summary>
+        /// 借款类型
+        /// </summary>
+        public string selectField_lw927e8f { get; set; }
+        /// <summary>
+        /// 借款金额
+        /// </summary>
+        public decimal numberField_lrnhnsxp { get; set; }
+        /// <summary>
+        /// 预计归还日期
+        /// </summary>
+        public long dateField_lrnhnsxr { get; set; }
+        /// <summary>
+        /// 借款事由
+        /// </summary>
+        public string textareaField_lsx6hx5f { get; set; }
+        /// <summary>
+        /// 已还款金额
+        /// </summary>
+        public decimal? numberField_lvubcczs { get; set; }
+        /// <summary>
+        /// 待还款金额
+        /// </summary>
+        public decimal? numberField_lvubcczt { get; set; }
+    }
+}

+ 40 - 0
HH.YiDaSyncNC/Dtos/YIDA/YiDa_ZZHX.cs

@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.YIDA
+{
+    public class YiDa_ZZHX
+    {
+        /// <summary>
+        /// 申请人
+        /// </summary>
+        public List<string> employeeField_lviv4sfw { get; set; }
+        /// <summary>
+        /// 银行科目
+        /// </summary>
+        public string textField_lyocuyp3 { get; set; }
+        /// <summary>
+        /// 收款银行账号
+        /// </summary>
+        public string textField_lsx02qvj { get; set; }
+        /// <summary>
+        /// 本次还款金额
+        /// </summary>
+        public decimal numberField_lvuc0gtq { get; set; }
+        /// <summary>
+        /// 待还款金额
+        /// </summary>
+        public decimal? numberField_lvuc0gtp { get; set; }
+        /// <summary>
+        /// 成本组织-文本
+        /// </summary>
+        public string textField_lw0ef16v { get; set; }
+        /// <summary>
+        /// 借款部门 编码
+        /// </summary>
+        public string textField_lyzc1mpt { get; set; }
+    }
+}

+ 44 - 0
HH.YiDaSyncNC/Dtos/YIDA/YiDa_ZZSQ.cs

@@ -0,0 +1,44 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos.YIDA
+{
+    public class YiDa_ZZSQ
+    {
+        /// <summary>
+        /// 成本组织
+        /// </summary>
+        public string textField_lw7jwkfh { get; set; }
+        /// <summary>
+        /// 申请人
+        /// </summary>
+        public List<string> employeeField_lviv4sfw { get; set; }
+        /// <summary>
+        /// 预计归还日期
+        /// </summary>
+        public long dateField_lrnhnsxr { get; set; }
+        /// <summary>
+        /// 借款金额
+        /// </summary>
+        public decimal numberField_lrnhnsxp { get; set; }
+        /// <summary>
+        /// 借款部门 编码
+        /// </summary>
+        public string textField_ly7257rx { get; set; }
+        /// <summary>
+        /// 借款事由
+        /// </summary>
+        public string textareaField_lsx6hx5f { get; set; }
+        /// <summary>
+        /// 付款银行账号
+        /// </summary>
+        public string textField_lsx02qvj { get; set; }
+        /// <summary>
+        /// 付款银行科目编码
+        /// </summary>
+        public string textField_lyocuyp3 { get; set; }
+    }
+}

+ 17 - 0
HH.YiDaSyncNC/Dtos/YiDaResDto.cs

@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Dtos
+{
+    public class YiDaResDto
+    {
+        public bool bSuccess { get; set; }
+        public DateTime syncTime { get; set; }
+        public string ncNo { get; set; }
+        public string log { get; set; }
+        public string bNeedSync { get; set; } = "N";
+    }
+}

+ 275 - 0
HH.YiDaSyncNC/HH.YiDaSyncNC.csproj

@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{0C9830B2-D208-41CC-966B-E3509B3B3FC6}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <RootNamespace>HH.YiDaSyncNC</RootNamespace>
+    <AssemblyName>HH.YiDaSyncNC</AssemblyName>
+    <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="AlibabaCloud.EndpointUtil, Version=0.1.1.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\AlibabaCloud.EndpointUtil.0.1.1\lib\net45\AlibabaCloud.EndpointUtil.dll</HintPath>
+    </Reference>
+    <Reference Include="AlibabaCloud.GatewayDingTalk, Version=1.0.2.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\AlibabaCloud.GatewayDingTalk.1.0.2\lib\net45\AlibabaCloud.GatewayDingTalk.dll</HintPath>
+    </Reference>
+    <Reference Include="AlibabaCloud.GatewaySpi, Version=0.0.1.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\AlibabaCloud.GatewaySpi.0.0.2\lib\net45\AlibabaCloud.GatewaySpi.dll</HintPath>
+    </Reference>
+    <Reference Include="AlibabaCloud.OpenApiClient, Version=0.1.5.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\AlibabaCloud.OpenApiClient.0.1.6\lib\net45\AlibabaCloud.OpenApiClient.dll</HintPath>
+    </Reference>
+    <Reference Include="AlibabaCloud.OpenApiUtil, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\AlibabaCloud.OpenApiUtil.1.1.1\lib\net45\AlibabaCloud.OpenApiUtil.dll</HintPath>
+    </Reference>
+    <Reference Include="AlibabaCloud.SDK.Dingtalk, Version=0.0.1.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\AlibabaCloud.SDK.Dingtalk.2.0.27\lib\net45\AlibabaCloud.SDK.Dingtalk.dll</HintPath>
+    </Reference>
+    <Reference Include="AlibabaCloud.TeaUtil, Version=0.1.14.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\AlibabaCloud.TeaUtil.0.1.17\lib\net45\AlibabaCloud.TeaUtil.dll</HintPath>
+    </Reference>
+    <Reference Include="AlibabaCloud.TeaXML, Version=0.0.3.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\AlibabaCloud.TeaXML.0.0.3\lib\net45\AlibabaCloud.TeaXML.dll</HintPath>
+    </Reference>
+    <Reference Include="Aliyun.Credentials, Version=1.3.1.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\Aliyun.Credentials.1.3.1\lib\net45\Aliyun.Credentials.dll</HintPath>
+    </Reference>
+    <Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.7.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
+    </Reference>
+    <Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
+      <HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
+    </Reference>
+    <Reference Include="RestSharp, Version=110.2.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
+      <HintPath>..\packages\RestSharp.110.2.0\lib\net471\RestSharp.dll</HintPath>
+    </Reference>
+    <Reference Include="SqlSugar, Version=5.1.4.188, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\SqlSugar.5.1.4.188\lib\SqlSugar.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Primitives.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Net.Http.WebRequest" />
+    <Reference Include="System.Numerics" />
+    <Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Security" />
+    <Reference Include="System.Text.Encodings.Web, Version=7.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Text.Encodings.Web.7.0.0\lib\net462\System.Text.Encodings.Web.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Text.Json, Version=7.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Text.Json.7.0.2\lib\net462\System.Text.Json.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
+    </Reference>
+    <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
+      <HintPath>..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll</HintPath>
+    </Reference>
+    <Reference Include="System.Web" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+    <Reference Include="Tea, Version=1.1.2.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\Tea.1.1.2\lib\net45\Tea.dll</HintPath>
+    </Reference>
+    <Reference Include="TopSdk">
+      <HintPath>lib\TopSdk.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="DataSync\BZJ_HK_SyncService.cs" />
+    <Compile Include="DataSync\CGDD_SyncService.cs" />
+    <Compile Include="DataSync\BX_SyncService.cs" />
+    <Compile Include="DataSync\FKGL_SyncService.cs" />
+    <Compile Include="DataSync\FKYF_SyncService.cs" />
+    <Compile Include="DataSync\FK_CLBX_SyncService.cs" />
+    <Compile Include="DataSync\FK_FYBX_SyncService.cs" />
+    <Compile Include="DataSync\FK_FKD_SyncService.cs" />
+    <Compile Include="DataSync\FK_YF_SyncService.cs" />
+    <Compile Include="DataSync\FK_XZ_SyncService.cs" />
+    <Compile Include="DataSync\FK_SyncService.cs" />
+    <Compile Include="DataSync\HKD_GL_SyncService.cs" />
+    <Compile Include="DataSync\KH_SyncService.cs" />
+    <Compile Include="DataSync\GYS_SyncService.cs" />
+    <Compile Include="DataSync\BZJ_SyncService.cs" />
+    <Compile Include="DataSync\KP_HK_SyncService.cs" />
+    <Compile Include="DataSync\KP_TP_SyncService.cs" />
+    <Compile Include="DataSync\KP_SyncService.cs" />
+    <Compile Include="DataSync\YF_FPRZ_SyncService.cs" />
+    <Compile Include="DataSync\ZC_ZJHX_SyncService.cs" />
+    <Compile Include="DataSync\ZC_SyncService.cs" />
+    <Compile Include="DataSync\XMD_SyncService.cs" />
+    <Compile Include="DataSync\WL_SyncService.cs" />
+    <Compile Include="Dtos\NC\ap_paybill.cs" />
+    <Compile Include="Dtos\NC\ap_payitem.cs" />
+    <Compile Include="DataSync\ZZD_GL_SyncService.cs" />
+    <Compile Include="Dtos\NC\ar_gatherbill.cs" />
+    <Compile Include="Dtos\NC\bd_defdoc.cs" />
+    <Compile Include="Dtos\NC\bd_income.cs" />
+    <Compile Include="Dtos\NC\bd_customer.cs" />
+    <Compile Include="Dtos\NC\ct_bondapply.cs" />
+    <Compile Include="Dtos\NC\fa_cardhistory.cs" />
+    <Compile Include="Dtos\NC\org_accountingbook.cs" />
+    <Compile Include="Dtos\NC\po_order_bb.cs" />
+    <Compile Include="Dtos\NC\po_order_b.cs" />
+    <Compile Include="Dtos\NC\ar_recitem.cs" />
+    <Compile Include="Dtos\NC\sm_user.cs" />
+    <Compile Include="Dtos\NC\bd_psndoc.cs" />
+    <Compile Include="Dtos\NC\org_dept.cs" />
+    <Compile Include="Dtos\NC\org_orgs.cs" />
+    <Compile Include="Dtos\NC\pam_addreducestyle.cs" />
+    <Compile Include="Dtos\NC\bd_material.cs" />
+    <Compile Include="Dtos\NC\fa_card.cs" />
+    <Compile Include="Dtos\NC\bd_stordoc.cs" />
+    <Compile Include="Dtos\NC\bd_projectclass.cs" />
+    <Compile Include="Dtos\NC\so_saleinvoice.cs" />
+    <Compile Include="Dtos\NC\po_order.cs" />
+    <Compile Include="Dtos\NC\ar_gatheritem.cs" />
+    <Compile Include="Dtos\NC\so_squareinv_d.cs" />
+    <Compile Include="Dtos\NC\so_saleinvoice_b.cs" />
+    <Compile Include="Dtos\NC\xx_idcontrast.cs" />
+    <Compile Include="Dtos\NC\bd_project.cs" />
+    <Compile Include="Dtos\NC\bd_supplier.cs" />
+    <Compile Include="Dtos\NC\bd_custclass.cs" />
+    <Compile Include="Dtos\NC\bd_supplierclass.cs" />
+    <Compile Include="Dtos\NC\bd_branddoc.cs" />
+    <Compile Include="Dtos\NC\bd_mattaxes.cs" />
+    <Compile Include="Dtos\NC\bd_measdoc.cs" />
+    <Compile Include="Dtos\NC\bd_marbasclass.cs" />
+    <Compile Include="Dtos\NC\EnumType.cs" />
+    <Compile Include="Dtos\NC\so_saleorder.cs" />
+    <Compile Include="Dtos\NC\so_saleorder_b.cs" />
+    <Compile Include="Dtos\NC\so_saleorder_exe.cs" />
+    <Compile Include="Dtos\SyncRecord_CGDD.cs" />
+    <Compile Include="Dtos\SyncRecord_KH.cs" />
+    <Compile Include="Dtos\SyncRecord_GYS.cs" />
+    <Compile Include="Dtos\SyncRecord_XMD.cs" />
+    <Compile Include="Dtos\SyncRecord_WL.cs" />
+    <Compile Include="Dtos\YiDaResDto.cs" />
+    <Compile Include="Dtos\YIDA\YiDa_FPRZD.cs" />
+    <Compile Include="Dtos\YIDA\YiDa_FYBXD.cs" />
+    <Compile Include="Dtos\YIDA\YiDa_SKDNC.cs" />
+    <Compile Include="Dtos\YIDA\YiDa_ZZDA.cs" />
+    <Compile Include="Dtos\YIDA\YiDa_ZZHX.cs" />
+    <Compile Include="Dtos\YIDA\YiDa_ZZSQ.cs" />
+    <Compile Include="Helper\AbPrivoder.cs" />
+    <Compile Include="Helper\CommHelper.cs" />
+    <Compile Include="Helper\DBHelper.cs" />
+    <Compile Include="Helper\DingTalkService.cs" />
+    <Compile Include="Helper\DocDicHelper.cs" />
+    <Compile Include="Helper\HttpRequestHelper.cs" />
+    <Compile Include="Helper\LogHelper.cs" />
+    <Compile Include="Helper\NCImportFunc.cs" />
+    <Compile Include="Helper\UnixTimeHelper.cs" />
+    <Compile Include="Models\FKGL_SyncServiceModel.cs" />
+    <Compile Include="Models\FKYF_SyncServiceModel.cs" />
+    <Compile Include="Models\FK_CLBX_SyncServiceModel.cs" />
+    <Compile Include="Models\FK_FYBX_SyncServiceModel.cs" />
+    <Compile Include="Models\FK_FKD_SyncServiceModel.cs" />
+    <Compile Include="Models\FK_YF_SyncServiceModel.cs" />
+    <Compile Include="Models\FK_XZ_SyncServiceModel.cs" />
+    <Compile Include="Models\FK_SyncServiceModel.cs" />
+    <Compile Include="Models\HKD_GL_SyncServiceModel.cs" />
+    <Compile Include="Models\BZJ_SyncServiceModel.cs" />
+    <Compile Include="Models\XSFP_SyncServiceModel.cs" />
+    <Compile Include="Models\KP_SyncServiceModel.cs" />
+    <Compile Include="Models\CGDD_SyncServiceModel.cs" />
+    <Compile Include="Models\KH_SyncServiceModel.cs" />
+    <Compile Include="Models\GYS_SyncServiceModel.cs" />
+    <Compile Include="Models\XMD_SyncServiceModel.cs" />
+    <Compile Include="Models\WL_SyncServiceModel.cs" />
+    <Compile Include="Models\ZZD_GL_SyncServiceModel.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+    <None Include="packages.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Context\" />
+  </ItemGroup>
+  <ItemGroup>
+    <WCFMetadata Include="Connected Services\" />
+  </ItemGroup>
+  <ItemGroup>
+    <BootstrapperPackage Include=".NETFramework,Version=v4.7.2">
+      <Visible>False</Visible>
+      <ProductName>Microsoft .NET Framework 4.7.2 %28x86 和 x64%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
+  <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
+    <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
+    <Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
+  </Target>
+</Project>

+ 14 - 0
HH.YiDaSyncNC/HH.YiDaSyncNC.csproj.user

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+    <PublishUrlHistory />
+    <InstallUrlHistory />
+    <SupportUrlHistory />
+    <UpdateUrlHistory />
+    <BootstrapperUrlHistory />
+    <ErrorReportUrlHistory />
+    <FallbackCulture>zh-CN</FallbackCulture>
+    <VerifyUploadedFiles>false</VerifyUploadedFiles>
+  </PropertyGroup>
+</Project>

+ 22 - 0
HH.YiDaSyncNC/Helper/AbPrivoder.cs

@@ -0,0 +1,22 @@
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Helper
+{
+    public class AbPrivoder
+    {
+        protected SqlSugarClient db = new SqlSugarClient(
+        new ConnectionConfig()
+        {
+            ConnectionString = ConfigurationManager.AppSettings["conn"].ToString(),
+            DbType = DbType.SqlServer,
+            IsAutoCloseConnection = true,
+            InitKeyType = InitKeyType.Attribute
+        });
+    }
+}

+ 101 - 0
HH.YiDaSyncNC/Helper/CommHelper.cs

@@ -0,0 +1,101 @@
+using DingTalk.Api;
+using DingTalk.Api.Request;
+using DingTalk.Api.Response;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web;
+using System.Web.Caching;
+
+namespace HH.YiDaSyncNC.Helper
+{
+    class CommHelper
+    {
+        private static readonly string appKey = ConfigurationManager.AppSettings["AppKey"];
+        private static readonly string appSecret = ConfigurationManager.AppSettings["AppSecret"];
+
+        /// <summary>
+        /// 时间转时间戳(秒)
+        /// </summary>
+        /// <param name="date">时间</param>
+        /// <returns></returns>
+        public static long GetTimeStamp(DateTime date)
+        {
+            //var unix = date.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
+            //TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
+            //return Convert.ToInt64(unix.TotalSeconds * 1000);
+            var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+            return Convert.ToInt64((date.ToUniversalTime() - epoch).TotalSeconds);
+        }
+
+        /// <summary>
+        /// 时间转时间戳(毫秒)
+        /// </summary>
+        /// <param name="date">日期</param>
+        /// <returns></returns>
+        public static long GetTimeStamps(DateTime date)
+        {
+            var unix = date.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
+            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
+            return Convert.ToInt64(unix.TotalSeconds * 1000);
+        }
+
+        /// <summary>
+        /// 时间戳转时间(毫秒)
+        /// </summary>
+        /// <param name="timestamp"></param>
+        /// <returns></returns>
+        public static DateTime GetDateTime(long timestamp)
+        {
+            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));//当地时区  
+            var time = startTime.AddMilliseconds(timestamp);
+            return time;
+        }
+
+        #region 获取AccessToken
+        public static string GetAccessToken()
+        {
+            // 将AccessToken存储至缓存
+            SetAccessToken(new CacheItemRemovedReason());
+            // 输出缓存中存储的AccessToken
+            return HttpRuntime.Cache.Get("Dingtalk_AccessToken").ToString();
+        }
+        #endregion
+
+        #region 设置AccessToken(企业内部开发)
+        public static void SetAccessToken(CacheItemRemovedReason reason)
+        {
+            //企业内部开发
+            var accessToken = HttpRuntime.Cache.Get("Dingtalk_AccessToken");
+            if (accessToken == null)
+            {
+                //var time = GetTimeStamp(DateTime.Now);
+                //var CorpId = corpid;
+                //var AgentId = agentid;
+                //var CustomKey = customkey;
+                //var CustomSecret = customsecret;
+
+                //string stringToSign = time+"\n"+"suiteTicket";
+                //var signature = getSHA256(CustomSecret, stringToSign);
+
+                //DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/service/get_corp_token");
+                //OapiServiceGetCorpTokenRequest req = new OapiServiceGetCorpTokenRequest();
+                //req.AuthCorpid = CorpId;
+                //OapiServiceGetCorpTokenResponse response = client.Execute(req, CustomKey, CustomSecret, "suiteTicket");
+                //HttpRuntime.Cache.Insert("Dingtalk_AccessToken", response.AccessToken, null, DateTime.Now.AddSeconds(3600), Cache.NoSlidingExpiration);
+
+                IDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
+                OapiGettokenRequest request = new OapiGettokenRequest();
+                request.Appkey = appKey;
+                request.Appsecret = appSecret;
+                request.SetHttpMethod("GET");
+                OapiGettokenResponse response = client.Execute(request);
+                HttpRuntime.Cache.Insert("Dingtalk_AccessToken", response.AccessToken, null, DateTime.Now.AddSeconds(3600), Cache.NoSlidingExpiration);
+            }
+        }
+        #endregion
+    }
+}

+ 106 - 0
HH.YiDaSyncNC/Helper/DBHelper.cs

@@ -0,0 +1,106 @@
+using RestSharp;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Helper
+{
+    class DBHelper
+    {
+        #region 写日志
+        /// <summary>
+        /// 写入日志
+        /// </summary>
+        /// <param name="sLog">内容</param>
+        /// <param name="sOption">标题</param>
+        /// <param name="sSrc">路径</param>
+        public static void WriteLog(string sLog, string sOption = "OP", string sSrc = "/Logs/")
+        {
+            var now = DateTime.Now;
+            StreamWriter sr = null;
+
+            var filePath = AppDomain.CurrentDomain.BaseDirectory + sSrc; // 文件路径
+            var file = filePath + "Log_" + DateTime.Now.ToString("yyyy_MM_dd") + ".log"; // 文件
+
+            if (!Directory.Exists(filePath)) Directory.CreateDirectory(filePath); // 判断是否存在目录,不存在则创建
+
+            if (!File.Exists(file))
+            {
+                sr = File.CreateText(file);//创建日志文件
+            }
+            else
+            {
+                sr = File.AppendText(file);//追加日志文件
+            }
+            sr.WriteLine($"{DateTime.Now}:【{sOption}】:{sLog}");//日志格式
+            if (sr != null) sr.Close();     //关闭文件流
+        }
+        #endregion
+
+        #region 生成报文数据方法
+        /// <summary>
+        /// 生成报文数据方法
+        /// </summary>
+        public static XmlElement ToXmlElementMethod(XElement xElement)
+        {
+            if (xElement == null) return null;
+
+            XmlElement xmlElement = null;
+            XmlReader xmlReader = null;
+            try
+            {
+                xmlReader = xElement.CreateReader();
+                var doc = new XmlDocument();
+                xmlElement = doc.ReadNode(xElement.CreateReader()) as XmlElement;
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+            finally
+            {
+                if (xmlReader != null) xmlReader.Close();
+            }
+
+            return xmlElement;
+        }
+        #endregion
+
+        #region 调用传输凭证接口
+        /// <summary>
+        /// 调用传输凭证接口
+        /// </summary>
+        /// <param name="xmlstring">xml字符串参数</param>
+        /// <param name="url">接口地址</param>
+        /// <returns></returns>
+        public static string SendNsg(string xmlstring, string url)
+        {
+            string responseMsg = "";
+            try
+            {
+                var options = new RestClientOptions(url)
+                {
+                    MaxTimeout = -1,
+                };
+                var client = new RestClient(options);
+                var request = new RestRequest(url, Method.Post);
+                request.AddHeader("Content-Type", "application/xml");
+                var body = xmlstring;
+                request.AddParameter("application/xml", body, ParameterType.RequestBody);
+                RestResponse response = client.Execute(request);
+                responseMsg = response.Content;//获取返回Response消息
+            }
+            catch (Exception ex)
+            {
+                throw new Exception(ex.Message);
+            }
+            return responseMsg;
+        }
+        #endregion
+    }
+}

+ 423 - 0
HH.YiDaSyncNC/Helper/DingTalkService.cs

@@ -0,0 +1,423 @@
+using AlibabaCloud.SDK.Dingtalkyida_1_0.Models;
+using HH.YiDaSyncNC.Dtos;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Tea;
+
+namespace HH.YiDaSyncNC.Helper
+{
+    class DingTalkService
+    {
+        public string _AppType;
+        public string _SystemToken;
+        public string _UserId;
+        public string _FormId;
+
+        public DingTalkService(string AppType, string SystemToken, string UserId, string FormId)
+        {
+            _AppType = AppType;
+            _SystemToken = SystemToken;
+            _UserId = UserId;
+            _FormId = FormId;
+        }
+
+        #region 封装后的宜搭接口
+
+        #region 获取表单Id集合
+        public List<string> GetFormIdList()
+        {
+            var pageIndex = 1;
+            var pageSize = 50;
+
+            var bFinish = false;
+
+            var resIdList = new List<string>();
+
+            while (!bFinish)
+            {
+                var resData = GetFormIdListFunc("", "", "", "", "", pageIndex, pageSize);
+                if (resData.StatusCode == 200)
+                {
+                    if (resData.Body.Data.Count == 0)
+                    {
+                        bFinish = true;
+                    }
+                    else
+                    {
+                        resIdList.AddRange(resData.Body.Data);
+                    }
+                }
+                else
+                {
+                    throw new Exception(JsonConvert.SerializeObject(resData));
+                }
+
+                pageIndex++;
+            }
+
+            return resIdList;
+        }
+        #endregion
+
+        #region 获取表单Id集合
+        public List<string> GetFormIdList(string search)
+        {
+            var pageIndex = 1;
+            var pageSize = 50;
+
+            var bFinish = false;
+
+            var resIdList = new List<string>();
+
+            while (!bFinish)
+            {
+                var resData = GetFormIdListFunc("", "", "", "", search, pageIndex, pageSize);
+                if (resData.StatusCode == 200)
+                {
+                    if (resData.Body.Data.Count == 0)
+                    {
+                        bFinish = true;
+                    }
+                    else
+                    {
+                        resIdList.AddRange(resData.Body.Data);
+                    }
+                }
+                else
+                {
+                    throw new Exception(JsonConvert.SerializeObject(resData));
+                }
+
+                pageIndex++;
+            }
+
+            return resIdList;
+        }
+        #endregion
+
+        #region 获取表单Id集合(24小时内更新过的数据)
+        public List<string> GetModifyFormIdList()
+        {
+            var pageIndex = 1;
+            var pageSize = 50;
+
+            var bFinish = false;
+
+            var resIdList = new List<string>();
+
+            var modifyFromTime = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
+            var modifyToTime = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd");
+
+            while (!bFinish)
+            {
+                var resData = GetFormIdListFunc(modifyFromTime, modifyToTime, modifyFromTime, modifyToTime, "", pageIndex, pageSize);
+                if (resData.StatusCode == 200)
+                {
+                    if (resData.Body.Data.Count == 0)
+                    {
+                        bFinish = true;
+                    }
+                    else
+                    {
+                        resIdList.AddRange(resData.Body.Data);
+                    }
+                }
+                else
+                {
+                    throw new Exception(JsonConvert.SerializeObject(resData));
+                }
+
+                pageIndex++;
+            }
+
+            return resIdList;
+        }
+        #endregion
+
+        #region 通过数据Id获取数据详情(单条)
+        public Dictionary<string, object> GetFormDataById(string id, out string createTime, out string modifyTime)
+        {
+            var resData = GetFormDataByIdsFunc(new List<string>() { id });
+            if (resData.StatusCode == 200)
+            {
+                createTime = resData.Body.Result[0].CreateTimeGMT;
+                modifyTime = resData.Body.Result[0].ModifiedTimeGMT;
+                return resData.Body.Result[0].FormData;
+            }
+            else
+            {
+                throw new Exception(JsonConvert.SerializeObject(resData));
+            }
+        }
+        #endregion
+
+        #region 更新同步标识信息
+        public UpdateFormDataResponse UpdateFormDataSyncDataById(YiDaResDto resData, string FormInstanceId)
+        {
+            var data = new Dictionary<string, string>();
+            data.Add("textField_ltxyt75i", resData.bSuccess ? "同步成功" : "同步失败");
+            data.Add("dateField_ltxyt75l", UnixTimeHelper.ConvertToMilliseconds(resData.syncTime).ToString());
+            data.Add("textField_ltxyt75m", resData.ncNo);
+            data.Add("textField_ltxyt75n", resData.log);
+            data.Add("radioField_lycrvvtk", resData.bNeedSync);
+
+            return UpdateFormDataByIdFunc(JsonConvert.SerializeObject(data), FormInstanceId);
+        }
+
+        // 仅更新状态
+        public UpdateFormDataResponse UpdateFormDataSyncDataByIdOnlyState(string FormInstanceId)
+        {
+            var data = new Dictionary<string, string>();
+            data.Add("textField_ltxyt75i", "同步成功");
+
+            return UpdateFormDataByIdFunc(JsonConvert.SerializeObject(data), FormInstanceId);
+        }
+        #endregion
+
+        #region 更新表单数据
+        public UpdateFormDataResponse UpdateFormDataById(Dictionary<string, string> resData, string FormInstanceId)
+        {
+            return UpdateFormDataByIdFunc(JsonConvert.SerializeObject(resData), FormInstanceId);
+        }
+        #endregion
+
+
+        #region 获取【流程表单】id集合
+        /// <summary>
+        /// 获取【流程表单】id集合
+        /// </summary>
+        /// <param name="search"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public List<string> GetFormCodeList(string search)
+        {
+            var pageIndex = 1;
+            var pageSize = 50;
+
+            var bFinish = false;
+
+            var resIdList = new List<string>();
+
+            while (!bFinish)
+            {
+                var resData = GetFormCodeListFunc("", "", "", "", search, pageIndex, pageSize);
+                if (resData.StatusCode == 200)
+                {
+                    if (resData.Body.Data.Count == 0)
+                    {
+                        bFinish = true;
+                    }
+                    else
+                    {
+                        resIdList.AddRange(resData.Body.Data);
+                    }
+                }
+                else
+                {
+                    throw new Exception(JsonConvert.SerializeObject(resData));
+                }
+
+                pageIndex++;
+            }
+
+            return resIdList;
+        }
+
+        #endregion
+
+        #region 通过数据Id获取【表单数据】详情(单条)
+        /// <summary>
+        ///  通过数据Id获取【表单数据】详情(单条)
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public Dictionary<string, object> GetFormDataByCode(string id)
+        {
+            var resData = GetFormDataByCodesFunc(new List<string>() { id });
+            if (resData.StatusCode == 200)
+            {
+                return resData.Body.Result[0].Data;
+            }
+            else
+            {
+                throw new Exception(JsonConvert.SerializeObject(resData));
+            }
+        }
+        #endregion
+
+        #endregion
+
+        #region 宜搭接原始口
+        public AlibabaCloud.SDK.Dingtalkyida_1_0.Client CreateClient()
+        {
+            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config();
+            config.Protocol = "https";
+            config.RegionId = "central";
+            return new AlibabaCloud.SDK.Dingtalkyida_1_0.Client(config);
+        }
+
+        #region 获取多个表单实例ID
+        public SearchFormDataIdListResponse GetFormIdListFunc(string CreateFromTime, string CreateToTime, string ModifiedFromTime, string ModifiedToTime, string SearchFieldJson, int CurrentPage, int PageSize)
+        {
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Client client = CreateClient();
+            SearchFormDataIdListHeaders searchFormDatasHeaders = new SearchFormDataIdListHeaders();
+            searchFormDatasHeaders.XAcsDingtalkAccessToken = CommHelper.GetAccessToken();
+
+            SearchFormDataIdListRequest searchFormDatasRequest = new SearchFormDataIdListRequest
+            {
+                ModifiedToTimeGMT = ModifiedToTime,
+                SystemToken = _SystemToken,
+                ModifiedFromTimeGMT = ModifiedFromTime,
+                SearchFieldJson = SearchFieldJson,
+                UserId = _UserId,
+                CreateToTimeGMT = CreateToTime,
+                CreateFromTimeGMT = CreateFromTime,
+                PageNumber = CurrentPage,
+                PageSize = PageSize
+            };
+            var rsp = client.SearchFormDataIdListWithOptions(_AppType, _FormId, searchFormDatasRequest, searchFormDatasHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
+            return rsp;
+        }
+        #endregion
+
+        #region 批量获取表单实例数据
+        public BatchGetFormDataByIdListResponse GetFormDataByIdsFunc(List<string> IdList)
+        {
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Client client = CreateClient();
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.BatchGetFormDataByIdListHeaders batchGetFormDataByIdListHeaders = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.BatchGetFormDataByIdListHeaders();
+            batchGetFormDataByIdListHeaders.XAcsDingtalkAccessToken = CommHelper.GetAccessToken();
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.BatchGetFormDataByIdListRequest batchGetFormDataByIdListRequest = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.BatchGetFormDataByIdListRequest
+            {
+                FormUuid = _FormId,
+                AppType = _AppType,
+                SystemToken = _SystemToken,
+                FormInstanceIdList = IdList,
+                NeedFormInstanceValue = true,
+                UserId = _UserId,
+            };
+            var rsp = client.BatchGetFormDataByIdListWithOptions(batchGetFormDataByIdListRequest, batchGetFormDataByIdListHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
+            return rsp;
+        }
+        #endregion
+
+        #region 更新表单实例数据
+        public UpdateFormDataResponse UpdateFormDataByIdFunc(string UpdateFormDataJson, string FormInstanceId)
+        {
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Client client = CreateClient();
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.UpdateFormDataHeaders updateFormDataHeaders = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.UpdateFormDataHeaders();
+            updateFormDataHeaders.XAcsDingtalkAccessToken = CommHelper.GetAccessToken();
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.UpdateFormDataRequest updateFormDataRequest = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.UpdateFormDataRequest
+            {
+                AppType = _AppType,
+                SystemToken = _SystemToken,
+                UserId = _UserId,
+                Language = "zh_CN",
+                FormInstanceId = FormInstanceId,
+                UseLatestVersion = true,
+                UpdateFormDataJson = UpdateFormDataJson,
+            };
+            try
+            {
+                var rsp = client.UpdateFormDataWithOptions(updateFormDataRequest, updateFormDataHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
+                return rsp;
+            }
+            catch (TeaException err)
+            {
+                if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
+                {
+                    // err 中含有 code 和 message 属性,可帮助开发定位问题
+
+                }
+            }
+            catch (Exception _err)
+            {
+                TeaException err = new TeaException(new Dictionary<string, object>
+                {
+                    { "message", _err.Message }
+                });
+                if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message))
+                {
+                    // err 中含有 code 和 message 属性,可帮助开发定位问题
+                }
+            }
+
+            return null;
+        }
+        #endregion
+
+
+
+        #region 获取多个【流程表单】实例ID 【默认审批通过的】
+        /// <summary>
+        /// 获取多个【流程表单】实例ID
+        /// </summary>
+        /// <param name="CreateFromTime"></param>
+        /// <param name="CreateToTime"></param>
+        /// <param name="ModifiedFromTime"></param>
+        /// <param name="ModifiedToTime"></param>
+        /// <param name="SearchFieldJson"></param>
+        /// <param name="CurrentPage"></param>
+        /// <param name="PageSize"></param>
+        /// <returns></returns>
+        public GetInstanceIdListResponse GetFormCodeListFunc(string CreateFromTime, string CreateToTime, string ModifiedFromTime, string ModifiedToTime, string SearchFieldJson, int CurrentPage, int PageSize)
+        {
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Client client = CreateClient();
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstanceIdListHeaders getInstanceIdListHeaders = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstanceIdListHeaders();
+            getInstanceIdListHeaders.XAcsDingtalkAccessToken = CommHelper.GetAccessToken();
+            // 实例状态,取值:
+            //RUNNING:运行中
+            //TERMINATED:已终止
+            //COMPLETED:已完成
+            //ERROR:异常
+
+            //审批结果,取值:
+            //agree:同意
+            //disagree:拒绝
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstanceIdListRequest getInstanceIdListRequest = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstanceIdListRequest
+            {
+                ModifiedToTimeGMT = ModifiedToTime,
+                SystemToken = _SystemToken,
+                ModifiedFromTimeGMT = ModifiedFromTime,
+                SearchFieldJson = SearchFieldJson,
+                UserId = _UserId,
+                CreateToTimeGMT = CreateToTime,
+                CreateFromTimeGMT = CreateFromTime,
+                PageNumber = CurrentPage,
+                PageSize = PageSize,
+                InstanceStatus = "COMPLETED",//"COMPLETED",//实例状态
+                ApprovedResult = "agree",//"agree",//审批结果
+                AppType = _AppType,
+                FormUuid = _FormId
+            };
+            var rsp = client.GetInstanceIdListWithOptions(getInstanceIdListRequest, getInstanceIdListHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
+            return rsp;
+        }
+        #endregion
+
+        #region 批量获取【流程表单】实例数据
+        public GetInstancesByIdListResponse GetFormDataByCodesFunc(List<string> IdList)
+        {
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Client client = CreateClient();
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstancesByIdListHeaders getInstancesByIdListHeaders = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstancesByIdListHeaders();
+            getInstancesByIdListHeaders.XAcsDingtalkAccessToken = CommHelper.GetAccessToken();
+
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstancesByIdListRequest getInstancesByIdListRequest = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstancesByIdListRequest
+            {
+                AppType = _AppType,
+                SystemToken = _SystemToken,
+                UserId = _UserId,
+                Language = "zh_CN",
+                ProcessInstanceIds = string.Join(",", IdList),
+            };
+            var rsp = client.GetInstancesByIdListWithOptions(getInstancesByIdListRequest, getInstancesByIdListHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
+            return rsp;
+        }
+        #endregion
+        #endregion
+    }
+}

+ 30 - 0
HH.YiDaSyncNC/Helper/DocDicHelper.cs

@@ -0,0 +1,30 @@
+using HH.YiDaSyncNC.Dtos.NC;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Helper
+{
+    public class DocDicHelper
+    {
+        public Dictionary<string,string> _AppType;
+
+        public string ContrastDoc(List<org_orgs> dataDic, string value)
+        {
+            var resData = "";
+
+            if (!string.IsNullOrWhiteSpace(value))
+            {
+                var tempData = dataDic.FirstOrDefault(f => f.name == value);
+                if (tempData != null)
+                {
+                    resData = tempData.code;
+                }
+            }
+
+            return resData;
+        }
+    }
+}

+ 102 - 0
HH.YiDaSyncNC/Helper/HttpRequestHelper.cs

@@ -0,0 +1,102 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.IO;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading.Tasks;
+using System.Web;
+
+namespace HH.YiDaSyncNC.Helper
+{
+    public class HttpRequestHelper
+    {
+        public static string _Static_NCApporeApiUrl = ConfigurationManager.AppSettings["NCApporeApiUrl"];
+
+        public class ApporeDataModel
+        {
+            public int state { get; set; }
+            public string msg { get; set; }
+            public string result { get; set; }
+        }
+
+        #region 销售发票审核
+        public class ApporeNCCSOBillParamModel
+        {
+            public string billdate { get; set; }
+            public string csaleinvoiceid { get; set; }
+            public string usercode { get; set; }
+        }
+
+        public static ApporeDataModel ApporeNCCSOBill(string billNo)
+        {
+            var param = new ApporeNCCSOBillParamModel()
+            {
+                billdate = DateTime.Now.ToString("yyyy-MM-dd"),
+                csaleinvoiceid = billNo,
+                usercode = "OA-NC"
+            };
+
+            string apiUrl = string.Format(_Static_NCApporeApiUrl + "service/~lxbxy_ext/nc.api.lxbxy.httpservice.ApporeNCCSOBill");
+            string result = HttpPost(apiUrl, JsonConvert.SerializeObject(param));
+
+            return JsonConvert.DeserializeObject<ApporeDataModel>(result);
+        }
+        #endregion
+
+        #region 付款单审核
+        public class ApproveNCFKBillParamModel
+        {
+            public string billdate { get; set; }
+            public string paybill { get; set; }
+            public string usercode { get; set; }
+        }
+
+        public static ApporeDataModel ApproveNCFKBill(string billNo)
+        {
+            var param = new ApproveNCFKBillParamModel()
+            {
+                billdate = DateTime.Now.ToString("yyyy-MM-dd"),
+                paybill = billNo,
+                usercode = "OA-NC"
+            };
+
+            string apiUrl = string.Format(_Static_NCApporeApiUrl + "service/~lxbxy_ext/nc.api.lxbxy.httpservice.ApproveNCFKBill");
+            string result = HttpPost(apiUrl, JsonConvert.SerializeObject(param));
+            return JsonConvert.DeserializeObject<ApporeDataModel>(result);
+        }
+        #endregion
+
+
+        #region POST请求(原始方法)
+        public static string HttpPost(string url, string postDataStr)
+        {
+            try
+            {
+                byte[] bytes = Encoding.UTF8.GetBytes(postDataStr);
+                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
+                var host = request.RequestUri.Scheme + "://" + request.RequestUri.Host + request.RequestUri.AbsolutePath;
+
+                request.Method = "POST";
+                request.ContentType = "application/json";
+                request.ContentLength = bytes.Length;
+                Stream writer = request.GetRequestStream();
+                writer.Write(bytes, 0, bytes.Length);
+                writer.Flush();
+                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
+                StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
+                string retString = reader.ReadToEnd();
+                response.Close();
+
+                return retString;
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+        }
+        #endregion
+    }
+}

+ 42 - 0
HH.YiDaSyncNC/Helper/LogHelper.cs

@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Helper
+{
+    class LogHelper
+    {
+        #region 写入日志
+        /// <summary>
+        /// 写入日志
+        /// </summary>
+        /// <param name="sLog">内容</param>
+        /// <param name="sOption">标题</param>
+        /// <param name="sSrc">路径</param>
+        public static void WriteLog(string sLog, string sOption = "OP", string sSrc = "/Logs/")
+        {
+            var now = DateTime.Now;
+            StreamWriter sr = null;
+
+            var filePath = AppDomain.CurrentDomain.BaseDirectory + sSrc; // 文件路径
+            var file = filePath + "Log_" + DateTime.Now.ToString("yyyy_MM_dd") + ".log"; // 文件
+
+            if (!Directory.Exists(filePath)) Directory.CreateDirectory(filePath); // 判断是否存在目录,不存在则创建
+
+            if (!File.Exists(file))
+            {
+                sr = File.CreateText(file);//创建日志文件
+            }
+            else
+            {
+                sr = File.AppendText(file);//追加日志文件
+            }
+            sr.WriteLine($"{DateTime.Now}:【{sOption}】:{sLog}");//日志格式
+            if (sr != null) sr.Close();     //关闭文件流
+        }
+        #endregion
+    }
+}

+ 62 - 0
HH.YiDaSyncNC/Helper/NCImportFunc.cs

@@ -0,0 +1,62 @@
+using HH.YiDaSyncNC.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Helper
+{
+    class NCImportFunc
+    {
+        public static string NCImport(XElement tempHeader, XElement xElement, string url)
+        {
+            try
+            {
+                tempHeader.Add(xElement);
+
+                //xElement.Element("voucher").Element("voucher_head").Element("details").Add(Bodydebit(body));//表体没有记录
+
+                string xmlString = DBHelper.ToXmlElementMethod(tempHeader).OuterXml;//变成xml字符串
+
+                xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + xmlString;
+
+                DBHelper.WriteLog("传入参数:" + xmlString);
+
+                string resultMsg = DBHelper.SendNsg(xmlString, url);//接收返回的数据
+
+                DBHelper.WriteLog("返回参数:" + resultMsg);
+
+                XElement xE = XElement.Parse(resultMsg);
+
+                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+
+                return resultMsg;//返回错误信息
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+        }
+
+        public static string NCImport2(XElement xElement, string url)
+        {
+            try
+            {
+                string xmlString = DBHelper.ToXmlElementMethod(xElement).OuterXml;//变成xml字符串
+                xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + xmlString;
+                DBHelper.WriteLog("传入参数:" + xmlString);
+                string resultMsg = DBHelper.SendNsg(xmlString, url);//接收返回的数据
+                DBHelper.WriteLog("返回参数:" + resultMsg);
+                XElement xE = XElement.Parse(resultMsg);
+                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                return resultMsg;//返回错误信息
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+        }
+    }
+}

+ 30 - 0
HH.YiDaSyncNC/Helper/UnixTimeHelper.cs

@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HH.YiDaSyncNC.Helper
+{
+    class UnixTimeHelper
+    {
+        public static DateTime ConvertMillisecondsToDateTime(long milliseconds)
+        {
+            // 毫秒数需要转换为秒
+            double seconds = milliseconds / 1000.0;
+            // Unix时间起始时间1970-01-01 00:00:00
+            DateTime unixStartTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+            // 将秒数转换为TimeSpan,然后添加到Unix起始时间
+            TimeSpan timeSpan = TimeSpan.FromSeconds(seconds);
+            // 返回结果的UTC时间
+            return unixStartTime.Add(timeSpan).ToLocalTime();
+        }
+
+        public static long ConvertToMilliseconds(DateTime dateTime)
+        {
+            DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
+            TimeSpan timeSpan = dateTime.ToUniversalTime() - epoch;
+            return (long)timeSpan.TotalMilliseconds;
+        }
+    }
+}

+ 312 - 0
HH.YiDaSyncNC/Models/BZJ_SyncServiceModel.cs

@@ -0,0 +1,312 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Models
+{
+    class BZJ_SyncServiceModel
+    {
+        public class DataModel
+        {
+            public string 集团 { get; set; } = "0";
+            public string 组织 { get; set; }
+
+            public string 销售订单单据类型 { get; set; } = "30-Cxx-02";
+            public string 销售订单单据大类 { get; set; } = "30";
+
+            public string 销售发票单据类型 { get; set; } = "32-01";
+            public string 销售发票单据大类 { get; set; } = "32";
+
+            public string 应收单单据类型 { get; set; } = "F0";
+            public string 应收类型 { get; set; } = "D0";
+            public string 应收单单据大类 { get; set; } = "ys";
+
+            public string 业务流程 { get; set; } = "Cxx-xs-03";
+            public string 单据号 { get; set; } // 不传
+            public string 单据日期 { get; set; }
+
+            public string 客户 { get; set; }
+            public string 部门 { get; set; }
+            public string 业务员 { get; set; }
+            public string 币种 { get; set; } = "CNY";
+            public string 收款协议 { get; set; }
+            public string 审批人 { get; set; }
+            public string 审批时间 { get; set; }
+            public string 制单人 { get; set; }
+            public string 制单时间 { get; set; }
+            public string 创建人 { get; set; }
+            public string 创建时间 { get; set; }
+
+            public string 国家 { get; set; } = "CN";
+            public string 项目 { get; set; }
+
+            public string 数量 { get; set; }
+            public string 价税合计 { get; set; }
+
+            // ----------------------------------------------------------------------
+            public string 发票号 { get; set; }
+            public string 发票类型 { get; set; } = "32-01";
+            public string 客户打印名称 { get; set; }
+
+            public string 开票类型 { get; set; }
+            public string OA单据号 { get; set; }
+            public string 合同业务类型 { get; set; }
+
+            public string 扣税类别 { get; set; } = "1";
+            public string 汇率 { get; set; } = "1";
+            public string 折扣 { get; set; } = "100";
+
+            public string 销售订单单据号 { get; set; } // ---------
+            public string 销售订单主表id { get; set; } // ---------
+
+            public string 销售发票主表id { get; set; } // ---------
+
+            public string 年份 { get; set; }
+            public string 月份 { get; set; }
+
+
+            public List<OrderB> 明细 { get; set; }
+
+            public class OrderB
+            {
+                public string 物料 { get; set; }
+                public string 计量单位 { get; set; }
+
+                public string 换算率 { get; set; } = "1.00/1.00";
+                public string 数量 { get; set; }
+                public string 税码 { get; set; }
+                public string 税率 { get; set; }
+
+                public string 含税单价 { get; set; }
+                public string 无税单价 { get; set; }
+                public string 含税净价 { get; set; }
+                public string 无税净价 { get; set; }
+                public string 税额 { get; set; }
+                public string 无税金额 { get; set; }
+                public string 价税合计 { get; set; }
+
+                // ----------------------------------------------
+                public string 开票内容 { get; set; }
+                public string 行id { get; set; }
+
+                public string 销售订单子表id { get; set; } // ---------
+
+                public string 销售发票子表id { get; set; } // ---------
+            }
+        }
+
+        public class ImportXml_应收单
+        {
+            /// <summary>
+            /// 模板头部份
+            /// </summary>
+            /// <returns></returns>
+            public static XElement TemplateHeade()
+            {
+
+                return new XElement(new XElement("ufinterface", new object[]
+                {
+                new XAttribute("sender","dingding"),
+                new XAttribute("roottag",""),
+                new XAttribute("replace","Y"),
+                new XAttribute("isexchange","Y"),
+                new XAttribute("groupcode","0"),
+                new XAttribute("filename",""),
+                new XAttribute("billtype","F0"),
+                new XAttribute("account","develop")
+                }));
+            }
+
+            /// <summary>
+            /// 组建表头xml
+            /// </summary>
+            /// <param name="item">表头参数</param>
+            /// <returns></returns>
+            public static XElement Header(DataModel item, string id)
+            {
+                var bodys = new List<XElement>();
+
+                if (item.明细 != null && item.明细.Count > 0)
+                {
+                    var crowno = 10; // 行号
+
+                    foreach (var itemData in item.明细)
+                    {
+                        bodys.Add(new XElement("item", new object[] {
+                            new XElement("pk_group",item.集团),
+                            new XElement("pk_org",item.组织),
+                            new XElement("pk_pcorg",""),
+                            new XElement("pk_fiorg",item.组织),
+                            new XElement("sett_org",item.组织),
+                            new XElement("so_org",item.组织),
+
+                            new XElement("material",itemData.物料),
+                            new XElement("customer",item.客户),
+                            new XElement("postunit",itemData.计量单位),
+
+                            new XElement("postpricenotax",itemData.无税单价),
+                            new XElement("postquantity",itemData.数量),
+                            new XElement("postprice",itemData.含税单价),
+
+                            new XElement("pausetransact","N"),
+
+                            new XElement("billdate",item.单据日期),
+                            new XElement("pk_billtype",item.应收单单据类型),
+                            new XElement("billclass",item.应收单单据大类),
+                            new XElement("pk_tradetype",item.应收类型),
+                            new XElement("busidate",item.单据日期),
+
+                            new XElement("objtype","0"),
+                            new XElement("rowno",crowno.ToString()),
+                            new XElement("rowtype","0"),
+                            new XElement("direction","1"),
+
+                            new XElement("pk_currtype",item.币种),
+                            new XElement("rate",item.汇率),
+
+                            new XElement("money_de",itemData.价税合计),
+                            new XElement("local_money_de",itemData.价税合计),
+                            new XElement("quantity_de",itemData.数量),
+                            new XElement("money_bal",itemData.价税合计),
+                            new XElement("local_money_bal",itemData.价税合计),
+                            new XElement("quantity_bal",itemData.数量),
+
+                            new XElement("local_tax_de",itemData.税额),
+
+                            new XElement("notax_de",itemData.无税金额),
+                            new XElement("local_notax_de",itemData.无税金额),
+
+                            new XElement("price",itemData.无税单价),
+                            new XElement("taxprice",itemData.含税单价),
+                            new XElement("taxrate",itemData.税率),
+
+                            new XElement("top_billid",item.销售发票主表id),
+                            // new XElement("top_itemid",itemData.销售发票子表id),
+                            new XElement("top_billtype",item.销售发票单据大类),
+                            new XElement("top_tradetype",item.销售发票单据类型),
+
+                            new XElement("src_billid",item.销售订单主表id),
+                            new XElement("src_itemid",itemData.销售订单子表id),
+                            new XElement("src_billtype",item.销售订单单据大类),
+                            new XElement("src_tradetype",item.销售订单单据类型),
+
+                            new XElement("taxtype","1"),
+                            new XElement("pk_payterm",item.收款协议),
+                            new XElement("ordercubasdoc",item.客户),
+
+                            new XElement("purchaseorder",item.销售订单单据号),
+                            new XElement("invoiceno",item.发票号),
+
+                            new XElement("def1",itemData.开票内容),
+                            new XElement("def10",itemData.行id),
+
+                            new XElement("grouprate","0"),
+                            new XElement("globalrate","0"),
+                            new XElement("groupdebit","0"),
+                            new XElement("globaldebit","0"),
+                            new XElement("groupbalance","0"),
+                            new XElement("globalbalance","0"),
+                            new XElement("groupnotax_de","0"),
+                            new XElement("globalnotax_de","0"),
+                            new XElement("occupationmny","0"),
+
+                            new XElement("project",item.项目),
+
+                            new XElement("rececountryid",item.国家),
+                            new XElement("buysellflag","1"),
+                            new XElement("taxcodeid",itemData.税码),
+                            new XElement("caltaxmny",itemData.无税金额),
+                        }));
+
+                        crowno = crowno + 10;
+                    }
+                }
+
+                return new XElement("bill", new object[]
+                {
+                    "",
+                    new XAttribute("id",id),
+                    new XElement("billhead", new object[]
+                    {
+                        new XElement("pk_group",item.集团),
+                        new XElement("pk_org",item.组织),
+                        new XElement("pk_fiorg",item.组织),
+                        new XElement("pk_pcorg",""),
+                        new XElement("sett_org",item.组织),
+
+                        new XElement("isreded","N"),
+                        new XElement("outbusitype",""),
+                        new XElement("officialprintuser",""),
+                        new XElement("officialprintdate",""),
+
+                        new XElement("approver",""),
+                        new XElement("taudittime",""),
+                        new XElement("billmaker",item.制单人),
+                        new XElement("dmakedate",item.制单时间),
+                        new XElement("creator",item.创建人),
+                        new XElement("creationtime",item.创建时间),
+                        new XElement("modifier",""),
+                        new XElement("modifiedtime",""),
+
+                        new XElement("pk_billtype",item.应收单单据类型),
+                        new XElement("custdelegate",""),
+                        new XElement("pk_corp",""),
+                        new XElement("pk_tradetype",item.应收类型),
+                        new XElement("pk_tradetype",item.应收类型),
+
+                        new XElement("ctrantypeid",item.销售发票单据类型),
+                        new XElement("vtrantypecode",item.销售发票单据类型),
+                        new XElement("pk_busitype",item.业务流程),
+                        new XElement("billclass",item.应收单单据大类),
+
+                        new XElement("accessorynum","0"),
+                        new XElement("subjcode",""),
+                        new XElement("isflowbill","N"),
+                        new XElement("confirmuser",""),
+                        new XElement("isinit","N"),
+
+                        new XElement("billno",item.OA单据号),
+                        new XElement("billdate",item.单据日期),
+
+                        new XElement("syscode","0"),
+                        new XElement("src_syscode","3"),
+                        new XElement("billstatus","-1"),
+                        new XElement("lastadjustuser",""),
+
+                        new XElement("money",item.价税合计),
+                        new XElement("local_money",item.价税合计),
+                        new XElement("rate",""),
+                        new XElement("billyear",item.年份),
+                        new XElement("billperiod",item.月份),
+
+                        new XElement("scomment",""),
+                        new XElement("effectstatus","10"),
+                        new XElement("effectuser",""),
+                        new XElement("effectdate",""),
+                        new XElement("lastapproveid",""),
+
+                        new XElement("so_org",item.组织),
+                        new XElement("customer",item.客户),
+                        new XElement("pk_currtype",item.币种),
+
+                        new XElement("sendcountryid",item.国家),
+                        new XElement("taxcountryid",item.国家),
+
+                        new XElement("coordflag",""),
+                        new XElement("inner_effect_date",""),
+                        new XElement("busidate",""),
+
+                        new XElement("def2",item.发票号),
+                        new XElement("def4",item.开票类型),
+                        new XElement("def5",item.合同业务类型),
+
+                        new XElement("bodys",bodys),
+                    }),
+                });
+            }
+        }
+    }
+}

+ 244 - 0
HH.YiDaSyncNC/Models/CGDD_SyncServiceModel.cs

@@ -0,0 +1,244 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Models
+{
+    class CGDD_SyncServiceModel
+    {
+        public class DataModel
+        {
+            public string 集团 { get; set; }
+            public string 组织 { get; set; }
+
+            public string 部门 { get; set; } = "06";
+
+            public string 订单编号 { get; set; }
+            public string 订单日期 { get; set; }
+            public string 供应商 { get; set; }
+            public string 订单类型 { get; set; } = "21-Cxx-02";
+            public string 单据状态 { get; set; } = "0";
+
+            public string 审批人 { get; set; }
+            public string 审批时间 { get; set; }
+            public string 制单人 { get; set; }
+            public string 制单时间 { get; set; }
+            public string 创建人 { get; set; }
+            public string 创建时间 { get; set; }
+
+            public string 换算率 { get; set; } = "1.00/1.00";
+            public string 折扣 { get; set; } = "100";
+
+            public string 数量 { get; set; }
+            public string 价税合计 { get; set; }
+            public string 业务流程 { get; set; } = "Cxx-CG-02";
+            public string 币种 { get; set; } = "CNY";
+
+            public List<OrderB> pk_order_b { get; set; }
+
+            public class OrderB
+            {
+                public string 物料编码 { get; set; }
+                public string 物料名称 { get; set; }
+                public string 计量单位 { get; set; }
+                public string 项目 { get; set; }
+                public string 数量 { get; set; }
+                public string 无税单价 { get; set; }
+                public string 含税单价 { get; set; }
+                public string 无税金额 { get; set; }
+                public string 税额 { get; set; }
+                public string 税率 { get; set; } = "13";
+                public string 税码 { get; set; } = "CN15";
+                public string 价税合计 { get; set; }
+                public string 联系人 { get; set; }
+                public string 收货地址 { get; set; }
+            }
+        }
+
+        public class ImportXml
+        {
+            /// <summary>
+            /// 模板头部份
+            /// </summary>
+            /// <returns></returns>
+            public static XElement TemplateHeade()
+            {
+
+                return new XElement(new XElement("ufinterface", new object[]
+                {
+                new XAttribute("sender","dingding"),
+                new XAttribute("roottag",""),
+                new XAttribute("replace","Y"),
+                new XAttribute("isexchange","Y"),
+                new XAttribute("groupcode","0"),
+                new XAttribute("filename",""),
+                new XAttribute("billtype","21"),
+                new XAttribute("account","develop")
+                }));
+            }
+
+            /// <summary>
+            /// 组建表头xml
+            /// </summary>
+            /// <param name="item">表头参数</param>
+            /// <returns></returns>
+            public static XElement Header(DataModel item, string id)
+            {
+                var pk_order_b = new List<XElement>();
+
+                if (item.pk_order_b != null && item.pk_order_b.Count > 0)
+                {
+                    var crowno = 10; // 行号
+
+                    foreach (var itemData in item.pk_order_b)
+                    {
+                        pk_order_b.Add(new XElement("item", new object[] {
+                            new XElement("pk_group",item.集团),
+                            new XElement("pk_org",item.组织),
+                            new XElement("pk_org_v",item.组织),
+                            new XElement("pk_reqcorp",item.组织),
+                            new XElement("pk_reqstoorg",item.组织),
+                            new XElement("pk_reqstoorg_v",item.组织),
+                            new XElement("pk_arrvstoorg",item.组织),
+                            new XElement("pk_arrvstoorg_v",item.组织),
+                            new XElement("pk_psfinanceorg",item.组织),
+                            new XElement("pk_psfinanceorg_v",item.组织),
+                            new XElement("pk_apfinanceorg",item.组织),
+                            new XElement("pk_apfinanceorg_v",item.组织),
+
+                            new XElement("crowno",crowno.ToString()),
+
+                            new XElement("pk_material",itemData.物料编码),
+                            new XElement("pk_srcmaterial",itemData.物料编码),
+                            new XElement("vvendinventorycode",itemData.物料编码),
+                            new XElement("vvendinventoryname",itemData.物料名称),
+                            new XElement("cunitid",itemData.计量单位),
+                            new XElement("castunitid",itemData.计量单位),
+                            new XElement("cqtunitid",itemData.计量单位),
+
+                            new XElement("cprojectid",itemData.项目),
+                            new XElement("dbilldate",item.订单日期),
+                            new XElement("pk_supplier",item.供应商),
+                            new XElement("dsenddate",Convert.ToDateTime(item.订单日期).AddDays(1).ToString("yyyy-MM-dd HH:mm:ss")),
+
+                            new XElement("nnum",itemData.数量),
+                            new XElement("nastnum",itemData.数量),
+                            new XElement("vchangerate",item.换算率),
+                            new XElement("nqtunitnum",itemData.数量),
+                            new XElement("vqtunitrate",item.换算率),
+
+                            new XElement("nqtorigprice",itemData.无税单价),
+                            new XElement("nqtorignetprice",itemData.无税单价),
+                            new XElement("nqtnetprice",itemData.无税单价),
+                            new XElement("norigprice",itemData.无税单价),
+                            new XElement("norignetprice",itemData.无税单价),
+                            new XElement("nnetprice",itemData.无税单价),
+                            new XElement("nqtprice",itemData.无税单价),
+                            new XElement("nprice",itemData.无税单价),
+
+                            new XElement("nqtorigtaxprice",itemData.含税单价),
+                            new XElement("nqtorigtaxnetprc",itemData.含税单价),
+                            new XElement("nqttaxnetprice",itemData.含税单价),
+                            new XElement("norigtaxprice",itemData.含税单价),
+                            new XElement("norigtaxnetprice",itemData.含税单价),
+                            new XElement("ntaxnetprice",itemData.含税单价),
+                            new XElement("nqttaxprice",itemData.含税单价),
+                            new XElement("ntaxprice",itemData.含税单价),
+
+                            new XElement("norigmny",itemData.无税金额),
+                            new XElement("nmny",itemData.无税金额),
+                            new XElement("ncaltaxmny",itemData.无税金额),
+                            new XElement("ncalcostmny",itemData.无税金额),
+
+                            new XElement("ntax",itemData.税额),
+                            new XElement("ntaxrate",itemData.税率),
+                            new XElement("ctaxcodeid",itemData.税码),
+
+                            new XElement("norigtaxmny",itemData.价税合计),
+                            new XElement("ntaxmny",itemData.价税合计),
+
+                            new XElement("nitemdiscountrate","100"),
+                            new XElement("breceiveplan","N"),
+                            new XElement("blargess","N"),
+                            new XElement("btransclosed","N"),
+                            new XElement("bborrowpur","N"),
+
+                            new XElement("bstockclose","N"),
+                            new XElement("binvoiceclose","N"),
+                            new XElement("barriveclose","N"),
+                            new XElement("bpayclose","N"),
+                            new XElement("ftaxtypeflag","1"),
+
+                            new XElement("vbdef3",itemData.联系人),
+                            new XElement("vbdef4",itemData.收货地址),
+
+                            new XElement("ccurrencyid",item.币种),
+                            new XElement("nexchangerate","1"),
+
+                            new XElement("corigcurrencyid",item.币种),
+
+                            new XElement("csendcountryid","CN"),
+                            new XElement("crececountryid","CN"),
+                            new XElement("ctaxcountryid","CN"),
+
+                            new XElement("fbuysellflag","2"),
+                            new XElement("btriatradeflag","N"),
+
+                        }));
+
+                        crowno = crowno + 10;
+                    }
+                }
+
+                return new XElement("bill", new object[]
+                {
+                    "",
+                    new XAttribute("id",id),
+                    new XElement("billhead", new object[]
+                    {
+                        new XElement("pk_group",item.集团),
+                        new XElement("pk_org",item.组织),
+                        new XElement("pk_org_v",item.组织),
+                        new XElement("vbillcode",item.订单编号),
+                        new XElement("dbilldate",item.订单日期),
+
+                        new XElement("pk_supplier",item.供应商),
+                        new XElement("pk_invcsupllier",item.供应商),
+
+                        new XElement("vtrantypecode",item.订单类型),
+                        new XElement("ctrantypeid",item.订单类型),
+
+                        new XElement("pk_dept",item.部门),
+                        new XElement("pk_dept_v",item.部门),
+
+                        new XElement("approver",item.审批人),
+                        new XElement("taudittime",item.审批时间),
+                        new XElement("billmaker",item.制单人),
+                        new XElement("dmakedate",item.制单时间),
+                        new XElement("creator",item.创建人),
+                        new XElement("creationtime",item.创建时间),
+
+
+                        new XElement("forderstatus",item.单据状态),
+                        new XElement("nversion","1"),
+                        new XElement("bislatest","Y"),
+                        new XElement("vdef10",item.订单编号),
+                    
+                        new XElement("ntotalastnum",item.数量),
+                        new XElement("ntotalorigmny",item.价税合计),
+
+                        new XElement("pk_busitype",item.业务流程),
+                        new XElement("fhtaxtypeflag","1"),
+
+                        new XElement("corigcurrencyid",item.币种),
+
+                        new XElement("pk_order_b",pk_order_b),
+                    }),
+                });
+            }
+        }
+    }
+}

+ 319 - 0
HH.YiDaSyncNC/Models/FKGL_SyncServiceModel.cs

@@ -0,0 +1,319 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Models
+{
+    public class FKGL_SyncServiceModel
+    {
+        #region 凭证数据模型
+        /// <summary>
+        /// 凭证模型
+        /// </summary>
+        public class DataModel
+        {
+            /// <summary>
+            /// 头部
+            /// </summary>
+            public class voucher_header
+            {
+                /// <summary>
+                /// 会计年度
+                /// </summary>
+                public string year { get; set; }
+
+                /// <summary>
+                /// 会计期间
+                /// </summary>
+                public string period { get; set; }
+
+                /// <summary>
+                /// 凭证类别
+                /// </summary>
+                public string pk_vouchertype { get; set; }
+
+                /// <summary>
+                /// 制单日期
+                /// </summary>
+                public string prepareddate { get; set; }
+
+                /// <summary>
+                /// 凭证号
+                /// </summary>
+                public string no { get; set; }
+
+                /// <summary>
+                /// 账簿
+                /// </summary>
+                public string pk_accountingbook { get; set; }
+
+                /// <summary>
+                /// 制单人
+                /// </summary>
+                public string pk_prepared { get; set; }
+
+                /// <summary>
+                /// 附件张数
+                /// </summary>
+                public string attachment { get; set; }
+
+                /// <summary>
+                /// 组织
+                /// </summary>
+                public string org { get; set; }
+            }
+
+            /// <summary>
+            /// 头部分录
+            /// </summary>
+            public class voucher_body
+            {
+                /// <summary>
+                /// 分录序号
+                /// </summary>
+                public int detailindex { get; set; }
+                /// <summary>
+                /// 科目编码
+                /// </summary>
+                public string accsubjcode { get; set; }
+                /// <summary>
+                /// 摘要
+                /// </summary>
+                public string explanation { get; set; }
+
+                public string verifydate { get; set; }
+
+                public string price { get; set; }
+
+                public string excrate2 { get; set; }
+
+                public string debitquantity { get; set; }
+                /// <summary>
+                /// 借方金额
+                /// </summary>
+                public string debitamount { get; set; }
+                public string groupdebitamount { get; set; }
+
+                public string globaldebitamount { get; set; }
+                /// <summary>
+                /// 借方金额
+                /// </summary>
+                public string localdebitamount { get; set; }
+
+                public string creditquantity { get; set; }
+                /// <summary>
+                /// 贷方金额
+                /// </summary>
+                public string creditamount { get; set; }
+                public string groupcreditamount { get; set; }
+
+                public string globalcreditamount { get; set; }
+                /// <summary>
+                /// 贷方金额
+                /// </summary>
+                public string localcreditamount { get; set; }
+                public string billtype { get; set; }
+                public string bankaccount { get; set; }
+                public string checkstyle { get; set; }
+                public string checkno { get; set; }
+                public string checkdate { get; set; }
+                public string bill_id { get; set; }
+                public string bill_date { get; set; }
+                public string pk_currtype { get; set; }
+                /// <summary>
+                /// 科目编码
+                /// </summary>
+                public string pk_accasoa { get; set; }
+
+                public string pk_unit { get; set; }
+
+                public string pk_unit_v { get; set; }
+                /// <summary>
+                /// 辅助核算
+                /// </summary>
+                public List<DataModel.ass> ass { get; set; }
+                /// <summary>
+                /// 现金流量
+                /// </summary>
+                public DataModel.cash_flow cash_flow { get; set; }
+            }
+
+            public class cash_flow
+            {
+
+                public string m_pk_currtype { get; set; }
+
+                public string money { get; set; }
+
+                public string moneyglobal { get; set; }
+
+                public string moneygroup { get; set; }
+
+                public string moneymain { get; set; }
+                /// <summary>
+                /// 现金主键
+                /// </summary>
+                public string pk_cashflow { get; set; }
+
+                public string pk_innercorp { get; set; }
+            }
+
+            public class ass
+            {
+                /// <summary>
+                /// 辅助核算类型 编码
+                /// </summary>
+                public string pk_Checktype { get; set; }
+                /// <summary>
+                /// 值
+                /// </summary>
+                public string pk_Checkvalue { get; set; }
+            }
+        }
+        #endregion
+
+        public class ImportXml_凭证
+        {
+            public static XElement TemplateHeade(DataModel.voucher_header item)
+            {
+
+                return new XElement(new XElement("ufinterface", new object[]
+                {
+                    new XAttribute("proc","add"),
+                    new XAttribute("sender","dingding"),
+                    new XAttribute("receiver",item.org),
+                    new XAttribute("roottag",""),
+                    new XAttribute("replace","N"),
+                    new XAttribute("orgcode",item.org),
+                    new XAttribute("isexchange",""),
+                    new XAttribute("groupcode","0"),
+                    new XAttribute("filename",""),
+                    new XAttribute("businessunitcode","develop"),
+                    new XAttribute("billtype","vouchergl"),
+                    new XAttribute("account","develop")
+                }));
+            }
+            /// <summary>
+            /// 组建表头xml
+            /// </summary>
+            /// <param name="item">表头参数</param>
+            /// <returns></returns>
+            public static XElement Header(DataModel.voucher_header item)
+            {
+                return new XElement("voucher", new object[]
+                {
+                "",
+				//new XAttribute("id",""),
+				new XElement("voucher_head", new object[]
+                {
+                    new XElement("pk_voucher",""),
+                    new XElement("pk_vouchertype",item.pk_vouchertype),
+                    new XElement("year",item.year),
+                    new XElement("pk_system","GL"),
+                    new XElement("voucherkind","0"),
+                    new XElement("pk_accountingbook",item.pk_accountingbook),
+                    new XElement("discardflag","N"),
+                    new XElement("period",item.period),
+                    new XElement("no",item.no),
+                    new XElement("attachment",""),
+                    new XElement("prepareddate",item.prepareddate),
+                    new XElement("pk_prepared",/*"DINGDING"*/item.pk_prepared),
+                    new XElement("pk_casher",""),
+                    new XElement("signflag","Y"),
+                    new XElement("pk_checked",""),
+                    new XElement("tallydate",""),
+                    new XElement("pk_manager",""),
+                    new XElement("memo1",""),
+                    new XElement("memo2",""),
+                    new XElement("reserve1",""),
+                    new XElement("reserve2","N"),
+                    new XElement("siscardflag",""),
+                    new XElement("pk_org",item.org),
+                    new XElement("pk_org_v",item.org),
+                    new XElement("pk_group","0"),
+                    new XElement("details","")
+                }),
+                });
+            }
+
+            /// <summary>
+            /// 组建表体xml
+            /// </summary>
+            /// <param name="items">表体</param>
+            /// <returns></returns>
+            public static List<XElement> Bodydebit(List<DataModel.voucher_body> items)
+            {
+                List<XElement> list = new List<XElement>();
+
+                foreach (DataModel.voucher_body current in items)
+                {
+                    List<XElement> lstItem = new List<XElement>();
+                    foreach (var ite in current.ass)
+                    {
+                        if (!string.IsNullOrWhiteSpace(ite.pk_Checktype) && !string.IsNullOrWhiteSpace(ite.pk_Checkvalue))
+                        {
+                            XElement ites = new XElement("item", new object[] {
+                            new XElement("pk_Checktype",ite.pk_Checktype),
+                            new XElement("pk_Checkvalue",ite.pk_Checkvalue)
+                        });
+                            lstItem.Add(ites);
+                        }
+                    }
+
+                    XElement item = new XElement("item", new object[]
+                    {
+                    new XElement("detailindex",current.detailindex),
+                    new XElement("accsubjcode",current.pk_accasoa),
+                    new XElement("explanation",current.explanation),
+                    new XElement("verifydate",current.verifydate),
+                    new XElement("price",current.price),
+                    new XElement("excrate2",current.excrate2),
+                    new XElement("debitquantity",current.debitquantity),
+                    new XElement("debitamount",current.debitamount),
+                    new XElement("groupdebitamount",current.groupdebitamount),
+                    new XElement("globaldebitamount",current.globaldebitamount),
+                    new XElement("localdebitamount",current.localdebitamount),
+                    new XElement("creditquantity",current.creditquantity),
+                    new XElement("creditamount",current.creditamount),
+                    new XElement("groupcreditamount",current.groupcreditamount),
+                    new XElement("globalcreditamount",current.globalcreditamount),
+                    new XElement("localcreditamount",current.localcreditamount),
+                    new XElement("billtype",current.billtype),
+                    new XElement("bankaccount",current.bankaccount),
+                    new XElement("checkstyle",current.checkstyle),
+                    new XElement("checkno",current.checkno),
+                    new XElement("checkdate",current.checkdate),
+                    new XElement("bill_id",current.bill_id),
+                    new XElement("bill_date",current.bill_date),
+                    new XElement("pk_currtype",current.pk_currtype),
+                    new XElement("pk_accasoa",current.pk_accasoa),
+                    new XElement("ass",new object[]
+                        {
+                            lstItem,
+                        }),
+                        });
+
+                    if (!string.IsNullOrWhiteSpace(current.cash_flow.m_pk_currtype) && !string.IsNullOrWhiteSpace(current.cash_flow.money) && !string.IsNullOrWhiteSpace(current.cash_flow.moneymain) && !string.IsNullOrWhiteSpace(current.cash_flow.pk_cashflow))
+                    {
+                        XElement cashFlow = new XElement("cashFlow", new XElement("item", new object[]
+                           {
+                            new XElement("m_pk_currtype",current.cash_flow.m_pk_currtype),
+                            new XElement("money",current.cash_flow.money),
+                            new XElement("moneyglobal",current.cash_flow.moneyglobal),
+                            new XElement("moneygroup",current.cash_flow.moneygroup),
+                            new XElement("moneymain",current.cash_flow.moneymain),
+                            new XElement("pk_cashflow",current.cash_flow.pk_cashflow),
+                            new XElement("pk_innercorp",current.cash_flow.pk_innercorp)
+                           }));
+                        item.Add(cashFlow);
+                    }
+                    list.Add(item);
+                }
+                return list;
+            }
+        }
+    }
+}

+ 339 - 0
HH.YiDaSyncNC/Models/FKYF_SyncServiceModel.cs

@@ -0,0 +1,339 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Models
+{
+    public class FKYF_SyncServiceModel
+    {
+        #region 凭证数据模型
+        /// <summary>
+        /// 凭证模型
+        /// </summary>
+        public class DataModel
+        {
+            /// <summary>
+            /// 头部
+            /// </summary>
+            public class voucher_header
+            {
+                /// <summary>
+                /// 应付财务组织
+                /// </summary>
+                public string pk_org { get; set; }
+                /// <summary>
+                /// 创建时间 
+                /// </summary>
+                public string creationtime { get; set; }
+                /// <summary>
+                /// 创建人
+                /// </summary>
+                public string creator { get; set; }
+                /// <summary>
+                /// 单据日期
+                /// </summary>
+                public string billdate { get; set; }
+                /// <summary>
+                /// 制单人
+                /// </summary>
+                public string billmaker { get; set; }
+                /// <summary>
+                /// 单据号
+                /// </summary>
+                public string billno { get; set; }
+                /// <summary>
+                /// 原币金额
+                /// </summary>
+                public string money { get; set; }
+                /// <summary>
+                /// 组织本币金额
+                /// </summary>
+                public string local_money { get; set; }
+                /// <summary>
+                /// 单据会计年度
+                /// </summary>
+                public string billyear { get; set; }
+                /// <summary>
+                /// 单据会计期间
+                /// </summary>
+                public string billperiod { get; set; }
+                /// <summary>
+                /// 采购部门
+                /// </summary>
+                public string pu_deptid { get; set; }
+                /// <summary>
+                /// 采购业务员
+                /// </summary>
+                public string pu_psndoc { get; set; }
+                /// <summary>
+                /// 采购组织
+                /// </summary>
+                public string pu_org { get; set; }
+            }
+
+            /// <summary>
+            /// 明细分录
+            /// </summary>
+            public class voucher_body
+            {
+                /// <summary>
+                /// 应付财务组织
+                /// </summary>
+                public string pk_org { get; set; }
+                /// <summary>
+                /// 财务组织
+                /// </summary>
+                public string pk_fiorg { get; set; }
+                /// <summary>
+                /// 采购部门
+                /// </summary>
+                public string pu_deptid { get; set; }
+                /// <summary>
+                /// 采购组织
+                /// </summary>
+                public string pu_org { get; set; }
+                /// <summary>
+                /// 结算财务组织
+                /// </summary>
+                public string sett_org { get; set; }
+                /// <summary>
+                /// 物料
+                /// </summary>
+                public string material { get; set; }
+                /// <summary>
+                /// 供应商
+                /// </summary>
+                public string supplier { get; set; }
+                /// <summary>
+                /// 单据日期
+                /// </summary>
+                public string billdate { get; set; }
+                /// <summary>
+                /// 起算日期
+                /// </summary>
+                public string busidate { get; set; }
+                /// <summary>
+                /// 收支项目
+                /// </summary>
+                public string pk_subjcode { get; set; }
+                /// <summary>
+                /// 科目
+                /// </summary>
+                public string subjcode { get; set; }
+                /// <summary>
+                /// 单据分录号
+                /// </summary>
+                public string rowno { get; set; }
+                /// <summary>
+                /// 部门
+                /// </summary>
+                public string pk_deptid { get; set; }
+                /// <summary>
+                /// 业务员
+                /// </summary>
+                public string pk_psndoc { get; set; }
+                /// <summary>
+                /// 贷方数量
+                /// </summary>
+                public string quantity_cr { get; set; }
+                /// <summary>
+                /// 组织本币金额(贷方)
+                /// </summary>
+                public string local_money_cr { get; set; }
+                /// <summary>
+                /// 贷方原币金额
+                /// </summary>
+                public string money_cr { get; set; }
+                /// <summary>
+                /// 税额
+                /// </summary>
+                public string local_tax_cr { get; set; }
+                /// <summary>
+                /// 贷方原币无税金额
+                /// </summary>
+                public string notax_cr { get; set; }
+                /// <summary>
+                /// 组织本币无税金额(贷方)
+                /// </summary>
+                public string local_notax_cr { get; set; }
+                /// <summary>
+                /// 单价 无税
+                /// </summary>
+                public string price { get; set; }
+                /// <summary>
+                /// 含税单价
+                /// </summary>
+                public string taxprice { get; set; }
+                /// <summary>
+                /// 税率
+                /// </summary>
+                public string taxrate { get; set; }
+                /// <summary>
+                /// 订单供应商
+                /// </summary>
+                public string ordercubasdoc { get; set; }
+                /// <summary>
+                /// 发票号
+                /// </summary>
+                public string invoiceno { get; set; }
+                /// <summary>
+                /// 计税金额
+                /// </summary>
+                public string caltaxmny { get; set; }
+            }
+
+        }
+        #endregion
+
+        public class ImportXml_应付单
+        {
+            public static XElement TemplateHeade(DataModel.voucher_header item)
+            {
+
+                return new XElement(new XElement("ufinterface", new object[]
+                {
+                    new XAttribute("billtype","F1"),
+                    new XAttribute("sender","dingding"),
+                    new XAttribute("receiver",""),
+                    new XAttribute("roottag",""),
+                    new XAttribute("replace","N"),
+                    new XAttribute("orgcode",""),
+                    new XAttribute("isexchange",""),
+                    new XAttribute("groupcode","0"),
+                    new XAttribute("filename",""),
+                    new XAttribute("businessunitcode","develop"),
+                    new XAttribute("account","develop")
+                }));
+            }
+            /// <summary>
+            /// 组建表头xml
+            /// </summary>
+            /// <param name="item">表头参数</param>
+            /// <returns></returns>
+            public static XElement Header(DataModel.voucher_header item)
+            {
+                return new XElement("bill", new object[]
+                {
+                "",
+                new XElement("billhead", new object[]
+                {
+                    new XElement("pk_group","0"),
+                    new XElement("pk_org",item.pk_org),
+                    new XElement("pk_fiorg",item.pk_org),
+                    new XElement("sett_org",item.pk_org),
+                    new XElement("creationtime",item.creationtime),
+                    new XElement("creator",item.creator),
+                    new XElement("billno",item.billno),
+                    new XElement("billdate",item.billdate),
+                    new XElement("billmaker",item.billmaker),
+                    new XElement("money",item.money),
+                    new XElement("local_money",item.local_money),
+                    new XElement("billyear",item.billyear),
+                    new XElement("billperiod",item.billperiod),
+                    new XElement("pu_deptid",item.pu_deptid),
+                    new XElement("pu_psndoc",item.pu_psndoc),
+                    new XElement("pu_org",item.pu_org),
+                    new XElement("isreded","N"),
+                    new XElement("pk_billtype","F1"),
+                    new XElement("pk_tradetype","D1"),
+                    new XElement("billclass","yf"),
+                    new XElement("accessorynum","0"),
+                    new XElement("isflowbill","N"),
+                    new XElement("isinit","N"),
+                    new XElement("syscode","1"),
+                    new XElement("src_syscode","1"),
+                    new XElement("billstatus","1"),
+                    new XElement("grouplocal","0.00000000"),
+                    new XElement("globallocal","0.00000000"),
+                    new XElement("grouprate","0.00000000"),
+                    new XElement("globalrate","0.00000000"),
+                    new XElement("rate","0.00000000"),
+                    new XElement("ispuadjust","N"),
+                    new XElement("coordflag","0"),
+                    new XElement("pk_currtype","CNY"),
+                    new XElement("bodys","")
+                }),
+                });
+            }
+
+            /// <summary>
+            /// 组建表体xml
+            /// </summary>
+            /// <param name="items">表体</param>
+            /// <returns></returns>
+            public static List<XElement> Body(List<DataModel.voucher_body> items)
+            {
+                List<XElement> list = new List<XElement>();
+
+                foreach (DataModel.voucher_body current in items)
+                {
+
+                    XElement item = new XElement("item", new object[]
+                    {
+                    new XElement("pk_org",current.pk_org),
+                    new XElement("pk_fiorg",current.pk_fiorg),
+                    new XElement("pu_deptid",current.pu_deptid),
+                    new XElement("pu_org",current.pu_org),
+                    new XElement("material",current.material),
+                    new XElement("sett_org",current.sett_org),
+                    new XElement("supplier",current.supplier),
+                    new XElement("supplier",current.billdate),
+                    new XElement("busidate",current.busidate),
+                    new XElement("pk_subjcode",current.pk_subjcode),
+                    new XElement("rowno",current.rowno),
+                    new XElement("pk_deptid",current.pk_deptid),
+                    new XElement("pk_psndoc",current.pk_psndoc),
+                    new XElement("quantity_cr",current.quantity_cr),
+                    new XElement("local_money_cr",current.local_money_cr),
+                    new XElement("money_cr",current.money_cr),
+                    new XElement("notax_cr",current.notax_cr),
+                    new XElement("local_notax_cr",current.local_notax_cr),
+                    new XElement("price",current.price),
+                    new XElement("taxprice",current.taxprice),
+                    new XElement("taxrate",current.taxrate),
+                    new XElement("ordercubasdoc",current.ordercubasdoc),
+                    new XElement("invoiceno",current.invoiceno),
+                    new XElement("caltaxmny",current.caltaxmny),
+                    new XElement("local_tax_cr",current.local_tax_cr),
+                    new XElement("subjcode",current.subjcode),
+                    new XElement("coordflag","0"),
+                    new XElement("pk_group","0"),
+                    new XElement("direction","0"),
+                    new XElement("rowtype","0"),
+                    new XElement("pk_billtype","F1"),
+                    new XElement("billclass","yf"),
+                    new XElement("pk_tradetype","D1"),
+                    new XElement("objtype","1"),
+                    new XElement("pk_currtype","CNY"),
+                    new XElement("rate","1"),
+                    new XElement("money_bal","0"),
+                    new XElement("local_money_bal","0"),
+                    new XElement("quantity_bal","0"),
+                    new XElement("taxtype","0"),
+                    new XElement("buysellflag","2"),
+                    new XElement("grouprate","0.00000000"),
+                    new XElement("globalrate","0.00000000"),
+                    new XElement("groupcrebit","0.00000000"),
+                    new XElement("globalcrebit","0.00000000"),
+                    new XElement("groupbalance","0.00000000"),
+                    new XElement("globalbalance","0.00000000"),
+                    new XElement("groupnotax_cre","0.00000000"),
+                    new XElement("globalnotax_cre","0.00000000"),
+                    new XElement("occupationmny","0.00000000"),
+
+
+
+
+                        });
+
+
+                    list.Add(item);
+                }
+                return list;
+            }
+        }
+    }
+}

+ 237 - 0
HH.YiDaSyncNC/Models/FK_CLBX_SyncServiceModel.cs

@@ -0,0 +1,237 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Models
+{
+    class FK_CLBX_SyncServiceModel
+    {
+        public class DataModel
+        {
+            public string 集团 { get; set; } = "0";
+            public string 组织 { get; set; }
+
+            public string 支付人 { get; set; }
+            public string 支付日期 { get; set; }
+
+            public string 创建人 { get; set; }
+            public string 创建时间 { get; set; }
+            public string 制单人 { get; set; }
+
+            public string 单据类型 { get; set; } = "F3";
+            public string 付款类型 { get; set; } = "F3-Cxx-011";
+            public string 单据大类 { get; set; } = "fk";
+            public string 业务流程 { get; set; } = "AP02";
+
+            public string 单据号 { get; set; }
+            public string 单据日期 { get; set; }
+
+            public string 单据所属系统 { get; set; } = "1";
+            public string 单据来源系统 { get; set; } = "1";
+            public string 单据状态 { get; set; } = "-1";
+            public string 结算状态 { get; set; } = "1";
+            public string 生效状态 { get; set; } = "10";
+
+            public string 生效人 { get; set; } 
+            public string 生效日期 { get; set; }
+
+            public string 发票号 { get; set; }
+
+            public string 供应商 { get; set; } = "999"; // 虚拟供应商999
+            public string 币种 { get; set; } = "CNY";
+
+            public string 往来对象 { get; set; } = "1";
+            public string 付款银行账户 { get; set; }
+
+            public string 价税合计 { get; set; }
+
+            public string 年份 { get; set; }
+            public string 月份 { get; set; }
+            
+            public string 起算日期 { get; set; }
+
+            public string 汇率 { get; set; } = "1";
+            public string 折扣 { get; set; } = "100";
+
+            public string 部门 { get; set; }
+            public string 项目 { get; set; }
+
+            public List<Item> 明细 { get; set; }
+
+            public class Item
+            {
+                public string 摘要 { get; set; }
+                public string 科目 { get; set; }
+                public string 收支项目 { get; set; }
+
+                public string 价税合计 { get; set; }
+                public string 无税金额 { get; set; }
+                public string 税额 { get; set; }
+            }
+        }
+
+        public class ImportXml
+        {
+            /// <summary>
+            /// 模板头部份
+            /// </summary>
+            /// <returns></returns>
+            public static XElement TemplateHeade()
+            {
+
+                return new XElement(new XElement("ufinterface", new object[]
+                {
+                new XAttribute("sender","dingding"),
+                new XAttribute("roottag",""),
+                new XAttribute("replace","Y"),
+                new XAttribute("isexchange","Y"),
+                new XAttribute("groupcode","0"),
+                new XAttribute("filename",""),
+                new XAttribute("billtype","F3"),
+                new XAttribute("proc","add"),
+                new XAttribute("account","develop")
+                }));
+            }
+
+            /// <summary>
+            /// 组建表头xml
+            /// </summary>
+            /// <param name="item">表头参数</param>
+            /// <returns></returns>
+            public static XElement Header(DataModel item, string id)
+            {
+                var bodys = new List<XElement>();
+
+                if (item.明细 != null && item.明细.Count > 0)
+                {
+                    var crowno = 10; // 行号
+
+                    foreach (var itemData in item.明细)
+                    {
+                        bodys.Add(new XElement("item", new object[] {
+                            new XElement("pk_group",item.集团),
+                            new XElement("sett_org",item.组织),
+                            new XElement("pk_org",item.组织),
+                            new XElement("pk_fiorg",item.组织),
+                            new XElement("prepay","0"),
+                            new XElement("supplier",item.供应商),
+                            new XElement("checkdirection","ap"),
+                            new XElement("billdate",item.单据日期),
+
+                            new XElement("pk_billtype",item.单据类型),
+                            new XElement("billclass",item.单据大类),
+                            new XElement("pk_tradetype",item.付款类型),
+                            new XElement("busidate",item.起算日期),
+
+                            new XElement("billno",item.单据号),
+                            new XElement("objtype",item.往来对象),
+                            new XElement("rowno",crowno.ToString()),
+                            new XElement("direction","1"),
+
+                            new XElement("pk_recpaytype","001"),
+
+                            new XElement("pk_subjcode",itemData.收支项目),
+                            new XElement("subjcode",itemData.科目),
+                            new XElement("pk_currtype",item.币种),
+                            new XElement("rate",item.汇率),
+                            new XElement("pk_deptid",item.部门),
+                            new XElement("project",item.项目),
+
+                            new XElement("money_de",itemData.价税合计),
+                            new XElement("local_money_de",itemData.价税合计),
+                            new XElement("local_money_bal",itemData.价税合计),
+                            new XElement("notax_de",itemData.无税金额),
+                            new XElement("local_notax_de",itemData.价税合计),
+
+                            new XElement("payaccount",item.付款银行账户),
+                            // new XElement("invoiceno",item.发票号),
+
+                            new XElement("def12",itemData.税额),
+                            new XElement("def11",itemData.无税金额),
+                            new XElement("occupationmny",itemData.价税合计),
+
+                            new XElement("grouprate","0"),
+                            new XElement("globalrate","0"),
+                            new XElement("groupdebit","0"),
+                            new XElement("globaldebit","0"),
+                            new XElement("groupbalance","0"),
+                            new XElement("globalbalance","0"),
+                            new XElement("groupnotax_de","0"),
+                            new XElement("globalnotax_de","0"),
+
+                        }));
+
+                        crowno = crowno + 10;
+                    }
+                }
+
+                return new XElement("bill", new object[]
+                {
+                "",
+                new XAttribute("id",id),
+                new XElement("billhead", new object[]
+                {
+                    new XElement("pk_group",item.集团),
+                    new XElement("pk_fiorg",item.组织),
+                    new XElement("pk_org",item.组织),
+                    new XElement("sett_org",item.组织),
+                    new XElement("pk_corp",item.组织),
+
+                    new XElement("isreded","N"),
+
+                    new XElement("payman",item.支付人),
+                    new XElement("paydate",item.支付日期),
+                    new XElement("isonlinepay","N"),
+
+                    new XElement("creationtime",item.创建时间),
+                    new XElement("creator",item.创建人),
+
+                    new XElement("pk_billtype",item.单据类型),
+                    new XElement("pk_tradetype",item.付款类型),
+                    new XElement("billclass",item.单据大类),
+                    new XElement("pk_busitype",item.业务流程),
+                    new XElement("ismandatepay","N"),
+                    new XElement("accessorynum","0"),
+                    new XElement("isflowbill","N"),
+                    new XElement("isinit","N"),
+
+                    new XElement("billno",item.单据号),
+                    new XElement("billdate",item.单据日期),
+
+                    new XElement("syscode",item.单据所属系统),
+                    new XElement("src_syscode",item.单据来源系统),
+                    new XElement("billstatus",item.单据状态),
+
+                    new XElement("billmaker",item.制单人),
+                    new XElement("isnetpayready","N"),
+
+                    new XElement("money",item.价税合计),
+                    new XElement("local_money",item.价税合计),
+                    new XElement("billyear",item.年份),
+                    new XElement("billperiod",item.月份),
+
+                    new XElement("settleflag",item.结算状态),
+                    new XElement("effectstatus",item.生效状态),
+                    new XElement("effectuser",item.生效人),
+                    new XElement("effectdate",item.生效日期),
+
+                    new XElement("def2",item.发票号),
+                    //  new XElement("pk_deptid",item.发票号),
+
+                    new XElement("supplier",item.供应商),
+                    new XElement("pk_currtype",item.币种),
+                    new XElement("objtype",item.往来对象),
+                    new XElement("payaccount",item.付款银行账户),
+
+                    new XElement("busidate",item.起算日期),
+
+                    new XElement("bodys",bodys),
+                }),
+                });
+            }
+        }
+    }
+}

+ 233 - 0
HH.YiDaSyncNC/Models/FK_FKD_SyncServiceModel.cs

@@ -0,0 +1,233 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Models
+{
+    class FK_FKD_SyncServiceModel
+    {
+        public class DataModel
+        {
+            public string 集团 { get; set; } = "0";
+            public string 组织 { get; set; }
+
+            public string 支付人 { get; set; }
+            public string 支付日期 { get; set; }
+
+            public string 创建人 { get; set; }
+            public string 创建时间 { get; set; }
+            public string 制单人 { get; set; }
+
+            public string 单据类型 { get; set; } = "F3";
+            public string 付款类型 { get; set; } = "D3";
+            public string 单据大类 { get; set; } = "fk";
+            public string 业务流程 { get; set; } = "AP02";
+
+            public string 单据号 { get; set; }
+            public string 单据日期 { get; set; }
+
+            public string 单据所属系统 { get; set; } = "1";
+            public string 单据来源系统 { get; set; } = "1";
+            public string 单据状态 { get; set; } = "-1";
+            public string 结算状态 { get; set; } = "1";
+            public string 生效状态 { get; set; } = "10";
+
+            public string 生效人 { get; set; }
+            public string 生效日期 { get; set; }
+
+            public string 发票号 { get; set; }
+
+            public string 供应商 { get; set; }
+            public string 币种 { get; set; } = "CNY";
+
+            public string 往来对象 { get; set; } = "1";
+            public string 付款银行账户 { get; set; }
+
+            public string 价税合计 { get; set; }
+
+            public string 年份 { get; set; }
+            public string 月份 { get; set; }
+
+            public string 起算日期 { get; set; }
+
+            public string 汇率 { get; set; } = "1";
+            public string 折扣 { get; set; } = "100";
+
+            public List<Item> 明细 { get; set; }
+
+            public class Item
+            {
+                public string 摘要 { get; set; }
+                public string 科目 { get; set; }
+                public string 部门 { get; set; }
+                public string 项目 { get; set; }
+
+                public string 价税合计 { get; set; }
+                public string 无税金额 { get; set; }
+                public string 税额 { get; set; }
+            }
+        }
+
+        public class ImportXml
+        {
+            /// <summary>
+            /// 模板头部份
+            /// </summary>
+            /// <returns></returns>
+            public static XElement TemplateHeade()
+            {
+
+                return new XElement(new XElement("ufinterface", new object[]
+                {
+                new XAttribute("sender","dingding"),
+                new XAttribute("roottag",""),
+                new XAttribute("replace","Y"),
+                new XAttribute("isexchange","Y"),
+                new XAttribute("groupcode","0"),
+                new XAttribute("filename",""),
+                new XAttribute("billtype","F3"),
+                new XAttribute("proc","add"),
+                new XAttribute("account","develop")
+                }));
+            }
+
+            /// <summary>
+            /// 组建表头xml
+            /// </summary>
+            /// <param name="item">表头参数</param>
+            /// <returns></returns>
+            public static XElement Header(DataModel item, string id)
+            {
+                var bodys = new List<XElement>();
+
+                if (item.明细 != null && item.明细.Count > 0)
+                {
+                    var crowno = 10; // 行号
+
+                    foreach (var itemData in item.明细)
+                    {
+                        bodys.Add(new XElement("item", new object[] {
+                            new XElement("pk_group",item.集团),
+                            new XElement("sett_org",item.组织),
+                            new XElement("pk_org",item.组织),
+                            new XElement("pk_fiorg",item.组织),
+                            new XElement("prepay","0"),
+                            new XElement("supplier",item.供应商),
+                            new XElement("checkdirection","ap"),
+                            new XElement("billdate",item.单据日期),
+
+                            new XElement("pk_billtype",item.单据类型),
+                            new XElement("billclass",item.单据大类),
+                            new XElement("pk_tradetype",item.付款类型),
+                            new XElement("busidate",item.起算日期),
+
+                            new XElement("billno",item.单据号),
+                            new XElement("objtype",item.往来对象),
+                            new XElement("rowno",crowno.ToString()),
+                            new XElement("direction","1"),
+
+                            // new XElement("scomment",itemData.摘要),
+                            new XElement("subjcode",itemData.科目),
+                            new XElement("pk_currtype",item.币种),
+                            new XElement("rate",item.汇率),
+                            new XElement("pk_deptid",itemData.部门),
+                            new XElement("project",itemData.项目),
+
+                            new XElement("money_de",itemData.价税合计),
+                            new XElement("local_money_de",itemData.价税合计),
+                            new XElement("local_money_bal",itemData.价税合计),
+                            new XElement("notax_de",itemData.无税金额),
+                            new XElement("local_notax_de",itemData.价税合计),
+
+                            new XElement("payaccount",item.付款银行账户),
+                            new XElement("invoiceno",item.发票号.Length<=40?item.发票号:item.发票号.Substring(0,40)),
+
+                            new XElement("def12",itemData.税额),
+                            new XElement("def11",itemData.无税金额),
+                            new XElement("occupationmny",itemData.价税合计),
+
+                            new XElement("grouprate","0"),
+                            new XElement("globalrate","0"),
+                            new XElement("groupdebit","0"),
+                            new XElement("globaldebit","0"),
+                            new XElement("groupbalance","0"),
+                            new XElement("globalbalance","0"),
+                            new XElement("groupnotax_de","0"),
+                            new XElement("globalnotax_de","0"),
+
+                        }));
+
+                        crowno = crowno + 10;
+                    }
+                }
+
+                return new XElement("bill", new object[]
+                {
+                "",
+                new XAttribute("id",id),
+                new XElement("billhead", new object[]
+                {
+                    new XElement("pk_group",item.集团),
+                    new XElement("pk_fiorg",item.组织),
+                    new XElement("pk_org",item.组织),
+                    new XElement("sett_org",item.组织),
+                    new XElement("pk_corp",item.组织),
+
+                    new XElement("isreded","N"),
+
+                    new XElement("payman",item.支付人),
+                    new XElement("paydate",item.支付日期),
+                    new XElement("isonlinepay","N"),
+
+                    new XElement("creationtime",item.创建时间),
+                    new XElement("creator",item.创建人),
+
+                    new XElement("pk_billtype",item.单据类型),
+                    new XElement("pk_tradetype",item.付款类型),
+                    new XElement("billclass",item.单据大类),
+                    new XElement("pk_busitype",item.业务流程),
+                    new XElement("ismandatepay","N"),
+                    new XElement("accessorynum","0"),
+                    new XElement("isflowbill","N"),
+                    new XElement("isinit","N"),
+
+                    new XElement("billno",item.单据号),
+                    new XElement("billdate",item.单据日期),
+
+                    new XElement("syscode",item.单据所属系统),
+                    new XElement("src_syscode",item.单据来源系统),
+                    new XElement("billstatus",item.单据状态),
+
+                    new XElement("billmaker",item.制单人),
+                    new XElement("isnetpayready","N"),
+
+                    new XElement("money",item.价税合计),
+                    new XElement("local_money",item.价税合计),
+                    new XElement("billyear",item.年份),
+                    new XElement("billperiod",item.月份),
+
+                    new XElement("settleflag",item.结算状态),
+                    new XElement("effectstatus",item.生效状态),
+                    new XElement("effectuser",item.生效人),
+                    new XElement("effectdate",item.生效日期),
+
+                    new XElement("def2",item.发票号),
+                    //  new XElement("pk_deptid",item.发票号),
+
+                    new XElement("supplier",item.供应商),
+                    new XElement("pk_currtype",item.币种),
+                    new XElement("objtype",item.往来对象),
+                    new XElement("payaccount",item.付款银行账户),
+
+                    new XElement("busidate",item.起算日期),
+
+                    new XElement("bodys",bodys),
+                }),
+                });
+            }
+        }
+    }
+}

+ 233 - 0
HH.YiDaSyncNC/Models/FK_FYBX_SyncServiceModel.cs

@@ -0,0 +1,233 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Models
+{
+    class FK_FYBX_SyncServiceModel
+    {
+        public class DataModel
+        {
+            public string 集团 { get; set; } = "0";
+            public string 组织 { get; set; }
+
+            public string 支付人 { get; set; }
+            public string 支付日期 { get; set; }
+
+            public string 创建人 { get; set; }
+            public string 创建时间 { get; set; }
+            public string 制单人 { get; set; }
+
+            public string 单据类型 { get; set; } = "F3";
+            public string 付款类型 { get; set; } = "F3-Cxx-006";
+            public string 单据大类 { get; set; } = "fk";
+            public string 业务流程 { get; set; } = "AP02";
+
+            public string 单据号 { get; set; }
+            public string 单据日期 { get; set; }
+
+            public string 单据所属系统 { get; set; } = "1";
+            public string 单据来源系统 { get; set; } = "1";
+            public string 单据状态 { get; set; } = "-1";
+            public string 结算状态 { get; set; } = "1";
+            public string 生效状态 { get; set; } = "10";
+
+            public string 生效人 { get; set; } 
+            public string 生效日期 { get; set; }
+
+            public string 发票号 { get; set; }
+
+            public string 供应商 { get; set; } = "999"; // 虚拟供应商999
+            public string 币种 { get; set; } = "CNY";
+
+            public string 往来对象 { get; set; } = "1";
+            public string 付款银行账户 { get; set; }
+
+            public string 价税合计 { get; set; }
+
+            public string 年份 { get; set; }
+            public string 月份 { get; set; }
+            
+            public string 起算日期 { get; set; }
+
+            public string 汇率 { get; set; } = "1";
+            public string 折扣 { get; set; } = "100";
+
+            public List<Item> 明细 { get; set; }
+
+            public class Item
+            {
+                public string 摘要 { get; set; }
+                public string 科目 { get; set; }
+                public string 部门 { get; set; }
+                public string 项目 { get; set; }
+
+                public string 价税合计 { get; set; }
+                public string 无税金额 { get; set; }
+                public string 税额 { get; set; }
+            }
+        }
+
+        public class ImportXml
+        {
+            /// <summary>
+            /// 模板头部份
+            /// </summary>
+            /// <returns></returns>
+            public static XElement TemplateHeade()
+            {
+
+                return new XElement(new XElement("ufinterface", new object[]
+                {
+                new XAttribute("sender","dingding"),
+                new XAttribute("roottag",""),
+                new XAttribute("replace","Y"),
+                new XAttribute("isexchange","Y"),
+                new XAttribute("groupcode","0"),
+                new XAttribute("filename",""),
+                new XAttribute("billtype","F3"),
+                new XAttribute("proc","add"),
+                new XAttribute("account","develop")
+                }));
+            }
+
+            /// <summary>
+            /// 组建表头xml
+            /// </summary>
+            /// <param name="item">表头参数</param>
+            /// <returns></returns>
+            public static XElement Header(DataModel item, string id)
+            {
+                var bodys = new List<XElement>();
+
+                if (item.明细 != null && item.明细.Count > 0)
+                {
+                    var crowno = 10; // 行号
+
+                    foreach (var itemData in item.明细)
+                    {
+                        bodys.Add(new XElement("item", new object[] {
+                            new XElement("pk_group",item.集团),
+                            new XElement("sett_org",item.组织),
+                            new XElement("pk_org",item.组织),
+                            new XElement("pk_fiorg",item.组织),
+                            new XElement("prepay","0"),
+                            new XElement("supplier",item.供应商),
+                            new XElement("checkdirection","ap"),
+                            new XElement("billdate",item.单据日期),
+
+                            new XElement("pk_billtype",item.单据类型),
+                            new XElement("billclass",item.单据大类),
+                            new XElement("pk_tradetype",item.付款类型),
+                            new XElement("busidate",item.起算日期),
+
+                            new XElement("billno",item.单据号),
+                            new XElement("objtype",item.往来对象),
+                            new XElement("rowno",crowno.ToString()),
+                            new XElement("direction","1"),
+
+                            // new XElement("scomment",itemData.摘要),
+                            new XElement("subjcode",itemData.科目),
+                            new XElement("pk_currtype",item.币种),
+                            new XElement("rate",item.汇率),
+                            new XElement("pk_deptid",itemData.部门),
+                            new XElement("project",itemData.项目),
+
+                            new XElement("money_de",itemData.价税合计),
+                            new XElement("local_money_de",itemData.价税合计),
+                            new XElement("local_money_bal",itemData.价税合计),
+                            new XElement("notax_de",itemData.无税金额),
+                            new XElement("local_notax_de",itemData.价税合计),
+
+                            new XElement("payaccount",item.付款银行账户),
+                            // new XElement("invoiceno",item.发票号),
+
+                            new XElement("def12",itemData.税额),
+                            new XElement("def11",itemData.无税金额),
+                            new XElement("occupationmny",itemData.价税合计),
+
+                            new XElement("grouprate","0"),
+                            new XElement("globalrate","0"),
+                            new XElement("groupdebit","0"),
+                            new XElement("globaldebit","0"),
+                            new XElement("groupbalance","0"),
+                            new XElement("globalbalance","0"),
+                            new XElement("groupnotax_de","0"),
+                            new XElement("globalnotax_de","0"),
+
+                        }));
+
+                        crowno = crowno + 10;
+                    }
+                }
+
+                return new XElement("bill", new object[]
+                {
+                "",
+                new XAttribute("id",id),
+                new XElement("billhead", new object[]
+                {
+                    new XElement("pk_group",item.集团),
+                    new XElement("pk_fiorg",item.组织),
+                    new XElement("pk_org",item.组织),
+                    new XElement("sett_org",item.组织),
+                    new XElement("pk_corp",item.组织),
+
+                    new XElement("isreded","N"),
+
+                    new XElement("payman",item.支付人),
+                    new XElement("paydate",item.支付日期),
+                    new XElement("isonlinepay","N"),
+
+                    new XElement("creationtime",item.创建时间),
+                    new XElement("creator",item.创建人),
+
+                    new XElement("pk_billtype",item.单据类型),
+                    new XElement("pk_tradetype",item.付款类型),
+                    new XElement("billclass",item.单据大类),
+                    new XElement("pk_busitype",item.业务流程),
+                    new XElement("ismandatepay","N"),
+                    new XElement("accessorynum","0"),
+                    new XElement("isflowbill","N"),
+                    new XElement("isinit","N"),
+
+                    new XElement("billno",item.单据号),
+                    new XElement("billdate",item.单据日期),
+
+                    new XElement("syscode",item.单据所属系统),
+                    new XElement("src_syscode",item.单据来源系统),
+                    new XElement("billstatus",item.单据状态),
+
+                    new XElement("billmaker",item.制单人),
+                    new XElement("isnetpayready","N"),
+
+                    new XElement("money",item.价税合计),
+                    new XElement("local_money",item.价税合计),
+                    new XElement("billyear",item.年份),
+                    new XElement("billperiod",item.月份),
+
+                    new XElement("settleflag",item.结算状态),
+                    new XElement("effectstatus",item.生效状态),
+                    new XElement("effectuser",item.生效人),
+                    new XElement("effectdate",item.生效日期),
+
+                    new XElement("def2",item.发票号),
+                    //  new XElement("pk_deptid",item.发票号),
+
+                    new XElement("supplier",item.供应商),
+                    new XElement("pk_currtype",item.币种),
+                    new XElement("objtype",item.往来对象),
+                    new XElement("payaccount",item.付款银行账户),
+
+                    new XElement("busidate",item.起算日期),
+
+                    new XElement("bodys",bodys),
+                }),
+                });
+            }
+        }
+    }
+}

+ 233 - 0
HH.YiDaSyncNC/Models/FK_SyncServiceModel.cs

@@ -0,0 +1,233 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Models
+{
+    class FK_SyncServiceModel
+    {
+        public class DataModel
+        {
+            public string 集团 { get; set; } = "0";
+            public string 组织 { get; set; }
+
+            public string 支付人 { get; set; }
+            public string 支付日期 { get; set; }
+
+            public string 创建人 { get; set; }
+            public string 创建时间 { get; set; }
+            public string 制单人 { get; set; }
+
+            public string 单据类型 { get; set; } = "F3";
+            public string 付款类型 { get; set; } = "F3-Cxx-010";
+            public string 单据大类 { get; set; } = "fk";
+            public string 业务流程 { get; set; } = "AP02";
+
+            public string 单据号 { get; set; }
+            public string 单据日期 { get; set; }
+
+            public string 单据所属系统 { get; set; } = "1";
+            public string 单据来源系统 { get; set; } = "1";
+            public string 单据状态 { get; set; } = "-1";
+            public string 结算状态 { get; set; } = "1";
+            public string 生效状态 { get; set; } = "10";
+
+            public string 生效人 { get; set; } 
+            public string 生效日期 { get; set; }
+
+            public string 发票号 { get; set; }
+
+            public string 供应商 { get; set; }
+            public string 币种 { get; set; } = "CNY";
+
+            public string 往来对象 { get; set; } = "1";
+            public string 付款银行账户 { get; set; }
+
+            public string 价税合计 { get; set; }
+
+            public string 年份 { get; set; }
+            public string 月份 { get; set; }
+            
+            public string 起算日期 { get; set; }
+
+            public string 汇率 { get; set; } = "1";
+            public string 折扣 { get; set; } = "100";
+
+            public List<Item> 明细 { get; set; }
+
+            public class Item
+            {
+                public string 摘要 { get; set; }
+                public string 科目 { get; set; }
+                public string 部门 { get; set; }
+                public string 项目 { get; set; }
+
+                public string 价税合计 { get; set; }
+                public string 无税金额 { get; set; }
+                public string 税额 { get; set; }
+            }
+        }
+
+        public class ImportXml
+        {
+            /// <summary>
+            /// 模板头部份
+            /// </summary>
+            /// <returns></returns>
+            public static XElement TemplateHeade()
+            {
+
+                return new XElement(new XElement("ufinterface", new object[]
+                {
+                new XAttribute("sender","dingding"),
+                new XAttribute("roottag",""),
+                new XAttribute("replace","Y"),
+                new XAttribute("isexchange","Y"),
+                new XAttribute("groupcode","0"),
+                new XAttribute("filename",""),
+                new XAttribute("billtype","F3"),
+                new XAttribute("proc","add"),
+                new XAttribute("account","develop")
+                }));
+            }
+
+            /// <summary>
+            /// 组建表头xml
+            /// </summary>
+            /// <param name="item">表头参数</param>
+            /// <returns></returns>
+            public static XElement Header(DataModel item, string id)
+            {
+                var bodys = new List<XElement>();
+
+                if (item.明细 != null && item.明细.Count > 0)
+                {
+                    var crowno = 10; // 行号
+
+                    foreach (var itemData in item.明细)
+                    {
+                        bodys.Add(new XElement("item", new object[] {
+                            new XElement("pk_group",item.集团),
+                            new XElement("sett_org",item.组织),
+                            new XElement("pk_org",item.组织),
+                            new XElement("pk_fiorg",item.组织),
+                            new XElement("prepay","0"),
+                            new XElement("supplier",item.供应商),
+                            new XElement("checkdirection","ap"),
+                            new XElement("billdate",item.单据日期),
+
+                            new XElement("pk_billtype",item.单据类型),
+                            new XElement("billclass",item.单据大类),
+                            new XElement("pk_tradetype",item.付款类型),
+                            new XElement("busidate",item.起算日期),
+
+                            new XElement("billno",item.单据号),
+                            new XElement("objtype",item.往来对象),
+                            new XElement("rowno",crowno.ToString()),
+                            new XElement("direction","1"),
+
+                            // new XElement("scomment",itemData.摘要),
+                            new XElement("subjcode",itemData.科目),
+                            new XElement("pk_currtype",item.币种),
+                            new XElement("rate",item.汇率),
+                            new XElement("pk_deptid",itemData.部门),
+                            new XElement("project",itemData.项目),
+
+                            new XElement("money_de",itemData.价税合计),
+                            new XElement("local_money_de",itemData.价税合计),
+                            new XElement("local_money_bal",itemData.价税合计),
+                            new XElement("notax_de",itemData.无税金额),
+                            new XElement("local_notax_de",itemData.价税合计),
+
+                            new XElement("payaccount",item.付款银行账户),
+                            // new XElement("invoiceno",item.发票号),
+
+                            new XElement("def12",itemData.税额),
+                            new XElement("def11",itemData.无税金额),
+                            new XElement("occupationmny",itemData.价税合计),
+
+                            new XElement("grouprate","0"),
+                            new XElement("globalrate","0"),
+                            new XElement("groupdebit","0"),
+                            new XElement("globaldebit","0"),
+                            new XElement("groupbalance","0"),
+                            new XElement("globalbalance","0"),
+                            new XElement("groupnotax_de","0"),
+                            new XElement("globalnotax_de","0"),
+
+                        }));
+
+                        crowno = crowno + 10;
+                    }
+                }
+
+                return new XElement("bill", new object[]
+                {
+                "",
+                new XAttribute("id",id),
+                new XElement("billhead", new object[]
+                {
+                    new XElement("pk_group",item.集团),
+                    new XElement("pk_fiorg",item.组织),
+                    new XElement("pk_org",item.组织),
+                    new XElement("sett_org",item.组织),
+                    new XElement("pk_corp",item.组织),
+
+                    new XElement("isreded","N"),
+
+                    new XElement("payman",item.支付人),
+                    new XElement("paydate",item.支付日期),
+                    new XElement("isonlinepay","N"),
+
+                    new XElement("creationtime",item.创建时间),
+                    new XElement("creator",item.创建人),
+
+                    new XElement("pk_billtype",item.单据类型),
+                    new XElement("pk_tradetype",item.付款类型),
+                    new XElement("billclass",item.单据大类),
+                    new XElement("pk_busitype",item.业务流程),
+                    new XElement("ismandatepay","N"),
+                    new XElement("accessorynum","0"),
+                    new XElement("isflowbill","N"),
+                    new XElement("isinit","N"),
+
+                    new XElement("billno",item.单据号),
+                    new XElement("billdate",item.单据日期),
+
+                    new XElement("syscode",item.单据所属系统),
+                    new XElement("src_syscode",item.单据来源系统),
+                    new XElement("billstatus",item.单据状态),
+
+                    new XElement("billmaker",item.制单人),
+                    new XElement("isnetpayready","N"),
+
+                    new XElement("money",item.价税合计),
+                    new XElement("local_money",item.价税合计),
+                    new XElement("billyear",item.年份),
+                    new XElement("billperiod",item.月份),
+
+                    new XElement("settleflag",item.结算状态),
+                    new XElement("effectstatus",item.生效状态),
+                    new XElement("effectuser",item.生效人),
+                    new XElement("effectdate",item.生效日期),
+
+                    new XElement("def2",item.发票号),
+                   //  new XElement("pk_deptid",item.发票号),
+
+                    new XElement("supplier",item.供应商),
+                    new XElement("pk_currtype",item.币种),
+                    new XElement("objtype",item.往来对象),
+                    new XElement("payaccount",item.付款银行账户),
+
+                    new XElement("busidate",item.起算日期),
+
+                    new XElement("bodys",bodys),
+                }),
+                });
+            }
+        }
+    }
+}

+ 240 - 0
HH.YiDaSyncNC/Models/FK_XZ_SyncServiceModel.cs

@@ -0,0 +1,240 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Xml.Linq;
+
+namespace HH.YiDaSyncNC.Models
+{
+    class FK_XZ_SyncServiceModel
+    {
+        public class DataModel
+        {
+            public string 集团 { get; set; } = "0";
+            public string 组织 { get; set; }
+
+            public string 支付人 { get; set; }
+            public string 支付日期 { get; set; }
+
+            public string 创建人 { get; set; }
+            public string 创建时间 { get; set; }
+            public string 制单人 { get; set; }
+
+            public string 单据类型 { get; set; } = "F3";
+            public string 付款类型 { get; set; }
+            public string 单据大类 { get; set; } = "fk";
+            public string 业务流程 { get; set; } = "AP02";
+
+            public string 单据号 { get; set; }
+            public string 单据日期 { get; set; }
+
+            public string 单据所属系统 { get; set; } = "1";
+            public string 单据来源系统 { get; set; } = "1";
+            public string 单据状态 { get; set; } = "-1";
+            public string 结算状态 { get; set; } = "1";
+            public string 生效状态 { get; set; } = "10";
+
+            public string 生效人 { get; set; }
+            public string 生效日期 { get; set; }
+
+            public string 发票号 { get; set; }
+
+            public string 供应商 { get; set; }
+            public string 币种 { get; set; } = "CNY";
+
+            public string 往来对象 { get; set; } = "1";
+            public string 付款银行账户 { get; set; }
+
+            public string 价税合计 { get; set; }
+
+            public string 年份 { get; set; }
+            public string 月份 { get; set; }
+
+            public string 起算日期 { get; set; }
+
+            public string 汇率 { get; set; } = "1";
+            public string 折扣 { get; set; } = "100";
+
+            public string 是否预付 { get; set; } = "0";
+
+            public List<Item> 明细 { get; set; }
+
+            public class Item
+            {
+                public string 摘要 { get; set; }
+                public string 科目 { get; set; }
+                public string 部门 { get; set; }
+                public string 项目 { get; set; }
+
+                public string 价税合计 { get; set; }
+                public string 无税金额 { get; set; }
+                public string 税额 { get; set; }
+
+                public string 承担主体 { get; set; }
+            }
+        }
+
+        public class ImportXml
+        {
+            /// <summary>
+            /// 模板头部份
+            /// </summary>
+            /// <returns></returns>
+            public static XElement TemplateHeade()
+            {
+
+                return new XElement(new XElement("ufinterface", new object[]
+                {
+                new XAttribute("sender","dingding"),
+                new XAttribute("roottag",""),
+                new XAttribute("replace","Y"),
+                new XAttribute("isexchange","Y"),
+                new XAttribute("groupcode","0"),
+                new XAttribute("filename",""),
+                new XAttribute("billtype","F3"),
+                new XAttribute("proc","add"),
+                new XAttribute("account","develop")
+                }));
+            }
+
+            /// <summary>
+            /// 组建表头xml
+            /// </summary>
+            /// <param name="item">表头参数</param>
+            /// <returns></returns>
+            public static XElement Header(DataModel item, string id)
+            {
+                var bodys = new List<XElement>();
+
+                if (item.明细 != null && item.明细.Count > 0)
+                {
+                    var crowno = 10; // 行号
+
+                    foreach (var itemData in item.明细)
+                    {
+                        bodys.Add(new XElement("item", new object[] {
+                            new XElement("pk_group",item.集团),
+                            new XElement("sett_org",item.组织),
+                            new XElement("pk_org",item.组织),
+                            new XElement("pk_fiorg",item.组织),
+                            new XElement("prepay",item.是否预付),
+                            new XElement("supplier",item.供应商),
+                            new XElement("checkdirection","ap"),
+                            new XElement("billdate",item.单据日期),
+
+                            new XElement("pk_billtype",item.单据类型),
+                            new XElement("billclass",item.单据大类),
+                            new XElement("pk_tradetype",item.付款类型),
+                            new XElement("busidate",item.起算日期),
+
+                            new XElement("billno",item.单据号),
+                            new XElement("objtype",item.往来对象),
+                            new XElement("rowno",crowno.ToString()),
+                            new XElement("direction","1"),
+
+                            // new XElement("scomment",itemData.摘要),
+                            new XElement("subjcode",itemData.科目),
+                            new XElement("pk_currtype",item.币种),
+                            new XElement("rate",item.汇率),
+                            new XElement("pk_deptid",itemData.部门),
+                            new XElement("project",itemData.项目),
+
+                            new XElement("money_de",itemData.价税合计),
+                            new XElement("local_money_de",itemData.价税合计),
+                            new XElement("local_money_bal",itemData.价税合计),
+                            new XElement("notax_de",itemData.无税金额),
+                            new XElement("local_notax_de",itemData.价税合计),
+
+                            new XElement("payaccount",item.付款银行账户),
+                            new XElement("invoiceno",item.发票号.Length<=40?item.发票号:item.发票号.Substring(0,40)),
+
+                            new XElement("def12",itemData.税额),
+                            new XElement("def11",itemData.无税金额),
+
+                            new XElement("def9",itemData.承担主体),
+
+                            new XElement("occupationmny",itemData.价税合计),
+
+                            new XElement("grouprate","0"),
+                            new XElement("globalrate","0"),
+                            new XElement("groupdebit","0"),
+                            new XElement("globaldebit","0"),
+                            new XElement("groupbalance","0"),
+                            new XElement("globalbalance","0"),
+                            new XElement("groupnotax_de","0"),
+                            new XElement("globalnotax_de","0"),
+
+                        }));
+
+                        crowno = crowno + 10;
+                    }
+                }
+
+                return new XElement("bill", new object[]
+                {
+                "",
+                new XAttribute("id",id),
+                new XElement("billhead", new object[]
+                {
+                    new XElement("pk_group",item.集团),
+                    new XElement("pk_fiorg",item.组织),
+                    new XElement("pk_org",item.组织),
+                    new XElement("sett_org",item.组织),
+                    new XElement("pk_corp",item.组织),
+
+                    new XElement("isreded","N"),
+
+                    new XElement("payman",item.支付人),
+                    new XElement("paydate",item.支付日期),
+                    new XElement("isonlinepay","N"),
+
+                    new XElement("creationtime",item.创建时间),
+                    new XElement("creator",item.创建人),
+
+                    new XElement("pk_billtype",item.单据类型),
+                    new XElement("pk_tradetype",item.付款类型),
+                    new XElement("billclass",item.单据大类),
+                    new XElement("pk_busitype",item.业务流程),
+                    new XElement("ismandatepay","N"),
+                    new XElement("accessorynum","0"),
+                    new XElement("isflowbill","N"),
+                    new XElement("isinit","N"),
+
+                    new XElement("billno",item.单据号),
+                    new XElement("billdate",item.单据日期),
+
+                    new XElement("syscode",item.单据所属系统),
+                    new XElement("src_syscode",item.单据来源系统),
+                    new XElement("billstatus",item.单据状态),
+
+                    new XElement("billmaker",item.制单人),
+                    new XElement("isnetpayready","N"),
+
+                    new XElement("money",item.价税合计),
+                    new XElement("local_money",item.价税合计),
+                    new XElement("billyear",item.年份),
+                    new XElement("billperiod",item.月份),
+
+                    new XElement("settleflag",item.结算状态),
+                    new XElement("effectstatus",item.生效状态),
+                    new XElement("effectuser",item.生效人),
+                    new XElement("effectdate",item.生效日期),
+
+                    new XElement("def2",item.发票号),
+                   //  new XElement("pk_deptid",item.发票号),
+
+                    new XElement("supplier",item.供应商),
+                    new XElement("pk_currtype",item.币种),
+                    new XElement("objtype",item.往来对象),
+                    new XElement("payaccount",item.付款银行账户),
+
+                    new XElement("busidate",item.起算日期),
+
+                    new XElement("bodys",bodys),
+                }),
+                });
+            }
+        }
+    }
+}

+ 0 - 0
HH.YiDaSyncNC/Models/FK_YF_SyncServiceModel.cs


Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio