| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package com.dms.api.v1;
- import com.dms.common.ApiResponse;
- import com.dms.common.Payloads;
- import com.dms.security.AuthRequired;
- import com.dms.service.IpEntryService;
- import com.dms.service.OrganizationService;
- import jakarta.servlet.http.HttpServletRequest;
- import org.springframework.http.HttpStatus;
- import org.springframework.http.ResponseEntity;
- import org.springframework.web.bind.annotation.DeleteMapping;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PathVariable;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.PutMapping;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
- /** 组织接口,对齐 backend/dms/api/v1/organizations.py。 */
- @RestController
- @RequestMapping("/api/v1/organizations")
- public class OrganizationsController {
- private final OrganizationService organizationService;
- private final IpEntryService ipEntryService;
- private final com.dms.config.DmsProperties properties;
- public OrganizationsController(OrganizationService organizationService,
- IpEntryService ipEntryService,
- com.dms.config.DmsProperties properties) {
- this.organizationService = organizationService;
- this.ipEntryService = ipEntryService;
- this.properties = properties;
- }
- /**
- * 高级检索·提供单位选项(契约1.55):机构树第 N 级启用机构清单,
- * N 由 DMS_SEARCH_ORG_FILTER_LEVEL 配置(缺省 2,二级机构);
- * 任意登录用户可调。
- */
- @AuthRequired
- @GetMapping("/filter-options")
- public ApiResponse<Object> filterOptions() {
- return ApiResponse.ok(organizationService.filterOptions(
- properties.searchOrgFilterLevel()));
- }
- /**
- * 机构树(契约1.45):只读接口不再要求ADMIN类别,任意登录用户可调——
- * 普通用户(USER)返回本人部门为根的子树(无部门空树),ADMIN类别
- * 维持既有管理范围裁剪。
- */
- @AuthRequired
- @GetMapping("/tree")
- public ApiResponse<Object> tree(@RequestParam(required = false) String keyword,
- @RequestParam(required = false) String status) {
- return ApiResponse.ok(organizationService.organizationTree(keyword, status));
- }
- @AuthRequired(requireAdmin = true)
- @PostMapping
- public ResponseEntity<ApiResponse<Object>> create(@RequestBody Object body,
- HttpServletRequest request) {
- return ResponseEntity.status(HttpStatus.CREATED)
- .body(ApiResponse.ok(organizationService.create(body, request)));
- }
- /** 对齐 reorder_organizations_route(契约1.27):机构树同级拖动重排。 */
- @AuthRequired(requireAdmin = true)
- @PutMapping("/reorder")
- public ApiResponse<Object> reorder(@RequestBody Object body, HttpServletRequest request) {
- return ApiResponse.ok(organizationService.reorder(body, request));
- }
- @AuthRequired(requireAdmin = true)
- @PutMapping("/{id}")
- public ApiResponse<Object> update(@PathVariable String id, @RequestBody Object body,
- HttpServletRequest request) {
- return ApiResponse.ok(organizationService.update(
- Payloads.pathId(id), body, request));
- }
- @AuthRequired(requireAdmin = true)
- @DeleteMapping("/{id}")
- public ApiResponse<Object> delete(@PathVariable String id,
- @RequestParam(required = false) String rowVersion,
- HttpServletRequest request) {
- return ApiResponse.ok(organizationService.delete(
- Payloads.pathId(id), Payloads.deleteRowVersion(rowVersion), request));
- }
- @AuthRequired(requireAdmin = true)
- @GetMapping("/{id}/ip-assignments")
- public ApiResponse<Object> ipAssignments(@PathVariable String id) {
- return ApiResponse.ok(ipEntryService.listOrgIpAssignments(Payloads.pathId(id)));
- }
- @AuthRequired(requireAdmin = true)
- @PutMapping("/{id}/ip-assignments")
- public ApiResponse<Object> updateIpAssignments(@PathVariable String id,
- @RequestBody Object body,
- HttpServletRequest request) {
- return ApiResponse.ok(ipEntryService.updateOrgIpAssignments(
- Payloads.pathId(id), body, request));
- }
- }
|