晓海 曾 2 년 전
부모
커밋
4f75be5802

+ 1 - 0
HH.YiDaSyncNC/App.config

@@ -38,6 +38,7 @@
     <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" />

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 14 - 8
HH.YiDaSyncNC/DataSync/CGDD_SyncService.cs


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

@@ -0,0 +1,305 @@
+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);
+                }
+
+                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
+        }
+    }
+}

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

@@ -0,0 +1,256 @@
+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();
+                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());
+                            var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
+                            var 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\":\"FYBX202407170105\"}");
+
+            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 == "dateField_lsx0pirp").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
+        }
+    }
+}

+ 154 - 66
HH.YiDaSyncNC/DataSync/FK_SyncService.cs

@@ -49,18 +49,17 @@ namespace HH.YiDaSyncNC.DataSync
             DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
 
             // 宜搭全量数据Id
-            var idList = _dingTalkService.GetModifyFormIdList();
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lrnh633d\":\"结付\",,\"selectField_lwiuvaws\":\"日常费用付款\"}");
 
-            //// 获取当前最大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;
-            //}
+            //var idList = _dingTalkService.GetFormIdList("{\"selectField_lwiuvaws\":\"日常费用付款\",\"selectField_lrnh633d\":\"结付\"}");
+
+            //var idList = _dingTalkService.GetFormIdList("{\"textField_lvj2jklf\":\"FK2024070500023\"}");
+
+            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 插入数据
@@ -73,98 +72,187 @@ namespace HH.YiDaSyncNC.DataSync
 
                 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"];
+                var ncResData = new List<YiDaResDto>();
 
-                foreach (var objItem in suplinkmanObjList)
+                #region 表头
+                // 表头
+                var dataSource = new FK_SyncServiceModel.DataModel();
+                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lvywoqmb").Value != null)
                 {
-                    suplinkmanDataList.Add(new KH_SyncServiceModel.DataModel.SuplinkmanItem()
+                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lvywoqmb"].ToString()))
                     {
-                        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 tempData = org_orgsDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lvywoqmb"].ToString());
+                        if (tempData != null)
+                        {
+                            dataSource.组织 = tempData.code; // 组织
+                        }
+                    }
                 }
 
+                dataSource.支付人 = "OA-NC";
 
-                var dataSource = new KH_SyncServiceModel.DataModel()
+                if (!string.IsNullOrWhiteSpace(ydDataSource["dateField_lwitiobz"].ToString()))
                 {
-                    pk_group = "0",
-                    pk_org = "0",
-                    code = ydDataSource["serialNumberField_ls14do3x"].ToString(),
-                    name = ydDataSource["textField_lr25icbn"].ToString(),
-                    taxpayerid = ydDataSource["textField_lt425f37"].ToString(),
-                    custprop = "0",
+                    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");
 
-                if (ydDataSource.FirstOrDefault(f => f.Key == "selectField_lrrdx03y").Value != null)
+                dataSource.发票号 = ydDataSource["textField_lw7erc7d"].ToString();
+                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)
                 {
-                    if (!string.IsNullOrWhiteSpace(ydDataSource["selectField_lrrdx03y"].ToString()))
+                    var detailObjList1 = (List<object>)ydDataSource["tableField_lrngrtgu"]; // 付款明细
+
+                    if (detailObjList1.Count() > 0 && !string.IsNullOrWhiteSpace(((Dictionary<string, object>)detailObjList1.FirstOrDefault())["numberField_lvua3j17"].ToString()))
                     {
-                        var a = bd_custclassDic.FirstOrDefault(f => f.name == ydDataSource["selectField_lrrdx03y"].ToString());
-                        if (a != null)
-                            dataSource.pk_custclass = a.code; // 分类s
-                    }
-                }
+                        foreach (var objItem in detailObjList1)
+                        {
+                            var detailItem = new FK_SyncServiceModel.DataModel.Item();
 
-                dataSource.suplinkman = suplinkmanDataList;
+                            var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
+                            var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
+                            var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
 
-                var xmlData = KH_SyncServiceModel.ImportXml.Header(dataSource, item);
+                            // 含税金额
+                            detailItem.价税合计 = hsje.ToString();
 
-                XElement tempData = KH_SyncServiceModel.ImportXml.TemplateHeade();
+                            // 无税金额
+                            detailItem.无税金额 = wsje.ToString();
 
-                var results = NCImportFunc.NCImport(tempData, xmlData, _NCApiUrl + "?account=01&groupcode=0");
+                            // 税额
+                            detailItem.税额 = se.ToString();
 
-                // DBHelper.WriteLog(results);
-                XElement xE = XElement.Parse(results);
+                            detailItem.摘要 = ((Dictionary<string, object>)objItem)["textField_lvxa4v05"].ToString();
 
-                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                            detailItem.科目 = ((Dictionary<string, object>)objItem)["textField_lwitioce"].ToString();
 
-                // DBHelper.WriteLog($"状态码:" + resultcode);
+                            var a = ((Dictionary<string, object>)objItem)["textField_lypfw8rw"].ToString();
+                            if (a.Contains("PM"))
+                                detailItem.项目 = a;
+                            else
+                                detailItem.部门 = a;
 
-                string content = xE.Element("sendresult").Element("content")?.Value;
+                            detailList.Add(detailItem);
+                        }
+                    }
+                }
+                #endregion
 
-                string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value;
+                dataSource.明细 = detailList;
+                dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
 
-                var ncResData = new YiDaResDto()
+                if (string.IsNullOrWhiteSpace(dataSource.付款银行账户))
                 {
-                    syncTime = DateTime.Now,
-                };
+                    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;
 
-                // NC接口执行完成后的处理
                 if (resultcode == "1")
                 {
-                    
-                    DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作成功!");
+                    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.摘要;
 
-                    ncResData.bSuccess = true;
-                    ncResData.ncNo = xE.Element("sendresult").Element("content").Value;
-                    ncResData.log = "同步成功!";
+                        _db_nc.Updateable(recitem).ExecuteCommand();
+                    }
                 }
                 else
                 {
-                    DBHelper.WriteLog($"Id为【{JsonConvert.SerializeObject(item)}】的单据操作失败!" + resultdescription + ";");
+                    ncResData.Add(new YiDaResDto()
+                    {
+                        bSuccess = false,
+                        ncNo = "",
+                        log = "同步失败!原因为【" + resultdescription + "】!"
+                    });
+                }
 
-                    if (resultdescription.Contains("不允许重复"))
+                var results_付款单审核 = HttpRequestHelper.ApproveNCFKBill(xE.Element("sendresult").Element("content").Value);
+
+                LogHelper.WriteLog(JsonConvert.SerializeObject(results_付款单审核), "results_付款单审核");
+
+                if (results_付款单审核.state == 0)
+                {
+                    ncResData.Add(new YiDaResDto()
                     {
-                        ncResData.bSuccess = true;
-                        ncResData.ncNo = "";
-                        ncResData.log = "数据已存在,无需同步!";
-                    }
-                    else
+                        bSuccess = true,
+                        ncNo = "",
+                        log = "同步成功!"
+                    });
+                }
+                else
+                {
+                    ncResData.Add(new YiDaResDto()
                     {
-                        ncResData.bSuccess = false;
-                        ncResData.ncNo = "";
-                        ncResData.log = "同步失败!原因为【" + resultdescription + "】";
-                    }
+                        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(ncResData, item);
+                var ydRes = _dingTalkService.UpdateFormDataSyncDataById(finalResData, item);
             }
             #endregion
         }

+ 489 - 0
HH.YiDaSyncNC/DataSync/FK_XZ_SyncService.cs

@@ -0,0 +1,489 @@
+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_XZ_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_XZ_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\":\"FK2024070500023\"}");
+
+            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_XZ_SyncServiceModel.DataModel();
+
+                dataSource.付款类型 = "F3-Cxx-008";
+
+                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();
+                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_XZ_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_XZ_SyncServiceModel.DataModel.Item();
+
+                            var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
+                            //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
+                            //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
+
+                            // 含税金额
+                            detailItem.价税合计 = hsje.ToString();
+
+                            // 无税金额
+                            detailItem.无税金额 = hsje.ToString();
+
+                            // 税额
+                            detailItem.税额 = "0";
+
+                            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;
+
+                            var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
+
+                            detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
+
+                            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_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_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
+        }
+
+        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\":\"FK2024070500023\"}");
+
+            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_XZ_SyncServiceModel.DataModel();
+
+                dataSource.付款类型 = "F3-Cxx-009";
+
+                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();
+                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_XZ_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_XZ_SyncServiceModel.DataModel.Item();
+
+                            var hsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvua3j17"].ToString());
+                            //var se = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v08"].ToString());
+                            //var wsje = Convert.ToDecimal(((Dictionary<string, object>)objItem)["numberField_lvxa4v09"].ToString());
+
+                            // 含税金额
+                            detailItem.价税合计 = hsje.ToString();
+
+                            // 无税金额
+                            detailItem.无税金额 = hsje.ToString();
+
+
+
+                            // 税额
+                            detailItem.税额 = "0";
+
+                            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;
+
+                            var cdzt = ((Dictionary<string, object>)objItem)["selectField_lwiufn1k"].ToString();
+
+                            detailItem.承担主体 = cdzt == "公司" ? "1001G1100000000B83QS" : cdzt == "个人" ? "1001G1100000000B83QT" : "";
+
+                            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_XZ_SyncServiceModel.ImportXml.TemplateHeade(), FK_XZ_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
+        }
+    }
+}

+ 1 - 1
HH.YiDaSyncNC/DataSync/KH_SyncService.cs

@@ -49,7 +49,7 @@ namespace HH.YiDaSyncNC.DataSync
             DingTalkService _dingTalkService = new DingTalkService(_AppType, _SystemToken, _UserId, _FormId);
 
             // 宜搭全量数据Id
-            var idList = _dingTalkService.GetModifyFormIdList();
+            var idList = _dingTalkService.GetFormIdList("{\"serialNumberField_ls14do3x\":\"KH00007\"}");
 
             //// 获取当前最大Id
             //var newId = 100000001;

+ 15 - 7
HH.YiDaSyncNC/DataSync/KP_SyncService.cs

@@ -56,7 +56,9 @@ namespace HH.YiDaSyncNC.DataSync
 
             // 宜搭全量数据Id
             //var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\",\"selectField_lvituew9\":\"正常\"}");
-            var idList = _dingTalkService.GetFormIdList("{\"textField_lvdosccc\":\"KP_2024071700252\"}");
+            //var idList = _dingTalkService.GetFormIdList("{\"textField_lvdosccc\":\"KP_2024071700252\"}");
+
+            var idList = _dingTalkService.GetFormIdList("{\"radioField_lycrvvtk\":\"Y\"}");
 
             LogHelper.WriteLog(JsonConvert.SerializeObject(idList.Count), "idList");
 
@@ -83,10 +85,11 @@ namespace HH.YiDaSyncNC.DataSync
 
                 var ydDataSource = _dingTalkService.GetFormDataById(item, out createTime, out modifyTime);
 
-                //if (ydDataSource.FirstOrDefault(f => f.Key == "dateField_ltxyt75l").Value != null && UnixTimeHelper.ConvertMillisecondsToDateTime(Convert.ToInt64(ydDataSource["dateField_ltxyt75l"].ToString())).ToString("yyyy-MM-dd") != "2024-07-16")
-                //{
-                //    continue;
-                //}
+                // 如果NC单据号为空,说明没有传入过NC,此时需要走此逻辑去创建销售订单等
+                if (ydDataSource.FirstOrDefault(f => f.Key == "textField_ltxyt75m").Value != null && !string.IsNullOrWhiteSpace(ydDataSource["textField_ltxyt75m"].ToString()))
+                {
+                    continue;
+                }
 
                 var ncResData = new List<YiDaResDto>();
 
@@ -456,7 +459,7 @@ namespace HH.YiDaSyncNC.DataSync
                 dataSource.价税合计 = dataSource.明细.Sum(s => Convert.ToDecimal(s.价税合计)).ToString();
 
 
-                var results_销售订单 = NCImportFunc.NCImport(KP_SyncServiceModel.ImportXml_销售订单.TemplateHeade(), KP_SyncServiceModel.ImportXml_销售订单.Header(dataSource, item + "05"), _NCApiUrl + "?account=LY01&groupcode=0");
+                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_销售订单");
 
@@ -498,7 +501,7 @@ namespace HH.YiDaSyncNC.DataSync
                     detailItem.销售订单子表id = saleorderbData.FirstOrDefault(f => f.vbdef10 == detailItem.行id).csaleorderbid;
                 }
 
-                var results_销售发票 = NCImportFunc.NCImport(KP_SyncServiceModel.ImportXml_销售发票.TemplateHeade(), KP_SyncServiceModel.ImportXml_销售发票.Header(dataSource, item + "05"), _NCApiUrl + "?account=LY01&groupcode=0");
+                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_销售发票");
@@ -569,6 +572,11 @@ namespace HH.YiDaSyncNC.DataSync
                     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);
             }
 

+ 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
+        }
+    }
+}

+ 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; }
+    }
+}

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

@@ -12,5 +12,6 @@ namespace HH.YiDaSyncNC.Dtos
         public DateTime syncTime { get; set; }
         public string ncNo { get; set; }
         public string log { get; set; }
+        public string bNeedSync { get; set; } = "N";
     }
 }

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

@@ -128,15 +128,22 @@
     <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_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\KP_TP_SyncService.cs" />
     <Compile Include="DataSync\KP_SyncService.cs" />
     <Compile Include="DataSync\YF_FPRZ_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\bd_defdoc.cs" />
     <Compile Include="Dtos\NC\bd_income.cs" />
@@ -193,6 +200,10 @@
     <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_XZ_SyncServiceModel.cs" />
     <Compile Include="Models\FK_SyncServiceModel.cs" />
     <Compile Include="Models\HKD_GL_SyncServiceModel.cs" />
     <Compile Include="Models\XSFP_SyncServiceModel.cs" />

+ 2 - 1
HH.YiDaSyncNC/Helper/DingTalkService.cs

@@ -163,7 +163,7 @@ namespace HH.YiDaSyncNC.Helper
             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", "N");
+            data.Add("radioField_lycrvvtk", resData.bNeedSync);
 
             return UpdateFormDataByIdFunc(JsonConvert.SerializeObject(data), FormInstanceId);
         }
@@ -240,6 +240,7 @@ namespace HH.YiDaSyncNC.Helper
             }
         }
         #endregion
+
         #endregion
 
         #region 宜搭接原始口

+ 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.发票号),
+
+                            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),
+                }),
+                });
+            }
+        }
+    }
+}

+ 162 - 35
HH.YiDaSyncNC/Models/FK_SyncServiceModel.cs

@@ -11,22 +11,63 @@ namespace HH.YiDaSyncNC.Models
     {
         public class DataModel
         {
-            public string pk_group { get; set; }
-            public string pk_org { get; set; }
+            public string 集团 { get; set; } = "0";
+            public string 组织 { get; set; }
 
-            public string code { get; set; }
-            public string name { get; set; }
-            public string pk_custclass { get; set; }
-            public string taxpayerid { get; set; }
-            public string custprop { get; set; }
+            public string 支付人 { get; set; }
+            public string 支付日期 { get; set; }
 
-            public List<SuplinkmanItem> suplinkman { get; set; }
+            public string 创建人 { get; set; }
+            public string 创建时间 { get; set; }
+            public string 制单人 { get; set; }
 
-            public class SuplinkmanItem
+            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 name { get; set; }
-                public string cell { get; set; }
-                public string vjob { 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; }
             }
         }
 
@@ -47,7 +88,7 @@ namespace HH.YiDaSyncNC.Models
                 new XAttribute("isexchange","Y"),
                 new XAttribute("groupcode","0"),
                 new XAttribute("filename",""),
-                new XAttribute("billtype","customer"),
+                new XAttribute("billtype","F3"),
                 new XAttribute("proc","add"),
                 new XAttribute("account","develop")
                 }));
@@ -60,21 +101,66 @@ namespace HH.YiDaSyncNC.Models
             /// <returns></returns>
             public static XElement Header(DataModel item, string id)
             {
-                var suplinkmanList = new List<XElement>();
+                var bodys = new List<XElement>();
 
-                if (item.suplinkman != null && item.suplinkman.Count > 0)
+                if (item.明细 != null && item.明细.Count > 0)
                 {
-                    foreach (var itemData in item.suplinkman)
+                    var crowno = 10; // 行号
+
+                    foreach (var itemData in item.明细)
                     {
-                        suplinkmanList.Add(new XElement("item", new object[] {
-                            new XElement("linkmanvo",new object[]{
-                                new XElement("name",itemData.name),
-                                new XElement("cell",itemData.cell),
-                                new XElement("vjob",itemData.vjob),
-                            }),
-                            new XElement("pk_linkman",""),
-                            new XElement("isdefault","N"),
+                        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;
                     }
                 }
 
@@ -84,20 +170,61 @@ namespace HH.YiDaSyncNC.Models
                 new XAttribute("id",id),
                 new XElement("billhead", new object[]
                 {
-                    new XElement("pk_group",item.pk_group),
-                    new XElement("pk_org",item.pk_org),
+                    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("code",item.code),
-                    new XElement("name",item.name),
-                    new XElement("pk_custclass",item.pk_custclass),
-                    new XElement("taxpayerid",item.taxpayerid),
-                    new XElement("custprop",item.custprop),
+                    new XElement("supplier",item.供应商),
+                    new XElement("pk_currtype",item.币种),
+                    new XElement("objtype",item.往来对象),
+                    new XElement("payaccount",item.付款银行账户),
 
-                    new XElement("custcontacts",suplinkmanList),
+                    new XElement("busidate",item.起算日期),
 
-                    new XElement("pk_country","CN"),
-                    new XElement("pk_timezone","P0800"),
-                    new XElement("pk_format","ZH-CN"),
+                    new XElement("bodys",bodys),
                 }),
                 });
             }

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

@@ -0,0 +1,238 @@
+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 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","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("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),
+                }),
+                });
+            }
+        }
+    }
+}

+ 29 - 11
HH.YiDaSyncNC/Program.cs

@@ -57,47 +57,65 @@ namespace HH.YiDaSyncNC
         {
             try
             {
-
+                #region 基础档案
+                // 物料
                 //WL_SyncService wL_SyncService = new WL_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_WL, db, db_nc, _Static_NCApiUrl);
                 //wL_SyncService.DataSync();
 
+                // 项目点
                 //XMD_SyncService xMD_SyncService = new XMD_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_XMD, db, db_nc, _Static_NCApiUrl);
                 //xMD_SyncService.DataSync();
 
+                // 资产
                 //ZC_SyncService zc_SyncService = new ZC_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_ZC, db, db_nc, _Static_NCApiUrl);
                 //zc_SyncService.DataSync();
 
+                // 供应商
                 //GYS_SyncService gYS_SyncService = new GYS_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_GYS, db, db_nc, _Static_NCApiUrl);
                 //gYS_SyncService.DataSync();
 
+                // 客户
                 //KH_SyncService kh_SyncService = new KH_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_KH, db, db_nc, _Static_NCApiUrl);
                 //kh_SyncService.DataSync();
+                #endregion
+
+                KP_SyncService kp_SyncService = new KP_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_KP, db, db_nc, _Static_NCApiUrl);
+                kp_SyncService.DataSync();
 
-                //KP_SyncService kp_SyncService = new KP_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_KP, db, db_nc, _Static_NCApiUrl);
-                //kp_SyncService.DataSync();
+                // 退票
+                //KP_TP_SyncService kp_tp_SyncService = new KP_TP_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_KP, db, db_nc, _Static_NCApiUrl);
+                //kp_tp_SyncService.DataSync();
+                #endregion
 
+                #region 采购订单
+                // 采购订单
                 //CGDD_SyncService cgdd_SyncService = new CGDD_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_CGDD, db, db_nc, _Static_NCApiUrl);
                 //cgdd_SyncService.DataSync();
+                #endregion
+
+                #region 付款单
 
                 // 付款单
+                //FK_FKD_SyncService fk_fkd_SyncService = new FK_FKD_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_FK, db, db_nc, _Static_NCApiUrl);
+                //fk_fkd_SyncService.DataSync();
+
+                // 日常费用付款
                 //FK_SyncService fk_SyncService = new FK_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_FK, db, db_nc, _Static_NCApiUrl);
                 //fk_SyncService.DataSync();
 
-                // 付款单 预付类型 生成凭证 zxh 没用
+                // 付款单 预付类型 生成凭证 zxh
                 //FKGL_SyncService fkgl_SyncService = new FKGL_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_FK, db, db_nc, _Static_NCApiUrl);
                 //fkgl_SyncService.DataSync();
                 // 付款单 预付类型 生成应付单 zxh 没用
                 //FKYF_SyncService fkyf_SyncService = new FKYF_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_FK, db, db_nc, _Static_NCApiUrl);
                 //fkyf_SyncService.DataSync();
                 // 暂支申请  生成凭证 zxh
-                //ZZD_GL_SyncService zzsq_SyncService = new ZZD_GL_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_ZZSQ, db, db_nc, _Static_NCApiUrl);
-                //zzsq_SyncService.DataSync();
+                ZZD_GL_SyncService zzsq_SyncService = new ZZD_GL_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_ZZDA, db, db_nc, _Static_NCApiUrl);
+                zzsq_SyncService.DataSync();
                 // 还款单  生成凭证 zxh
-                //HKD_GL_SyncService hkd_SyncService = new HKD_GL_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_ZZHX, db, db_nc, _Static_NCApiUrl);
-                //hkd_SyncService.DataSync();
-                //发票入账 生成凭证 zxh 
-                YF_FPRZ_SyncService yf_fprz_SyncService = new YF_FPRZ_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_FK, db, db_nc, _Static_NCApiUrl);
-                yf_fprz_SyncService.DataSync();
+                HKD_GL_SyncService hkd_SyncService = new HKD_GL_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_ZZHX, db, db_nc, _Static_NCApiUrl);
+                hkd_SyncService.DataSync();
+
                 // 费用报销单 zxh 用不到
                 //BX_SyncService bx_SyncService = new BX_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_FYBX, db, db_nc, _Static_NCApiUrl);
                 //bx_SyncService.DataSyncFYBX();