longz
2026-07-13 5882ba8863d77fdcc168b176c3ffb30e8a20556a
backend/src/main/java/com/sinata/appointment/controller/ConfigController.java
@@ -12,6 +12,11 @@
import com.sinata.appointment.dto.ContentSettingsSaveRequest;
import com.sinata.appointment.dto.ContentSettingsVo;
import com.sinata.appointment.dto.FieldConfigPatchRequest;
import com.sinata.appointment.dto.SensitiveWordCreateRequest;
import com.sinata.appointment.dto.SensitiveWordEnabledPatchRequest;
import com.sinata.appointment.dto.SensitiveWordImportResultVo;
import com.sinata.appointment.dto.SensitiveWordListVo;
import com.sinata.appointment.dto.SensitiveWordUpdateRequest;
import com.sinata.appointment.dto.VisitReasonCreateRequest;
import com.sinata.appointment.dto.VisitReasonListVo;
import com.sinata.appointment.dto.VisitReasonUpdateRequest;
@@ -27,6 +32,9 @@
import jakarta.validation.constraints.NotBlank;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
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.PatchMapping;
@@ -37,6 +45,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@Tag(name = "系统配置")
@RestController
@@ -95,6 +104,72 @@
        return ResultUtil.success();
    }
    @Operation(summary = "敏感词库-分页")
    @GetMapping("/sensitive-words/manage")
    @SaCheckPermission("config:sensitive-words:page")
    public Result<List<SensitiveWordListVo>> pageSensitiveWords(
            @RequestParam(defaultValue = "1") long page,
            @RequestParam(defaultValue = "10") long size,
            @RequestParam(required = false) String keyword) {
        return ResultUtil.page(configApplicationService.pageSensitiveWords(page, size, keyword));
    }
    @Operation(summary = "敏感词库-新增")
    @PostMapping("/sensitive-words/manage")
    @SaCheckPermission("config:sensitive-words:create")
    public Result<Void> createSensitiveWord(@Valid @RequestBody SensitiveWordCreateRequest request) {
        configApplicationService.createSensitiveWord(request);
        return ResultUtil.success();
    }
    @Operation(summary = "敏感词库-编辑")
    @PutMapping("/sensitive-words/manage/{id}")
    @SaCheckPermission("config:sensitive-words:update")
    public Result<Void> updateSensitiveWord(
            @PathVariable Long id, @Valid @RequestBody SensitiveWordUpdateRequest request) {
        configApplicationService.updateSensitiveWord(id, request);
        return ResultUtil.success();
    }
    @Operation(summary = "敏感词库-启停")
    @PatchMapping("/sensitive-words/manage/{id}/enabled")
    @SaCheckPermission("config:sensitive-words:status")
    public Result<Void> updateSensitiveWordEnabled(
            @PathVariable Long id, @Valid @RequestBody SensitiveWordEnabledPatchRequest request) {
        configApplicationService.updateSensitiveWordEnabled(id, request);
        return ResultUtil.success();
    }
    @Operation(summary = "敏感词库-删除")
    @DeleteMapping("/sensitive-words/manage/{id}")
    @SaCheckPermission("config:sensitive-words:delete")
    public Result<Void> deleteSensitiveWord(
            @PathVariable Long id, @RequestParam @NotBlank(message = "uuid 不能为空") String uuid) {
        configApplicationService.deleteSensitiveWord(id, uuid);
        return ResultUtil.success();
    }
    @Operation(summary = "敏感词库-导入")
    @PostMapping("/sensitive-words/manage/import")
    @SaCheckPermission("config:sensitive-words:import")
    public Result<SensitiveWordImportResultVo> importSensitiveWords(@RequestParam("file") MultipartFile file) {
        return ResultUtil.data(configApplicationService.importSensitiveWords(file));
    }
    @Operation(summary = "敏感词库-导入模板")
    @GetMapping("/sensitive-words/manage/import-template")
    @SaCheckPermission("config:sensitive-words:import")
    public ResponseEntity<byte[]> sensitiveWordImportTemplate() {
        return ResponseEntity.ok()
                .contentType(
                        MediaType.parseMediaType(
                                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"))
                .header(
                        HttpHeaders.CONTENT_DISPOSITION,
                        "attachment; filename=\"sensitive-word-import-template.xlsx\"")
                .body(configApplicationService.sensitiveWordImportTemplateExcel());
    }
    @GetMapping("/fields")
    @SaCheckPermission("config:booking-settings:page")
    public Result<List<BizFieldConfig>> listFields() {