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
|
}
|