工单 优化 ,增加图片

This commit is contained in:
chfei committed 2026-10-20 17:03:23 +08:00
1 parent bf5a70597c
commit cf2efbcb16
27 files changed
+3555 -1538

No files matched your search

@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace OrderSupportTicket.Models.Api;
@@ -139,10 +139,16 @@ internal sealed class SendMessageRequest
public string ClientMessageId { get; set; }
/// <summary>
/// 留言正文,长度 1~4000 字。
/// 留言正文;有图片附件时可为空。
/// </summary>
////[JsonProperty("text")]
public string Text { get; set; }
/// <summary>
/// 图片上传回执,最多 3 个;无图片时为 null,序列化时省略。
/// </summary>
////[JsonProperty("attachments")]
public IList<MessageAttachmentReceipt> Attachments { get; set; }
}
/// <summary>
@@ -169,6 +175,176 @@ internal sealed class MarkReadRequest
public int ThroughSequenceNo { get; set; }
}
/// <summary>
/// 申请图片直传凭证请求。
/// </summary>
internal sealed class CreateImageUploadTicketRequest
{
/// <summary>
/// 拍单账号。
/// </summary>
public string PurchaseAccount { get; set; }
/// <summary>
/// 订单所属店铺 APPID。
/// </summary>
public string AppId { get; set; }
/// <summary>
/// 原始文件名,1~180 字符。
/// </summary>
public string FileName { get; set; }
/// <summary>
/// 精确的图片 MIME 类型:image/jpeg、image/png 或 image/webp。
/// </summary>
public string MimeType { get; set; }
/// <summary>
/// 图片实际字节数,1~5,242,880。
/// </summary>
public long Size { get; set; }
/// <summary>
/// 可选的上传标识;省略时由服务端生成。
/// </summary>
public string RequestId { get; set; }
}
/// <summary>
/// 图片直传凭证响应。
/// </summary>
public sealed class ImageUploadTicketResponse
{
/// <summary>
/// 请求是否成功。
/// </summary>
public bool Success { get; set; }
/// <summary>
/// 本次上传的凭证信息。
/// </summary>
public ImageUploadTicketDto Upload { get; set; }
/// <summary>
/// 订单所属店铺 APPID。
/// </summary>
public string AppId { get; set; }
/// <summary>
/// 微信订单号。
/// </summary>
public string WechatOrderId { get; set; }
/// <summary>
/// 接口返回的身份校验标记,当前恒为 false。
/// </summary>
public bool IdentityVerified { get; set; }
/// <summary>
/// 本次 HTTP 请求的排查编号;不是 upload.requestId。
/// </summary>
public string RequestId { get; set; }
}
/// <summary>
/// 服务端签发的单次图片直传凭证。
/// </summary>
public sealed class ImageUploadTicketDto
{
/// <summary>
/// 上传模式,文档约定为 single。
/// </summary>
public string Mode { get; set; }
/// <summary>
/// 上传 HTTP 方法,文档约定为 PUT。
/// </summary>
public string Method { get; set; }
/// <summary>
/// 本次图片上传标识。
/// </summary>
public string RequestId { get; set; }
/// <summary>
/// 服务端签发的上传凭证,需原样提交留言接口。
/// </summary>
public string Ticket { get; set; }
/// <summary>
/// 带短时签名的 COS 上传地址。
/// </summary>
public string UploadUrl { get; set; }
/// <summary>
/// 直传时必须原样携带的请求头。
/// </summary>
public Dictionary<string, string> Headers { get; set; }
/// <summary>
/// 上传凭证过期时间。
/// </summary>
public string ExpiresAt { get; set; }
}
/// <summary>
/// 图片直传完成后提交给留言接口的回执。
/// </summary>
public sealed class MessageAttachmentReceipt
{
/// <summary>
/// 原样使用 upload.requestId。
/// </summary>
public string RequestId { get; set; }
/// <summary>
/// 原样使用 upload.ticket。
/// </summary>
public string Ticket { get; set; }
/// <summary>
/// 可选的 COS 响应 ETag。
/// </summary>
public string Etag { get; set; }
}
/// <summary>
/// 留言中的公开图片附件。
/// </summary>
public sealed class TicketAttachmentDto
{
/// <summary>
/// 附件唯一 ID。
/// </summary>
public string Id { get; set; }
/// <summary>
/// 原始文件名。
/// </summary>
public string OriginalName { get; set; }
/// <summary>
/// 图片 MIME 类型。
/// </summary>
public string ContentType { get; set; }
/// <summary>
/// 图片字节数。
/// </summary>
public long ByteSize { get; set; }
/// <summary>
/// 图片创建时间。
/// </summary>
public string CreatedAt { get; set; }
/// <summary>
/// 短时读取地址;暂不可用时为 null。
/// </summary>
public string ReadUrl { get; set; }
}
/// <summary>
/// 工单摘要分页响应。
/// </summary>
@@ -371,6 +547,12 @@ public sealed class TicketMessageDto
/// </summary>
////[JsonProperty("createdAt")]
public string CreatedAt { get; set; }
/// <summary>
/// 公开图片附件;无图片时为空数组。
/// </summary>
////[JsonProperty("attachments")]
public List<TicketAttachmentDto> Attachments { get; set; }
}
/// <summary>