南骏 池
99 分钟以前 5df60eb35037611aaa977428c5cd41ad391f72af
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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("插入失败");
    }
 
}