From 2a1695b65cf2717d60863d0b7aeefc02b4293d16 Mon Sep 17 00:00:00 2001
From: cdk <2441919651@qq.com>
Date: 星期四, 13 十一月 2025 10:15:14 +0800
Subject: [PATCH] 增加BOM查询的接口代码

---
 entity/ErpMesKc.cs                      |   31 +++++++
 Controllers/Kingdee/ErpBOMController.cs |   40 ++++++++++
 service/ErpKcManager.cs                 |   10 +-
 service/ErpBOMManager.cs                |  137 ++++++++++++++++++++++++++++++++++
 Dto/ErpKc.cs                            |   11 ++
 5 files changed, 225 insertions(+), 4 deletions(-)

diff --git a/Controllers/Kingdee/ErpBOMController.cs b/Controllers/Kingdee/ErpBOMController.cs
new file mode 100644
index 0000000..b268367
--- /dev/null
+++ b/Controllers/Kingdee/ErpBOMController.cs
@@ -0,0 +1,40 @@
+锘縰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 ErpBOMController : ControllerBase 
+{
+    private readonly ErpBOMManager kc = new();
+
+
+    //
+    [HttpPost("Save")]
+    public ResponseResult Save()
+    {
+        try
+        {
+            dynamic resultInfos = new ExpandoObject();
+            resultInfos = kc.QueryErpBOM();
+
+            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
index a6845de..5b4cbd9 100644
--- a/Dto/ErpKc.cs
+++ b/Dto/ErpKc.cs
@@ -14,4 +14,15 @@
         public string? FSTOREURNUM { get; set; }
         public string? FStockOrgId { get; set; }
     }
+
+    public class ErpBom
+    {
+        public string? FITEMPPROPERTY { get; set; }
+        public string? FMATERIALID { get; set; }
+        public string? FITEMNAME { get; set; }
+        public string? FENTRYID { get; set; }
+        public string? FCHILDITEMNAME { get; set; }
+        public string? FNUMERATOR { get; set; }
+        public string? FDENOMINATOR { get; set; }
+    }
 }
diff --git a/entity/ErpMesKc.cs b/entity/ErpMesKc.cs
index 93af660..94e5996 100644
--- a/entity/ErpMesKc.cs
+++ b/entity/ErpMesKc.cs
@@ -48,3 +48,34 @@
     public decimal? FStockOrgId { get; set; }
 
 }
+
+[SugarTable("ERP_BOM")]
+public class ErpBOM
+{
+    [SugarColumn(ColumnName = "ID", IsPrimaryKey = true)]
+    public Guid ID { get; set; }
+    /// <summary>
+    ///     榛樿鍊�: (newid())
+    /// </summary>
+    [SugarColumn(ColumnName = "ItemProperty")]
+    public string? ItemProperty { get; set; }
+
+    [SugarColumn(ColumnName = "ItemId")]
+    public int? ItemId { get; set; }
+
+    [SugarColumn(ColumnName = "ItemName")]
+    public string? ItemName { get; set; }
+
+    [SugarColumn(ColumnName = "ChildItemId")]
+    public int? ChildItemId { get; set; }
+
+    [SugarColumn(ColumnName = "ChildItemName")]
+    public string? ChildItemName { get; set; }
+
+    [SugarColumn(ColumnName = "Numerator")]
+    public decimal? Numerator { get; set; }
+
+    [SugarColumn(ColumnName = "Denominator")]
+    public decimal? Denominator { get; set; }
+
+}
diff --git a/service/ErpBOMManager.cs b/service/ErpBOMManager.cs
new file mode 100644
index 0000000..2c045c4
--- /dev/null
+++ b/service/ErpBOMManager.cs
@@ -0,0 +1,137 @@
+锘�
+using Kingdee.CDP.WebApi.SDK;
+using MES.Service.Models;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+using NewPdaSqlServer.DB;
+using NewPdaSqlServer.Dto;
+using NewPdaSqlServer.entity;
+using NewPdaSqlServer.util;
+using Newtonsoft.Json;
+using SqlSugar;
+using System.Text;
+
+namespace MES.Service.service.Kingdee;
+
+public class ErpBOMManager : Repository<ErpBOM>
+{
+
+    #region 鑾峰彇BOM
+    public bool QueryErpBOM()
+    {
+        List<ErpBom> bom = GetErpBOM();
+
+        // 妫�鏌ヨ繑鍥炵粨鏋滄槸鍚︿负绌�
+        if (bom == null || bom.Count == 0)
+        {
+            throw new NotImplementedException("杩斿洖缁撴灉涓虹┖");
+        }
+        else
+        {
+            var baseObjects = MapErpBOMtoMes(bom);
+
+            return UseTransaction(db =>
+            {
+                return SaveBOMData(db, baseObjects) ? 1 : 0;
+            }) > 0;
+        }
+    }
+
+    private bool SaveBOMData(SqlSugarScope db, List<ErpBOM> kcc)
+    {
+        Db.Deleteable<ErpBOM>()
+          .ExecuteCommand();
+
+        var save = base.InsertRange(kcc);
+        if (save) return true;
+        throw new NotImplementedException("鎻掑叆澶辫触");
+    }
+
+    public List<ErpBom> GetErpBOM()
+    {
+        //娉ㄦ剰 1锛氭澶勪笉鍐嶄娇鐢ㄥ弬鏁板舰寮忎紶鍏ョ敤鎴峰悕鍙婂瘑鐮佺瓑鏁忔劅淇℃伅锛屾敼涓哄湪鐧诲綍閰嶇疆鏂囦欢涓缃��
+        //娉ㄦ剰 2锛氬繀椤诲厛閰嶇疆绗笁鏂圭郴缁熺櫥褰曟巿鏉冧俊鎭悗锛屽啀杩涜涓氬姟鎿嶄綔锛岃鎯呭弬鑰冨悇璇█鐗堟湰SDK浠嬬粛涓殑鐧诲綍閰嶇疆鏂囦欢璇存槑銆�
+        //璇诲彇閰嶇疆锛屽垵濮嬪寲SDK
+        K3CloudApi client = new K3CloudApi();
+        //鐢ㄤ簬璁板綍缁撴灉
+        StringBuilder Info = new StringBuilder();
+        //涓氬姟瀵硅薄鏍囪瘑
+        string formId = "ENG_BOM";
+        DateTime dt = DateTime.Now;
+        //鏌ヨ瀛楁闆嗗悎锛屽嵆杩斿洖鍝簺鏁版嵁锛屼笉鑳戒负绌猴紝鏍规嵁涓嶅悓涓氬姟鍗曟嵁濉啓涓嶅悓鐨勫瓧娈靛悕锛屼互涓嬩粎涓虹ず渚�
+        //string fieldKeys = "FCod,FFileId,FRelevantObject";
+        //string FilterString = "FID='-2146304'";
+        string fieldKeys = "FITEMPPROPERTY ,FMATERIALID  ,FITEMNAME ,FTreeEntity_FENTRYID ,FCHILDITEMNAME ,FNUMERATOR , FDENOMINATOR";
+        var filterString = new[]
+                            {
+                                new
+                                {
+                                    FieldName = "FITEMPPROPERTY",
+                                    Compare = "29",
+                                    Value = "3",
+                                    Left = "(",
+                                    Right = ")",
+                                    Logic = 0
+                                }
+                            };
+        var param = new QueryParams()
+        {
+            FormId = formId,
+            FieldKeys = fieldKeys,
+            FilterString = filterString
+        };
+        //璋冪敤鎺ュ彛
+        var result = client.ExecuteBillQuery(param.ToJson());
+
+        return result.Select(s =>
+        {
+            var entity = new ErpBom
+            {
+                FITEMPPROPERTY = s[0]?.ToString(),
+                FMATERIALID = s[1]?.ToString(),
+                FITEMNAME = s[2]?.ToString(),
+                FENTRYID = s[3]?.ToString(),
+                FCHILDITEMNAME = s[4]?.ToString(),
+                FNUMERATOR = s[5]?.ToString(),
+                FDENOMINATOR = s[6]?.ToString()
+            };
+            return entity;
+        }).ToList();
+    }
+
+    private class QueryParams :BaseEntify
+    {
+        public string FormId { get; set; }
+
+        public string FieldKeys { get; set; }
+
+        public object[] FilterString { get; set; }
+    }
+
+    private List<ErpBOM> MapErpBOMtoMes(List<ErpBom> dtoList)
+    {
+        var ErpMesBomList = new List<ErpBOM>();
+
+        foreach (var dto in dtoList)
+        {
+            var kc = new ErpBOM
+            {
+                ID = Guid.NewGuid(),
+                ItemProperty = dto.FITEMPPROPERTY,
+                ItemId = Convert.ToInt32(dto.FMATERIALID),
+                ItemName = dto.FITEMNAME,
+                ChildItemId = Convert.ToInt32(dto.FENTRYID),
+                ChildItemName = dto.FCHILDITEMNAME,
+                Numerator = Convert.ToDecimal(dto.FNUMERATOR),
+                Denominator = Convert.ToDecimal(dto.FDENOMINATOR)
+
+            };
+
+            ErpMesBomList.Add(kc);
+        }
+
+        return ErpMesBomList;
+    }
+    #endregion
+
+}
diff --git a/service/ErpKcManager.cs b/service/ErpKcManager.cs
index 92f7e32..4986db2 100644
--- a/service/ErpKcManager.cs
+++ b/service/ErpKcManager.cs
@@ -1,13 +1,15 @@
 锘�
 using Kingdee.CDP.WebApi.SDK;
+using MES.Service.Models;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.Filters;
+using NewPdaSqlServer.DB;
+using NewPdaSqlServer.Dto;
 using NewPdaSqlServer.entity;
 using NewPdaSqlServer.util;
+using Newtonsoft.Json;
 using SqlSugar;
-using NewPdaSqlServer.DB;
 using System.Text;
-using NewPdaSqlServer.Dto;
-using Microsoft.AspNetCore.Mvc;
-using MES.Service.Models;
 
 namespace MES.Service.service.Kingdee;
 

--
Gitblit v1.9.3