From 4cbc57705eb23206d2d6bc0e855783e1451808f1 Mon Sep 17 00:00:00 2001
From: sjz <1240968267@qq.com>
Date: 星期五, 10 十月 2025 16:25:52 +0800
Subject: [PATCH] 获取erp库存接口(还没第三方授权)

---
 entity/ErpMesKc.cs                     |   50 ++++++++++
 Controllers/Kingdee/ErpKcController.cs |   43 ++++++++
 NewPdaSqlServer.csproj                 |   10 ++
 entity/Inventory.cs                    |    8 +
 service/ErpKcManager.cs                |  133 ++++++++++++++++++++++++++
 Config/appsettings.Development.json    |    8 +
 Config/appsettings.json                |   21 ++++
 Dto/ErpKc.cs                           |   17 +++
 resources/Kingdee.CDP.WebApi.SDK.dll   |    0 
 9 files changed, 290 insertions(+), 0 deletions(-)

diff --git a/Config/appsettings.Development.json b/Config/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/Config/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  }
+}
diff --git a/Config/appsettings.json b/Config/appsettings.json
new file mode 100644
index 0000000..ed216e1
--- /dev/null
+++ b/Config/appsettings.json
@@ -0,0 +1,21 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  },
+  "AllowedHosts": "*",
+  "AppSettings": {
+    "TestErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest",
+    "ProductionErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest"
+  },
+
+  "Version": "1.0.0",
+  "X-KDApi-AcctID": "6704a3360dafca",
+  "X-KDApi-UserName": "GS_MES",
+  "X-KDApi-AppID": "322643_SYeD28kvynn+4V9tX4XKSb1HRM66QpnI",
+  "X-KDApi-AppSec": "aac3bd55e1f542bd85ca69c7419d9d8f",
+  "X-KDApi-LCID": "2052",
+  "X-KDApi-ServerUrl": "http://192.168.1.141/K3Cloud/"
+}
diff --git a/Controllers/Kingdee/ErpKcController.cs b/Controllers/Kingdee/ErpKcController.cs
new file mode 100644
index 0000000..593b726
--- /dev/null
+++ b/Controllers/Kingdee/ErpKcController.cs
@@ -0,0 +1,43 @@
+锘縰sing System.Dynamic;
+using Microsoft.AspNetCore.Mvc;
+
+using NewPdaSqlServer.entity;
+using NewPdaSqlServer.util;
+using MES.Service.service.Kingdee;
+
+
+namespace NewPdaSqlServer.Controllers.Kingdee;
+
+
+[ApiController]
+[Route("api/[controller]")]
+public class ErpKcController : ControllerBase 
+{
+    private readonly ErpKcManager kc = new();
+    private readonly string METHOD = "POST";
+    private readonly string TableName = "ERPKC";
+    private readonly string URL = "http://localhost:10054/api/ErpKc/";
+
+
+    //
+    [HttpPost("Save")]
+    public ResponseResult Save(Inventory inventory)
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos = kc.QueryStocks(inventory);
+
+            return new ResponseResult
+            {
+                status = 0,
+                message = "OK",
+                data = resultInfos
+            };
+        }
+        catch (Exception ex)
+        {
+            return ResponseResult.ResponseError(ex);
+        }
+    }
+}
diff --git a/Dto/ErpKc.cs b/Dto/ErpKc.cs
new file mode 100644
index 0000000..a6845de
--- /dev/null
+++ b/Dto/ErpKc.cs
@@ -0,0 +1,17 @@
+锘縩amespace NewPdaSqlServer.Dto
+{
+    public class ErpKc
+    {
+        public string? FMaterialId { get; set; }
+        public string? FStockId { get; set; }
+        public string? FMtoNo { get; set; }
+        public string? FLot { get; set; }
+        public string? FStockUnitId { get; set; }
+        public string? FBaseUnitId { get; set; }
+        public string? FStockStatusId { get; set; }
+        public string? FBASEQTY { get; set; }
+        public string? FSTOREURNOM { get; set; }
+        public string? FSTOREURNUM { get; set; }
+        public string? FStockOrgId { get; set; }
+    }
+}
diff --git a/NewPdaSqlServer.csproj b/NewPdaSqlServer.csproj
index 37df97b..f495248 100644
--- a/NewPdaSqlServer.csproj
+++ b/NewPdaSqlServer.csproj
@@ -10,6 +10,10 @@
         <PackageReference Include="Masuit.Tools.Core" Version="2024.5.8" />
         <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.8" />
         <PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="8.0.10" />
+        <PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.9" />
+        <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.9" />
+        <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.9" />
+        <PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
         <PackageReference Include="Portable.BouncyCastle" Version="1.9.0" />
         <PackageReference Include="SqlSugarCore" Version="5.1.4.169" />
         <PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.0" />
@@ -18,4 +22,10 @@
         <PackageReference Include="System.Security.Cryptography.Xml" Version="9.0.4" />
     </ItemGroup>
 
+    <ItemGroup>
+      <Reference Include="Kingdee.CDP.WebApi.SDK">
+        <HintPath>resources\Kingdee.CDP.WebApi.SDK.dll</HintPath>
+      </Reference>
+    </ItemGroup>
+
 </Project>
diff --git a/entity/ErpMesKc.cs b/entity/ErpMesKc.cs
new file mode 100644
index 0000000..93af660
--- /dev/null
+++ b/entity/ErpMesKc.cs
@@ -0,0 +1,50 @@
+锘縰sing SqlSugar;
+
+namespace NewPdaSqlServer.entity;
+
+[SugarTable("ERP_MES_KC")]
+public class ErpMesKc
+{
+    /// <summary>
+    ///     榛樿鍊�: (newid())
+    /// </summary>
+    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
+    public Guid ID { get; set; }
+
+    [SugarColumn(ColumnName = "FNUMBER")]
+    public string? FNumber { get; set; }
+
+    [SugarColumn(ColumnName = "FQTY")]
+    public decimal? FQty { get; set; }
+
+    [SugarColumn(ColumnName = "FBASEUNIT")]
+    public string? FBaseUnit { get; set; }
+
+    [SugarColumn(ColumnName = "FSTOCKUNIT")]
+    public string? FStockUnit { get; set; }
+
+    [SugarColumn(ColumnName = "FSTOCKID")]
+    public string? FStockId { get; set; }
+
+    [SugarColumn(ColumnName = "CREATE_DATE")]
+    public DateTime? CreateDate { get; set; }
+
+    [SugarColumn(ColumnName = "FBATCHNO")]
+    public string? FBatchno { get; set; }
+
+    [SugarColumn(ColumnName = "FMTONO")]
+    public string? FMtono { get; set; }
+
+    [SugarColumn(ColumnName = "FSTOCKSTATUS")]
+    public string? FStockStatus { get; set; }
+
+    [SugarColumn(ColumnName = "FSTOREURNOM")]
+    public decimal? FStoreUrnom { get; set; }
+
+    [SugarColumn(ColumnName = "FSTOREURNUM")]
+    public decimal? FStoreUrnum { get; set; }
+
+    [SugarColumn(ColumnName = "FSTOCKORGID")]
+    public decimal? FStockOrgId { get; set; }
+
+}
diff --git a/entity/Inventory.cs b/entity/Inventory.cs
new file mode 100644
index 0000000..d818b72
--- /dev/null
+++ b/entity/Inventory.cs
@@ -0,0 +1,8 @@
+锘縩amespace NewPdaSqlServer.entity
+{
+    public class Inventory
+    {
+        public string? ItemNo { get; set; } // 鏂欏彿
+        public string? DepotCode { get; set; } // 浠撳簱
+    }
+}
diff --git a/resources/Kingdee.CDP.WebApi.SDK.dll b/resources/Kingdee.CDP.WebApi.SDK.dll
new file mode 100644
index 0000000..76a0fe4
--- /dev/null
+++ b/resources/Kingdee.CDP.WebApi.SDK.dll
Binary files differ
diff --git a/service/ErpKcManager.cs b/service/ErpKcManager.cs
new file mode 100644
index 0000000..92f7e32
--- /dev/null
+++ b/service/ErpKcManager.cs
@@ -0,0 +1,133 @@
+锘�
+using Kingdee.CDP.WebApi.SDK;
+using NewPdaSqlServer.entity;
+using NewPdaSqlServer.util;
+using SqlSugar;
+using NewPdaSqlServer.DB;
+using System.Text;
+using NewPdaSqlServer.Dto;
+using Microsoft.AspNetCore.Mvc;
+using MES.Service.Models;
+
+namespace MES.Service.service.Kingdee;
+
+public class ErpKcManager : Repository<ErpMesKc>
+{
+    public bool QueryStocks(Inventory inventory)
+    {
+        List<ErpKc> erpKc = GetErpInventory(inventory);
+
+        // 妫�鏌ヨ繑鍥炵粨鏋滄槸鍚︿负绌�
+        if (erpKc == null || erpKc.Count == 0)
+        {
+            throw new NotImplementedException("杩斿洖缁撴灉涓虹┖");
+        }
+        else
+        {
+            var baseObjects = MapErpCABtoWomcab(erpKc);
+
+            return UseTransaction(db =>
+            {
+                return SaveData(db, baseObjects) ? 1 : 0;
+            }) > 0;
+        }
+    }
+
+    #region 1.鑾峰彇鍗虫椂搴撳瓨
+    public List<ErpKc> GetErpInventory(Inventory inventory)
+    {
+        //娉ㄦ剰 1锛氭澶勪笉鍐嶄娇鐢ㄥ弬鏁板舰寮忎紶鍏ョ敤鎴峰悕鍙婂瘑鐮佺瓑鏁忔劅淇℃伅锛屾敼涓哄湪鐧诲綍閰嶇疆鏂囦欢涓缃��
+        //娉ㄦ剰 2锛氬繀椤诲厛閰嶇疆绗笁鏂圭郴缁熺櫥褰曟巿鏉冧俊鎭悗锛屽啀杩涜涓氬姟鎿嶄綔锛岃鎯呭弬鑰冨悇璇█鐗堟湰SDK浠嬬粛涓殑鐧诲綍閰嶇疆鏂囦欢璇存槑銆�
+        //璇诲彇閰嶇疆锛屽垵濮嬪寲SDK
+        K3CloudApi client = new K3CloudApi();
+        //鐢ㄤ簬璁板綍缁撴灉
+        StringBuilder Info = new StringBuilder();
+        //涓氬姟瀵硅薄鏍囪瘑
+        string formId = "STK_Inventory";
+        DateTime dt = DateTime.Now;
+        //鏌ヨ瀛楁闆嗗悎锛屽嵆杩斿洖鍝簺鏁版嵁锛屼笉鑳戒负绌猴紝鏍规嵁涓嶅悓涓氬姟鍗曟嵁濉啓涓嶅悓鐨勫瓧娈靛悕锛屼互涓嬩粎涓虹ず渚�
+        //string fieldKeys = "FCod,FFileId,FRelevantObject";
+        //string FilterString = "FID='-2146304'";
+        string fieldKeys = "FMaterialId.FNumber,FMtoNo,FStockId,FLot.FNumber,FStockUnitId.FNumber,FBaseUnitId.FNumber,FStockStatusId.FName,FBASEQTY,FMaterialid.FSTOREURNOM,FMaterialid.FSTOREURNUM,FStockOrgId";
+        string FilterString = string.Format(@"FMaterialId.FNumber like '%{0}%' and FStockId.FNumber like '%{1}%' and FBaseQty>0", inventory.ItemNo,inventory.DepotCode);
+        string OrderString = "";
+        int TopRowCount = 0;
+        int StartRow = 0;
+        int Limit = 0;
+
+        var param = new QueryParam()
+        {
+            FormId = formId,
+            FieldKeys = fieldKeys,
+            FilterString = FilterString,
+            OrderString = OrderString,
+            TopRowCount = TopRowCount,
+            StartRow = StartRow,
+            Limit = Limit
+        };
+        //璋冪敤鎺ュ彛
+        var result = client.ExecuteBillQuery(param.ToJson());
+
+        return result.Select(s =>
+        {
+            var entity = new ErpKc
+            {
+                FMaterialId = s[0]?.ToString(),
+                FMtoNo = s[1]?.ToString(),
+                FStockId = s[2]?.ToString(),
+                FLot = s[3]?.ToString(),
+                FStockUnitId = s[4]?.ToString(),
+                FBaseUnitId = s[5]?.ToString(),
+                FStockStatusId = s[6]?.ToString(),
+                FBASEQTY = s[7]?.ToString() ,
+                FSTOREURNOM = s[8]?.ToString(),
+                FSTOREURNUM = s[9]?.ToString(),
+                FStockOrgId = s[10]?.ToString()
+            };
+            return entity;
+        }).ToList();
+    }
+    #endregion
+
+
+    private List<ErpMesKc> MapErpCABtoWomcab(List<ErpKc> dtoList)
+    {
+        var ErpMesKcList = new List<ErpMesKc>();
+
+        foreach (var dto in dtoList)
+        {
+            var kc = new ErpMesKc
+            {
+                FNumber = dto.FMaterialId,
+                FQty = Convert.ToDecimal(dto.FBASEQTY),
+                FBaseUnit=dto.FBaseUnitId,
+                FStockUnit=dto.FStockUnitId,
+                FStockId=dto.FStockId,
+                CreateDate=DateTime.Now,
+                FBatchno=dto.FLot,
+                FMtono=dto.FMtoNo,
+                FStockStatus=dto.FStockStatusId,
+                FStoreUrnom= Convert.ToDecimal(dto.FSTOREURNOM),
+                FStoreUrnum= Convert.ToDecimal(dto.FSTOREURNUM),
+                FStockOrgId = Convert.ToDecimal(dto.FStockOrgId)
+
+            };
+
+            ErpMesKcList.Add(kc);
+        }
+
+        return ErpMesKcList;
+    }
+
+    // 鎻掑叆鎴栨洿鏂版暟鎹殑鏂规硶
+    private bool SaveData(SqlSugarScope db, List<ErpMesKc> kcc)
+    {
+        Db.Deleteable<ErpMesKc>()
+          .ExecuteCommand();
+
+        var save = base.InsertRange(kcc);
+        if (save) return true;
+        throw new NotImplementedException("鎻掑叆澶辫触");
+    }
+
+}

--
Gitblit v1.9.3