documents.yaml 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. Documents:
  2. get:
  3. operationId: listDocuments
  4. summary: 分页查询主案和子方案
  5. parameters:
  6. - $ref: '../components/parameters.yaml#/XRequestId'
  7. - {name: documentType, in: query, schema: {type: string, default: 'MAIN,SUB_PLAN'}}
  8. - {name: categoryId, in: query, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  9. - {name: keyword, in: query, schema: {type: string}}
  10. - {name: securityLevel, in: query, schema: {$ref: '../components/schemas.yaml#/SecurityLevel'}}
  11. - {name: visibilityType, in: query, schema: {$ref: '../components/schemas.yaml#/VisibilityType'}}
  12. - {name: status, in: query, schema: {$ref: '../components/schemas.yaml#/DocumentStatus'}}
  13. - $ref: '../components/parameters.yaml#/UpdatedFrom'
  14. - $ref: '../components/parameters.yaml#/UpdatedTo'
  15. - name: sortBy
  16. in: query
  17. schema:
  18. type: string
  19. enum: [documentName, createdAt, updatedAt, viewCount, downloadCount]
  20. default: updatedAt
  21. - {name: sortDirection, in: query, schema: {type: string, enum: [asc, desc], default: desc}}
  22. - {name: page, in: query, schema: {type: integer, minimum: 1, default: 1}}
  23. - {name: pageSize, in: query, schema: {type: integer, minimum: 1, maximum: 100, default: 20}}
  24. responses:
  25. '200': {description: 方案分页, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DocumentPageResponse'}}}}
  26. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  27. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  28. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  29. '404': {$ref: '../components/responses.yaml#/NotFound'}
  30. '500': {$ref: '../components/responses.yaml#/InternalError'}
  31. post:
  32. operationId: createDocument
  33. summary: 上传主案或子方案
  34. requestBody:
  35. required: true
  36. content:
  37. multipart/form-data:
  38. schema:
  39. type: object
  40. additionalProperties: false
  41. required: [file, metadata]
  42. properties:
  43. file: {type: string, format: binary}
  44. metadata:
  45. type: string
  46. description: DocumentCreateMetadata的JSON字符串。
  47. responses:
  48. '201': {description: 上传成功, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DocumentDetailResponse'}}}}
  49. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  50. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  51. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  52. '404': {$ref: '../components/responses.yaml#/NotFound'}
  53. '413': {$ref: '../components/responses.yaml#/PayloadTooLarge'}
  54. '415': {$ref: '../components/responses.yaml#/UnsupportedMedia'}
  55. '500': {$ref: '../components/responses.yaml#/InternalError'}
  56. Document:
  57. parameters:
  58. - {name: id, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  59. get:
  60. operationId: getDocument
  61. summary: 查询主案或子方案详情
  62. responses:
  63. '200': {description: 方案详情, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DocumentDetailResponse'}}}}
  64. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  65. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  66. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  67. '404': {$ref: '../components/responses.yaml#/NotFound'}
  68. '500': {$ref: '../components/responses.yaml#/InternalError'}
  69. put:
  70. operationId: updateDocument
  71. summary: 编辑方案文档元数据
  72. requestBody:
  73. required: true
  74. content:
  75. application/json:
  76. schema: {$ref: '../components/schemas.yaml#/UpdateDocumentRequest'}
  77. responses:
  78. '200': {description: 编辑成功, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DocumentDetailResponse'}}}}
  79. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  80. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  81. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  82. '404': {$ref: '../components/responses.yaml#/NotFound'}
  83. '409': {$ref: '../components/responses.yaml#/Conflict'}
  84. '500': {$ref: '../components/responses.yaml#/InternalError'}
  85. delete:
  86. operationId: deleteDocument
  87. summary: 逻辑删除方案文档
  88. parameters:
  89. - {name: rowVersion, in: query, required: true, schema: {type: integer, minimum: 0}}
  90. responses:
  91. '200': {description: 删除成功, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DeleteDocumentResponse'}}}}
  92. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  93. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  94. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  95. '404': {$ref: '../components/responses.yaml#/NotFound'}
  96. '409': {$ref: '../components/responses.yaml#/Conflict'}
  97. '500': {$ref: '../components/responses.yaml#/InternalError'}
  98. SubPlans:
  99. parameters:
  100. - {name: id, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  101. get:
  102. operationId: listMainPlanSubPlans
  103. summary: 查询主案的直接子方案
  104. parameters:
  105. - {name: keyword, in: query, schema: {type: string}}
  106. - {name: status, in: query, schema: {$ref: '../components/schemas.yaml#/DocumentStatus'}}
  107. - $ref: '../components/parameters.yaml#/UpdatedFrom'
  108. - $ref: '../components/parameters.yaml#/UpdatedTo'
  109. - name: sortBy
  110. in: query
  111. schema: {type: string, enum: [documentName, createdAt, updatedAt, viewCount, downloadCount], default: updatedAt}
  112. - {name: sortDirection, in: query, schema: {type: string, enum: [asc, desc], default: desc}}
  113. - {name: page, in: query, schema: {type: integer, minimum: 1, default: 1}}
  114. - {name: pageSize, in: query, schema: {type: integer, minimum: 1, maximum: 100, default: 20}}
  115. responses:
  116. '200': {description: 子方案分页, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DocumentPageResponse'}}}}
  117. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  118. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  119. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  120. '404': {$ref: '../components/responses.yaml#/NotFound'}
  121. '500': {$ref: '../components/responses.yaml#/InternalError'}
  122. Attachments:
  123. get:
  124. operationId: listAttachments
  125. summary: 分页查询共享附件
  126. parameters:
  127. - $ref: '../components/parameters.yaml#/XRequestId'
  128. - {name: keyword, in: query, schema: {type: string}}
  129. - {name: attachmentType, in: query, schema: {$ref: '../components/schemas.yaml#/AttachmentType'}}
  130. - {name: fileExtension, in: query, schema: {type: string}}
  131. - $ref: '../components/parameters.yaml#/UpdatedFrom'
  132. - $ref: '../components/parameters.yaml#/UpdatedTo'
  133. - name: sortBy
  134. in: query
  135. schema: {type: string, enum: [documentName, createdAt, updatedAt, viewCount, downloadCount], default: updatedAt}
  136. - {name: sortDirection, in: query, schema: {type: string, enum: [asc, desc], default: desc}}
  137. - {name: page, in: query, schema: {type: integer, minimum: 1, default: 1}}
  138. - {name: pageSize, in: query, schema: {type: integer, minimum: 1, maximum: 100, default: 20}}
  139. responses:
  140. '200': {description: 附件分页, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DocumentPageResponse'}}}}
  141. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  142. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  143. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  144. '404': {$ref: '../components/responses.yaml#/NotFound'}
  145. '500': {$ref: '../components/responses.yaml#/InternalError'}
  146. post:
  147. operationId: createAttachment
  148. summary: 上传共享附件
  149. requestBody:
  150. required: true
  151. content:
  152. multipart/form-data:
  153. schema:
  154. type: object
  155. additionalProperties: false
  156. required: [file, metadata]
  157. properties:
  158. file: {type: string, format: binary}
  159. metadata:
  160. type: string
  161. description: AttachmentCreateMetadata的JSON字符串。
  162. responses:
  163. '201': {description: 上传成功, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DocumentDetailResponse'}}}}
  164. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  165. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  166. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  167. '413': {$ref: '../components/responses.yaml#/PayloadTooLarge'}
  168. '415': {$ref: '../components/responses.yaml#/UnsupportedMedia'}
  169. '500': {$ref: '../components/responses.yaml#/InternalError'}
  170. Attachment:
  171. parameters:
  172. - {name: id, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  173. get:
  174. operationId: getAttachment
  175. summary: 查询共享附件详情
  176. responses:
  177. '200': {description: 附件详情, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DocumentDetailResponse'}}}}
  178. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  179. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  180. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  181. '404': {$ref: '../components/responses.yaml#/NotFound'}
  182. '500': {$ref: '../components/responses.yaml#/InternalError'}
  183. put:
  184. operationId: updateAttachment
  185. summary: 编辑共享附件元数据
  186. requestBody:
  187. required: true
  188. content:
  189. application/json:
  190. schema: {$ref: '../components/schemas.yaml#/UpdateAttachmentRequest'}
  191. responses:
  192. '200': {description: 编辑成功, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DocumentDetailResponse'}}}}
  193. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  194. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  195. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  196. '404': {$ref: '../components/responses.yaml#/NotFound'}
  197. '409': {$ref: '../components/responses.yaml#/Conflict'}
  198. '500': {$ref: '../components/responses.yaml#/InternalError'}
  199. delete:
  200. operationId: deleteAttachment
  201. summary: 逻辑删除共享附件
  202. parameters:
  203. - {name: rowVersion, in: query, required: true, schema: {type: integer, minimum: 0}}
  204. responses:
  205. '200': {description: 删除成功, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/DeleteDocumentResponse'}}}}
  206. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  207. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  208. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  209. '404': {$ref: '../components/responses.yaml#/NotFound'}
  210. '409': {$ref: '../components/responses.yaml#/Conflict'}
  211. '500': {$ref: '../components/responses.yaml#/InternalError'}
  212. DocumentBatchImport:
  213. post:
  214. operationId: batchImportDocuments
  215. summary: 批量导入主案和子方案
  216. requestBody:
  217. required: true
  218. content:
  219. multipart/form-data:
  220. schema:
  221. $ref: '../components/schemas.yaml#/BatchImportMultipart'
  222. responses:
  223. '200': {description: 逐文件导入结果, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/BatchImportResponse'}}}}
  224. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  225. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  226. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  227. '413': {$ref: '../components/responses.yaml#/PayloadTooLarge'}
  228. '500': {$ref: '../components/responses.yaml#/InternalError'}
  229. AttachmentBatchImport:
  230. post:
  231. operationId: batchImportAttachments
  232. summary: 批量导入共享附件
  233. requestBody:
  234. required: true
  235. content:
  236. multipart/form-data:
  237. schema:
  238. $ref: '../components/schemas.yaml#/BatchImportMultipart'
  239. responses:
  240. '200': {description: 逐文件导入结果, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/BatchImportResponse'}}}}
  241. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  242. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  243. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  244. '413': {$ref: '../components/responses.yaml#/PayloadTooLarge'}
  245. '500': {$ref: '../components/responses.yaml#/InternalError'}
  246. DocumentPreview:
  247. parameters:
  248. - {name: id, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  249. get:
  250. operationId: previewDocument
  251. summary: 预览PDF文档
  252. responses:
  253. '200':
  254. description: PDF文件流
  255. headers:
  256. X-Request-Id: {schema: {type: string, format: uuid}}
  257. content:
  258. application/pdf: {schema: {type: string, format: binary}}
  259. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  260. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  261. '404': {$ref: '../components/responses.yaml#/NotFound'}
  262. '415': {$ref: '../components/responses.yaml#/UnsupportedMedia'}
  263. '500': {$ref: '../components/responses.yaml#/InternalError'}
  264. DocumentDownload:
  265. parameters:
  266. - {name: id, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  267. get:
  268. operationId: downloadDocument
  269. summary: 下载原始文档
  270. responses:
  271. '200':
  272. description: 原始文件流
  273. headers:
  274. X-Request-Id: {schema: {type: string, format: uuid}}
  275. content:
  276. application/octet-stream: {schema: {type: string, format: binary}}
  277. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  278. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  279. '404': {$ref: '../components/responses.yaml#/NotFound'}
  280. '500': {$ref: '../components/responses.yaml#/InternalError'}
  281. AttachmentMainPlans:
  282. parameters:
  283. - {name: id, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  284. get:
  285. operationId: listAttachmentMainPlans
  286. summary: 查询共享附件挂载的可见主案
  287. responses:
  288. '200': {description: 主案简要集合, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/MainPlanBriefCollectionResponse'}}}}
  289. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  290. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  291. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  292. '404': {$ref: '../components/responses.yaml#/NotFound'}
  293. '500': {$ref: '../components/responses.yaml#/InternalError'}
  294. MainPlanAttachments:
  295. parameters:
  296. - {name: id, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  297. get:
  298. operationId: listMainPlanAttachments
  299. summary: 查询主案已挂载共享附件
  300. parameters:
  301. - {name: keyword, in: query, schema: {type: string}}
  302. - {name: attachmentType, in: query, schema: {$ref: '../components/schemas.yaml#/AttachmentType'}}
  303. - $ref: '../components/parameters.yaml#/UpdatedFrom'
  304. - $ref: '../components/parameters.yaml#/UpdatedTo'
  305. - {name: page, in: query, schema: {type: integer, minimum: 1, default: 1}}
  306. - {name: pageSize, in: query, schema: {type: integer, minimum: 1, maximum: 100, default: 20}}
  307. responses:
  308. '200': {description: 挂载附件分页, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/AttachmentBindingPageResponse'}}}}
  309. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  310. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  311. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  312. '404': {$ref: '../components/responses.yaml#/NotFound'}
  313. '500': {$ref: '../components/responses.yaml#/InternalError'}
  314. MainPlanAttachmentBinding:
  315. parameters:
  316. - {name: id, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  317. post:
  318. operationId: bindMainPlanAttachments
  319. summary: 批量挂载共享附件到主案
  320. requestBody:
  321. required: true
  322. content:
  323. application/json:
  324. schema: {$ref: '../components/schemas.yaml#/BindAttachmentsRequest'}
  325. responses:
  326. '200': {description: 挂载结果, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/BindAttachmentsResponse'}}}}
  327. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  328. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  329. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  330. '404': {$ref: '../components/responses.yaml#/NotFound'}
  331. '409': {$ref: '../components/responses.yaml#/Conflict'}
  332. '500': {$ref: '../components/responses.yaml#/InternalError'}
  333. MainPlanAttachment:
  334. parameters:
  335. - {name: id, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  336. - {name: attachmentId, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  337. delete:
  338. operationId: unbindMainPlanAttachment
  339. summary: 解除主案和共享附件的挂载
  340. parameters:
  341. - {name: mainPlanRowVersion, in: query, required: true, schema: {type: integer, minimum: 0}}
  342. responses:
  343. '200': {description: 解除挂载结果, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/UnbindAttachmentResponse'}}}}
  344. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  345. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  346. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  347. '404': {$ref: '../components/responses.yaml#/NotFound'}
  348. '409': {$ref: '../components/responses.yaml#/Conflict'}
  349. '500': {$ref: '../components/responses.yaml#/InternalError'}
  350. DocumentPermissions:
  351. parameters:
  352. - {name: id, in: path, required: true, schema: {$ref: '../components/schemas.yaml#/StringId'}}
  353. get:
  354. operationId: getDocumentPermissions
  355. summary: 查询主案权限或子方案继承权限
  356. responses:
  357. '200': {description: 权限详情, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/PermissionDetailResponse'}}}}
  358. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  359. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  360. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  361. '404': {$ref: '../components/responses.yaml#/NotFound'}
  362. '409': {$ref: '../components/responses.yaml#/Conflict'}
  363. '500': {$ref: '../components/responses.yaml#/InternalError'}
  364. put:
  365. operationId: saveDocumentPermissions
  366. summary: 全量保存主案权限
  367. requestBody:
  368. required: true
  369. content:
  370. application/json:
  371. schema: {$ref: '../components/schemas.yaml#/SavePermissionsRequest'}
  372. responses:
  373. '200': {description: 保存后的权限详情, content: {application/json: {schema: {$ref: '../components/schemas.yaml#/PermissionDetailResponse'}}}}
  374. '400': {$ref: '../components/responses.yaml#/InvalidArgument'}
  375. '401': {$ref: '../components/responses.yaml#/AuthenticationError'}
  376. '403': {$ref: '../components/responses.yaml#/Forbidden'}
  377. '404': {$ref: '../components/responses.yaml#/NotFound'}
  378. '409': {$ref: '../components/responses.yaml#/Conflict'}
  379. '500': {$ref: '../components/responses.yaml#/InternalError'}