{
  "swagger": "2.0",
  "info": {
    "title": "素材服务",
    "version": "1.0.0"
  },
  "basePath": "/",
  "paths": {
    "/admin/material/batch": {
      "delete": {
        "tags": [
          "素材管理"
        ],
        "summary": "批量删除素材",
        "description": "批量删除素材，返回删除结果（成功数/失败数/失败原因）。有引用关系的素材会跳过并记录失败原因",
        "operationId": "batchDeleteUsingDELETE",
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "批量删除请求",
            "required": false,
            "schema": {
              "originalRef": "批量删除素材请求",
              "$ref": "#/definitions/批量删除素材请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«批量删除结果»",
              "$ref": "#/definitions/统一响应结果«批量删除结果»"
            }
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«批量删除结果»",
              "$ref": "#/definitions/统一响应结果«批量删除结果»"
            }
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/batch/tags": {
      "put": {
        "tags": [
          "素材管理"
        ],
        "summary": "批量更新标签",
        "description": "对多个素材同时添加和/或移除标签，支持增量操作（addTagIds新增，removeTagIds移除）",
        "operationId": "batchUpdateTagsUsingPUT",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "批量标签更新请求",
            "required": false,
            "schema": {
              "originalRef": "批量标签操作请求",
              "$ref": "#/definitions/批量标签操作请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/categories": {
      "get": {
        "tags": [
          "素材管理"
        ],
        "summary": "获取有权限的分类列表（含素材数量）",
        "description": "返回当前角色有权限查看的素材分类树，每个分类包含素材数量统计。超级管理员可见全部分类",
        "operationId": "getCategoriesUsingGET",
        "produces": [
          "*/*"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«List«素材分类信息»»",
              "$ref": "#/definitions/统一响应结果«List«素材分类信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«List«素材分类信息»»",
              "$ref": "#/definitions/统一响应结果«List«素材分类信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/category/permissions/{roleCode}": {
      "get": {
        "tags": [
          "素材分类权限管理"
        ],
        "summary": "获取角色的分类权限",
        "description": "仅超级管理员可操作。返回指定角色可访问的素材分类编码列表",
        "operationId": "getPermissionsUsingGET",
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "roleCode",
            "in": "path",
            "description": "角色编码",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«List«string»»",
              "$ref": "#/definitions/统一响应结果«List«string»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«List«string»»",
              "$ref": "#/definitions/统一响应结果«List«string»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      },
      "put": {
        "tags": [
          "素材分类权限管理"
        ],
        "summary": "更新角色的分类权限",
        "description": "仅超级管理员可操作。全量替换指定角色的素材分类访问权限，传入允许访问的分类编码列表",
        "operationId": "updatePermissionsUsingPUT",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "分类权限更新请求",
            "required": false,
            "schema": {
              "originalRef": "分类权限更新请求",
              "$ref": "#/definitions/分类权限更新请求"
            }
          },
          {
            "name": "roleCode",
            "in": "path",
            "description": "角色编码",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/category/sub": {
      "post": {
        "tags": [
          "素材管理"
        ],
        "summary": "创建子分类",
        "description": "在一级分类下创建子分类，分类编码自动生成。子分类用于更细粒度的素材归档",
        "operationId": "createSubCategoryUsingPOST",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "子分类创建请求",
            "required": false,
            "schema": {
              "originalRef": "Create subcategory request",
              "$ref": "#/definitions/Create subcategory request"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材分类信息»",
              "$ref": "#/definitions/统一响应结果«素材分类信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材分类信息»",
              "$ref": "#/definitions/统一响应结果«素材分类信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/category/sub/{categoryId}": {
      "put": {
        "tags": [
          "素材管理"
        ],
        "summary": "更新子分类",
        "description": "更新子分类的名称或排序值。仅有该分类权限的管理员可操作。",
        "operationId": "updateSubCategoryUsingPUT",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "categoryId",
            "in": "path",
            "description": "子分类ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "in": "body",
            "name": "request",
            "description": "子分类更新请求",
            "required": false,
            "schema": {
              "originalRef": "Update subcategory request",
              "$ref": "#/definitions/Update subcategory request"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材分类信息»",
              "$ref": "#/definitions/统一响应结果«素材分类信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材分类信息»",
              "$ref": "#/definitions/统一响应结果«素材分类信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      },
      "delete": {
        "tags": [
          "素材管理"
        ],
        "summary": "删除子分类",
        "description": "删除子分类前需确保分类下无素材，否则删除失败",
        "operationId": "deleteSubCategoryUsingDELETE",
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "categoryId",
            "in": "path",
            "description": "子分类ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/list": {
      "get": {
        "tags": [
          "素材管理"
        ],
        "summary": "素材列表",
        "description": "分页查询素材，支持按分类、标签、文件类型、关键词筛选。返回结果受角色分类权限限制\n\n**关联字典**：\n- file_type：文件类型（列表筛选+显示）",
        "operationId": "listMaterialsUsingGET",
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "categoryCode",
            "in": "query",
            "description": "分类编码",
            "required": false,
            "type": "string",
            "x-example": "scenic"
          },
          {
            "name": "createdBy",
            "in": "query",
            "description": "创建人ID",
            "required": false,
            "type": "integer",
            "format": "int64",
            "x-example": 1001
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "结束日期",
            "required": false,
            "type": "string",
            "x-example": "2026-12-31"
          },
          {
            "name": "fileType",
            "in": "query",
            "description": "文件类型",
            "required": false,
            "type": "string",
            "x-example": "image"
          },
          {
            "name": "keyword",
            "in": "query",
            "description": "搜索关键词",
            "required": false,
            "type": "string",
            "x-example": "风景"
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "排序字段",
            "required": false,
            "type": "string",
            "x-example": "createdAt"
          },
          {
            "name": "orderDir",
            "in": "query",
            "description": "排序方向: asc/desc",
            "required": false,
            "type": "string",
            "x-example": "desc"
          },
          {
            "name": "page",
            "in": "query",
            "description": "页码",
            "required": false,
            "type": "integer",
            "format": "int32",
            "x-example": 1
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "每页条数",
            "required": false,
            "type": "integer",
            "format": "int32",
            "x-example": 20
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "开始日期",
            "required": false,
            "type": "string",
            "x-example": "2026-01-01"
          },
          {
            "name": "subCategoryId",
            "in": "query",
            "description": "子分类ID",
            "required": false,
            "type": "integer",
            "format": "int64",
            "x-example": 2030000000000001
          },
          {
            "name": "tagIds",
            "in": "query",
            "description": "标签ID列表(逗号分隔)",
            "required": false,
            "type": "string",
            "x-example": "1,2,3"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«分页结果«素材信息»»",
              "$ref": "#/definitions/统一响应结果«分页结果«素材信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«分页结果«素材信息»»",
              "$ref": "#/definitions/统一响应结果«分页结果«素材信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/tag": {
      "post": {
        "tags": [
          "素材标签管理"
        ],
        "summary": "创建管理标签",
        "description": "创建系统级素材标签，标签名称不可重复。创建后可用于素材分类和筛选。\n\n**权限**：需管理员登录。",
        "operationId": "createTagUsingPOST",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "创建标签请求",
            "required": false,
            "schema": {
              "originalRef": "创建标签请求",
              "$ref": "#/definitions/创建标签请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材标签信息»",
              "$ref": "#/definitions/统一响应结果«素材标签信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材标签信息»",
              "$ref": "#/definitions/统一响应结果«素材标签信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/tag/adhoc": {
      "post": {
        "tags": [
          "素材标签管理"
        ],
        "summary": "解析自定义标签（按名称查找或创建）",
        "description": "按标签名称查找已有标签，不存在则自动创建为用户自定义标签。用于素材上传时输入自由标签文本的场景。\n\n**权限**：需管理员登录。",
        "operationId": "resolveAdHocTagUsingPOST",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "自定义标签请求",
            "required": false,
            "schema": {
              "originalRef": "创建标签请求",
              "$ref": "#/definitions/创建标签请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材标签信息»",
              "$ref": "#/definitions/统一响应结果«素材标签信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材标签信息»",
              "$ref": "#/definitions/统一响应结果«素材标签信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/tag/{tagId}": {
      "put": {
        "tags": [
          "素材标签管理"
        ],
        "summary": "编辑标签",
        "description": "更新标签名称。标签名称不可与其他已有标签重复。\n\n**权限**：需管理员登录。",
        "operationId": "updateTagUsingPUT",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "更新标签请求",
            "required": false,
            "schema": {
              "originalRef": "更新标签请求",
              "$ref": "#/definitions/更新标签请求"
            }
          },
          {
            "name": "tagId",
            "in": "path",
            "description": "标签ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材标签信息»",
              "$ref": "#/definitions/统一响应结果«素材标签信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材标签信息»",
              "$ref": "#/definitions/统一响应结果«素材标签信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      },
      "delete": {
        "tags": [
          "素材标签管理"
        ],
        "summary": "删除标签",
        "description": "删除标签并自动解除与所有素材的关联关系。\n\n**权限**：需管理员登录。",
        "operationId": "deleteTagUsingDELETE",
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "tagId",
            "in": "path",
            "description": "标签ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/tags": {
      "get": {
        "tags": [
          "素材标签管理"
        ],
        "summary": "获取管理标签（标签管理用，分页）",
        "description": "返回管理员创建的系统标签列表（不含用户自定义标签），用于标签管理页的CRUD操作。支持按标签名称搜索。",
        "operationId": "listManagedTagsUsingGET",
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "keyword",
            "in": "query",
            "description": "搜索关键词（按标签名称模糊搜索）",
            "required": false,
            "type": "string",
            "allowEmptyValue": false
          },
          {
            "name": "page",
            "in": "query",
            "description": "页码（默认1）",
            "required": false,
            "type": "integer",
            "default": 1,
            "format": "int32",
            "allowEmptyValue": false
          },
          {
            "name": "pageSize",
            "in": "query",
            "description": "每页条数（默认20）",
            "required": false,
            "type": "integer",
            "default": 20,
            "format": "int32",
            "allowEmptyValue": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«分页结果«素材标签信息»»",
              "$ref": "#/definitions/统一响应结果«分页结果«素材标签信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«分页结果«素材标签信息»»",
              "$ref": "#/definitions/统一响应结果«分页结果«素材标签信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/tags/all": {
      "get": {
        "tags": [
          "素材标签管理"
        ],
        "summary": "获取全部标签（选择器用，含自定义标签）",
        "description": "返回所有标签（含系统标签和用户自定义标签），用于素材上传/编辑时的标签选择器。",
        "operationId": "listAllTagsUsingGET",
        "produces": [
          "*/*"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«List«素材标签信息»»",
              "$ref": "#/definitions/统一响应结果«List«素材标签信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«List«素材标签信息»»",
              "$ref": "#/definitions/统一响应结果«List«素材标签信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/upload/chunk": {
      "post": {
        "tags": [
          "素材管理"
        ],
        "summary": "分片上传-上传分片",
        "description": "大文件上传第二步：逐个上传分片数据，分片索引从0开始。支持断点续传，已上传的分片无需重传。",
        "operationId": "chunkUploadPartUsingPOST",
        "consumes": [
          "multipart/form-data"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "chunk",
            "in": "formData",
            "description": "分片文件",
            "required": false,
            "type": "file"
          },
          {
            "name": "chunkIndex",
            "in": "query",
            "description": "分片索引（从0开始）",
            "required": false,
            "type": "integer",
            "format": "int32",
            "allowEmptyValue": false
          },
          {
            "name": "uploadId",
            "in": "query",
            "description": "上传ID",
            "required": false,
            "type": "string",
            "allowEmptyValue": false
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«分片上传结果»",
              "$ref": "#/definitions/统一响应结果«分片上传结果»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«分片上传结果»",
              "$ref": "#/definitions/统一响应结果«分片上传结果»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/upload/chunk/cancel": {
      "post": {
        "tags": [
          "素材管理"
        ],
        "summary": "分片上传-取消",
        "description": "取消分片上传任务，清理已上传的分片数据和OSS临时文件。仅上传发起者可取消。",
        "operationId": "chunkUploadCancelUsingPOST",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "分片上传取消请求",
            "required": false,
            "schema": {
              "originalRef": "分片上传取消请求",
              "$ref": "#/definitions/分片上传取消请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/upload/chunk/complete": {
      "post": {
        "tags": [
          "素材管理"
        ],
        "summary": "分片上传-完成合并",
        "description": "大文件上传第三步：所有分片上传完成后调用，OSS端合并分片为完整文件并创建素材记录。",
        "operationId": "chunkUploadCompleteUsingPOST",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "分片上传完成请求",
            "required": false,
            "schema": {
              "originalRef": "分片上传完成请求",
              "$ref": "#/definitions/分片上传完成请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材信息»",
              "$ref": "#/definitions/统一响应结果«素材信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材信息»",
              "$ref": "#/definitions/统一响应结果«素材信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/upload/chunk/init": {
      "post": {
        "tags": [
          "素材管理"
        ],
        "summary": "分片上传-初始化",
        "description": "大文件上传第一步：初始化分片上传任务，返回uploadId和每个分片的预签名URL。前端按分片并发上传后调用完成合并接口。\n\n**权限**：需管理员登录，受角色分类权限限制。",
        "operationId": "chunkUploadInitUsingPOST",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "分片上传初始化请求",
            "required": false,
            "schema": {
              "originalRef": "分片上传初始化请求",
              "$ref": "#/definitions/分片上传初始化请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«分片上传初始化结果»",
              "$ref": "#/definitions/统一响应结果«分片上传初始化结果»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«分片上传初始化结果»",
              "$ref": "#/definitions/统一响应结果«分片上传初始化结果»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/upload/confirm": {
      "post": {
        "tags": [
          "素材管理"
        ],
        "summary": "确认上传完成",
        "description": "上传素材第二步：前端直传OSS完成后调用此接口创建素材记录，支持MD5去重\n\n**关联字典**：\n- material_tag：素材标签（上传时可选标签）",
        "operationId": "confirmUploadUsingPOST",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "确认上传请求",
            "required": false,
            "schema": {
              "originalRef": "素材上传确认请求",
              "$ref": "#/definitions/素材上传确认请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材信息»",
              "$ref": "#/definitions/统一响应结果«素材信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材信息»",
              "$ref": "#/definitions/统一响应结果«素材信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/upload/folder": {
      "post": {
        "tags": [
          "素材管理"
        ],
        "summary": "文件夹上传初始化（创建分类+批量获取凭证）",
        "description": "支持整个文件夹上传：自动根据文件夹名创建子分类，为每个文件批量获取上传凭证，前端逐一上传后批量确认",
        "operationId": "folderUploadInitUsingPOST",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "文件夹上传初始化请求",
            "required": false,
            "schema": {
              "originalRef": "文件夹上传初始化请求",
              "$ref": "#/definitions/文件夹上传初始化请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«文件夹上传初始化结果»",
              "$ref": "#/definitions/统一响应结果«文件夹上传初始化结果»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«文件夹上传初始化结果»",
              "$ref": "#/definitions/统一响应结果«文件夹上传初始化结果»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/upload/token": {
      "post": {
        "tags": [
          "素材管理"
        ],
        "summary": "获取上传凭证",
        "description": "上传素材第一步：获取OSS预签名URL和凭证。前端使用凭证直传OSS后调用确认上传。支持基于角色的分类权限校验",
        "operationId": "requestUploadTokenUsingPOST",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "request",
            "description": "上传凭证请求",
            "required": false,
            "schema": {
              "originalRef": "素材上传令牌请求",
              "$ref": "#/definitions/素材上传令牌请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材上传令牌信息»",
              "$ref": "#/definitions/统一响应结果«素材上传令牌信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材上传令牌信息»",
              "$ref": "#/definitions/统一响应结果«素材上传令牌信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/{materialId}": {
      "get": {
        "tags": [
          "素材管理"
        ],
        "summary": "素材详情",
        "description": "返回素材完整信息，包含文件名、URL、分类、标签、文件大小、上传者等。受角色分类权限限制。\n\n**关联字典**：\n- file_type：文件类型（显示）",
        "operationId": "getMaterialUsingGET",
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "materialId",
            "in": "path",
            "description": "素材ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材信息»",
              "$ref": "#/definitions/统一响应结果«素材信息»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材信息»",
              "$ref": "#/definitions/统一响应结果«素材信息»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      },
      "put": {
        "tags": [
          "素材管理"
        ],
        "summary": "更新素材信息",
        "description": "**关联字典**：\n- material_tag：素材标签（编辑时选择标签）",
        "operationId": "updateMaterialUsingPUT",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "materialId",
            "in": "path",
            "description": "素材ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "in": "body",
            "name": "request",
            "description": "素材更新请求",
            "required": false,
            "schema": {
              "originalRef": "更新素材请求",
              "$ref": "#/definitions/更新素材请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材信息»",
              "$ref": "#/definitions/统一响应结果«素材信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«素材信息»",
              "$ref": "#/definitions/统一响应结果«素材信息»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      },
      "delete": {
        "tags": [
          "素材管理"
        ],
        "summary": "删除素材",
        "description": "删除素材记录。如果素材存在引用关系（被景区、酒店等使用），则不允许删除",
        "operationId": "deleteMaterialUsingDELETE",
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "materialId",
            "in": "path",
            "description": "素材ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/{materialId}/refs": {
      "get": {
        "tags": [
          "素材管理"
        ],
        "summary": "查看素材引用记录",
        "description": "查看素材被哪些业务实体引用（如景区封面、酒店轮播图等），用于判断素材是否可安全删除",
        "operationId": "getMaterialRefsUsingGET",
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "materialId",
            "in": "path",
            "description": "素材ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«List«素材引用信息»»",
              "$ref": "#/definitions/统一响应结果«List«素材引用信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«List«素材引用信息»»",
              "$ref": "#/definitions/统一响应结果«List«素材引用信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/admin/material/{materialId}/tags": {
      "put": {
        "tags": [
          "素材管理"
        ],
        "summary": "更新素材标签",
        "description": "全量替换单个素材的标签，传入新的标签ID列表",
        "operationId": "updateMaterialTagsUsingPUT",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "*/*"
        ],
        "parameters": [
          {
            "name": "materialId",
            "in": "path",
            "description": "素材ID",
            "required": false,
            "type": "integer",
            "format": "int64"
          },
          {
            "in": "body",
            "name": "request",
            "description": "素材标签更新请求",
            "required": false,
            "schema": {
              "originalRef": "更新素材标签请求",
              "$ref": "#/definitions/更新素材标签请求"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«Void»",
              "$ref": "#/definitions/统一响应结果«Void»"
            }
          },
          "201": {
            "description": "Created"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    },
    "/mp/material/miniprogram": {
      "get": {
        "tags": [
          "小程序-素材"
        ],
        "summary": "获取小程序分类下的全部素材",
        "description": "返回miniprogram分类下的所有素材，用于小程序端展示公共素材资源（如引导页图片、默认头像等）",
        "operationId": "listMiniprogramMaterialsUsingGET",
        "produces": [
          "*/*"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«List«素材信息»»",
              "$ref": "#/definitions/统一响应结果«List«素材信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "responsesObject": {
          "200": {
            "description": "OK",
            "schema": {
              "originalRef": "统一响应结果«List«素材信息»»",
              "$ref": "#/definitions/统一响应结果«List«素材信息»»"
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "404": {
            "description": "Not Found"
          }
        },
        "deprecated": false,
        "x-order": "2147483647"
      }
    }
  },
  "definitions": {
    "Create subcategory request": {
      "type": "object",
      "required": [
        "categoryName",
        "parentCode"
      ],
      "properties": {
        "categoryName": {
          "type": "string",
          "example": "乌兰山",
          "description": "子分类名称"
        },
        "parentCode": {
          "type": "string",
          "example": "scenic",
          "description": "根分类编码(scenic/hotel等)"
        },
        "parentId": {
          "type": "integer",
          "format": "int64",
          "example": 1234567890,
          "description": "父子分类ID(为空则创建在根分类下)"
        },
        "sortOrder": {
          "type": "integer",
          "format": "int32",
          "example": 0,
          "description": "排序值"
        }
      },
      "title": "Create subcategory request"
    },
    "STS临时凭证信息": {
      "type": "object",
      "properties": {
        "accessKeyId": {
          "type": "string",
          "description": "AccessKey ID"
        },
        "accessKeySecret": {
          "type": "string",
          "description": "AccessKey Secret"
        },
        "expiration": {
          "type": "string",
          "description": "过期时间"
        },
        "securityToken": {
          "type": "string",
          "description": "安全令牌"
        }
      },
      "title": "STS临时凭证信息"
    },
    "Update subcategory request": {
      "type": "object",
      "properties": {
        "categoryName": {
          "type": "string",
          "example": "Hulunbuir",
          "description": "Subcategory name"
        },
        "sortOrder": {
          "type": "integer",
          "format": "int32",
          "example": 1,
          "description": "Sort order"
        }
      },
      "title": "Update subcategory request"
    },
    "分片上传初始化结果": {
      "type": "object",
      "properties": {
        "chunkSize": {
          "type": "integer",
          "format": "int32",
          "description": "推荐分片大小（字节）"
        },
        "uploadId": {
          "type": "string",
          "description": "上传ID"
        }
      },
      "title": "分片上传初始化结果"
    },
    "分片上传初始化请求": {
      "type": "object",
      "required": [
        "contentType",
        "fileSize",
        "filename"
      ],
      "properties": {
        "contentType": {
          "type": "string",
          "description": "文件MIME类型"
        },
        "fileSize": {
          "type": "integer",
          "format": "int64",
          "description": "文件大小（字节）"
        },
        "filename": {
          "type": "string",
          "description": "文件名"
        },
        "materialId": {
          "type": "string",
          "description": "关联素材ID（可选，用于更新已有素材）"
        }
      },
      "title": "分片上传初始化请求"
    },
    "分片上传取消请求": {
      "type": "object",
      "required": [
        "uploadId"
      ],
      "properties": {
        "uploadId": {
          "type": "string",
          "description": "上传ID"
        }
      },
      "title": "分片上传取消请求"
    },
    "分片上传完成请求": {
      "type": "object",
      "required": [
        "uploadId"
      ],
      "properties": {
        "uploadId": {
          "type": "string",
          "description": "上传ID"
        }
      },
      "title": "分片上传完成请求"
    },
    "分片上传结果": {
      "type": "object",
      "properties": {
        "etag": {
          "type": "string",
          "description": "分片ETag"
        }
      },
      "title": "分片上传结果"
    },
    "分类权限更新请求": {
      "type": "object",
      "required": [
        "categoryCodes"
      ],
      "properties": {
        "categoryCodes": {
          "type": "array",
          "description": "分类编码列表",
          "items": {
            "type": "string"
          }
        }
      },
      "title": "分类权限更新请求"
    },
    "分页结果«素材信息»": {
      "type": "object",
      "properties": {
        "page": {
          "type": "integer",
          "format": "int32",
          "example": 1,
          "description": "当前页码"
        },
        "pageSize": {
          "type": "integer",
          "format": "int32",
          "example": 20,
          "description": "每页条数"
        },
        "records": {
          "type": "array",
          "description": "数据列表",
          "items": {
            "originalRef": "素材信息",
            "$ref": "#/definitions/素材信息"
          }
        },
        "total": {
          "type": "integer",
          "format": "int32",
          "example": 100,
          "description": "总记录数"
        }
      },
      "title": "分页结果«素材信息»"
    },
    "分页结果«素材标签信息»": {
      "type": "object",
      "properties": {
        "page": {
          "type": "integer",
          "format": "int32",
          "example": 1,
          "description": "当前页码"
        },
        "pageSize": {
          "type": "integer",
          "format": "int32",
          "example": 20,
          "description": "每页条数"
        },
        "records": {
          "type": "array",
          "description": "数据列表",
          "items": {
            "originalRef": "素材标签信息",
            "$ref": "#/definitions/素材标签信息"
          }
        },
        "total": {
          "type": "integer",
          "format": "int32",
          "example": 100,
          "description": "总记录数"
        }
      },
      "title": "分页结果«素材标签信息»"
    },
    "创建标签请求": {
      "type": "object",
      "required": [
        "tagName"
      ],
      "properties": {
        "tagColor": {
          "type": "string",
          "example": "#409EFF",
          "description": "标签颜色"
        },
        "tagName": {
          "type": "string",
          "example": "风景",
          "description": "标签名称"
        }
      },
      "title": "创建标签请求"
    },
    "删除失败项": {
      "type": "object",
      "properties": {
        "materialId": {
          "type": "string",
          "description": "素材ID"
        },
        "reason": {
          "type": "string",
          "description": "失败原因"
        }
      },
      "title": "删除失败项"
    },
    "批量删除素材请求": {
      "type": "object",
      "required": [
        "materialIds"
      ],
      "properties": {
        "materialIds": {
          "type": "array",
          "description": "素材ID列表",
          "items": {
            "type": "string"
          }
        }
      },
      "title": "批量删除素材请求"
    },
    "批量删除结果": {
      "type": "object",
      "properties": {
        "failedItems": {
          "type": "array",
          "description": "失败项列表",
          "items": {
            "originalRef": "删除失败项",
            "$ref": "#/definitions/删除失败项"
          }
        },
        "successCount": {
          "type": "integer",
          "format": "int32",
          "description": "成功删除数量"
        }
      },
      "title": "批量删除结果"
    },
    "批量标签操作请求": {
      "type": "object",
      "required": [
        "materialIds"
      ],
      "properties": {
        "addTagIds": {
          "type": "array",
          "description": "要添加的标签ID列表",
          "items": {
            "type": "string"
          }
        },
        "materialIds": {
          "type": "array",
          "description": "素材ID列表",
          "items": {
            "type": "string"
          }
        },
        "removeTagIds": {
          "type": "array",
          "description": "要移除的标签ID列表",
          "items": {
            "type": "string"
          }
        }
      },
      "title": "批量标签操作请求"
    },
    "文件上传凭证项": {
      "type": "object",
      "properties": {
        "bucket": {
          "type": "string",
          "description": "OSS Bucket名称"
        },
        "error": {
          "type": "string",
          "description": "错误信息（该文件获取凭证失败时）"
        },
        "filename": {
          "type": "string",
          "description": "文件名"
        },
        "folderPath": {
          "type": "string",
          "description": "文件夹路径"
        },
        "instantUpload": {
          "type": "boolean",
          "description": "是否秒传（文件已存在）"
        },
        "materialId": {
          "type": "string",
          "description": "素材ID"
        },
        "ossKey": {
          "type": "string",
          "description": "OSS对象Key"
        },
        "region": {
          "type": "string",
          "description": "OSS Region"
        },
        "stsToken": {
          "description": "STS临时凭证",
          "originalRef": "STS临时凭证信息",
          "$ref": "#/definitions/STS临时凭证信息"
        },
        "uploadHeaders": {
          "type": "object",
          "description": "上传请求头",
          "additionalProperties": {
            "type": "string"
          }
        },
        "uploadMethod": {
          "type": "string",
          "description": "上传方式: PUT/POST"
        },
        "uploadUrl": {
          "type": "string",
          "description": "上传URL"
        }
      },
      "title": "文件上传凭证项"
    },
    "文件夹上传初始化结果": {
      "type": "object",
      "properties": {
        "fileTokens": {
          "type": "array",
          "description": "各文件的上传凭证列表",
          "items": {
            "originalRef": "文件上传凭证项",
            "$ref": "#/definitions/文件上传凭证项"
          }
        },
        "folderCategoryMap": {
          "type": "object",
          "description": "文件夹路径 → 子分类ID 映射",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "title": "文件夹上传初始化结果"
    },
    "文件夹上传初始化请求": {
      "type": "object",
      "required": [
        "categoryCode",
        "files",
        "folderPaths"
      ],
      "properties": {
        "categoryCode": {
          "type": "string",
          "example": "guide",
          "description": "分类编码"
        },
        "files": {
          "type": "array",
          "description": "文件列表",
          "items": {
            "originalRef": "文件夹上传文件项",
            "$ref": "#/definitions/文件夹上传文件项"
          }
        },
        "folderPaths": {
          "type": "array",
          "description": "文件夹路径列表（如 [\"999\", \"999/888\"]）",
          "items": {
            "type": "string"
          }
        }
      },
      "title": "文件夹上传初始化请求"
    },
    "文件夹上传文件项": {
      "type": "object",
      "required": [
        "contentType",
        "fileSize",
        "filename",
        "folderPath",
        "md5"
      ],
      "properties": {
        "contentType": {
          "type": "string",
          "example": "image/jpeg",
          "description": "文件MIME类型"
        },
        "fileSize": {
          "type": "integer",
          "format": "int64",
          "example": 1048576,
          "description": "文件大小(字节)"
        },
        "filename": {
          "type": "string",
          "example": "photo.jpg",
          "description": "文件名"
        },
        "folderPath": {
          "type": "string",
          "example": "999/888",
          "description": "文件所在文件夹路径（与folderPaths中的路径对应）"
        },
        "materialName": {
          "type": "string",
          "example": "风景图",
          "description": "素材名称"
        },
        "md5": {
          "type": "string",
          "example": "d41d8cd98f00b204e9800998ecf8427e",
          "description": "文件MD5"
        }
      },
      "title": "文件夹上传文件项"
    },
    "更新标签请求": {
      "type": "object",
      "properties": {
        "tagColor": {
          "type": "string",
          "example": "#409EFF",
          "description": "标签颜色"
        },
        "tagName": {
          "type": "string",
          "example": "风景",
          "description": "标签名称"
        }
      },
      "title": "更新标签请求"
    },
    "更新素材标签请求": {
      "type": "object",
      "required": [
        "tagIds"
      ],
      "properties": {
        "tagIds": {
          "type": "array",
          "description": "标签ID列表",
          "items": {
            "type": "string"
          }
        }
      },
      "title": "更新素材标签请求"
    },
    "更新素材请求": {
      "type": "object",
      "properties": {
        "categoryCode": {
          "type": "string",
          "example": "scenic",
          "description": "分类编码"
        },
        "description": {
          "type": "string",
          "example": "九寨沟秋季风景",
          "description": "素材描述"
        },
        "materialName": {
          "type": "string",
          "example": "九寨沟风景图",
          "description": "素材名称"
        },
        "subCategoryId": {
          "type": "integer",
          "format": "int64",
          "example": 2030000000000001,
          "description": "子分类ID（0表示清除子分类）"
        }
      },
      "title": "更新素材请求"
    },
    "素材上传令牌信息": {
      "type": "object",
      "properties": {
        "bucket": {
          "type": "string",
          "description": "OSS Bucket名称"
        },
        "contentType": {
          "type": "string",
          "description": "上传时必须使用的Content-Type（与预签名URL签名一致）"
        },
        "expireAt": {
          "type": "string",
          "format": "date-time",
          "description": "过期时间"
        },
        "fileId": {
          "type": "string",
          "description": "文件ID"
        },
        "instantUpload": {
          "type": "boolean",
          "description": "是否秒传"
        },
        "material": {
          "description": "秒传时返回的素材信息",
          "originalRef": "素材信息",
          "$ref": "#/definitions/素材信息"
        },
        "materialId": {
          "type": "string",
          "description": "素材ID"
        },
        "ossKey": {
          "type": "string",
          "description": "OSS对象Key"
        },
        "region": {
          "type": "string",
          "description": "OSS Region"
        },
        "stsToken": {
          "description": "STS临时凭证",
          "originalRef": "STS临时凭证信息",
          "$ref": "#/definitions/STS临时凭证信息"
        },
        "uploadMode": {
          "type": "string",
          "description": "上传模式: PRESIGNED_URL/STS_MULTIPART"
        },
        "uploadUrl": {
          "type": "string",
          "description": "上传URL"
        }
      },
      "title": "素材上传令牌信息"
    },
    "素材上传令牌请求": {
      "type": "object",
      "required": [
        "categoryCode",
        "contentType",
        "fileSize",
        "filename",
        "md5"
      ],
      "properties": {
        "categoryCode": {
          "type": "string",
          "example": "scenic",
          "description": "分类编码"
        },
        "contentType": {
          "type": "string",
          "example": "image/jpeg",
          "description": "文件MIME类型"
        },
        "fileSize": {
          "type": "integer",
          "format": "int64",
          "example": 1048576,
          "description": "文件大小(字节)"
        },
        "filename": {
          "type": "string",
          "example": "photo.jpg",
          "description": "文件名"
        },
        "materialName": {
          "type": "string",
          "example": "九寨沟风景图",
          "description": "素材名称"
        },
        "md5": {
          "type": "string",
          "example": "d41d8cd98f00b204e9800998ecf8427e",
          "description": "文件MD5"
        },
        "subCategoryId": {
          "type": "integer",
          "format": "int64",
          "example": 2030000000000001,
          "description": "子分类ID（文件夹上传时使用）"
        }
      },
      "title": "素材上传令牌请求"
    },
    "素材上传确认请求": {
      "type": "object",
      "required": [
        "materialId"
      ],
      "properties": {
        "description": {
          "type": "string",
          "example": "九寨沟秋季风景",
          "description": "素材描述"
        },
        "materialId": {
          "type": "string",
          "example": 1234567890,
          "description": "素材ID"
        },
        "tagIds": {
          "type": "array",
          "description": "标签ID列表",
          "items": {
            "type": "string"
          }
        }
      },
      "title": "素材上传确认请求"
    },
    "素材信息": {
      "type": "object",
      "properties": {
        "categoryCode": {
          "type": "string",
          "description": "分类编码"
        },
        "categoryName": {
          "type": "string",
          "description": "分类名称"
        },
        "categoryPath": {
          "type": "string",
          "description": "完整分类路径（如：攻略管理 / 999 / 888）"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "description": "创建时间"
        },
        "createdBy": {
          "type": "string",
          "description": "创建人ID"
        },
        "createdByName": {
          "type": "string",
          "description": "创建人姓名"
        },
        "description": {
          "type": "string",
          "description": "素材描述"
        },
        "fileId": {
          "type": "string",
          "description": "文件ID"
        },
        "fileName": {
          "type": "string",
          "description": "文件名"
        },
        "fileSize": {
          "type": "integer",
          "format": "int64",
          "description": "文件大小(字节)"
        },
        "fileType": {
          "type": "string",
          "description": "文件类型"
        },
        "imageHeight": {
          "type": "integer",
          "format": "int32",
          "description": "图片高度"
        },
        "imageWidth": {
          "type": "integer",
          "format": "int32",
          "description": "图片宽度"
        },
        "materialId": {
          "type": "string",
          "description": "素材ID"
        },
        "materialName": {
          "type": "string",
          "description": "素材名称"
        },
        "ossUrl": {
          "type": "string",
          "description": "OSS地址"
        },
        "refCount": {
          "type": "integer",
          "format": "int32",
          "description": "引用次数"
        },
        "subCategoryId": {
          "type": "string",
          "description": "子分类ID"
        },
        "subCategoryName": {
          "type": "string",
          "description": "子分类名称"
        },
        "tags": {
          "type": "array",
          "description": "标签列表",
          "items": {
            "originalRef": "素材标签信息",
            "$ref": "#/definitions/素材标签信息"
          }
        },
        "thumbnailUrl": {
          "type": "string",
          "description": "缩略图地址"
        }
      },
      "title": "素材信息"
    },
    "素材分类信息": {
      "type": "object",
      "properties": {
        "categoryCode": {
          "type": "string",
          "description": "分类编码"
        },
        "categoryName": {
          "type": "string",
          "description": "分类名称"
        },
        "children": {
          "type": "array",
          "description": "子分类列表",
          "items": {
            "originalRef": "素材分类信息",
            "$ref": "#/definitions/素材分类信息"
          }
        },
        "materialCount": {
          "type": "integer",
          "format": "int32",
          "description": "素材数量"
        },
        "parentId": {
          "type": "string",
          "description": "父子分类ID"
        },
        "subCategoryId": {
          "type": "string",
          "description": "子分类ID"
        }
      },
      "title": "素材分类信息"
    },
    "素材引用信息": {
      "type": "object",
      "properties": {
        "bizId": {
          "type": "string",
          "description": "业务ID"
        },
        "bizName": {
          "type": "string",
          "description": "业务名称"
        },
        "bizType": {
          "type": "string",
          "description": "业务类型"
        },
        "bizTypeName": {
          "type": "string",
          "description": "业务类型名称"
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "description": "创建时间"
        },
        "createdByName": {
          "type": "string",
          "description": "创建人姓名"
        },
        "id": {
          "type": "string",
          "description": "引用ID"
        },
        "materialId": {
          "type": "string",
          "description": "素材ID"
        },
        "usageType": {
          "type": "string",
          "description": "用途类型"
        },
        "usageTypeName": {
          "type": "string",
          "description": "用途类型名称"
        }
      },
      "title": "素材引用信息"
    },
    "素材标签信息": {
      "type": "object",
      "properties": {
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "description": "创建时间"
        },
        "createdByName": {
          "type": "string",
          "description": "创建人姓名"
        },
        "managed": {
          "type": "boolean",
          "description": "是否系统管理标签"
        },
        "tagColor": {
          "type": "string",
          "description": "标签颜色"
        },
        "tagId": {
          "type": "string",
          "description": "标签ID"
        },
        "tagName": {
          "type": "string",
          "description": "标签名称"
        },
        "useCount": {
          "type": "integer",
          "format": "int32",
          "description": "使用次数"
        }
      },
      "title": "素材标签信息"
    },
    "统一响应结果«List«string»»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "type": "array",
          "description": "响应数据",
          "items": {
            "type": "string"
          }
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«List«string»»"
    },
    "统一响应结果«List«素材信息»»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "type": "array",
          "description": "响应数据",
          "items": {
            "originalRef": "素材信息",
            "$ref": "#/definitions/素材信息"
          }
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«List«素材信息»»"
    },
    "统一响应结果«List«素材分类信息»»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "type": "array",
          "description": "响应数据",
          "items": {
            "originalRef": "素材分类信息",
            "$ref": "#/definitions/素材分类信息"
          }
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«List«素材分类信息»»"
    },
    "统一响应结果«List«素材引用信息»»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "type": "array",
          "description": "响应数据",
          "items": {
            "originalRef": "素材引用信息",
            "$ref": "#/definitions/素材引用信息"
          }
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«List«素材引用信息»»"
    },
    "统一响应结果«List«素材标签信息»»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "type": "array",
          "description": "响应数据",
          "items": {
            "originalRef": "素材标签信息",
            "$ref": "#/definitions/素材标签信息"
          }
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«List«素材标签信息»»"
    },
    "统一响应结果«Void»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«Void»"
    },
    "统一响应结果«分片上传初始化结果»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "description": "响应数据",
          "originalRef": "分片上传初始化结果",
          "$ref": "#/definitions/分片上传初始化结果"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«分片上传初始化结果»"
    },
    "统一响应结果«分片上传结果»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "description": "响应数据",
          "originalRef": "分片上传结果",
          "$ref": "#/definitions/分片上传结果"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«分片上传结果»"
    },
    "统一响应结果«分页结果«素材信息»»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "description": "响应数据",
          "originalRef": "分页结果«素材信息»",
          "$ref": "#/definitions/分页结果«素材信息»"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«分页结果«素材信息»»"
    },
    "统一响应结果«分页结果«素材标签信息»»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "description": "响应数据",
          "originalRef": "分页结果«素材标签信息»",
          "$ref": "#/definitions/分页结果«素材标签信息»"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«分页结果«素材标签信息»»"
    },
    "统一响应结果«批量删除结果»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "description": "响应数据",
          "originalRef": "批量删除结果",
          "$ref": "#/definitions/批量删除结果"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«批量删除结果»"
    },
    "统一响应结果«文件夹上传初始化结果»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "description": "响应数据",
          "originalRef": "文件夹上传初始化结果",
          "$ref": "#/definitions/文件夹上传初始化结果"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«文件夹上传初始化结果»"
    },
    "统一响应结果«素材上传令牌信息»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "description": "响应数据",
          "originalRef": "素材上传令牌信息",
          "$ref": "#/definitions/素材上传令牌信息"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«素材上传令牌信息»"
    },
    "统一响应结果«素材信息»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "description": "响应数据",
          "originalRef": "素材信息",
          "$ref": "#/definitions/素材信息"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«素材信息»"
    },
    "统一响应结果«素材分类信息»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "description": "响应数据",
          "originalRef": "素材分类信息",
          "$ref": "#/definitions/素材分类信息"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«素材分类信息»"
    },
    "统一响应结果«素材标签信息»": {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32",
          "example": 200,
          "description": "状态码"
        },
        "data": {
          "description": "响应数据",
          "originalRef": "素材标签信息",
          "$ref": "#/definitions/素材标签信息"
        },
        "message": {
          "type": "string",
          "example": "成功",
          "description": "响应消息"
        }
      },
      "title": "统一响应结果«素材标签信息»"
    }
  }
}