晓海 曾 пре 2 година
родитељ
комит
320813db3c

Разлика између датотеке није приказан због своје велике величине
+ 1 - 0
HH.YiDaSyncNC/.vs/HH.YiDaSyncNC.csproj.dtbcache.json


+ 6 - 1
HH.YiDaSyncNC/App.config

@@ -22,7 +22,12 @@
     <add key="FormId_XMD" value="FORM-97BA6C6C8C50416A9E5854F2F4B5C3F3R4WC" />
     <add key="FormId_KH" value="FORM-E95BF43276BC4BD78B269729F716AA63LDR2" />
     <add key="FormId_ZC" value="FORM-F3695066AABE41F6AF241489F8558ACA78OI" />
-
+    <!--流程表单-->
+    <add key="FormCode_FYBXD" value="FORMTPROC--J1A66U81S5VHPM8C8H1N1D11U8VL3VRWEHNRL3" />
+    <add key="FormCode_CLBXD" value="TPROC--5L666481BADIN79I7U3PV7NY34HC3M0CL1XSL3" />
+    <!--表单-->
+    <add key="FormId_FYBXD" value="FORM-0C15BF8B40EA475C898190288E3057D8UO5W" />
+    <add key="FormId_CLBXD" value="FORM-0851B163795E4EB78728C70D85132BE4QTN5" />
     <add key="FormId_KP" value="FORM-6603375ED27B4D059CBB919C2BEFA44BZVOL" />
     <add key="FormId_CGDD" value="FORM-61F329A9DFFE4CF0BBEC0FDC34C42C03QJKQ" />
     <add key="FormId_FK" value="FORM-B8C2006FAA1645B4BC2A6E71F8CC35BFQ71Y" />

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

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

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

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

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

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

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

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

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

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

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

@@ -125,6 +125,8 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="DataSync\CGDD_SyncService.cs" />
+    <Compile Include="DataSync\BX_SyncService.cs" />
+    <Compile Include="DataSync\FKGL_SyncService.cs" />
     <Compile Include="DataSync\FK_SyncService.cs" />
     <Compile Include="DataSync\KH_SyncService.cs" />
     <Compile Include="DataSync\GYS_SyncService.cs" />
@@ -135,6 +137,7 @@
     <Compile Include="Dtos\NC\bd_defdoc.cs" />
     <Compile Include="Dtos\NC\bd_income.cs" />
     <Compile Include="Dtos\NC\bd_customer.cs" />
+    <Compile Include="Dtos\NC\org_accountingbook.cs" />
     <Compile Include="Dtos\NC\po_order_bb.cs" />
     <Compile Include="Dtos\NC\po_order_b.cs" />
     <Compile Include="Dtos\NC\sm_user.cs" />
@@ -169,6 +172,8 @@
     <Compile Include="Dtos\SyncRecord_XMD.cs" />
     <Compile Include="Dtos\SyncRecord_WL.cs" />
     <Compile Include="Dtos\YiDaResDto.cs" />
+    <Compile Include="Dtos\YIDA\YiDa_FYBXD.cs" />
+    <Compile Include="Dtos\YIDA\YiDa_SKDNC.cs" />
     <Compile Include="Helper\AbPrivoder.cs" />
     <Compile Include="Helper\CommHelper.cs" />
     <Compile Include="Helper\DBHelper.cs" />
@@ -177,6 +182,7 @@
     <Compile Include="Helper\LogHelper.cs" />
     <Compile Include="Helper\NCImportFunc.cs" />
     <Compile Include="Helper\UnixTimeHelper.cs" />
+    <Compile Include="Models\FKGL_SyncServiceModel.cs" />
     <Compile Include="Models\FK_SyncServiceModel.cs" />
     <Compile Include="Models\XSFP_SyncServiceModel.cs" />
     <Compile Include="Models\KP_SyncServiceModel.cs" />

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

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ProjectFiles</ProjectView>
+  </PropertyGroup>
+</Project>

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

@@ -168,6 +168,72 @@ namespace HH.YiDaSyncNC.Helper
             return UpdateFormDataByIdFunc(JsonConvert.SerializeObject(data), FormInstanceId);
         }
         #endregion
+
+
+
+        #region 获取【流程表单】id集合
+        /// <summary>
+        /// 获取【流程表单】id集合
+        /// </summary>
+        /// <param name="search"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public List<string> GetFormCodeList(string search)
+        {
+            var pageIndex = 1;
+            var pageSize = 50;
+
+            var bFinish = false;
+
+            var resIdList = new List<string>();
+
+            while (!bFinish)
+            {
+                var resData = GetFormCodeListFunc("", "", "", "", search, pageIndex, pageSize);
+                if (resData.StatusCode == 200)
+                {
+                    if (resData.Body.Data.Count == 0)
+                    {
+                        bFinish = true;
+                    }
+                    else
+                    {
+                        resIdList.AddRange(resData.Body.Data);
+                    }
+                }
+                else
+                {
+                    throw new Exception(JsonConvert.SerializeObject(resData));
+                }
+
+                pageIndex++;
+            }
+
+            return resIdList;
+        }
+
+        #endregion
+
+        #region 通过数据Id获取【表单数据】详情(单条)
+        /// <summary>
+        ///  通过数据Id获取【表单数据】详情(单条)
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public Dictionary<string, object> GetFormDataByCode(string id)
+        {
+            var resData = GetFormDataByCodesFunc(new List<string>() { id });
+            if (resData.StatusCode == 200)
+            {
+                return resData.Body.Result[0].Data;
+            }
+            else
+            {
+                throw new Exception(JsonConvert.SerializeObject(resData));
+            }
+        }
+        #endregion
         #endregion
 
         #region 宜搭接原始口
@@ -268,6 +334,74 @@ namespace HH.YiDaSyncNC.Helper
         }
         #endregion
 
+
+
+        #region 获取多个【流程表单】实例ID 【默认审批通过的】
+        /// <summary>
+        /// 获取多个【流程表单】实例ID
+        /// </summary>
+        /// <param name="CreateFromTime"></param>
+        /// <param name="CreateToTime"></param>
+        /// <param name="ModifiedFromTime"></param>
+        /// <param name="ModifiedToTime"></param>
+        /// <param name="SearchFieldJson"></param>
+        /// <param name="CurrentPage"></param>
+        /// <param name="PageSize"></param>
+        /// <returns></returns>
+        public GetInstanceIdListResponse GetFormCodeListFunc(string CreateFromTime, string CreateToTime, string ModifiedFromTime, string ModifiedToTime, string SearchFieldJson, int CurrentPage, int PageSize)
+        {
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Client client = CreateClient();
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstanceIdListHeaders getInstanceIdListHeaders = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstanceIdListHeaders();
+            getInstanceIdListHeaders.XAcsDingtalkAccessToken = CommHelper.GetAccessToken();
+            // 实例状态,取值:
+            //RUNNING:运行中
+            //TERMINATED:已终止
+            //COMPLETED:已完成
+            //ERROR:异常
+
+            //审批结果,取值:
+            //agree:同意
+            //disagree:拒绝
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstanceIdListRequest getInstanceIdListRequest = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstanceIdListRequest
+            {
+                ModifiedToTimeGMT = ModifiedToTime,
+                SystemToken = _SystemToken,
+                ModifiedFromTimeGMT = ModifiedFromTime,
+                SearchFieldJson = SearchFieldJson,
+                UserId = _UserId,
+                CreateToTimeGMT = CreateToTime,
+                CreateFromTimeGMT = CreateFromTime,
+                PageNumber = CurrentPage,
+                PageSize = PageSize,
+                InstanceStatus = "COMPLETED",//实例状态
+                ApprovedResult = "agree",//审批结果
+                AppType = _AppType,
+                FormUuid = _FormId
+            };
+            var rsp = client.GetInstanceIdListWithOptions(getInstanceIdListRequest, getInstanceIdListHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
+            return rsp;
+        }
+        #endregion
+
+        #region 批量获取【流程表单】实例数据
+        public GetInstancesByIdListResponse GetFormDataByCodesFunc(List<string> IdList)
+        {
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Client client = CreateClient();
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstancesByIdListHeaders getInstancesByIdListHeaders = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstancesByIdListHeaders();
+            getInstancesByIdListHeaders.XAcsDingtalkAccessToken = CommHelper.GetAccessToken();
+
+            AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstancesByIdListRequest getInstancesByIdListRequest = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.GetInstancesByIdListRequest
+            {
+                AppType = _AppType,
+                SystemToken = _SystemToken,
+                UserId = _UserId,
+                Language = "zh_CN",
+                ProcessInstanceIds = string.Join(",", IdList),
+            };
+            var rsp = client.GetInstancesByIdListWithOptions(getInstancesByIdListRequest, getInstancesByIdListHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions());
+            return rsp;
+        }
+        #endregion
         #endregion
     }
 }

+ 21 - 1
HH.YiDaSyncNC/Helper/NCImportFunc.cs

@@ -1,4 +1,5 @@
-using System;
+using HH.YiDaSyncNC.Models;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -38,5 +39,24 @@ namespace HH.YiDaSyncNC.Helper
                 throw ex;
             }
         }
+
+        public static string NCImport2(XElement xElement, string url)
+        {
+            try
+            {
+                string xmlString = DBHelper.ToXmlElementMethod(xElement).OuterXml;//变成xml字符串
+                xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + xmlString;
+                DBHelper.WriteLog("传入参数:" + xmlString);
+                string resultMsg = DBHelper.SendNsg(xmlString, url);//接收返回的数据
+                DBHelper.WriteLog("返回参数:" + resultMsg);
+                XElement xE = XElement.Parse(resultMsg);
+                string resultcode = xE.Element("sendresult").Element("resultcode").Value;
+                return resultMsg;//返回错误信息
+            }
+            catch (Exception ex)
+            {
+                throw ex;
+            }
+        }
     }
 }

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

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

+ 14 - 2
HH.YiDaSyncNC/Program.cs

@@ -43,6 +43,10 @@ namespace HH.YiDaSyncNC
         public static string _Static_FormId_CGDD = ConfigurationManager.AppSettings["FormId_CGDD"];
         public static string _Static_FormId_KP = ConfigurationManager.AppSettings["FormId_KP"];
         public static string _Static_FormId_FK = ConfigurationManager.AppSettings["FormId_FK"];
+        public static string _Static_FormId_FYBX = ConfigurationManager.AppSettings["FormId_FYBXD"];
+        public static string _Static_FormId_clBX = ConfigurationManager.AppSettings["FormId_CLBXD"];
+        public static string _Static_FormCode_fyBX = ConfigurationManager.AppSettings["FormCode_FYBXD"];
+        public static string _Static_FormCode_clBX = ConfigurationManager.AppSettings["FormCode_CLBXD"];
 
         public static string _Static_NCApiUrl = ConfigurationManager.AppSettings["NCApiUrl"];
 
@@ -69,13 +73,21 @@ namespace HH.YiDaSyncNC
                 //KP_SyncService kp_SyncService = new KP_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_KP, db, db_nc, _Static_NCApiUrl);
                 //kp_SyncService.DataSync();
 
-                CGDD_SyncService cgdd_SyncService = new CGDD_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_CGDD, db, db_nc, _Static_NCApiUrl);
-                cgdd_SyncService.DataSync();
+                //CGDD_SyncService cgdd_SyncService = new CGDD_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_CGDD, db, db_nc, _Static_NCApiUrl);
+                //cgdd_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
+                //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
+                BX_SyncService bx_SyncService = new BX_SyncService(_Static_AppType, _Static_SystemToken, _Static_UserId, _Static_FormId_FYBX, db, db_nc, _Static_NCApiUrl);
+                bx_SyncService.DataSyncFYBX();
+
                 Environment.Exit(0);
             }
             catch (Exception ex)