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