openapi.yaml 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840
  1. openapi: 3.1.0
  2. info:
  3. title: 组织人事管理平台 API
  4. version: 1.0.0
  5. servers:
  6. - url: http://localhost:8080
  7. security:
  8. - bearerAuth: []
  9. paths:
  10. /api/v1/auth/login:
  11. post:
  12. summary: 本地账号登录
  13. security: []
  14. requestBody:
  15. required: true
  16. content:
  17. application/json:
  18. schema:
  19. $ref: "#/components/schemas/LoginRequest"
  20. responses:
  21. "200":
  22. description: 登录成功
  23. content:
  24. application/json:
  25. schema:
  26. $ref: "#/components/schemas/LoginResponse"
  27. /api/v1/auth/refresh:
  28. post:
  29. summary: 刷新令牌
  30. security: []
  31. requestBody:
  32. required: true
  33. content:
  34. application/json:
  35. schema:
  36. type: object
  37. required: [refreshToken]
  38. properties:
  39. refreshToken:
  40. type: string
  41. deviceName:
  42. type: string
  43. responses:
  44. "200":
  45. description: 刷新成功
  46. /api/v1/auth/logout:
  47. post:
  48. summary: 注销会话
  49. responses:
  50. "200":
  51. description: 注销成功
  52. /api/v1/auth/me:
  53. get:
  54. summary: 当前用户
  55. responses:
  56. "200":
  57. description: 当前用户信息
  58. /api/v1/departments:
  59. get:
  60. summary: 部门列表
  61. responses:
  62. "200":
  63. description: 分页部门
  64. post:
  65. summary: 新增部门
  66. requestBody:
  67. required: true
  68. content:
  69. application/json:
  70. schema:
  71. $ref: "#/components/schemas/DepartmentRequest"
  72. responses:
  73. "200":
  74. description: 创建成功
  75. /api/v1/departments/{id}:
  76. put:
  77. summary: 更新部门
  78. parameters:
  79. - $ref: "#/components/parameters/Id"
  80. responses:
  81. "200":
  82. description: 更新成功
  83. delete:
  84. summary: 停用部门
  85. parameters:
  86. - $ref: "#/components/parameters/Id"
  87. responses:
  88. "200":
  89. description: 停用成功
  90. /api/v1/positions:
  91. get:
  92. summary: 岗位列表
  93. responses:
  94. "200":
  95. description: 分页岗位
  96. post:
  97. summary: 新增岗位
  98. responses:
  99. "200":
  100. description: 创建成功
  101. /api/v1/positions/{id}:
  102. put:
  103. summary: 更新岗位
  104. parameters:
  105. - $ref: "#/components/parameters/Id"
  106. responses:
  107. "200":
  108. description: 更新成功
  109. delete:
  110. summary: 停用岗位
  111. parameters:
  112. - $ref: "#/components/parameters/Id"
  113. responses:
  114. "200":
  115. description: 停用成功
  116. /api/v1/employees:
  117. get:
  118. summary: 员工列表
  119. responses:
  120. "200":
  121. description: 分页员工
  122. post:
  123. summary: 新增员工
  124. requestBody:
  125. required: true
  126. content:
  127. application/json:
  128. schema:
  129. $ref: "#/components/schemas/EmployeeRequest"
  130. responses:
  131. "200":
  132. description: 创建成功
  133. /api/v1/employees/{id}:
  134. get:
  135. summary: 员工详情
  136. parameters:
  137. - $ref: "#/components/parameters/Id"
  138. responses:
  139. "200":
  140. description: 员工详情
  141. put:
  142. summary: 更新员工
  143. parameters:
  144. - $ref: "#/components/parameters/Id"
  145. responses:
  146. "200":
  147. description: 更新成功
  148. delete:
  149. summary: 归档员工
  150. parameters:
  151. - $ref: "#/components/parameters/Id"
  152. responses:
  153. "200":
  154. description: 归档成功
  155. /api/v1/employees/{id}/transfer:
  156. post:
  157. summary: 员工转岗转部门
  158. parameters:
  159. - $ref: "#/components/parameters/Id"
  160. responses:
  161. "200":
  162. description: 转岗完成
  163. /api/v1/job-requisitions:
  164. get:
  165. summary: 招聘需求列表
  166. responses:
  167. "200":
  168. description: 列表
  169. post:
  170. summary: 新增招聘需求
  171. responses:
  172. "200":
  173. description: 创建成功
  174. /api/v1/candidates:
  175. get:
  176. summary: 候选人列表
  177. responses:
  178. "200":
  179. description: 列表
  180. post:
  181. summary: 新增候选人
  182. responses:
  183. "200":
  184. description: 创建成功
  185. /api/v1/candidates/{id}/schedule-interview:
  186. post:
  187. summary: 安排面试
  188. parameters:
  189. - $ref: "#/components/parameters/Id"
  190. responses:
  191. "200":
  192. description: 面试已安排
  193. /api/v1/candidates/{id}/interviews:
  194. get:
  195. summary: 候选人面试列表
  196. parameters:
  197. - $ref: "#/components/parameters/Id"
  198. responses:
  199. "200":
  200. description: 面试列表
  201. /api/v1/interviews/{id}/result:
  202. post:
  203. summary: 登记面试结果
  204. parameters:
  205. - $ref: "#/components/parameters/Id"
  206. requestBody:
  207. required: true
  208. content:
  209. application/json:
  210. schema:
  211. $ref: "#/components/schemas/InterviewResultRequest"
  212. responses:
  213. "200":
  214. description: 面试结果已登记
  215. /api/v1/candidates/{id}/issue-offer:
  216. post:
  217. summary: 发放 Offer
  218. parameters:
  219. - $ref: "#/components/parameters/Id"
  220. responses:
  221. "200":
  222. description: 已发放
  223. /api/v1/candidates/{id}/offer-decision:
  224. post:
  225. summary: 候选人 Offer 决策
  226. parameters:
  227. - $ref: "#/components/parameters/Id"
  228. requestBody:
  229. required: true
  230. content:
  231. application/json:
  232. schema:
  233. $ref: "#/components/schemas/OfferDecisionRequest"
  234. responses:
  235. "200":
  236. description: Offer 决策已处理
  237. /api/v1/candidates/{id}/convert-to-onboarding:
  238. post:
  239. summary: 转入入职流程
  240. parameters:
  241. - $ref: "#/components/parameters/Id"
  242. responses:
  243. "200":
  244. description: 已转入职
  245. /api/v1/onboarding-cases:
  246. get:
  247. summary: 入职单列表
  248. responses:
  249. "200":
  250. description: 列表
  251. post:
  252. summary: 新增入职单
  253. responses:
  254. "200":
  255. description: 创建成功
  256. /api/v1/onboarding-cases/{id}/complete:
  257. post:
  258. summary: 完成入职
  259. parameters:
  260. - $ref: "#/components/parameters/Id"
  261. responses:
  262. "200":
  263. description: 入职完成
  264. /api/v1/onboarding-cases/{id}/no-show:
  265. post:
  266. summary: 标记入职未到岗
  267. parameters:
  268. - $ref: "#/components/parameters/Id"
  269. responses:
  270. "200":
  271. description: 已标记未到岗
  272. /api/v1/offboarding-cases:
  273. get:
  274. summary: 离职单列表
  275. responses:
  276. "200":
  277. description: 列表
  278. post:
  279. summary: 新增离职单
  280. responses:
  281. "200":
  282. description: 创建成功
  283. /api/v1/offboarding-cases/{id}/close:
  284. post:
  285. summary: 关闭离职流程
  286. parameters:
  287. - $ref: "#/components/parameters/Id"
  288. responses:
  289. "200":
  290. description: 离职关闭
  291. /api/v1/attendance/records:
  292. get:
  293. summary: 考勤记录列表
  294. responses:
  295. "200":
  296. description: 列表
  297. post:
  298. summary: 新增考勤记录
  299. responses:
  300. "200":
  301. description: 创建成功
  302. /api/v1/attendance/import-jobs:
  303. post:
  304. summary: 考勤 CSV 导入
  305. requestBody:
  306. content:
  307. multipart/form-data:
  308. schema:
  309. type: object
  310. properties:
  311. file:
  312. type: string
  313. format: binary
  314. responses:
  315. "200":
  316. description: 导入任务
  317. /api/v1/leave-requests:
  318. get:
  319. summary: 请假列表
  320. responses:
  321. "200":
  322. description: 列表
  323. post:
  324. summary: 新增请假
  325. responses:
  326. "200":
  327. description: 创建成功
  328. /api/v1/leave-requests/{id}/reject:
  329. post:
  330. summary: 拒绝请假申请
  331. parameters:
  332. - $ref: "#/components/parameters/Id"
  333. requestBody:
  334. required: false
  335. content:
  336. application/json:
  337. schema:
  338. $ref: "#/components/schemas/DecisionRequest"
  339. responses:
  340. "200":
  341. description: 请假已拒绝
  342. /api/v1/payroll/periods:
  343. get:
  344. summary: 薪酬期间列表
  345. responses:
  346. "200":
  347. description: 列表
  348. post:
  349. summary: 新增薪酬期间
  350. responses:
  351. "200":
  352. description: 创建成功
  353. /api/v1/payroll/periods/{periodKey}/runs:
  354. post:
  355. summary: 发起薪酬核算
  356. parameters:
  357. - name: periodKey
  358. in: path
  359. required: true
  360. schema:
  361. type: string
  362. responses:
  363. "200":
  364. description: 核算批次
  365. /api/v1/payroll/items:
  366. get:
  367. summary: 薪资项目列表
  368. responses:
  369. "200":
  370. description: 薪资项目
  371. post:
  372. summary: 新增薪资项目
  373. responses:
  374. "200":
  375. description: 创建成功
  376. /api/v1/payroll/items/{id}:
  377. get:
  378. summary: 薪资项目详情
  379. parameters:
  380. - $ref: "#/components/parameters/Id"
  381. responses:
  382. "200":
  383. description: 详情
  384. put:
  385. summary: 更新薪资项目
  386. parameters:
  387. - $ref: "#/components/parameters/Id"
  388. responses:
  389. "200":
  390. description: 更新成功
  391. delete:
  392. summary: 删除薪资项目
  393. parameters:
  394. - $ref: "#/components/parameters/Id"
  395. responses:
  396. "200":
  397. description: 删除成功
  398. /api/v1/payroll/variables:
  399. get:
  400. summary: 薪酬变量列表
  401. parameters:
  402. - name: scopeType
  403. in: query
  404. required: false
  405. schema:
  406. type: string
  407. enum: [DEPARTMENT, EMPLOYEE]
  408. - name: departmentId
  409. in: query
  410. required: false
  411. schema:
  412. type: integer
  413. format: int64
  414. - name: employeeId
  415. in: query
  416. required: false
  417. schema:
  418. type: integer
  419. format: int64
  420. responses:
  421. "200":
  422. description: 薪酬变量
  423. put:
  424. summary: 替换部门或员工薪酬变量
  425. requestBody:
  426. required: true
  427. content:
  428. application/json:
  429. schema:
  430. $ref: "#/components/schemas/PayrollVariableRequest"
  431. responses:
  432. "200":
  433. description: 保存后的变量
  434. /api/v1/payroll/variables/effective:
  435. get:
  436. summary: 查询员工生效薪酬变量
  437. parameters:
  438. - name: employeeId
  439. in: query
  440. required: true
  441. schema:
  442. type: integer
  443. format: int64
  444. responses:
  445. "200":
  446. description: 员工、部门及上级部门合并后的变量来源
  447. /api/v1/payroll/runs/{id}/review:
  448. post:
  449. summary: 复核薪酬批次
  450. parameters:
  451. - $ref: "#/components/parameters/Id"
  452. responses:
  453. "200":
  454. description: 已复核
  455. /api/v1/payroll/runs/{id}:
  456. get:
  457. summary: 薪酬批次详情
  458. parameters:
  459. - $ref: "#/components/parameters/Id"
  460. responses:
  461. "200":
  462. description: 批次详情与汇总
  463. /api/v1/payroll/runs/{id}/approve:
  464. post:
  465. summary: 审批薪酬批次
  466. parameters:
  467. - $ref: "#/components/parameters/Id"
  468. responses:
  469. "200":
  470. description: 已审批
  471. /api/v1/payroll/runs/{id}/lock:
  472. post:
  473. summary: 锁定薪酬批次
  474. parameters:
  475. - $ref: "#/components/parameters/Id"
  476. responses:
  477. "200":
  478. description: 已锁定
  479. /api/v1/payslips/{id}/publish:
  480. post:
  481. summary: 发布工资单
  482. parameters:
  483. - $ref: "#/components/parameters/Id"
  484. responses:
  485. "200":
  486. description: 已发布
  487. /api/v1/payslips/publish-batch:
  488. post:
  489. summary: 一键发布工资单
  490. requestBody:
  491. required: false
  492. content:
  493. application/json:
  494. schema:
  495. $ref: "#/components/schemas/PayslipBatchPublishRequest"
  496. responses:
  497. "200":
  498. description: 发布数量
  499. /api/v1/payslips/{id}:
  500. get:
  501. summary: 工资单详情
  502. parameters:
  503. - $ref: "#/components/parameters/Id"
  504. responses:
  505. "200":
  506. description: 工资单明细
  507. /api/v1/appraisal-cycles:
  508. get:
  509. summary: 绩效周期列表
  510. responses:
  511. "200":
  512. description: 列表
  513. post:
  514. summary: 新增绩效周期
  515. responses:
  516. "200":
  517. description: 创建成功
  518. /api/v1/appraisal-records:
  519. get:
  520. summary: 绩效记录列表
  521. responses:
  522. "200":
  523. description: 列表
  524. post:
  525. summary: 新增绩效记录
  526. responses:
  527. "200":
  528. description: 创建成功
  529. /api/v1/reports/headcount/export:
  530. post:
  531. summary: 人员结构导出
  532. responses:
  533. "200":
  534. description: 导出任务
  535. /api/v1/reports/payroll-summary/export:
  536. post:
  537. summary: 薪酬汇总导出
  538. responses:
  539. "200":
  540. description: 导出任务
  541. /api/v1/export-jobs/{id}:
  542. get:
  543. summary: 导出任务详情
  544. parameters:
  545. - $ref: "#/components/parameters/Id"
  546. responses:
  547. "200":
  548. description: 任务详情
  549. /api/v1/export-jobs/{id}/download:
  550. get:
  551. summary: 下载导出文件
  552. parameters:
  553. - $ref: "#/components/parameters/Id"
  554. responses:
  555. "200":
  556. description: 导出文件
  557. content:
  558. text/csv:
  559. schema:
  560. type: string
  561. format: binary
  562. /api/v1/import-jobs:
  563. get:
  564. summary: 导入任务列表
  565. responses:
  566. "200":
  567. description: 导入任务
  568. /api/v1/import-jobs/{id}:
  569. get:
  570. summary: 导入任务详情
  571. parameters:
  572. - $ref: "#/components/parameters/Id"
  573. responses:
  574. "200":
  575. description: 任务详情
  576. /api/v1/audit-logs:
  577. get:
  578. summary: 审计日志列表
  579. responses:
  580. "200":
  581. description: 审计日志
  582. /api/v1/integration/webhooks/test-receiver:
  583. post:
  584. summary: Webhook 测试接收
  585. parameters:
  586. - name: X-Signature
  587. in: header
  588. required: true
  589. schema:
  590. type: string
  591. - name: Idempotency-Key
  592. in: header
  593. required: false
  594. schema:
  595. type: string
  596. responses:
  597. "200":
  598. description: 接收成功
  599. /api/v1/integration/events:
  600. get:
  601. summary: 集成事件列表
  602. responses:
  603. "200":
  604. description: 集成事件
  605. /api/v1/integration/events/{id}/retry:
  606. post:
  607. summary: 重试集成事件
  608. parameters:
  609. - $ref: "#/components/parameters/Id"
  610. responses:
  611. "200":
  612. description: 已提交重试
  613. /api/v1/security/roles:
  614. get:
  615. summary: 角色列表
  616. responses:
  617. "200":
  618. description: 角色
  619. post:
  620. summary: 新增角色
  621. responses:
  622. "200":
  623. description: 创建成功
  624. /api/v1/security/permissions:
  625. get:
  626. summary: 权限列表
  627. responses:
  628. "200":
  629. description: 权限
  630. post:
  631. summary: 新增权限
  632. responses:
  633. "200":
  634. description: 创建成功
  635. /api/v1/security/permissions/{id}:
  636. put:
  637. summary: 编辑权限
  638. parameters:
  639. - $ref: "#/components/parameters/Id"
  640. responses:
  641. "200":
  642. description: 更新成功
  643. delete:
  644. summary: 删除权限
  645. parameters:
  646. - $ref: "#/components/parameters/Id"
  647. responses:
  648. "200":
  649. description: 删除成功
  650. /api/v1/security/roles/{id}:
  651. delete:
  652. summary: 删除角色
  653. parameters:
  654. - $ref: "#/components/parameters/Id"
  655. responses:
  656. "200":
  657. description: 删除成功
  658. /api/v1/security/roles/{id}/permissions:
  659. get:
  660. summary: 查询角色权限
  661. parameters:
  662. - $ref: "#/components/parameters/Id"
  663. responses:
  664. "200":
  665. description: 角色权限
  666. put:
  667. summary: 替换角色权限
  668. parameters:
  669. - $ref: "#/components/parameters/Id"
  670. responses:
  671. "200":
  672. description: 更新成功
  673. /api/v1/tasks/dead-letter:
  674. get:
  675. summary: 失败任务摘要
  676. responses:
  677. "200":
  678. description: 失败任务统计
  679. /api/v1/system/about:
  680. get:
  681. summary: 系统信息
  682. responses:
  683. "200":
  684. description: 系统版本信息
  685. /actuator/health:
  686. get:
  687. summary: 健康检查
  688. security: []
  689. responses:
  690. "200":
  691. description: healthy
  692. components:
  693. securitySchemes:
  694. bearerAuth:
  695. type: http
  696. scheme: bearer
  697. bearerFormat: JWT
  698. parameters:
  699. Id:
  700. name: id
  701. in: path
  702. required: true
  703. schema:
  704. type: integer
  705. format: int64
  706. schemas:
  707. LoginRequest:
  708. type: object
  709. required: [username, password]
  710. properties:
  711. username:
  712. type: string
  713. example: sys_admin
  714. password:
  715. type: string
  716. format: password
  717. example: ChangeMe123!
  718. deviceName:
  719. type: string
  720. example: web
  721. LoginResponse:
  722. type: object
  723. properties:
  724. code:
  725. type: string
  726. example: OK
  727. message:
  728. type: string
  729. example: success
  730. correlationId:
  731. type: string
  732. data:
  733. type: object
  734. properties:
  735. accessToken:
  736. type: string
  737. refreshToken:
  738. type: string
  739. expiresIn:
  740. type: integer
  741. user:
  742. type: object
  743. DepartmentRequest:
  744. type: object
  745. required: [deptCode, deptName]
  746. properties:
  747. parentId:
  748. type: integer
  749. format: int64
  750. deptCode:
  751. type: string
  752. deptName:
  753. type: string
  754. status:
  755. type: string
  756. sortNo:
  757. type: integer
  758. EmployeeRequest:
  759. type: object
  760. required: [employeeNo, departmentId, positionId, displayName]
  761. properties:
  762. employeeNo:
  763. type: string
  764. departmentId:
  765. type: integer
  766. format: int64
  767. positionId:
  768. type: integer
  769. format: int64
  770. displayName:
  771. type: string
  772. employmentStatus:
  773. type: string
  774. mobile:
  775. type: string
  776. email:
  777. type: string
  778. InterviewResultRequest:
  779. type: object
  780. required: [result]
  781. properties:
  782. result:
  783. type: string
  784. enum: [PASSED, FAILED, NO_SHOW]
  785. feedback:
  786. type: string
  787. score:
  788. type: number
  789. OfferDecisionRequest:
  790. type: object
  791. required: [decision]
  792. properties:
  793. decision:
  794. type: string
  795. enum: [ACCEPTED, REJECTED]
  796. reason:
  797. type: string
  798. DecisionRequest:
  799. type: object
  800. properties:
  801. reason:
  802. type: string
  803. PayrollVariableRequest:
  804. type: object
  805. required: [scopeType, variables]
  806. properties:
  807. scopeType:
  808. type: string
  809. enum: [DEPARTMENT, EMPLOYEE]
  810. departmentId:
  811. type: integer
  812. format: int64
  813. employeeId:
  814. type: integer
  815. format: int64
  816. variables:
  817. type: array
  818. minItems: 1
  819. items:
  820. type: object
  821. required: [variableKey, variableName, variableValue]
  822. properties:
  823. variableKey:
  824. type: string
  825. example: baseSalary
  826. variableName:
  827. type: string
  828. example: 基本工资
  829. variableValue:
  830. type: number
  831. example: 12000
  832. PayslipBatchPublishRequest:
  833. type: object
  834. properties:
  835. periodKey:
  836. type: string
  837. example: "2026-05"
  838. runId:
  839. type: integer
  840. format: int64