南骏 池
14 小时以前 eea07b9c06f8a9070abe23816d02ae4fd73b4fa3
1.金蝶及时库存调用
已添加7个文件
已修改2个文件
300 ■■■■■ 文件已修改
Config/appsettings.Development.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Config/appsettings.json 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Controllers/Kingdee/ErpKcController.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Dto/ErpKc.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
NewPdaSqlServer.csproj 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
appsettings.json 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
entity/ErpMesKc.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
entity/Inventory.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service/ErpKcManager.cs 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Config/appsettings.Development.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}
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/"
}
Controllers/Kingdee/ErpKcController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
using 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);
        }
    }
}
Dto/ErpKc.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace 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; }
    }
}
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>
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/"
}
entity/ErpMesKc.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
using 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; }
}
entity/Inventory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
namespace NewPdaSqlServer.entity
{
    public class Inventory
    {
        public string? ItemNo { get; set; } // æ–™å·
        public string? DepotCode { get; set; } // ä»“库
    }
}
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("插入失败");
    }
}