kyy
2025-07-24 799a463b41e84aa265f109035c08892614ea9fd8
MES.Service/service/PLM/PLMManager.cs
@@ -1,55 +1,49 @@
using Kingdee.CDP.WebApi.SDK;
using System.Text;
using Kingdee.CDP.WebApi.SDK;
using MES.Service.Dto.webApi.PLM;
using System.Text;
using System.Text.RegularExpressions;
using Oracle.ManagedDataAccess.Client;
using PdfiumViewer;
namespace MES.Service.service.PLM;
public class PLMManager
{
    public List<StdDocument> RetrieveDrawings(string ItemNo)
    {
        List<BaseObject> baseObjects = GetPlmCfgBase(ItemNo);
        var baseObjects = GetPlmCfgBase(ItemNo);
        List<RelatedObject> relatedObjects = GetPlmCfgRelatedObject(baseObjects[0].FID);
        var relatedObjects = GetPlmCfgRelatedObject(baseObjects[0].FID);
        // 检查返回结果是否为空
        if (relatedObjects == null || !relatedObjects.Any())
        {
            throw new NotImplementedException("返回结果为空");
        }
        List<StdDocument> stdDocuments = GetPlmStdDocument(relatedObjects);
        var stdDocuments = GetPlmStdDocument(relatedObjects);
        return stdDocuments;
    }
    #region 1.通过物料编码(需要唯一)获取物料id
    public List<BaseObject> GetPlmCfgBase(string ItemNo)
    {
        //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
        //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
        //读取配置,初始化SDK
        K3CloudApi client = new K3CloudApi();
        var client = new K3CloudApi();
        //用于记录结果
        StringBuilder Info = new StringBuilder();
        var Info = new StringBuilder();
        //业务对象标识
        //string formId = "PLM_STD_DOCUMENT";
        string formId = "PLM_CFG_BASE";
        DateTime dt = DateTime.Now;
        var formId = "PLM_CFG_BASE";
        var 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 fieldKeys = "FID,FCode,FName";
        var FilterString = string.Format(@"FCode='{0}'", ItemNo);
        var OrderString = "";
        var TopRowCount = 0;
        var StartRow = 0;
        var Limit = 0;
        var param = new QueryParam()
        var param = new QueryParam
        {
            FormId = formId,
            FieldKeys = fieldKeys,
@@ -68,37 +62,40 @@
            {
                FID = (long)s[0],
                FCode = (string)s[1],
                FName = (string)s[2],
                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();
        var client = new K3CloudApi();
        //用于记录结果
        StringBuilder Info = new StringBuilder();
        var Info = new StringBuilder();
        //业务对象标识
        //string formId = "PLM_STD_DOCUMENT";
        string formId = "PLM_CFG_RELATEDOBJECT";
        DateTime dt = DateTime.Now;
        var formId = "PLM_CFG_RELATEDOBJECT";
        var 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 fieldKeys = "FID,FRE_FCode,FRelatedObject";
        var FilterString =
            string.Format(@"FRelatedObject='{0}'", FRelatedObject);
        var OrderString = "";
        var TopRowCount = 0;
        var StartRow = 0;
        var Limit = 0;
        var param = new QueryParam()
        var param = new QueryParam
        {
            FormId = formId,
            FieldKeys = fieldKeys,
@@ -117,39 +114,43 @@
            {
                FID = (long)s[0],
                FRE_FCode = (string)s[1],
                FRelatedObject = (long)s[2],
                FRelatedObject = (long)s[2]
            };
            return entity;
        }).ToList();
    }
    #endregion
    #region 3.根据文档id获取文档物理文件id
    public List<StdDocument> GetPlmStdDocument(List<RelatedObject> relatedObjects)
    public List<StdDocument> GetPlmStdDocument(
        List<RelatedObject> relatedObjects)
    {
        //注意 1:此处不再使用参数形式传入用户名及密码等敏感信息,改为在登录配置文件中设置。
        //注意 2:必须先配置第三方系统登录授权信息后,再进行业务操作,详情参考各语言版本SDK介绍中的登录配置文件说明。
        //读取配置,初始化SDK
        K3CloudApi client = new K3CloudApi();
        var client = new K3CloudApi();
        //用于记录结果
        StringBuilder Info = new StringBuilder();
        var Info = new StringBuilder();
        //业务对象标识
        string formId = "PLM_STD_DOCUMENT";
        DateTime dt = DateTime.Now;
        var formId = "PLM_STD_DOCUMENT";
        var dt = DateTime.Now;
        //查询字段集合,即返回哪些数据,不能为空,根据不同业务单据填写不同的字段名,以下仅为示例
        string fieldKeys = "FID,FCode,FName,FPhysicalFileName,FFileId,FRelevantObject";
        var 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}'"));
        var 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 FilterString = $"FID in ({fids})";
        var OrderString = "";
        var TopRowCount = 0;
        var StartRow = 0;
        var Limit = 0;
        var param = new QueryParam()
        var param = new QueryParam
        {
            FormId = formId,
            FieldKeys = fieldKeys,
@@ -171,13 +172,11 @@
                FName = (string)s[2],
                FPhysicalFileName = (string)s[3],
                FFileId = (string)s[4],
                FRelevantObject = (string)s[5],
                FRelevantObject = (string)s[5]
            };
            return entity;
        }).ToList();
    }
    #endregion
}
}