package com.sinata.appointment.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.dev33.satoken.annotation.SaMode; import com.sinata.appointment.common.Result; import com.sinata.appointment.common.ResultUtil; import com.sinata.appointment.dto.StaffGroupAppendMembersRequest; import com.sinata.appointment.dto.StaffGroupCreateRequest; import com.sinata.appointment.dto.StaffGroupDetailVo; import com.sinata.appointment.dto.StaffGroupListVo; import com.sinata.appointment.dto.StaffGroupUpdateRequest; import com.sinata.appointment.service.StaffGroupManageApplicationService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; import java.util.Map; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; 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.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @Tag(name = "人员分组") @RestController @RequestMapping("/api/sys/staff-groups") @RequiredArgsConstructor @Validated public class StaffGroupManageController { private final StaffGroupManageApplicationService staffGroupManageApplicationService; @Operation(summary = "分页列表") @GetMapping @SaCheckPermission( value = {"sys:staff-groups:page", "sys:staff:page", "sys:local-units:page"}, mode = SaMode.OR) public Result> page( @RequestParam(defaultValue = "1") long page, @RequestParam(defaultValue = "10") long size, @RequestParam(required = false) String groupName, @RequestParam(required = false) String leaderMobile) { return ResultUtil.page( staffGroupManageApplicationService.page(page, size, groupName, leaderMobile)); } @Operation(summary = "详情(须 uuid)") @GetMapping("/{id}") @SaCheckPermission("sys:staff-groups:detail") public Result detail( @PathVariable Long id, @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) { return ResultUtil.data(staffGroupManageApplicationService.detail(id, uuid)); } @Operation(summary = "新增分组") @PostMapping @SaCheckPermission("sys:staff-groups:create") public Result> create(@Valid @RequestBody StaffGroupCreateRequest request) { return ResultUtil.data(staffGroupManageApplicationService.create(request)); } @Operation(summary = "编辑分组") @PutMapping("/{id}") @SaCheckPermission("sys:staff-groups:update") public Result update(@PathVariable Long id, @Valid @RequestBody StaffGroupUpdateRequest request) { staffGroupManageApplicationService.update(id, request); return ResultUtil.success(); } @Operation(summary = "追加成员(不替换原有关联)") @PostMapping("/{id}/members") @SaCheckPermission("sys:staff-groups:members") public Result appendMembers( @PathVariable Long id, @Valid @RequestBody StaffGroupAppendMembersRequest request) { staffGroupManageApplicationService.appendMembers(id, request); return ResultUtil.success(); } @Operation(summary = "移除成员(不能移除负责人)") @DeleteMapping("/{id}/members/{mpUserId}") @SaCheckPermission("sys:staff-groups:members") public Result removeMember( @PathVariable Long id, @PathVariable Long mpUserId, @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) { staffGroupManageApplicationService.removeMember(id, uuid, mpUserId); return ResultUtil.success(); } @Operation(summary = "删除分组(逻辑删除)") @DeleteMapping("/{id}") @SaCheckPermission("sys:staff-groups:delete") public Result delete( @PathVariable Long id, @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) { staffGroupManageApplicationService.delete(id, uuid); return ResultUtil.success(); } }