llj
6 天以前 7b3958c9c69fb37e580df1f99d25ad583e1584e2
南通炎辰金蝶同步
1个文件已修改
821 ■■■■■ 已修改文件
WebAPI/Controllers/条码管理/WEBSController.cs 821 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebAPI/Controllers/ÌõÂë¹ÜÀí/WEBSController.cs
@@ -15582,6 +15582,41 @@
        #region è°ƒç”¨é‡‘蝶webapi接口同步基础资料方法
        #region å°†é‡‘蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
        public static JArray ConvertKingdeeResultToObjects(string rawJson, string fieldKeys)
        {
            // <param name="rawJson">API è¿”回的原始 JSON å­—符串(如 [[...],[...]])</param>
            // <param name="fieldKeys">查询时传入的 FieldKeys å­—符串(逗号分隔)</param>
            // 1. è§£æžåŽŸå§‹æ•°æ®ä¸º JArray(二维数组)
            JArray rawData = JArray.Parse(rawJson);
            // 2. æ‹†åˆ†å­—段名数组
            string[] fieldNames = fieldKeys.Split(',')
                                           .Select(f => f.Trim())
                                           .ToArray();
            // 3. åˆ›å»ºç»“果数组
            JArray result = new JArray();
            // 4. éåŽ†æ¯ä¸€è¡Œæ•°æ®
            foreach (JArray row in rawData)
            {
                JObject obj = new JObject();
                // 5. æŒ‰ç´¢å¼•位置映射字段名和值
                for (int i = 0; i < fieldNames.Length && i < row.Count; i++)
                {
                    obj[fieldNames[i]] = row[i];
                }
                result.Add(obj);
            }
            return result;
        }
        #endregion
        #region ç‰©æ–™åŸºç¡€èµ„料同步
        [Route("WEBSController/MaterialDataToLocalByKDWebApi")]
        [HttpGet]
@@ -15689,41 +15724,775 @@
        #endregion
        #region å°†é‡‘蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
        public static JArray ConvertKingdeeResultToObjects(string rawJson, string fieldKeys)
        #region éƒ¨é—¨åŸºç¡€èµ„料同步
        [Route("WEBSController/DepartmentDataToLocalByKDWebApi")]
        [HttpGet]
        public object DepartmentDataToLocalByKDWebApi(string HDate, int limit)
        {
            // <param name="rawJson">API è¿”回的原始 JSON å­—符串(如 [[...],[...]])</param>
            // <param name="fieldKeys">查询时传入的 FieldKeys å­—符串(逗号分隔)</param>
            // 1. è§£æžåŽŸå§‹æ•°æ®ä¸º JArray(二维数组)
            JArray rawData = JArray.Parse(rawJson);
            // 2. æ‹†åˆ†å­—段名数组
            string[] fieldNames = fieldKeys.Split(',')
                                           .Select(f => f.Trim())
                                           .ToArray();
            // 3. åˆ›å»ºç»“果数组
            JArray result = new JArray();
            // 4. éåŽ†æ¯ä¸€è¡Œæ•°æ®
            foreach (JArray row in rawData)
            bool hasMore = true;//是否循环查询
            try
            {
                JObject obj = new JObject();
                //访问金蝶
                string sCLOUDUseName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
                string sCLOUDPsd = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord");
                string dbId = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
                ApiClient client = new ApiClient(Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "KDApiUrl"));
                bool bLogin = client.Login(dbId, sCLOUDUseName, sCLOUDPsd, 2052);
                string HReturn;
                int startRow = 0;//分页,从第1条开始查询
                List<JObject> allData = new List<JObject>();//接收存储所有查询到的数据
                // 5. æŒ‰ç´¢å¼•位置映射字段名和值
                for (int i = 0; i < fieldNames.Length && i < row.Count; i++)
                if (!bLogin)
                {
                    obj[fieldNames[i]] = row[i];
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "同步基础资料失败,金蝶账号登录异常。";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                //要通过接口查询的字段
                string fieldKeys = "FDEPTID,FNumber,FName,FFORBIDSTATUS,FCREATEORGID,FUSEORGID";
                oCn.BeginTran();//开始事务
                while (hasMore) //循环分组查询,避免漏同步
                {
                    //拼接单据查询接口参数
                    string sJson = $"{{\"FormId\":\"BD_Department\",\"FieldKeys\":\"{fieldKeys}\",\"FilterString\":\"FAuditDate  >= '{HDate}' and FLOCALEID = 2052\",\"Limit\":{limit},\"StartRow\":{startRow},\"TopRowCount\":0}}";
                    //调用金蝶webapi单据查询接口
                    var HReurnData = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery",
                    new object[] { sJson });
                    //将金蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
                    JArray formattedData = ConvertKingdeeResultToObjects(HReurnData, fieldKeys);
                    if (formattedData.Count < limit)
                    {
                        hasMore = false; // å¦‚果本次返回的数量少于请求的 limit,说明已经是最后一页了
                    }
                    else
                    {
                        startRow += limit; // å¦åˆ™ï¼Œå¢žåŠ èµ·å§‹è¡Œç´¢å¼•ï¼Œå‡†å¤‡è¯·æ±‚ä¸‹ä¸€é¡µ
                    }
                    foreach (JObject item in formattedData)
                    {
                        //删除原有记录
                        oCn.RunProc($"delete from Gy_Department where HItemID = {item["FDEPTID"]?.ToString()}");
                        oCn.RunProc("set identity_insert Gy_Department on");
                        //重新写入表
                        oCn.RunProc("Insert Into Gy_Department " +
              "(HItemID,HNumber,HShortNumber,HName,HParentID" +
              ",HLevel,HEndFlag,HRemark,HStopFlag,HUseFlag" +
              ",HCREATEORGID,HUSEORGID,HERPItemID" +
              ") " +
              " values('" + item["FDEPTID"] + "','" + item["FNumber"] + "','" + item["FNumber"] + "','" + item["FName"] + "',0" +
              ",'',0,'" + "CLD-ERP导入" + "',0,''" +
              "," + item["FCREATEORGID"] + "," + item["FCREATEORGID"] + "," + item["FDEPTID"] +
            ") ");
                        oCn.RunProc("set identity_insert Gy_Department off");
                    }
                }
                result.Add(obj);
                oCn.Commit(); //提交事务
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "部门信息同步成功";
                objJsonResult.data = "";
                return objJsonResult;
            }
            return result;
            catch (Exception e)
            {
                hasMore = false;
                oCn.RollBack();//回滚事务
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "单据查询部门信息发生异常!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #endregion
        #region ä»“库基础资料同步
        [Route("WEBSController/StockDataToLocalByKDWebApi")]
        [HttpGet]
        public object StockDataToLocalByKDWebApi(string HDate, int limit)
        {
            bool hasMore = true;//是否循环查询
            try
            {
                //访问金蝶
                string sCLOUDUseName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
                string sCLOUDPsd = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord");
                string dbId = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
                ApiClient client = new ApiClient(Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "KDApiUrl"));
                bool bLogin = client.Login(dbId, sCLOUDUseName, sCLOUDPsd, 2052);
                string HReturn;
                int startRow = 0;//分页,从第1条开始查询
                List<JObject> allData = new List<JObject>();//接收存储所有查询到的数据
                if (!bLogin)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "同步基础资料失败,金蝶账号登录异常。";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                //要通过接口查询的字段
                string fieldKeys = "FSTOCKID,FNumber,FName,FUSEORGID,FCREATEORGID,FFORBIDSTATUS,FIsOpenLocation,FAllowMinusQty,FSTOCKPROPERTY";
                oCn.BeginTran();//开始事务
                while (hasMore) //循环分组查询,避免漏同步
                {
                    //拼接单据查询接口参数
                    string sJson = $"{{\"FormId\":\"BD_STOCK\",\"FieldKeys\":\"{fieldKeys}\",\"FilterString\":\"FAuditDate  >= '{HDate}' and FLOCALEID = 2052\",\"Limit\":{limit},\"StartRow\":{startRow},\"TopRowCount\":0}}";
                    //调用金蝶webapi单据查询接口
                    var HReurnData = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery",
                    new object[] { sJson });
                    //将金蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
                    JArray formattedData = ConvertKingdeeResultToObjects(HReurnData, fieldKeys);
                    if (formattedData.Count < limit)
                    {
                        hasMore = false; // å¦‚果本次返回的数量少于请求的 limit,说明已经是最后一页了
                    }
                    else
                    {
                        startRow += limit; // å¦åˆ™ï¼Œå¢žåŠ èµ·å§‹è¡Œç´¢å¼•ï¼Œå‡†å¤‡è¯·æ±‚ä¸‹ä¸€é¡µ
                    }
                    foreach (JObject item in formattedData)
                    {
                        //删除原有记录
                        oCn.RunProc($"delete from Gy_Warehouse where HItemID = {item["FSTOCKID"]?.ToString()}");
                        oCn.RunProc("set identity_insert Gy_Warehouse on");
                        //重新写入表
                        oCn.RunProc("Insert into Gy_Warehouse  " +
                        " (HItemID,HNumber,HName,HHelpCode,HShortNumber,HParentID" +
                        ",HLevel,HEndFlag,HStopflag,HRemark,HEmpID,HAddress,HPhone,HUSEORGID,HCREATEORGID,HSPFlag,HSPGroupID,HUnderStock,HSTOCKPROPERTY,HERPItemID) " +
                        " Values('" + item["FSTOCKID"] + "','" + item["FNumber"] + "','" + item["FName"] + "','" +0 + "','" + item["FNumber"] + "'," + 1 +
                        "," + 1 + "," + "'true'" + "," + Convert.ToString(item["FFORBIDSTATUS"].ToString()=="A" ? 0 : 1) + ",'" + "CLD-ERP导入" + "'," + 0 + ",'" + item["FAddress"] + "','" + item["FTel"] + "','" + item["FUSEORGID"] + "','" + item["FUSEORGID"] + "','" + item["FIsOpenLocation"] + "','" + item["FSTOCKID"] + "','" + item["FAllowMinusQty"] + "','" + item["FSTOCKPROPERTY"] + "'," + item["FSTOCKID"] + ")", ref DBUtility.ClsPub.sExeReturnInfo);
                        oCn.RunProc("set identity_insert Gy_Warehouse off");
                    }
                }
                oCn.Commit(); //提交事务
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "仓库信息同步成功";
                objJsonResult.data = "";
                return objJsonResult;
            }
            catch (Exception e)
            {
                hasMore = false;
                oCn.RollBack();//回滚事务
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "单据查询仓库信息发生异常!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region ä¾›åº”商基础资料同步
        [Route("WEBSController/SupplierDataToLocalByKDWebApi")]
        [HttpGet]
        public object SupplierDataToLocalByKDWebApi(string HDate, int limit)
        {
            bool hasMore = true;//是否循环查询
            try
            {
                //访问金蝶
                string sCLOUDUseName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
                string sCLOUDPsd = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord");
                string dbId = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
                ApiClient client = new ApiClient(Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "KDApiUrl"));
                bool bLogin = client.Login(dbId, sCLOUDUseName, sCLOUDPsd, 2052);
                string HReturn;
                int startRow = 0;//分页,从第1条开始查询
                List<JObject> allData = new List<JObject>();//接收存储所有查询到的数据
                if (!bLogin)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "同步基础资料失败,金蝶账号登录异常。";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                //要通过接口查询的字段
                string fieldKeys = "FSUPPLIERID,FNumber,FName,FUSEORGID,FCREATEORGID,FFORBIDSTATUS,FAddress,FContact,FMobile,FLocNewContact ,FFax,FEMail ,FBankCode ,FBankHolder,FTaxType,FTaxRateId ,FCountry ,FPayCurrencyId";
                oCn.BeginTran();//开始事务
                while (hasMore) //循环分组查询,避免漏同步
                {
                    //拼接单据查询接口参数
                    string sJson = $"{{\"FormId\":\"BD_Supplier\",\"FieldKeys\":\"{fieldKeys}\",\"FilterString\":\"FAuditDate  >= '{HDate}' and FLOCALEID = 2052\",\"Limit\":{limit},\"StartRow\":{startRow},\"TopRowCount\":0}}";
                    //调用金蝶webapi单据查询接口
                    var HReurnData = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery",
                    new object[] { sJson });
                    //将金蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
                    JArray formattedData = ConvertKingdeeResultToObjects(HReurnData, fieldKeys);
                    if (formattedData.Count < limit)
                    {
                        hasMore = false; // å¦‚果本次返回的数量少于请求的 limit,说明已经是最后一页了
                    }
                    else
                    {
                        startRow += limit; // å¦åˆ™ï¼Œå¢žåŠ èµ·å§‹è¡Œç´¢å¼•ï¼Œå‡†å¤‡è¯·æ±‚ä¸‹ä¸€é¡µ
                    }
                    foreach (JObject item in formattedData)
                    {
                        //删除原有记录
                        oCn.RunProc($"delete from Gy_Supplier where HItemID = {item["FSUPPLIERID"]?.ToString()}");
                        oCn.RunProc("set identity_insert Gy_Supplier on");
                        oCn.RunProc("Insert Into Gy_Supplier " +
                         "(HItemID,HNumber,HName,HHelpCode,HShortNumber,HParentID" +
                             ",HLevel,HEndFlag,HStopflag,HRemark" +
                             ",HShortName,HAddress,HLinkMan,HLinkPhone,HMobilePhone" +
                             ",HFax,HPostalCode,HEmail,HBank,HBankAccount" +
                             ",HTaxNum,HTaxRate,HCountry,HCorMan,HEnglishName" +
                             ",HEnglishAddress,HCurID,HSSID,HAreaID,HMaterClass,HERPItemID,HUseOrgID,HCreateOrgID) " +
                         " values('" + item["FSUPPLIERID"] + "','" + item["FNumber"] + "','" + item["FName"] + "','" + 1 + "','" + item["FNumber"] + "','" + 1 + "'" +
                         "," + 1+ ",0,'" + (item["FFORBIDSTATUS"].ToString() == "A" ? 0 : 1) + "','" + "CLD-ERP导入" + "'" +
                         ",'" + item["FName"] + "','" + item["FAddress"] + "','" + item["FLocNewContact"] + "','" + item["FMobile"] + "','" + item["FMobile"] + "'" +
                         ",'" + item["FFax"] + "','" + 0 + "','" + item["FEMail "] + "','" + item["FBankHolder"] + "','" + item["FBankCode"] + "'" +
                         ",'" + item["FTaxType"] + "','" + item["FTaxRateId  "] + "','" + item["FCountry "] + "','" + "" + "','" + "" + "'" +
                         ",'" + item["FAddress"] + "'," + item["FPayCurrencyId"] + "," + 0 + "," + 0 + ",'" + 0 +
                         "'," + item["FSUPPLIERID"] + ",'" + item["FCREATEORGID"] + "','" + item["FCREATEORGID"] +
                          "') ");
                        oCn.RunProc("set identity_insert Gy_Supplier off");
                    }
                }
                oCn.Commit(); //提交事务
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "供应商信息同步成功";
                objJsonResult.data = "";
                return objJsonResult;
            }
            catch (Exception e)
            {
                hasMore = false;
                oCn.RollBack();//回滚事务
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "单据查询供应商信息发生异常!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region å•位换算基础资料同步
        [Route("WEBSController/UnitConvertRateDataToLocalByKDWebApi")]
        [HttpGet]
        public object UnitConvertRateDataToLocalByKDWebApi(string HDate, int limit)
        {
            bool hasMore = true;//是否循环查询
            try
            {
                //访问金蝶
                string sCLOUDUseName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
                string sCLOUDPsd = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord");
                string dbId = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
                ApiClient client = new ApiClient(Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "KDApiUrl"));
                bool bLogin = client.Login(dbId, sCLOUDUseName, sCLOUDPsd, 2052);
                string HReturn;
                int startRow = 0;//分页,从第1条开始查询
                List<JObject> allData = new List<JObject>();//接收存储所有查询到的数据
                if (!bLogin)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "同步基础资料失败,金蝶账号登录异常。";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                //要通过接口查询的字段
                string fieldKeys = "FUNITCONVERTRATEID,FUSEORGID,FCREATEORGID,FFORBIDSTATUS,FBILLNO,FMATERIALID,FCURRENTUNITID,FDESTUNITID,FCONVERTTYPE,FCONVERTNUMERATOR,FCONVERTDENOMINATOR,FCREATORID,FCREATEDATE,FAPPROVERID,FAPPROVEDATE,FMODIFIERID,FMODIFYDATE,FFORBIDDERID,FFORBIDDATE";
                oCn.BeginTran();//开始事务
                while (hasMore) //循环分组查询,避免漏同步
                {
                    //拼接单据查询接口参数
                    string sJson = $"{{\"FormId\":\"BD_MATERIALUNITCONVERT\",\"FieldKeys\":\"{fieldKeys}\",\"FilterString\":\"FApproveDate   >= '{HDate}'\",\"Limit\":{limit},\"StartRow\":{startRow},\"TopRowCount\":0}}";
                    //调用金蝶webapi单据查询接口
                    var HReurnData = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery",
                    new object[] { sJson });
                    //将金蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
                    JArray formattedData = ConvertKingdeeResultToObjects(HReurnData, fieldKeys);
                    if (formattedData.Count < limit)
                    {
                        hasMore = false; // å¦‚果本次返回的数量少于请求的 limit,说明已经是最后一页了
                    }
                    else
                    {
                        startRow += limit; // å¦åˆ™ï¼Œå¢žåŠ èµ·å§‹è¡Œç´¢å¼•ï¼Œå‡†å¤‡è¯·æ±‚ä¸‹ä¸€é¡µ
                    }
                    foreach (JObject item in formattedData)
                    {
                        //删除原有记录
                        oCn.RunProc($"delete from Gy_UnitConvertRate where HItemID = {item["FUNITCONVERTRATEID"]?.ToString()}");
                        oCn.RunProc("set identity_insert Gy_UnitConvertRate on");
                       string sql = "Insert into Gy_UnitConvertRate " +
                   "(HItemID,HNumber,HName,HShortNumber,HParentID,HLevel," +
                   "HEndFlag,HStopflag,HRemark,HUseFlag,HUSEORGID,HCREATEORGID," +
                   "HBILLNO,HMATERID,HCURRENTUNITID,HDESTUNITID,HCONVERTTYPE,HCONVERTNUMERATOR," +
                   "HCONVERTDENOMINATOR,HFORBIDSTATUS,HUnitID,HMaterNumber," +
                   "HMakeEmp,HMakeTime,HCheckEmp,HCheckTime,HModifyEmp,HModifyTime,HStopEmp,HStopTime) " +
                   "values('" + item["FUNITCONVERTRATEID"] + "','"  + "','"  + "','"  + "'," + 1 + "," + 1 + ",'" +
                   "true" + "','" + (item["FFORBIDSTATUS"].ToString()=="A"?0:1) + "','CLD-ERP导入','已使用','" + item["FUSEORGID"] + "','" + item["FUSEORGID"] + "'" +
                   ",'" + item["FBILLNO"] + "','" + item["FMATERIALID"] + "','" + item["FCURRENTUNITID"] + "','" + item["FDESTUNITID"] + "','" + item["FCONVERTTYPE"] + "','" + item["FCONVERTNUMERATOR"] + "'" +
                   ",'" + item["FCONVERTDENOMINATOR"] + "','" + item["FFORBIDSTATUS"] + "','" + 0 + "','"  + "'" +
                   ",'" + item["FCREATORID"] + "','" + item["FCREATEDATE"] + "','" + item["FAPPROVERID"] + "','" + item["FAPPROVEDATE"] + "','" +
                   item["FMODIFIERID"] + "','" + item["FMODIFYDATE"] + "','" + item["FFORBIDDERID"] + "','" + item["FFORBIDDATE"] + "')";
                        oCn.RunProc(sql);
                        oCn.RunProc("set identity_insert Gy_UnitConvertRate off");
                    }
                }
                oCn.Commit(); //提交事务
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "单位换算信息同步成功";
                objJsonResult.data = "";
                return objJsonResult;
            }
            catch (Exception e)
            {
                hasMore = false;
                oCn.RollBack();//回滚事务
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "单据查询单位换算信息发生异常!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region å‘˜å·¥åŸºç¡€èµ„料同步
        [Route("WEBSController/StaffDataToLocalByKDWebApi")]
        [HttpGet]
        public object StaffDataToLocalByKDWebApi(string HDate, int limit)
        {
            bool hasMore = true;//是否循环查询
            try
            {
                //访问金蝶
                string sCLOUDUseName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
                string sCLOUDPsd = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord");
                string dbId = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
                ApiClient client = new ApiClient(Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "KDApiUrl"));
                bool bLogin = client.Login(dbId, sCLOUDUseName, sCLOUDPsd, 2052);
                string HReturn;
                int startRow = 0;//分页,从第1条开始查询
                List<JObject> allData = new List<JObject>();//接收存储所有查询到的数据
                if (!bLogin)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "同步基础资料失败,金蝶账号登录异常。";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                //要通过接口查询的字段
                string fieldKeys = "FPERSONID,FNumber,FName,FUSEORGID,FCREATEORGID,FPOSTID,FFIRSTCARDID,FSTAFFNUMBER";
                oCn.BeginTran();//开始事务
                while (hasMore) //循环分组查询,避免漏同步
                {
                    //拼接单据查询接口参数
                    string sJson = $"{{\"FormId\":\"BD_Empinfo\",\"FieldKeys\":\"{fieldKeys}\",\"FilterString\":\"FAuditDate  >= '{HDate}' and FLOCALEID = 2052\",\"Limit\":{limit},\"StartRow\":{startRow},\"TopRowCount\":0}}";
                    //调用金蝶webapi单据查询接口
                    var HReurnData = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery",
                    new object[] { sJson });
                    //将金蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
                    JArray formattedData = ConvertKingdeeResultToObjects(HReurnData, fieldKeys);
                    if (formattedData.Count < limit)
                    {
                        hasMore = false; // å¦‚果本次返回的数量少于请求的 limit,说明已经是最后一页了
                    }
                    else
                    {
                        startRow += limit; // å¦åˆ™ï¼Œå¢žåŠ èµ·å§‹è¡Œç´¢å¼•ï¼Œå‡†å¤‡è¯·æ±‚ä¸‹ä¸€é¡µ
                    }
                    foreach (JObject item in formattedData)
                    {
                        //删除原有记录
                        oCn.RunProc($"delete from Gy_Staff where HItemID = {item["FPERSONID"]?.ToString()}");
                        oCn.RunProc("set identity_insert Gy_Staff on");
                        oCn.RunProc($@"insert into Gy_Staff(HItemID,HNumber,HName,HHelpCode,HShortNumber,HParentID
                            ,HLevel,HEndFlag,HStopflag,HRemark,HUseFlag,HUSEORGID
                            ,HCREATEORGID,HPERSONID,HPOSTID,HFIRSTCARDID,HDEPTID,HSTAFFNUMBER)
                  values({item["FPERSONID"]},'{item["FNUMBER"]}','{item["FNAME"]}','{""}','{item["FNUMBER"]}',
                        {1},{1},{"'true'"},{ 0 },
                        '{"CLD-ERP"}','{""}',{item["FUSEORGID"]},{item["FCREATEORGID"]},{item["FPERSONID"]},
                        {item["FPOSTID"]},{item["FFIRSTCARDID"]},{0},'{item["FSTAFFNUMBER"]}')", ref DBUtility.ClsPub.sExeReturnInfo);
                        oCn.RunProc("set identity_insert Gy_Staff off");
                    }
                }
                oCn.Commit(); //提交事务
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "员工信息同步成功";
                objJsonResult.data = "";
                return objJsonResult;
            }
            catch (Exception e)
            {
                hasMore = false;
                oCn.RollBack();//回滚事务
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "单据查询员工信息发生异常!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region å®¢æˆ·åŸºç¡€èµ„料同步
        [Route("WEBSController/CustomerDataToLocalByKDWebApi")]
        [HttpGet]
        public object CustomerDataToLocalByKDWebApi(string HDate, int limit)
        {
            bool hasMore = true;//是否循环查询
            try
            {
                //访问金蝶
                string sCLOUDUseName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
                string sCLOUDPsd = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord");
                string dbId = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
                ApiClient client = new ApiClient(Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "KDApiUrl"));
                bool bLogin = client.Login(dbId, sCLOUDUseName, sCLOUDPsd, 2052);
                string HReturn;
                int startRow = 0;//分页,从第1条开始查询
                List<JObject> allData = new List<JObject>();//接收存储所有查询到的数据
                if (!bLogin)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "同步基础资料失败,金蝶账号登录异常。";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                //要通过接口查询的字段
                string fieldKeys = "FCUSTID,FNUMBER,FName,FUSEORGID,FCREATEORGID,FFORBIDSTATUS,FLOCATIONSTATUS,FADDRESS,FTContact,FMOBILE ,FTAXRATE1,FZIP,FTEL,FEMail ,FINVOICEBANKNAME,FINVOICEBANKACCOUNT,FTaxRate ,FTAXREGISTERCODE ,FCOUNTRY ,FTRADINGCURRID ,FSETTLETYPEID ,FSELLER ,FCustTypeId ";
                oCn.BeginTran();//开始事务
                while (hasMore) //循环分组查询,避免漏同步
                {
                    //拼接单据查询接口参数
                    string sJson = $"{{\"FormId\":\"BD_Customer\",\"FieldKeys\":\"{fieldKeys}\",\"FilterString\":\"FAPPROVEDATE  >= '{HDate}' and FLOCALEID = 2052\",\"Limit\":{limit},\"StartRow\":{startRow},\"TopRowCount\":0}}";
                    //调用金蝶webapi单据查询接口
                    var HReurnData = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery",
                    new object[] { sJson });
                    //将金蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
                    JArray formattedData = ConvertKingdeeResultToObjects(HReurnData, fieldKeys);
                    if (formattedData.Count < limit)
                    {
                        hasMore = false; // å¦‚果本次返回的数量少于请求的 limit,说明已经是最后一页了
                    }
                    else
                    {
                        startRow += limit; // å¦åˆ™ï¼Œå¢žåŠ èµ·å§‹è¡Œç´¢å¼•ï¼Œå‡†å¤‡è¯·æ±‚ä¸‹ä¸€é¡µ
                    }
                    foreach (JObject item in formattedData)
                    {
                        //删除原有记录
                        oCn.RunProc($"delete from Gy_Customer where HItemID = {item["FCUSTID"]?.ToString()}");
                        oCn.RunProc("set identity_insert Gy_Customer on");
                        oCn.RunProc("Insert into Gy_Customer " +
                    " (HItemID,HNumber,HName,HHelpCode,HShortNumber,HParentID" +
                    ",HLevel,HEndFlag,HStopflag,HRemark" +
                    ",HShortName,HAddress,HLinkMan,HLinkPhone,HMobilePhone" +
                    ",HFax,HPostalCode,HEmail,HBank,HBankAccount" +
                    ",HTaxNum,HTaxRate,HCountry,HCorMan,HEnglishName" +
                    ",HEnglishAddress,HCurID,HSSID,HAreaID,HCusStatus" +
                    ",HEmpID,HCreditDate,HCreditRatingDate,HMaxCreditRatingDate" +
                    ",HMonthUseQty,HForecastCreditRating,HCreditLevelID,HCountAccrualRating" +
                    ",HSubsidyAccrualRating,HCreditRating,HMaxCreditRating" +
                    ",HCusTypeID,HERPItemID,HUseOrgID,HCreateOrgID) " +
                    " Values('" + item["FCUSTID"] + "','" + item["FNUMBER"] + "','" + item["FName"] + "','" + 1 + "','" + item["FNUMBER"] + "'," + 1 +
                    ", " + 1 + ",0,'" + (item["FFORBIDSTATUS"].ToString()=="A"?0:1) + "','" + "ERP导入" + "'" +
                    ",'" + item["FName"] + "','" + item["FADDRESS"] + "','" + item["FTContact"] + "','" + item["FMOBILE"] + "','" + item["FTEL"] + "'" +
                    ",'" + item["FTAXRATE1"] + "','" + item["FZIP"] + "','" + item["FEMail"] + "','" + item["FINVOICEBANKNAME"] + "','" + item["FINVOICEBANKACCOUNT"] + "'" +
                    ",'" + item["FTAXREGISTERCODE"] + "'," + item["FTaxRate"] + ",'" + item["FCOUNTRY"] + "','','','','" + item["FTRADINGCURRID"] + "','" + item["FSETTLETYPEID"] + "'," + 0 + ",'" + "合格" + "'" +
                    ",'" + 0+ "'," + 0 + "," + 0 + "," + 0 +
                    "," + 0 + "," + 0 + "," + 0+ "," + 0 +
                    "," + 0 + "," + 0 + "," + 0 +
                    ", '" + 0 + "','" + item["FCUSTID"] + "','" + item["FUSEORGID"] + "','" + item["FCREATEORGID"] + "')");
                        string sql = "set identity_insert gy_Customer off";
                        oCn.RunProc(sql);
                    }
                }
                oCn.Commit(); //提交事务
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "客户信息同步成功";
                objJsonResult.data = "";
                return objJsonResult;
            }
            catch (Exception e)
            {
                hasMore = false;
                oCn.RollBack();//回滚事务
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "单据查询客户信息发生异常!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region ç»„织基础资料同步
        [Route("WEBSController/ORGANIZATIONSDataToLocalByKDWebApi")]
        [HttpGet]
        public object ORGANIZATIONSDataToLocalByKDWebApi(string HDate, int limit)
        {
            bool hasMore = true;//是否循环查询
            try
            {
                //访问金蝶
                string sCLOUDUseName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
                string sCLOUDPsd = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord");
                string dbId = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
                ApiClient client = new ApiClient(Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "KDApiUrl"));
                bool bLogin = client.Login(dbId, sCLOUDUseName, sCLOUDPsd, 2052);
                string HReturn;
                int startRow = 0;//分页,从第1条开始查询
                List<JObject> allData = new List<JObject>();//接收存储所有查询到的数据
                if (!bLogin)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "同步基础资料失败,金蝶账号登录异常。";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                //要通过接口查询的字段
                string fieldKeys = "FORGID,FNUMBER,FName,FParentid,FFORBIDSTATUS";
                oCn.BeginTran();//开始事务
                while (hasMore) //循环分组查询,避免漏同步
                {
                    //拼接单据查询接口参数
                    string sJson = $"{{\"FormId\":\"ORG_Organizations\",\"FieldKeys\":\"{fieldKeys}\",\"FilterString\":\"FAUDITDATE  >= '{HDate}' and FLOCALEID = 2052\",\"Limit\":{limit},\"StartRow\":{startRow},\"TopRowCount\":0}}";
                    //调用金蝶webapi单据查询接口
                    var HReurnData = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery",
                    new object[] { sJson });
                    //将金蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
                    JArray formattedData = ConvertKingdeeResultToObjects(HReurnData, fieldKeys);
                    if (formattedData.Count < limit)
                    {
                        hasMore = false; // å¦‚果本次返回的数量少于请求的 limit,说明已经是最后一页了
                    }
                    else
                    {
                        startRow += limit; // å¦åˆ™ï¼Œå¢žåŠ èµ·å§‹è¡Œç´¢å¼•ï¼Œå‡†å¤‡è¯·æ±‚ä¸‹ä¸€é¡µ
                    }
                    foreach (JObject item in formattedData)
                    {
                        //删除原有记录
                        oCn.RunProc($"delete from Xt_ORGANIZATIONS where HItemID = {item["FORGID"]?.ToString()}");
                       // oCn.RunProc("set identity_insert Xt_ORGANIZATIONS on");
                        string sql = "Insert into Xt_ORGANIZATIONS  (HItemID,HNumber,HName,HParentID,HStopflag,HMakeTime,HRemark)" +
                          " values('" + item["FORGID"] + "','" + item["FNUMBER"] + "','" + item["FNAME"] + "','" + item["FParentid"] + "','" + (item["FFORBIDSTATUS"].ToString()=="A"?0:1) + "'," +
                         "getdate(),'" + "CLD导入" +
                          "') ";
                        oCn.RunProc(sql);
                        //oCn.RunProc("set identity_insert Xt_ORGANIZATIONS off");
                    }
                }
                oCn.Commit(); //提交事务
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "组织信息同步成功";
                objJsonResult.data = "";
                return objJsonResult;
            }
            catch (Exception e)
            {
                hasMore = false;
                oCn.RollBack();//回滚事务
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "单据查询组织信息发生异常!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #region è¾…助属性基础资料同步
        [Route("WEBSController/PropertyDataToLocalByKDWebApi")]
        [HttpGet]
        public object PropertyDataToLocalByKDWebApi(string HDate, int limit)
        {
            bool hasMore = true;//是否循环查询
            try
            {
                //访问金蝶
                string sCLOUDUseName = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "UserName");
                string sCLOUDPsd = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "PassWord");
                string dbId = Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "DbId");
                ApiClient client = new ApiClient(Util.GetConfigKey(AppDomain.CurrentDomain.BaseDirectory + "/Config/kdapi.config", "KDApiUrl"));
                bool bLogin = client.Login(dbId, sCLOUDUseName, sCLOUDPsd, 2052);
                string HReturn;
                int startRow = 0;//分页,从第1条开始查询
                List<JObject> allData = new List<JObject>();//接收存储所有查询到的数据
                if (!bLogin)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "同步基础资料失败,金蝶账号登录异常。";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                //要通过接口查询的字段
                string fieldKeys = "FAuxPtyValueID,FAuxPtyNumber,FAuxPtyName,FBillNo,FFORBIDSTATUS";
                oCn.BeginTran();//开始事务
                while (hasMore) //循环分组查询,避免漏同步
                {
                    //拼接单据查询接口参数
                    string sJson = $"{{\"FormId\":\"BD_AuxPtyValue\",\"FieldKeys\":\"{fieldKeys}\",\"FilterString\":\"\",\"Limit\":{limit},\"StartRow\":{startRow},\"TopRowCount\":0}}";
                    //调用金蝶webapi单据查询接口
                    var HReurnData = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery",
                    new object[] { sJson });
                    //将金蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
                    JArray formattedData = ConvertKingdeeResultToObjects(HReurnData, fieldKeys);
                    if (formattedData.Count < limit)
                    {
                        hasMore = false; // å¦‚果本次返回的数量少于请求的 limit,说明已经是最后一页了
                    }
                    else
                    {
                        startRow += limit; // å¦åˆ™ï¼Œå¢žåŠ èµ·å§‹è¡Œç´¢å¼•ï¼Œå‡†å¤‡è¯·æ±‚ä¸‹ä¸€é¡µ
                    }
                    foreach (JObject item in formattedData)
                    {
                        //删除原有记录
                        oCn.RunProc($"delete from Gy_Property where HItemID = {item["FAuxPtyValueID"]?.ToString()}");
                        oCn.RunProc("set identity_insert Gy_Property on");
                        oCn.RunProc($@"insert into Gy_Property(HItemID,HNumber,HShortNumber,HName,HHelpCode,HParentID
                    ,HLevel,HEndFlag,HStopflag,HRemark,HPropertyTypeID,HUseFlag,HERPItemID,HMakeTime)
                  values({item["FAuxPtyValueID"]},'{item["FAuxPtyNumber"]}','{item["FAuxPtyNumber"]}','{item["FAuxPtyName"]}','{1}',{1},{1}
           ,{ 1},{Convert.ToString(item["FFORBIDSTATUS"].ToString()=="A" ? 0 : 1) },'{"ERP导入"}',{1},'{1}',{item["FAuxPtyValueID"]},{"getdate()"})", ref DBUtility.ClsPub.sExeReturnInfo);
                        oCn.RunProc("set identity_insert Gy_Property off");
                    }
                }
                oCn.Commit(); //提交事务
                objJsonResult.code = "1";
                objJsonResult.count = 1;
                objJsonResult.Message = "辅助属性信息同步成功";
                objJsonResult.data = "";
                return objJsonResult;
            }
            catch (Exception e)
            {
                hasMore = false;
                oCn.RollBack();//回滚事务
                objJsonResult.code = "0";
                objJsonResult.count = 0;
                objJsonResult.Message = "单据查询辅助属性信息发生异常!" + e.ToString();
                objJsonResult.data = null;
                return objJsonResult;
            }
        }
        #endregion
        #endregion
    }
}