OrganizationsController.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package com.dms.api.v1;
  2. import com.dms.common.ApiResponse;
  3. import com.dms.common.Payloads;
  4. import com.dms.security.AuthRequired;
  5. import com.dms.service.IpEntryService;
  6. import com.dms.service.OrganizationService;
  7. import jakarta.servlet.http.HttpServletRequest;
  8. import org.springframework.http.HttpStatus;
  9. import org.springframework.http.ResponseEntity;
  10. import org.springframework.web.bind.annotation.DeleteMapping;
  11. import org.springframework.web.bind.annotation.GetMapping;
  12. import org.springframework.web.bind.annotation.PathVariable;
  13. import org.springframework.web.bind.annotation.PostMapping;
  14. import org.springframework.web.bind.annotation.PutMapping;
  15. import org.springframework.web.bind.annotation.RequestBody;
  16. import org.springframework.web.bind.annotation.RequestMapping;
  17. import org.springframework.web.bind.annotation.RequestParam;
  18. import org.springframework.web.bind.annotation.RestController;
  19. /** 组织接口,对齐 backend/dms/api/v1/organizations.py。 */
  20. @RestController
  21. @RequestMapping("/api/v1/organizations")
  22. public class OrganizationsController {
  23. private final OrganizationService organizationService;
  24. private final IpEntryService ipEntryService;
  25. private final com.dms.config.DmsProperties properties;
  26. public OrganizationsController(OrganizationService organizationService,
  27. IpEntryService ipEntryService,
  28. com.dms.config.DmsProperties properties) {
  29. this.organizationService = organizationService;
  30. this.ipEntryService = ipEntryService;
  31. this.properties = properties;
  32. }
  33. /**
  34. * 高级检索·提供单位选项(契约1.55):机构树第 N 级启用机构清单,
  35. * N 由 DMS_SEARCH_ORG_FILTER_LEVEL 配置(缺省 2,二级机构);
  36. * 任意登录用户可调。
  37. */
  38. @AuthRequired
  39. @GetMapping("/filter-options")
  40. public ApiResponse<Object> filterOptions() {
  41. return ApiResponse.ok(organizationService.filterOptions(
  42. properties.searchOrgFilterLevel()));
  43. }
  44. /**
  45. * 机构树(契约1.45):只读接口不再要求ADMIN类别,任意登录用户可调——
  46. * 普通用户(USER)返回本人部门为根的子树(无部门空树),ADMIN类别
  47. * 维持既有管理范围裁剪。
  48. */
  49. @AuthRequired
  50. @GetMapping("/tree")
  51. public ApiResponse<Object> tree(@RequestParam(required = false) String keyword,
  52. @RequestParam(required = false) String status) {
  53. return ApiResponse.ok(organizationService.organizationTree(keyword, status));
  54. }
  55. @AuthRequired(requireAdmin = true)
  56. @PostMapping
  57. public ResponseEntity<ApiResponse<Object>> create(@RequestBody Object body,
  58. HttpServletRequest request) {
  59. return ResponseEntity.status(HttpStatus.CREATED)
  60. .body(ApiResponse.ok(organizationService.create(body, request)));
  61. }
  62. /** 对齐 reorder_organizations_route(契约1.27):机构树同级拖动重排。 */
  63. @AuthRequired(requireAdmin = true)
  64. @PutMapping("/reorder")
  65. public ApiResponse<Object> reorder(@RequestBody Object body, HttpServletRequest request) {
  66. return ApiResponse.ok(organizationService.reorder(body, request));
  67. }
  68. @AuthRequired(requireAdmin = true)
  69. @PutMapping("/{id}")
  70. public ApiResponse<Object> update(@PathVariable String id, @RequestBody Object body,
  71. HttpServletRequest request) {
  72. return ApiResponse.ok(organizationService.update(
  73. Payloads.pathId(id), body, request));
  74. }
  75. @AuthRequired(requireAdmin = true)
  76. @DeleteMapping("/{id}")
  77. public ApiResponse<Object> delete(@PathVariable String id,
  78. @RequestParam(required = false) String rowVersion,
  79. HttpServletRequest request) {
  80. return ApiResponse.ok(organizationService.delete(
  81. Payloads.pathId(id), Payloads.deleteRowVersion(rowVersion), request));
  82. }
  83. @AuthRequired(requireAdmin = true)
  84. @GetMapping("/{id}/ip-assignments")
  85. public ApiResponse<Object> ipAssignments(@PathVariable String id) {
  86. return ApiResponse.ok(ipEntryService.listOrgIpAssignments(Payloads.pathId(id)));
  87. }
  88. @AuthRequired(requireAdmin = true)
  89. @PutMapping("/{id}/ip-assignments")
  90. public ApiResponse<Object> updateIpAssignments(@PathVariable String id,
  91. @RequestBody Object body,
  92. HttpServletRequest request) {
  93. return ApiResponse.ok(ipEntryService.updateOrgIpAssignments(
  94. Payloads.pathId(id), body, request));
  95. }
  96. }