yusijie
2 天以前 6292e3c4c410beec9888e43b5ba48c62a242863a
通过webapi单据查询接口同步物料信息;夏宝调整返修码格式
4个文件已修改
253 ■■■■■ 已修改文件
WarM/条码打印/Gy_BarCodeBill_Rework.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebAPI/Controllers/条码管理/WEBSController.cs 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebAPI/WebAPI.csproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebAPI/packages.config 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WarM/ÌõÂë´òÓ¡/Gy_BarCodeBill_Rework.cs
@@ -709,11 +709,12 @@
                                    string[] HMaterNumberPrefix = oSystemParameter.omodel.Gy_BarCodeBill_Rework_Ctrl.Split(',');
                                    char HMaterfirstChar = grdMain.Rows[j].Cells[HMaterNumberCol].Value.ToString()[0];
                                    string HMaterthirdChar = grdMain.Rows[j].Cells[HMaterNumberCol].Value.ToString().Substring(0,3);
                                    if (HMaterNumberPrefix.Contains(HMaterfirstChar.ToString()))
                                    {
                                        //条码编号 = å·¥åŽ‚ä»£ç ï¼ˆ1) + è½¦é—´ä»£ç ï¼ˆ060113)+ æœºåž‹å· + å¹´ + æœˆ + æ—¥ + æµæ°´å·
                                        TM = "1" + "060113" + HSubjoin2 + sYear + sPeriod + sDay + LSH.ToString("D5");
                                        //条码编号 = å·¥åŽ‚ä»£ç ï¼ˆ1) + è½¦é—´ä»£ç ï¼ˆ060113)+ ç‰©æ–™ä»£ç å‰ä¸‰ä½ + å¹´ + æœˆ + æ—¥ + æµæ°´å·
                                        TM = "1" + "060113" + HMaterthirdChar.ToString() + sYear + sPeriod + sDay + LSH.ToString("D5");
                                    }
                                    else
                                    {
WebAPI/Controllers/ÌõÂë¹ÜÀí/WEBSController.cs
@@ -17,7 +17,7 @@
using WebAPI.Models;
using WebAPI.Service;
using WebAPI.Utility;
using Kingdee.BOS.WebApi.Client;
using Alex.Kingdee.Cloud.WebAPI.Client;
namespace WebAPI.Controllers
{
@@ -15585,167 +15585,100 @@
        #region ç‰©æ–™åŸºç¡€èµ„料同步
        [Route("WEBSController/MaterialDataToLocalByKDWebApi")]
        [HttpGet]
        public object MaterialDataToLocalByKDWebApi(string HDate)
        public object MaterialDataToLocalByKDWebApi(string HDate,int limit)
        {
            bool hasMore = true;//是否循环查询
            try
            {
                //访问金蝶
                ApiClient client = new ApiClient(Pub_Class.ClsPub.sCLOUDUrl);
                var loginRet = InvokeHelper.Login();
                var isSuccess = JObject.Parse(loginRet)["LoginResultType"].Value<int>();
                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 (isSuccess == 0)
                if (!bLogin)
                {
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "同步基础资料失败,金蝶账号登录异常。" + loginRet;
                    objJsonResult.Message = "同步基础资料失败,金蝶账号登录异常。";
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                //要通过接口查询的字段
                string fieldKeys = "FMATERIALID,FNumber,FName,FSpecification,FFORBIDSTATUS,FErpClsID,FSTOREUNITID,FLENGTH,FWIDTH,FHEIGHT,FNETWEIGHT,FGROSSWEIGHT,FOLDNUMBER,FSTOCKID,FStockPlaceID,FPLANMODE,FCREATORID,FAPPROVERID,FAPPROVEDATE,FMODIFYDATE,FCREATEORGID,FUSEORGID,FISBATCHMANAGE,FCHECKINCOMING,FISENABLE1,FISKFPERIOD,FEXPUNIT,FEXPPERIOD,FAUXUNITID,FSNUNIT,FBASEUNITID,FSALEUNITID,FSALEPRICEUNITID,FPERUNITSTANDHOUR,FSTDLABORPREPARETIME,FSTDMACHINEPREPARETIME,FMASTERID,FMAXPOQTY,FMINPOQTY,FMATERIALGROUP";
                //调用单据查询webapi
                string sJson = $"{{\"FormId\":\"BD_MATERIAL\",\"FieldKeys\":\"FMATERIALID,FNumber,FName,FSpecification,FApproveDate,FCreateDate,FDocumentStatus\",\"FilterString\":\"FApproveDate >= '2025-04-01T00:00:00' AND FApproveDate <= '2025-04-30T23:59:59'\",\"Limit\":100,\"StartRow\":0,\"TopRowCount\":0}}";
                oCn.BeginTran();//开始事务
                var result = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery.common.kdsvc", new object[] { "BD_MATERIAL", sJson });
                var _saveObj = JObject.Parse(result);
                //判断数据是否获取成功
                if (_saveObj.SelectToken("Result.ResponseStatus.IsSuccess")?.ToString().ToUpper() != "TRUE")
                while (hasMore) //循环分组查询,避免漏同步
                {
                    HReturn = result.ToString();
                    //反序列化json数据
                    var retModel = JsonConvert.DeserializeObject<KingdeeResponse>(HReturn);
                    //接收金蝶报错信息
                    var strErrorMsg = string.Empty;
                    //遍历获取报错信息
                    foreach (var item in retModel.Result.ResponseStatus.Errors)
                    {
                        strErrorMsg += item.Message + "\r\n";
                    };
                    //拼接单据查询接口参数
                    string sJson = $"{{\"FormId\":\"BD_MATERIAL\",\"FieldKeys\":\"{fieldKeys}\",\"FilterString\":\"FApproveDate >= '{HDate}' and FLOCALEID = 2052\",\"Limit\":{limit},\"StartRow\":{startRow},\"TopRowCount\":0}}";
                    objJsonResult.code = "0";
                    objJsonResult.count = 0;
                    objJsonResult.Message = "单据查询物料信息失败!" + strErrorMsg;
                    objJsonResult.data = null;
                    return objJsonResult;
                }
                else
                {
                    //主表数据赋值
                    var MainData = new
                    {
                        HInterID = _saveObj.SelectToken("Result.Result.Id")?.ToString() ?? "0",
                        HDate = _saveObj.SelectToken("Result.Result.Date")?.ToString(),
                        HBillNo = _saveObj.SelectToken("Result.Result.BillNo")?.ToString() ?? "",
                        HBillStatus = _saveObj.SelectToken("Result.Result.ApproverId_Id")?.ToString() == "0" ? 1 : 2,
                        HPURCHASERNumber = _saveObj.SelectToken("Result.Result.PurchaserId.Number")?.ToString() ?? "",
                        HMaker = _saveObj.SelectToken("Result.Result.CreatorId.Name")?.ToString() ?? "",
                        HChecker = _saveObj.SelectToken("Result.Result.ApproverId.Name")?.ToString() ?? "",
                        HUpDater = _saveObj.SelectToken("Result.Result.ModifierId.Name")?.ToString() ?? "",
                        HDeleteMan = _saveObj.SelectToken("Result.Result.CancellerId.Name")?.ToString() ?? "",
                        HCloseMan = _saveObj.SelectToken("Result.Result.CloserId.Name")?.ToString() ?? "",
                        HPURCHASERGROUPNumber = _saveObj.SelectToken("Result.Result.PurchaserGroupId.Number")?.ToString() ?? "",
                        HPROVIDERCONTACTNumber = _saveObj.SelectToken("Result.Result.ProviderContactId.CONTACTNUMBER")?.ToString() ?? "",
                        HSETTLEMODEID = _saveObj.SelectToken("Result.Result.POOrderFinance[0].SettleModeId_Id")?.ToString() ?? "0",
                        HSETTLEMODENumber = _saveObj.SelectToken("Result.Result.POOrderFinance[0].SettleModeId.Number")?.ToString() ?? "",
                        HSETTLECURRID = _saveObj.SelectToken("Result.Result.POOrderFinance[0].SettleCurrId_Id")?.ToString() ?? "0",
                        HSETTLECURRNumber = _saveObj.SelectToken("Result.Result.POOrderFinance[0].SettleCurrId.Number")?.ToString() ?? "",
                        HEXCHANGETYPEID = _saveObj.SelectToken("Result.Result.POOrderFinance[0].ExchangeTypeId_Id")?.ToString() ?? "0",
                        HEXCHANGETYPENumber = _saveObj.SelectToken("Result.Result.POOrderFinance[0].ExchangeTypeId.Number")?.ToString() ?? "",
                        HPAYCONDITIONID = _saveObj.SelectToken("Result.Result.POOrderFinance[0].PayConditionId_Id")?.ToString() ?? "0",
                        HPAYCONDITIONNumber = _saveObj.SelectToken("Result.Result.POOrderFinance[0].PayConditionId.Number")?.ToString() ?? "",
                        HEXCHANGERATE = _saveObj.SelectToken("Result.Result.POOrderFinance[0].ExchangeRate")?.ToString() ?? "0",
                        HLOCALCURRID = _saveObj.SelectToken("Result.Result.POOrderFinance[0].LocalCurrId_Id")?.ToString() ?? "0",
                        HLOCALCURRNumber = _saveObj.SelectToken("Result.Result.POOrderFinance[0].LocalCurrId.Number")?.ToString() ?? "",
                        HISINCLUDEDTAX = _saveObj.SelectToken("Result.Result.POOrderFinance[0].IsIncludedTax")?.ToString().ToUpper() == "TRUE" ? 1 : 0,
                        HISPRICEEXCLUDETAX = _saveObj.SelectToken("Result.Result.POOrderFinance[0].FISPRICEEXCLUDETAX")?.ToString().ToUpper() == "TRUE" ? 1 : 0,
                    };
                    //调用金蝶webapi单据查询接口
                    var HReurnData = client.Execute<string>("Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.ExecuteBillQuery",
                    new object[] { sJson });
                    //根据单据号、单据ID,删除本地数据
                    oCn.RunProc("Delete from Cg_POOrderBillMain where HBillNo='" + MainData.HBillNo + "'", ref DBUtility.ClsPub.sExeReturnInfo);
                    oCn.RunProc("Delete from Cg_POOrderBillMain where HInterID=" + MainData.HInterID.ToString(), ref DBUtility.ClsPub.sExeReturnInfo);
                    oCn.RunProc("Delete from Cg_POOrderBillSub where HInterID=" + MainData.HInterID.ToString(), ref DBUtility.ClsPub.sExeReturnInfo);
                    //子表数据赋值
                    var dataArr = _saveObj.SelectToken("Result.Result.POOrderEntry") as JArray;
                    //将金蝶单据查询WEBAPI接口返回的纯数组转换为带字段名的对象列表
                    JArray formattedData = ConvertKingdeeResultToObjects(HReurnData, fieldKeys);
                    if (dataArr != null)
                    if (formattedData.Count < limit)
                    {
                        foreach (var oSub in dataArr)
                        {
                            var SubData = new
                            {
                                HInterID = _saveObj.SelectToken("Result.Result.Id")?.ToString() ?? "0",
                                HEntryID = oSub.SelectToken("Id")?.ToString() ?? "0",
                                HMaterID = oSub.SelectToken("MaterialId_Id")?.ToString() ?? "0",
                                HUnitID = oSub.SelectToken("UnitId_Id")?.ToString() ?? "0",
                                HQty = oSub.SelectToken("Qty")?.ToString() ?? "0",
                                HPrice = oSub.SelectToken("Price")?.ToString() ?? "0",
                                HTaxPrice = oSub.SelectToken("TaxPrice")?.ToString() ?? "0",
                                HDiscountRate = oSub.SelectToken("DiscountRate")?.ToString() ?? "0",
                                HMoney = oSub.SelectToken("Amount")?.ToString() ?? "0",
                                HTaxRate = oSub.SelectToken("TaxRate")?.ToString() ?? "0",
                                HTaxMoney = oSub.SelectToken("TaxAmount")?.ToString() ?? "0",
                                HDate = oSub.SelectToken("DeliveryDate")?.ToString() ?? "",
                                HRemark = oSub.SelectToken("Note")?.ToString() ?? "",
                                HRelationQty = oSub.SelectToken("JOINQTY")?.ToString() ?? "0",
                                HBackRelationQty = oSub.SelectToken("STOCKRETQTY")?.ToString() ?? "0",
                                HPropertyID = oSub.SelectToken("AuxPropId_Id")?.ToString() ?? "0",
                                HBatChNo = oSub.SelectToken("FLot_Text")?.ToString() ?? "",
                                HAuxPropID = oSub.SelectToken("AuxPropId_Id")?.ToString() ?? "0",
                                HMTONo = oSub.SelectToken("MtoNo")?.ToString() ?? "",
                                HERPInterID = _saveObj.SelectToken("Result.Result.Id")?.ToString() ?? "0",
                                HERPEntryID = oSub.SelectToken("Id")?.ToString() ?? "0",
                                HSEQ = oSub.SelectToken("Seq")?.ToString() ?? "0",
                                HRECEIVEDEPTID = oSub.SelectToken("ReceiveDeptId_Id")?.ToString() ?? "0",
                                HSUPPLIERLOT = oSub.SelectToken("SupplierLot")?.ToString() ?? "",
                                HBOMID = oSub.SelectToken("BomId_Id")?.ToString() ?? "0",
                                HBomNumber = oSub.SelectToken("BomId.Number")?.ToString() ?? "",
                                HSTOCKUNITID = oSub.SelectToken("StockUnitID_Id")?.ToString() ?? "0",
                                HBASEUNITID = oSub.SelectToken("BaseUnitId_Id")?.ToString() ?? "0",
                                HBFLOWID = oSub.SelectToken("FBFLowId_Id")?.ToString() ?? "",
                                HGIVEAWAY = oSub.SelectToken("GiveAway")?.ToString().ToUpper() == "TRUE" ? 1 : 0,
                                HROWTYPE = oSub.SelectToken("RowType")?.ToString() ?? "",
                                HBASEUNITQTY = oSub.SelectToken("BaseUnitQty")?.ToString() ?? "0",
                                HSTOCKBASEQTY = oSub.SelectToken("StockBaseQty")?.ToString() ?? "0",
                                HREQTRACENO = oSub.SelectToken("ReqTraceNo")?.ToString() ?? "",
                                HMATERIALDESC = oSub.SelectToken("MaterialDesc[0].Value")?.ToString() ?? "",
                                HRECEIVEORGID = oSub.SelectToken("ReceiveOrgId_Id")?.ToString() ?? "0",
                                HREQUIREORGID = oSub.SelectToken("RequireOrgId_Id")?.ToString() ?? "0",
                                HTAXNETPRICE = oSub.SelectToken("TaxNetPrice")?.ToString() ?? "0",
                                HPRICECOEFFICIENT = oSub.SelectToken("PriceCoefficient")?.ToString() ?? "0",
                                HTAXCOMBINATION = oSub.SelectToken("FTaxCombination_Id")?.ToString() ?? "0",
                                HTAXCOMBINATIONNumber = oSub.SelectToken("FTaxCombination.Number")?.ToString() ?? "",
                                HPRICEUNITID = oSub.SelectToken("PriceUnitId_Id")?.ToString() ?? "0",
                                HPRICELISTENTRY = oSub.SelectToken("PriceListEntry_Id")?.ToString() ?? "0",
                                HPRICELISTENTRYNumber = oSub.SelectToken("PriceListEntry.Number")?.ToString() ?? "",
                                HPAYORGID = oSub.SelectToken("PayOrgId_Id")?.ToString() ?? "0",
                                HSETTLEORGID = oSub.SelectToken("SettleOrgId_Id")?.ToString() ?? "0",
                                HTaxRate_TAX = oSub.SelectToken("POORDERENTRY_TAX[0].TaxRate")?.ToString() ?? "0",
                                HTaxMoney_TAX = oSub.SelectToken("POORDERENTRY_TAX[0].TaxAmount")?.ToString() ?? "0",
                                HTAXRATEID = oSub.SelectToken("POORDERENTRY_TAX[0].TaxRateId_Id")?.ToString() ?? "0",
                                HTAXRATENumber = oSub.SelectToken("POORDERENTRY_TAX[0].TaxRateId.Number")?.ToString() ?? "",
                                HCOSTPERCENT = oSub.SelectToken("POORDERENTRY_TAX[0].CostPercent")?.ToString() ?? "0",
                                HCOSTAMOUNT = oSub.SelectToken("POORDERENTRY_TAX[0].CostAmount")?.ToString() ?? "0",
                                HVAT = oSub.SelectToken("POORDERENTRY_TAX[0].VAT")?.ToString() ?? "",
                                HSELLERWITHHOLDING = oSub.SelectToken("POORDERENTRY_TAX[0].SellerWithholding")?.ToString() ?? "",
                                HBUYERWITHHOLDING = oSub.SelectToken("POORDERENTRY_TAX[0].BuyerWithholding")?.ToString() ?? "",
                            };
                        }
                        hasMore = false; // å¦‚果本次返回的数量少于请求的 limit,说明已经是最后一页了
                    }
                    else
                    {
                        startRow += limit; // å¦åˆ™ï¼Œå¢žåŠ èµ·å§‹è¡Œç´¢å¼•ï¼Œå‡†å¤‡è¯·æ±‚ä¸‹ä¸€é¡µ
                    }
                    objJsonResult.code = "1";
                    objJsonResult.count = 1;
                    objJsonResult.Message = "成功";
                    objJsonResult.data = WebSoBar;
                    return objJsonResult;
                }
                    foreach (JObject item in formattedData)
                    {
                        //删除原有记录
                        oCn.RunProc($"delete from Gy_Material where HItemID = {item["FMATERIALID"]?.ToString()}");
                        oCn.RunProc("set identity_insert Gy_Material on");
                        //重新写入表
                        oCn.RunProc($"insert into Gy_Material(HItemID,HERPItemID,HNumber,HName,HModel,HShortNumber,HParentID" +
                        $", HLevel, HEndFlag, HStopflag, HRemark, HMaterClsID, HUnitID, HUnitGroupID" +
                        $", HLength, HWidth, HHeight, HJQty, HMQty, HOldMaterNumber, HBarCodeType" +
                        $", HWHID, HSPID, HPlanMode, HUseFlag, HMinPickQty" +
                        $", HMakeEmp, HMakeTime, HCheckEmp, HCheckTime, HUpdateTime" +
                        $", HCREATEORGID, HUSEORGID, HBatchManager, HCHECKINCOMING" +
                        $", HAuxPropFlag, HISKFPERIOD, HEXPUNIT, HEXPPERIOD" +
                        $", HAuxUnitID, HSNUnitID, HBASEUNITID, HSALEUNITID, HSALEPRICEUNITID" +
                        $", HPERUNITSTANDHOUR, HSTDLABORPREPARETIME, HSTDMACHINEPREPARETIME, HMASTERID" +
                        $", HMaxPOQty, HMinPOQty, HMaterTypeID) " +
                        $" values ( {item["FMATERIALID"]?.ToString()},{item["FMATERIALID"]?.ToString()},'{item["FNumber"]?.ToString()}','{item["FName"]?.ToString()}','{item["FSpecification"]?.ToString()}'" +
                        $",'{item["FNumber"]?.ToString()}',0,1,1,'{(item["FFORBIDSTATUS"]?.ToString() == "A" ? 0 : 1)}','WEBAPI-导入'" +
                        $",'{item["FErpClsID"]?.ToString()}','{item["FSTOREUNITID"]?.ToString()}',0,'{item["FLENGTH"]?.ToString()}','{item["FWIDTH"]?.ToString()}','{item["FHEIGHT"]?.ToString()}'" +
                        $",'{item["FNETWEIGHT"]?.ToString()}','{item["FGROSSWEIGHT"]?.ToString()}','{item["FOLDNUMBER"]?.ToString()}','','{item["FSTOCKID"]?.ToString()}','{item["FStockPlaceID"]?.ToString()}'" +
                        $",'{item["FPLANMODE"]?.ToString()}','未检验',0,'{item["FCREATORID"]?.ToString()}',getdate(),'{item["FAPPROVERID"]?.ToString()}'" +
                        $",'{item["FAPPROVEDATE"]?.ToString()}','{item["FMODIFYDATE"]?.ToString()}','{item["FCREATEORGID"]?.ToString()}','{item["FUSEORGID"]?.ToString()}','{(item["FISBATCHMANAGE"]?.ToString() == "1" ? 1 : 0)}','{(item["FCHECKINCOMING"]?.ToString() == "1" ? 1 : 0)}'" +
                        $",'{(item["FISENABLE1"]?.ToString() == "1" ? 1 : 0)}','{(item["FISKFPERIOD"]?.ToString() == "1" ? 1 : 0)}','{item["FEXPUNIT"]?.ToString()}','{item["FEXPPERIOD"]?.ToString()}','{item["FAUXUNITID"]?.ToString()}','{item["FSNUNIT"]?.ToString()}'" +
                        $",'{item["FBASEUNITID"]?.ToString()}','{item["FSALEUNITID"]?.ToString()}','{item["FSALEPRICEUNITID"]?.ToString()}','{item["FPERUNITSTANDHOUR"]?.ToString()}','{item["FSTDLABORPREPARETIME"]?.ToString()}','{item["FSTDMACHINEPREPARETIME"]?.ToString()}'" +
                        $",'{item["FMASTERID"]?.ToString()}','{item["FMAXPOQTY"]?.ToString()}','{item["FMINPOQTY"]?.ToString()}','{item["FMATERIALGROUP"]?.ToString()}'" +
                        $")");
                        oCn.RunProc("set identity_insert Gy_Material 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();
@@ -15756,6 +15689,41 @@
        #endregion
        #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
        #endregion
    }
}
WebAPI/WebAPI.csproj
@@ -47,6 +47,9 @@
    <Prefer32Bit>false</Prefer32Bit>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="Alex.Kingdee.Cloud.WebAPI.Client, Version=2.5.0.0, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\packages\Alex.Kingdee.Cloud.WebAPI.Client.2.5.0\lib\net45\Alex.Kingdee.Cloud.WebAPI.Client.dll</HintPath>
    </Reference>
    <Reference Include="AlibabaCloud.EndpointUtil, Version=0.1.1.0, Culture=neutral, processorArchitecture=MSIL">
      <HintPath>..\packages\AlibabaCloud.EndpointUtil.0.1.1\lib\net45\AlibabaCloud.EndpointUtil.dll</HintPath>
    </Reference>
WebAPI/packages.config
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Alex.Kingdee.Cloud.WebAPI.Client" version="2.5.0" targetFramework="net45" />
  <package id="AlibabaCloud.EndpointUtil" version="0.1.1" targetFramework="net45" />
  <package id="AlibabaCloud.GatewayDingTalk" version="1.0.2" targetFramework="net45" />
  <package id="AlibabaCloud.GatewaySpi" version="0.0.3" targetFramework="net45" />