sjz
2025-05-09 597f8e08e6264b2143454e40a7be553d1e8b6df7
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
using Kingdee.CDP.WebApi.SDK;
using MES.Service.Dto.webApi.PLM;
using System.Diagnostics;
using System.Text;
 
namespace MES.Service.service.PLM;
 
public class PLMManager
{
    public List<StdDocument> RetrieveDrawings(string ItemNo)
    {
        List<BaseObject> baseObjects = GetPlmCfgBase(ItemNo);
        Debug.WriteLine($"第一完整内容(JSON): {Newtonsoft.Json.JsonConvert.SerializeObject(baseObjects, Newtonsoft.Json.Formatting.Indented)}");
 
        // 检查返回结果是否为空
        if (baseObjects == null || !baseObjects.Any())
        {
            throw new NotImplementedException("返回结果为空");
        }
        else
        {
            List<RelatedObject> relatedObjects = GetPlmCfgRelatedObject(baseObjects[0].FID);
            Debug.WriteLine($"第二完整内容(JSON): {Newtonsoft.Json.JsonConvert.SerializeObject(relatedObjects, Newtonsoft.Json.Formatting.Indented)}");
 
            // 检查返回结果是否为空
            if (relatedObjects == null || !relatedObjects.Any())
            {
                throw new NotImplementedException("返回结果为空");
            }
            List<StdDocument> stdDocuments = GetPlmStdDocument(relatedObjects);
            return stdDocuments;
        }
       
    }
 
    #region 1.通过物料编码(需要唯一)获取物料id
    public List<BaseObject> GetPlmCfgBase(string ItemNo)
    {
        //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
        //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
        //读取配置,初始化SDK
        K3CloudApi client = new K3CloudApi();
        //用于记录结果
        StringBuilder Info = new StringBuilder();
        //业务对象标识
        //string formId = "PLM_STD_DOCUMENT";
        string formId = "PLM_CFG_BASE";
        DateTime dt = DateTime.Now;
        //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例
        //string fieldKeys = "FCode,FFileId,FRelevantObject";
        //string FilterString = "FID='-2146304'";
        string fieldKeys = "FID,FCode,FName";
        string FilterString = string.Format(@"FCode='{0}'", ItemNo);
        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());
        Debug.WriteLine($"第一个元素内容: {result}");
 
        return result.Select(s =>
        {
            var entity = new BaseObject
            {
                FID = (long)s[0],
                FCode = (string)s[1],
                FName = (string)s[2],
            };
            return entity;
        }).ToList();
    }
    #endregion
 
    #region 2.通过物料id获取相关对象【下载需要的文档】的id
    public List<RelatedObject> GetPlmCfgRelatedObject(long? FRelatedObject)
    {
        //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
        //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
        //读取配置,初始化SDK
        K3CloudApi client = new K3CloudApi();
        //用于记录结果
        StringBuilder Info = new StringBuilder();
        //业务对象标识
        //string formId = "PLM_STD_DOCUMENT";
        string formId = "PLM_CFG_RELATEDOBJECT";
        DateTime dt = DateTime.Now;
        //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例
        //string fieldKeys = "FCode,FFileId,FRelevantObject";
        //string FilterString = "FID='-2146304'";
        string fieldKeys = "FID,FRE_FCode,FRelatedObject";
        string FilterString = string.Format(@"FRelatedObject='{0}'", FRelatedObject);
        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());
        Debug.WriteLine(result);
 
        return result.Select(s =>
        {
            var entity = new RelatedObject
            {
                FID = (long)s[0],
                FRE_FCode = (string)s[1],
                FRelatedObject = (long)s[2],
            };
            return entity;
        }).ToList();
    }
    #endregion
 
    #region 3.根据文档id获取文档物理文件id
    public List<StdDocument> GetPlmStdDocument(List<RelatedObject> relatedObjects)
    {
        //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
        //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
        //读取配置,初始化SDK
        K3CloudApi client = new K3CloudApi();
        //用于记录结果
        StringBuilder Info = new StringBuilder();
        //业务对象标识
        string formId = "PLM_STD_DOCUMENT";
        DateTime dt = DateTime.Now;
        //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例
        string fieldKeys = "FID,FCode,FName,FPhysicalFileName,FFileId,FRelevantObject";
        // 提取 FID 值
        var fidList = relatedObjects.Select(obj => obj.FID.ToString()).ToList();
        // 将 FID 值用逗号分隔,并包裹在单引号中
        string fids = string.Join(",", fidList.Select(fid => $"'{fid}'"));
        // 构建 FilterString
        string FilterString = $"FID in ({fids})";
        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 StdDocument
            {
                FID = (long)s[0],
                FCode = (string)s[1],
                FName = (string)s[2],
                FPhysicalFileName = (string)s[3],
                FFileId = (string)s[4],
                FRelevantObject = (string)s[5],
            };
            return entity;
        }).ToList();
    }
    #endregion
}