From eea07b9c06f8a9070abe23816d02ae4fd73b4fa3 Mon Sep 17 00:00:00 2001
From: 南骏 池 <chiffly@163.com>
Date: 星期三, 25 六月 2025 14:48:18 +0800
Subject: [PATCH] 1.金蝶及时库存调用

---
 appsettings.json                       |    9 +
 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                |   22 ++++
 Dto/ErpKc.cs                           |   17 +++
 9 files changed, 299 insertions(+), 1 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..0a74805
--- /dev/null
+++ b/Config/appsettings.json
@@ -0,0 +1,22 @@
+{
+  "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",
+    //"DataBaseConn": "Data Source=192.168.1.146;Initial Catalog=TEST_MES;User ID=sa;Password =qixi123;Encrypt=True;TrustServerCertificate=True;"
+    "DataBaseConn": "Data Source=192.168.1.146;Initial Catalog=GS_MES;User ID=mesUser;Password =qixi1qaz@WSXmes;Encrypt=True;TrustServerCertificate=True;"
+  },
+  "Version": "1.0.0",
+  "X-KDApi-AcctID": "683e92c7f92688",
+  "X-KDApi-UserName": "MES",
+  "X-KDApi-AppID": "315464_W58Nw/DtRIpUxewFR6WpRZzN5qT62BPK",
+  "X-KDApi-AppSec": "f853011716de43589aade7b9dbbbe9e6",
+  "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 bfddcf2..80092b3 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.6" />
+        <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.6" />
+        <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.6" />
+        <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
         <PackageReference Include="Portable.BouncyCastle" Version="1.9.0" />
         <PackageReference Include="SqlSugarCore" Version="5.1.4.169" />
         <PackageReference Include="Swashbuckle.AspNetCore" Version="6.8.0" />
@@ -24,4 +28,10 @@
       </Reference>
     </ItemGroup>
 
+    <ItemGroup>
+      <Content Update="appsettings.json">
+        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+      </Content>
+    </ItemGroup>
+
 </Project>
diff --git a/appsettings.json b/appsettings.json
index 11434a6..5a06ee3 100644
--- a/appsettings.json
+++ b/appsettings.json
@@ -11,5 +11,12 @@
     "ProductionErpUrl": "http://192.168.1.149:8066/WebService1.asmx/MesToErpinfoTest",
     //"DataBaseConn": "Data Source=192.168.1.146;Initial Catalog=TEST_MES;User ID=sa;Password =qixi123;Encrypt=True;TrustServerCertificate=True;"
     "DataBaseConn": "Data Source=192.168.1.146;Initial Catalog=GS_MES;User ID=mesUser;Password =qixi1qaz@WSXmes;Encrypt=True;TrustServerCertificate=True;"
-  }
+  },
+  "Version": "1.0.0",
+  "X-KDApi-AcctID": "6244701c616bff",
+  "X-KDApi-UserName": "demo",
+  "X-KDApi-AppID": "225649_7ZbM6dDO0qrVXXUKX/Xs09wH2u5d4rLE",
+  "X-KDApi-AppSec": "2bb1d972f3574a46aebee03cdc80aeae",
+  "X-KDApi-LCID": "2052",
+  "X-KDApi-ServerUrl": "http://172.17.55.175/k3cloud/"
 }
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/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