OQC
啊鑫
2025-07-16 35347311da9ca47ac614603ebf4c3ccab8cf26a2
MES.Service/service/PLM/WarehouseDownloadDoc.cs
@@ -1,152 +1,178 @@
using Newtonsoft.Json.Linq;
using System.Net;
using System.Net;
using System.Text;
using Newtonsoft.Json.Linq;
namespace ConsoleApp1
namespace MES.Service.service.PLM;
#region 1.根据文档物理文件id获取文档流数据
public class WarehouseDownloadDoc
{
    #region 1.根据文档物理文件id获取文档流数据
    public class WarehouseDownloadDoc()
    private readonly string _cloudUrl = "http://122.227.249.70:5050/k3cloud";
    private readonly string
        _warehouse = "http://192.168.1.90/CloudPLMWarehouse";
    #region 文档服务器上下文
    private string WarehouseCTX
    {
        private string _cloudUrl = "http://122.227.249.70:5050/k3cloud";
        private string _warehouse = "http://192.168.1.90/CloudPLMWarehouse";
        #region 文档服务器上下文
        private string WarehouseCTX
        get
        {
            get
            {
                string json = "{\"ap1\":{ \"AcctID\":\"" + "6654201b47f099" + "\",\"Username\":\"Administrator\",\"Password\":\"Lts88666*\",\"Lcid\":2052,\"AuthenticateType\":1,\"PasswordIsEncrypted\":\"false\",\"ClientInfo\":{\"ClientType\":8}}";
                var resp = GetResponse("http://122.227.249.70:5050/k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.User.UserService.ValidateLoginInfo.common.kdsvc", json, new Dictionary<string, string>());
                string ret = (new StreamReader(resp.GetResponseStream(), Encoding.UTF8)).ReadToEnd();
                var result = JObject.Parse(ret)["Context"];
                string token = result["UserToken"].ToString();
                var warehouseCtx = string.Format("LoginUrl={0}&KDServiceSessionId={1}", _cloudUrl, JObject.Parse(ret)["KDSVCSessionId"].ToString());//安全新方式
                return Convert.ToBase64String(Encoding.UTF8.GetBytes(warehouseCtx));
                /*string json = "{\"ap1\":{ \"AcctID\":\"" + "6654201b47f099" + "\",\"Username\":\"Administrator\",\"Password\":\"Lts88666*\",\"Lcid\":2052,\"AuthenticateType\":1,\"PasswordIsEncrypted\":\"false\",\"ClientInfo\":{\"ClientType\":8}}";
                var resp = GetResponse("http://122.227.249.70:5050/k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.User.UserService.ValidateLoginInfo.common.kdsvc", json, new Dictionary<string, string>());
                string ret = (new StreamReader(resp.GetResponseStream(), Encoding.UTF8)).ReadToEnd();
                var result = JObject.Parse(ret)["Context"];
                string token = result["UserToken"].ToString();
                var warehouseCtx = string.Format("LoginUrl={0}/&UserToken={1}", _cloudUrl, token);
                return Convert.ToBase64String(Encoding.UTF8.GetBytes(warehouseCtx));*/
            }
            var json = "{\"ap1\":{ \"AcctID\":\"" + "6654201b47f099" +
                       "\",\"Username\":\"Administrator\",\"Password\":\"Lts88666*\",\"Lcid\":2052,\"AuthenticateType\":1,\"PasswordIsEncrypted\":\"false\",\"ClientInfo\":{\"ClientType\":8}}";
            var resp = GetResponse(
                "http://122.227.249.70:5050/k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.User.UserService.ValidateLoginInfo.common.kdsvc",
                json, new Dictionary<string, string>());
            var ret = new StreamReader(resp.GetResponseStream(), Encoding.UTF8)
                .ReadToEnd();
            var result = JObject.Parse(ret)["Context"];
            var token = result["UserToken"].ToString();
            var warehouseCtx =
                string.Format("LoginUrl={0}&KDServiceSessionId={1}", _cloudUrl,
                    JObject.Parse(ret)["KDSVCSessionId"]); //安全新方式
            return Convert.ToBase64String(Encoding.UTF8.GetBytes(warehouseCtx));
            /*string json = "{\"ap1\":{ \"AcctID\":\"" + "6654201b47f099" + "\",\"Username\":\"Administrator\",\"Password\":\"Lts88666*\",\"Lcid\":2052,\"AuthenticateType\":1,\"PasswordIsEncrypted\":\"false\",\"ClientInfo\":{\"ClientType\":8}}";
            var resp = GetResponse("http://122.227.249.70:5050/k3cloud/Kingdee.BOS.ServiceFacade.ServicesStub.User.UserService.ValidateLoginInfo.common.kdsvc", json, new Dictionary<string, string>());
            string ret = (new StreamReader(resp.GetResponseStream(), Encoding.UTF8)).ReadToEnd();
            var result = JObject.Parse(ret)["Context"];
            string token = result["UserToken"].ToString();
            var warehouseCtx = string.Format("LoginUrl={0}/&UserToken={1}", _cloudUrl, token);
            return Convert.ToBase64String(Encoding.UTF8.GetBytes(warehouseCtx));*/
        }
        #endregion
        #region 物理文件id
        private string GetFileId(string fileId)
        {
            return Convert.ToBase64String(Encoding.UTF8.GetBytes(fileId));
        }
        #endregion
        #region 电子仓访问凭证
        private string Token
        {
            get
            {
                var token = Guid.NewGuid().ToString();
                return token;
            }
        }
        #endregion
        #region 发送请求
        public Stream SendRequest(string op, string fileId)
        {
            var header = new Dictionary<string, string>()
            {
                {"FileID" ,GetFileId(fileId) },
                { "CTX",WarehouseCTX},
                { "token", Token },
                { "PLM_ACCESS_TYPE","pure" }
            };
            return PostDataViaHttpWebRequest(RequestUrl(op), string.Empty, header, !op.Equals("Download"));
        }
        #endregion
        #region 请求的URL
        private string RequestUrl(string op)
        {
            return _warehouse + "/" + op;
        }
        #endregion
        #region 获取响应
        private HttpWebResponse GetResponse(string url, string bodyJson, Dictionary<string, string> header)
        {
            byte[] data = Encoding.UTF8.GetBytes(bodyJson);
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = WebRequestMethods.Http.Post;
            request.ContentType = "application/json";
            request.ContentLength = data.Length;
            if (header != null)
            {
                foreach (var p in header)
                {
                    request.Headers.Add(p.Key, p.Value);
                }
            }
            using (Stream reqStream = request.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            HttpWebResponse resp = null;
            try
            {
                resp = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException ex)
            {
                var res = ex.Response;
                if (res != null)
                {
                    string statusBase64 = ((HttpWebResponse)ex.Response).StatusDescription;//base64编码后的报错信息
                }
            }
            return resp;
        }
        #endregion
        #region 保存文件到本地
       /* private void PostDataViaHttpWebRequest(string url, string bodyJson, Dictionary<string, string> header, bool isGetContent)
        {
            var resp = GetResponse(url, bodyJson, header);
            var resultJson = string.Empty;
            Stream stream = File.Open("D://DownloadDocDemo.pdf", FileMode.OpenOrCreate);
            int packageSize = 1024 * 1024;
            byte[] buffer = new byte[packageSize];
            using (stream)
            {
                using (Stream outputStream = resp.GetResponseStream())
                {
                    int readLength = 0;
                    while ((readLength = outputStream.Read(buffer, 0, packageSize)) > 0)
                    {
                        stream.Write(buffer, 0, readLength);
                        stream.Flush();
                    }
                    outputStream.Close();
                }
                stream.Close();
            }
        }*/
        #endregion
        #region 返回文件流给前端
        private Stream PostDataViaHttpWebRequest(string url, string bodyJson, Dictionary<string, string> header, bool isGetContent)
        {
            var resp = GetResponse(url, bodyJson, header);
            Console.WriteLine(resp.GetResponseStream());
            return resp.GetResponseStream(); // 直接返回响应流
        }
        #endregion
    }
    #endregion
    #region 电子仓访问凭证
    private string Token
    {
        get
        {
            var token = Guid.NewGuid().ToString();
            return token;
        }
    }
    #endregion
    #region 物理文件id
    private string GetFileId(string fileId)
    {
        return Convert.ToBase64String(Encoding.UTF8.GetBytes(fileId));
    }
    #endregion
    #region 发送请求
    public Stream SendRequest(string op, string fileId)
    {
        var header = new Dictionary<string, string>
        {
            { "FileID", GetFileId(fileId) },
            { "CTX", WarehouseCTX },
            { "token", Token },
            { "PLM_ACCESS_TYPE", "pure" }
        };
        return PostDataViaHttpWebRequest(RequestUrl(op), string.Empty, header,
            !op.Equals("Download"));
    }
    #endregion
    #region 请求的URL
    private string RequestUrl(string op)
    {
        return _warehouse + "/" + op;
    }
    #endregion
    #region 获取响应
    private HttpWebResponse GetResponse(string url, string bodyJson,
        Dictionary<string, string> header)
    {
        var data = Encoding.UTF8.GetBytes(bodyJson);
        var request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = WebRequestMethods.Http.Post;
        request.ContentType = "application/json";
        request.ContentLength = data.Length;
        if (header != null)
            foreach (var p in header)
                request.Headers.Add(p.Key, p.Value);
        using (var reqStream = request.GetRequestStream())
        {
            reqStream.Write(data, 0, data.Length);
            reqStream.Close();
        }
        HttpWebResponse resp = null;
        try
        {
            resp = (HttpWebResponse)request.GetResponse();
        }
        catch (WebException ex)
        {
            var res = ex.Response;
            if (res != null)
            {
                var statusBase64 =
                    ((HttpWebResponse)ex.Response)
                    .StatusDescription; //base64编码后的报错信息
            }
        }
        return resp;
    }
    #endregion
    #region 返回文件流给前端
    private Stream PostDataViaHttpWebRequest(string url, string bodyJson,
        Dictionary<string, string> header, bool isGetContent)
    {
        var resp = GetResponse(url, bodyJson, header);
        Console.WriteLine(resp.GetResponseStream());
        return resp.GetResponseStream(); // 直接返回响应流
    }
    #endregion
    #region 保存文件到本地
    /* private void PostDataViaHttpWebRequest(string url, string bodyJson, Dictionary<string, string> header, bool isGetContent)
     {
         var resp = GetResponse(url, bodyJson, header);
         var resultJson = string.Empty;
         Stream stream = File.Open("D://DownloadDocDemo.pdf", FileMode.OpenOrCreate);
         int packageSize = 1024 * 1024;
         byte[] buffer = new byte[packageSize];
         using (stream)
         {
             using (Stream outputStream = resp.GetResponseStream())
             {
                 int readLength = 0;
                 while ((readLength = outputStream.Read(buffer, 0, packageSize)) > 0)
                 {
                     stream.Write(buffer, 0, readLength);
                     stream.Flush();
                 }
                 outputStream.Close();
             }
             stream.Close();
         }
     }*/
    #endregion
}
#endregion