新框架PDA后端(祈禧6月初版本)
南骏 池
2025-11-25 770f02888443c1be46549f164abfd3be78a3dbd3
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
134
135
136
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
 
}