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().ToList(); // var bd_incomeDic = _db_nc.Queryable().ToList(); // var org_orgsDic = _db_nc.Queryable().ToList(); // var bd_projectDic = _db_nc.Queryable().ToList(); // var bd_materialDic = _db_nc.Queryable().ToList(); // var bd_measdocDic = _db_nc.Queryable().ToList(); // var org_deptDic = _db_nc.Queryable().ToList(); // var bd_psndocDic = _db_nc.Queryable().ToList(); // var sm_userDic = _db_nc.Queryable().ToList(); // var org_accountingbookDic = _db_nc.Queryable().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(jsonData); // if (string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb)) continue; // //取值 宜搭表单的某个字段当作凭证日期 如果 支付完成时间 为null,就用 提交时间 // DateTime 凭证日期 = DateTime.Now; // //thisYiDaData.dateField_lwitiobz is null // // ? UnixTimeHelper.ConvertMillisecondsToDateTime(thisYiDaData.dateField_lviv4sfy) // // : UnixTimeHelper.ConvertMillisecondsToDateTime((long)thisYiDaData.dateField_lwitiobz); // string 组织 = ""; // if (!string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb)) // { // var tempData = org_orgsDic.FirstOrDefault(f => f.name == thisYiDaData.selectField_lvywoqmb); // if (tempData != null) // { // 组织 = tempData.code; // 组织 // } // } // string 账簿 = ""; // if (!string.IsNullOrWhiteSpace(thisYiDaData.selectField_lvywoqmb)) // { // var tempData = org_accountingbookDic.FirstOrDefault(f => f.name == thisYiDaData.selectField_lvywoqmb + "-蓝云账簿"); // if (tempData != null) // { // 账簿 = tempData.code; // 账簿 // } // } // string 制单人 = "OA-NC"; // // 表头 // var headModel = new FKGL_SyncServiceModel.DataModel.voucher_header() // { // year = 凭证日期.ToString("yyyy"),//会计年度 // prepareddate = 凭证日期.ToString("yyyy-MM-dd"),//制单日期 // period = 凭证日期.ToString("MM"),//会计期间 // pk_prepared = 制单人,//凭证制单人--操作员工工号 // no = "",//凭证号 // pk_accountingbook = 账簿,//账簿 // org = 组织,//组织编码 // pk_vouchertype = "03",//凭证类别 : 01-记账凭证 ,02-收款凭证 ,03-付款凭证 ,04-转账凭证 要确定 // }; // //表体 // var detailList = new List(); // #region 例子 // //if (thisYiDaData.tableField_lrngrtgu != null) // //{ // ////循环内是借方分录赋值 // //foreach (var objItem in detailObjList1) // //{ // // var detailItem = new FKGL_SyncServiceModel.DataModel.voucher_body() // // { // // detailindex = index, // // accsubjcode = objItem.textField_lwitioce,//科目编码 要确定 // // pk_accasoa = objItem.textField_lwitioce,//科目编码 要确定 // // explanation = objItem.textField_lvxa4v05,//摘要 要确定 // // verifydate = 凭证日期.ToString("yyyy-MM-dd"), // // price = "0.00000000", // // excrate2 = "1", // // debitquantity = "0.00000000", // // debitamount = objItem.numberField_lvxa4v09.ToString(),//借方金额 要确定 // // groupdebitamount = "0.00000000", // // globaldebitamount = "0.00000000", // // localdebitamount = objItem.numberField_lvxa4v09.ToString(),//借方金额 要确定 // // creditquantity = "0.00000000", // // creditamount = "0.00000000", // // groupcreditamount = "0.00000000", // // globalcreditamount = "0.00000000", // // localcreditamount = "0.00000000", // // billtype = "", // // bankaccount = "", // // checkstyle = "", // // checkno = "", // // checkdate = "", // // bill_id = "", // // bill_date = "", // // pk_currtype = "CNY", // // cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()//现金流 要确定 // // { // // m_pk_currtype = "CNY", // // money = objItem.numberField_lvxa4v09.ToString(),//金额 要确定 // // moneymain = objItem.numberField_lvxa4v09.ToString(),//金额 要确定 // // moneygroup = "", // // moneyglobal = "", // // pk_cashflow = "1124",//写死目前 要确定 // // pk_innercorp = "", // // }, // // ass = new List()//要确定 // // { // // 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() // // { // // }, // // } // // ); // // 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()//辅助核算 要确定 // // { // // new FKGL_SyncServiceModel.DataModel.ass() // // { // // pk_Checktype ="0011",//0011-银行账户辅助核算 要确定 // // pk_Checkvalue = "36640188000164043",//银行账户 目前写死(36640188000164043:上海蓝云环境科技有限公司(光大银行)) 要确定 // // } // // }, // // } // //); // //} // #endregion // //借方分录 // detailList.Add(new FKGL_SyncServiceModel.DataModel.voucher_body() // { // detailindex = 1, // accsubjcode = "1123",//科目编码 预付账款 // pk_accasoa = "1123",//科目编码 // explanation = "借方摘要",//摘要 // verifydate = 凭证日期.ToString("yyyy-MM-dd"), // price = "0.00000000", // excrate2 = "1", // debitquantity = "0.00000000", // debitamount = thisYiDaData.numberField_lvua3j18.ToString(),//借方金额 // groupdebitamount = "0.00000000", // globaldebitamount = "0.00000000", // localdebitamount = thisYiDaData.numberField_lvua3j18.ToString(),//借方金额 // creditquantity = "0.00000000", // creditamount = "0.00000000", // groupcreditamount = "0.00000000", // globalcreditamount = "0.00000000", // localcreditamount = "0.00000000", // billtype = "", // bankaccount = "", // checkstyle = "", // checkno = "", // checkdate = "", // bill_id = "", // bill_date = "", // pk_currtype = "CNY", // cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow()//现金流 // { // m_pk_currtype = "CNY", // money = thisYiDaData.numberField_lvua3j18.ToString(),//金额 // moneymain = thisYiDaData.numberField_lvua3j18.ToString(),//金额 // moneygroup = "", // moneyglobal = "", // pk_cashflow = "1124",//现金流编码 // pk_innercorp = "", // }, // ass = new List()// // { // new FKGL_SyncServiceModel.DataModel.ass() // { // pk_Checktype ="0019",//0019-供应商辅助核算 // pk_Checkvalue = thisYiDaData.textField_lwitiobt,//供应商编码 // } // }, // }); // //贷方 // detailList.Add( // new FKGL_SyncServiceModel.DataModel.voucher_body() // { // detailindex = 2, // accsubjcode = thisYiDaData.textField_lyodct8u,//科目编码 // pk_accasoa = thisYiDaData.textField_lyodct8u,//科目编码 // explanation = "贷方摘要",//摘要 // verifydate = 凭证日期.ToString("yyyy-MM-dd"), // price = "0.00000000", // excrate2 = "1", // debitquantity = "0.00000000", // debitamount = "0.00000000", // groupdebitamount = "0.00000000", // globaldebitamount = "0.00000000", // localdebitamount = "0.00000000", // creditquantity = "0.00000000", // creditamount = thisYiDaData.numberField_lvua3j18.ToString(),//贷方金额 // groupcreditamount = "0.00000000", // globalcreditamount = "0.00000000", // localcreditamount = thisYiDaData.numberField_lvua3j18.ToString(),//贷方金额 // billtype = "", // bankaccount = "", // checkstyle = "", // checkno = "", // checkdate = "", // bill_id = "", // bill_date = "", // pk_currtype = "CNY", // cash_flow = new FKGL_SyncServiceModel.DataModel.cash_flow() // { // }, // ass = new List()//辅助核算 // { // new FKGL_SyncServiceModel.DataModel.ass() // { // pk_Checktype ="0011",//0011-银行账户辅助核算 // pk_Checkvalue = thisYiDaData.textField_lrngrtgj,//银行账户 // } // }, // } // ); // XElement xElement = FKGL_SyncServiceModel.ImportXml_凭证.TemplateHeade(headModel); // xElement.Add(FKGL_SyncServiceModel.ImportXml_凭证.Header(headModel));//添加表头数据 // xElement.Element("voucher").Element("voucher_head").Element("details").Add(FKGL_SyncServiceModel.ImportXml_凭证.Bodydebit(detailList)); // //生成凭证 // var results_凭证 = NCImportFunc.NCImport2(xElement, _NCApiUrl + "?account=01&groupcode=0"); // LogHelper.WriteLog(JsonConvert.SerializeObject(results_凭证), "results_凭证"); // XElement xE = XElement.Parse(results_凭证); // string resultcode = xE.Element("sendresult").Element("resultcode").Value; // string content = xE.Element("sendresult").Element("content")?.Value; // string resultdescription = xE.Element("sendresult").Element("resultdescription")?.Value; // var ncResData = new YiDaResDto(); // if (resultcode == "1") // { // ncResData = (new YiDaResDto() // { // bSuccess = true, // syncTime = DateTime.Now, // ncNo = resultdescription,//xE.Element("sendresult").Element("content").Value, // log = "同步成功!" // }); // } // else // { // ncResData = (new YiDaResDto() // { // bSuccess = false, // syncTime = DateTime.Now, // ncNo = "", // log = "同步失败!原因为【" + resultdescription + "】!" // }); // } // //更新同步标识 // var ydRes = _dingTalkService.UpdateFormDataSyncDataById(ncResData, item); // } //} //catch (Exception ex) //{ // throw; //} } } }