zoukankan      html  css  js  c++  java
  • C#开发BIMFACE系列14 服务端API之批量获取转换状态详情

    上一篇《C#开发BIMFACE系列13 服务端API之获取转换状态》中介绍了根据文件ID查询单个文件的转换状态。

    本文介绍批量获取转换状态详情。

    请求地址:POST https://api.bimface.com/translateDetails

    说明:应用发起转换以后,可以根据筛选条件,通过该接口批量查询转换状态详情

    参数:

    请求 path(示例):https://api.bimface.com/translateDetails

    请求 header(示例):"Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b"

    请求 body(示例):

    {
      "appKey" : "appKey",    //必填
      "endDate" : "string",
      "fileId" : 0,
      "fileName" : "fileName",
      "pageNo" : 0,
      "pageSize" : 0,
      "sortType" : "sortType",
      "sourceId" : "d4649ee227e345c8b7f0022342247dec",
      "startDate" : "string",
      "status" : 0,
      "suffix" : "suffix"
    }

    HTTP响应示例(200):application/octet-stream

    {
      "code" : "success",
      "data" : {
        "list" : [ {
          "appKey" : "appKey",
          "cost" : 0,
          "createTime" : "createTime",
          "databagId" : "498bc694854244abab728b20620cbaf9",
          "fileId" : 0,
          "length" : 0,
          "name" : "name",
          "offlineDatabagStatus" : "offlineDatabagStatus",
          "priority" : 0,
          "reason" : "reason",
          "retry" : true,
          "shareToken" : "shareToken",
          "shareUrl" : "shareUrl",
          "sourceId" : "d69620720c63480c9f4808bf442ed96a",
          "status" : "status",
          "supportOfflineDatabag" : true,
          "thumbnail" : [ "string" ],
          "type" : "type"
        } ],
        "page" : {
          "htmlDisplay" : "string",
          "nextPage" : 0,
          "pageNo" : 0,
          "pageSize" : 0,
          "prePage" : 0,
          "startIndex" : 0,
          "totalCount" : 0,
          "totalPages" : 0
        }
      },
      "message" : ""
    }

    请求体参数说明:

    经过测试验证,其中 appKey 是必填项,其余参数非必填。

    对应封装的请求实体类为:

     1 /// <summary>
     2 ///  批量获取转换状态详情的请求数据
     3 /// </summary>
     4 [Serializable]
     5 public class TranslateQueryRequest
     6 {
     7     public TranslateQueryRequest()
     8     {
     9         FileId = null;
    10         Suffix = null;
    11         FileName = null;
    12         SourceId = null;
    13         PageNo = null;
    14         PageSize = null;
    15         Status = null;
    16         SortType = null;
    17         StartDate = null;
    18         EndDate = null;
    19     }
    20 
    21     /// <summary>
    22     /// 【必填项】应用的 appKey
    23     /// </summary>
    24     [JsonProperty("appKey")]
    25     public string AppKey { get; set; }
    26 
    27     /// <summary>
    28     /// 【非必填项】单模型对应的id,例如:1216871503527744
    29     /// </summary>
    30     [JsonProperty("fileId", NullValueHandling = NullValueHandling.Ignore)]
    31     public string FileId { get; set; }
    32 
    33     /// <summary>
    34     /// 【非必填项】单模型的文件类型。例如:rvt(或者igms,dwg…​)
    35     /// </summary>
    36     [JsonProperty("suffix", NullValueHandling = NullValueHandling.Ignore)]
    37     public string Suffix { get; set; }
    38 
    39     /// <summary>
    40     /// 【非必填项】单模型的名称。例如:translate-test
    41     /// </summary>
    42     [JsonProperty("fileName", NullValueHandling = NullValueHandling.Ignore)]
    43     public string FileName { get; set; }
    44 
    45     /// <summary>
    46     /// 【非必填项】模型对应的sourceId。例如:389c28de59ee62e66a7d87ec12692a76
    47     /// </summary>
    48     [JsonProperty("sourceId", NullValueHandling = NullValueHandling.Ignore)]
    49     public string SourceId { get; set; }
    50 
    51     /// <summary>
    52     /// 【非必填项】页码
    53     /// </summary>
    54     [JsonProperty("pageNo",NullValueHandling = NullValueHandling.Ignore)]
    55     public int? PageNo { get; set; }
    56 
    57     /// <summary>
    58     /// 【非必填项】每页返回数目
    59     /// </summary>
    60     [JsonProperty("pageSize", NullValueHandling = NullValueHandling.Ignore)]
    61     public int? PageSize { get; set; }
    62 
    63     /// <summary>
    64     /// 【非必填项】模型状态码。1(处理中) 99(成功) -1(失败)
    65     /// </summary>
    66     [JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)]
    67     public short? Status { get; set; }
    68 
    69     /// <summary>
    70     /// 【非必填项】筛选类型
    71     /// </summary>
    72     [JsonProperty("sortType", NullValueHandling = NullValueHandling.Ignore)]
    73     public string SortType { get; set; }
    74 
    75     /// <summary>
    76     /// 【非必填项】开始日期。例如:2019-05-01
    77     /// </summary>
    78     [JsonProperty("startDate", NullValueHandling = NullValueHandling.Ignore)]
    79     public string StartDate { get; set; }
    80 
    81     /// <summary>
    82     /// 【非必填项】截止日期。例如:2019-05-03
    83     /// </summary>
    84     [JsonProperty("endDate", NullValueHandling = NullValueHandling.Ignore)]
    85     public string EndDate { get; set; }
    86 }

    C#实现方法:

     1 /// <summary>
     2 /// 批量获取转换状态详情
     3 /// </summary>
     4 /// <param name="accessToken">令牌</param>
     5 /// <param name="request">请求体参数对象</param>
     6 /// <returns></returns>
     7 public virtual FileTranslateDetailsResponse GetFileTranslateDetails(string accessToken, TranslateQueryRequest request)
     8 {
     9     // POST https://api.bimface.com/translateDetails
    10     string url = string.Format(BimfaceConstants.API_HOST + "/translateDetails");
    11 
    12     BimFaceHttpHeaders headers = new BimFaceHttpHeaders();
    13     headers.AddOAuth2Header(accessToken);
    14 
    15     string data = request.SerializeToJson();
    16   
    17     try
    18     {
    19         FileTranslateDetailsResponse response;
    20 
    21         HttpManager httpManager = new HttpManager(headers);
    22         HttpResult httpResult = httpManager.Post(url,data);
    23         if (httpResult.Status == HttpResult.STATUS_SUCCESS)
    24         {
    25             response = httpResult.Text.DeserializeJsonToObject<FileTranslateDetailsResponse>();
    26         }
    27         else
    28         {
    29             response = new FileTranslateDetailsResponse
    30             {
    31                 Message = httpResult.RefText
    32             };
    33         }
    34 
    35         return response;
    36     }
    37     catch (Exception ex)
    38     {
    39         throw new Exception("[批量获取转换状态详情]发生异常!", ex);
    40     }
    41 }

    其中调用到的 httpManager.Post() 方法,请参考《C# HTTP系列》

    测试
    在BIMFACE的控制台中可以看到我们上传的文件列表,共计2个文件。模型状态均为转换成功。

    调用上面的GetFileTranslateDetails()方法测试批量查询转换状态:

     

    测试代码如下:

     1 // 批量获取转换状态详情
     2 protected void btnGetFileTranslateDetails_Click(object sender, EventArgs e)
     3 {
     4     TranslateQueryRequest request = new TranslateQueryRequest
     5     {
     6         AppKey = _appKey  //必填项
     7     };
     8 
     9     FileConvertApi api = new FileConvertApi();
    10     FileTranslateDetailsResponse response = api.GetFileTranslateDetails(txtAccessToken.Text, request);
    11 
    12     txtResult.Text = response.Code.ToString2()
    13                    + Environment.NewLine
    14                    + response.Message.ToString2()
    15                    + Environment.NewLine
    16                    + response.Data.ToString2();
    17 }

    返回的结果实体类如下:

    1 /// <summary>
    2 ///  批量获取转换状态详情返回的结果类
    3 /// </summary>
    4 [Serializable]
    5 public class FileTranslateDetailsResponse : GeneralResponse<FileTranslateDetailsEntity>
    6 {
    7 
    8 }
     1 [Serializable]
     2 public class FileTranslateDetailsEntity
     3 {
     4     [JsonProperty("list")]
     5     public Detail[] Details { get; set; }
     6 
     7     [JsonProperty("page")]
     8     public Page Page { get; set; }
     9 
    10     /// <summary>返回表示当前对象的字符串。</summary>
    11     /// <returns>表示当前对象的字符串。</returns>
    12     public override string ToString()
    13     {
    14         StringBuilder sb = new StringBuilder();
    15         if (Details != null && Details.Length > 0)
    16         {
    17             for (var i = 0; i < Details.Length; i++)
    18             {
    19                 Detail detail = Details[i];
    20 
    21                 StringBuilder sbThumbnails = new StringBuilder();
    22                 string[] thumbnails = detail.Thumbnails;
    23                 if (thumbnails != null && thumbnails.Length > 0)
    24                 {
    25                     foreach (var thumbnail in thumbnails)
    26                     {
    27                         sbThumbnails.Append(thumbnail + ";");
    28                     }
    29                 }
    30 
    31                 sb.AppendLine(String.Format("
    Detail{0}
    appKey={1}, cost={2}, createTime={3}, databagId={4}, fileId={5}, length={6}, name={7}, "
    32                                           + "offlineDatabagStatus={8}, priority={9}, reason={10}, retry={11}, shareToken={12}, shareUrl={13}, sourceId={14}, status={15}, supportOfflineDatabag={16}, "
    33                                           + "type={17}, thumbnails={18}",
    34                                             (i + 1), detail.AppKey, detail.Cost, detail.CreateTime, detail.DatabagId, detail.FileId, detail.Length, detail.Name,
    35                                             detail.OfflineDatabagStatus, detail.Priority, detail.Reason, detail.Retry, detail.ShareToken, detail.ShareUrl, detail.SourceId, detail.Status, detail.SupportOfflineDatabag,
    36                                             detail.Type, sbThumbnails));
    37             }
    38         }
    39 
    40         sb.AppendLine("
    page");
    41         sb.AppendLine(string.Format("prePage={0}, nextPage={1}, pageNo={2}, pageSize={3}, startIndex={4}, totalCount={5}, totalPages={6}",
    42                                     Page.PrePage, Page.NextPage, Page.PageNo, Page.PageSize, Page.StartIndex, Page.TotalCount, Page.TotalPages));
    43 
    44         return string.Format("FileTranslateDetailsEntity [
    {0}
    ]", sb);
    45     }
    46 }
      1 /// <summary>
      2 /// 转换状态详情
      3 /// </summary>
      4 [Serializable]
      5 public class Detail
      6 {
      7     /// <summary>
      8     ///  应用的 appkey
      9     /// </summary>
     10     [JsonProperty("appKey")]
     11     public string AppKey { get; set; }
     12 
     13     /// <summary>    
     14     /// 任务耗时(单位:秒)
     15     /// </summary>
     16     [JsonProperty("cost")]
     17     public int Cost { get; set; }
     18 
     19     /// <summary>
     20     ///  创建时间
     21     /// </summary>
     22     [JsonProperty("createTime")]
     23     public string CreateTime { get; set; }
     24 
     25     /// <summary>
     26     ///  数据包id。例如:70b8c10b686061525420fc240bf48aca
     27     /// </summary>
     28     [JsonProperty("databagId")]
     29     public string DatabagId { get; set; }
     30 
     31     /// <summary>
     32     ///  模型的fileId。例如:1609858191716512
     33     /// </summary>
     34     [JsonProperty("fileId")]
     35     public long? FileId { get; set; }
     36 
     37     /// <summary>
     38     ///  文件长度(单位:字节)
     39     /// </summary>
     40     [JsonProperty("length")]
     41     public long? Length { get; set; }
     42 
     43     /// <summary>
     44     ///  集成模型的名称,例如:integrate-test
     45     /// </summary>
     46     [JsonProperty("name")]
     47     public string Name { get; set; }
     48 
     49     /// <summary>
     50     /// 离线数据包生成状态:prepare(未生成) processing(生成中) success(生成成功) failed(生成失败)
     51     /// </summary>
     52     [JsonProperty("offlineDatabagStatus")]
     53     public string OfflineDatabagStatus { get; set; }
     54 
     55     /// <summary>
     56     /// 任务优先级。 数字越大,优先级越低。1, 2, 3。
     57     /// </summary>
     58     [JsonProperty("priority")]
     59     public short? Priority { get; set; }
     60 
     61     /// <summary>
     62     /// 若转换失败,返回失败原因。转换成功时,返回空字符串
     63     /// </summary>
     64     [JsonProperty("reason")]
     65     public string Reason { get; set; }
     66 
     67     /// <summary>
     68     /// 重试,true(或者false)
     69     /// </summary>
     70     [JsonProperty("retry")]
     71     public bool? Retry { get; set; }
     72 
     73     /// <summary>
     74     /// 分享码。例如:3c476c55
     75     /// </summary>
     76     [JsonProperty("shareToken")]
     77     public string ShareToken { get; set; }
     78 
     79     /// <summary>
     80     /// 分享链接。例如:https://api.bimface.com/preview/3c476c55
     81     /// </summary>
     82     [JsonProperty("shareUrl")]
     83     public string ShareUrl { get; set; }
     84 
     85     /// <summary>
     86     /// 模型对应的sourceId。该字段暂时空置
     87     /// </summary>
     88     [JsonProperty("sourceId")]
     89     public string SourceId { get; set; }
     90 
     91     /// <summary>
     92     /// 模型状态,processing(处理中) success(成功) failed(失败)
     93     /// </summary>
     94     [JsonProperty("status")]
     95     public string Status { get; set; }
     96 
     97     /// <summary>
     98     /// 是否支持离线数据包,true(或者false)
     99     /// </summary>
    100     [JsonProperty("supportOfflineDatabag")]
    101     public bool? SupportOfflineDatabag { get; set; }
    102 
    103     /// <summary>
    104     ///  模型的缩略图,该字段暂时空置
    105     /// </summary>
    106     [JsonProperty("thumbnail")]
    107     public string[] Thumbnails { get; set; }
    108 
    109     /// <summary>
    110     /// 转换类型。例如:rvt-translate(或者igms-translate…​)
    111     /// </summary>
    112     [JsonProperty("type")]
    113     public string Type { get; set; }
    114 }
     1 /// <summary>
     2 ///  返回总记录的分页信息
     3 /// </summary>
     4 [Serializable]
     5 public class Page
     6 {
     7     /// <summary>
     8     ///  下一页码
     9     /// </summary>
    10     [JsonProperty("nextPage")]
    11     public int NextPage { get; set; }
    12 
    13     /// <summary>
    14     ///  当前页码
    15     /// </summary>
    16     [JsonProperty("pageNo")]
    17     public int PageNo { get; set; }
    18 
    19     /// <summary>
    20     ///  每页条目数
    21     /// </summary>
    22     [JsonProperty("pageSize")]
    23     public int PageSize { get; set; }
    24 
    25     /// <summary>
    26     ///  上一页码
    27     /// </summary>
    28     [JsonProperty("prePage")]
    29     public int PrePage { get; set; }
    30 
    31     /// <summary>
    32     ///  起始索引数
    33     /// </summary>
    34     [JsonProperty("startIndex")]
    35     public int StartIndex { get; set; }
    36 
    37     /// <summary>
    38     ///  条目总数
    39     /// </summary>
    40     [JsonProperty("totalCount")]
    41     public int TotalCount { get; set; }
    42 
    43     /// <summary>
    44     ///  页码总数
    45     /// </summary>
    46     [JsonProperty("totalPages")]
    47     public int TotalPages { get; set; }
    48 }
     
     
  • 相关阅读:
    mongoDb学习以及spring管理 (包括百度云配置)
    Python循环嵌套
    Web应用功能测试测试点
    二维数组联通子数组
    二维数组最大子数组问题
    环一维数组最大子数组问题
    电梯调研
    最大子数组问题
    小学生题目
    3.13题目思路
  • 原文地址:https://www.cnblogs.com/SavionZhang/p/11455795.html
Copyright © 2011-2022 走看看