longz
2026-07-13 5882ba8863d77fdcc168b176c3ffb30e8a20556a
backend/src/main/java/com/sinata/appointment/controller/ConfigController.java
@@ -5,11 +5,18 @@
import com.sinata.appointment.common.Result;
import com.sinata.appointment.common.ResultUtil;
import com.sinata.appointment.dto.ApprovalNodeEnabledPatchRequest;
import com.sinata.appointment.dto.BookingHolidayMonthWeekendsRequest;
import com.sinata.appointment.dto.BookingHolidayToggleRequest;
import com.sinata.appointment.dto.BookingSettingsSaveRequest;
import com.sinata.appointment.dto.BookingSettingsVo;
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;
@@ -25,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;
@@ -35,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
@@ -93,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() {
@@ -107,7 +184,7 @@
        return ResultUtil.success();
    }
    @Operation(summary = "更新预约字段是否启用/是否必填(须 uuid;受访人、来访时间不可关闭)")
    @Operation(summary = "更新预约字段是否启用/是否必填")
    @PatchMapping("/fields/{id}")
    @SaCheckPermission("config:booking-settings:update")
    public Result<Void> patchField(@PathVariable Long id, @Valid @RequestBody FieldConfigPatchRequest request) {
@@ -115,7 +192,7 @@
        return ResultUtil.success();
    }
    @Operation(summary = "读取预约策略(时段、节假日、道闸)")
    @Operation(summary = "读取预约策略")
    @GetMapping("/booking-settings")
    @SaCheckPermission("config:booking-settings:page")
    public Result<BookingSettingsVo> getBookingSettings() {
@@ -127,6 +204,22 @@
    @SaCheckPermission("config:booking-settings:update")
    public Result<Void> saveBookingSettings(@Valid @RequestBody BookingSettingsSaveRequest request) {
        configApplicationService.saveBookingSettings(request);
        return ResultUtil.success();
    }
    @Operation(summary = "节假日单日切换")
    @PatchMapping("/booking-settings/holiday-date")
    @SaCheckPermission("config:booking-settings:update")
    public Result<Void> toggleHolidayDate(@Valid @RequestBody BookingHolidayToggleRequest request) {
        configApplicationService.toggleHolidayDate(request.getDate(), Boolean.TRUE.equals(request.getHoliday()));
        return ResultUtil.success();
    }
    @Operation(summary = "快速选择某月周末")
    @PostMapping("/booking-settings/holiday-month-weekends")
    @SaCheckPermission("config:booking-settings:update")
    public Result<Void> addMonthWeekends(@Valid @RequestBody BookingHolidayMonthWeekendsRequest request) {
        configApplicationService.addMonthWeekends(request.getMonth());
        return ResultUtil.success();
    }
@@ -159,7 +252,7 @@
        return ResultUtil.success();
    }
    @Operation(summary = "更新审批节点是否开启(须 uuid)")
    @Operation(summary = "更新审批节点是否开启")
    @PatchMapping("/approval-nodes/{id}/enabled")
    @SaCheckPermission("config:approval-settings:update")
    public Result<Void> patchApprovalNodeEnabled(
@@ -177,7 +270,7 @@
        return ResultUtil.data(vo);
    }
    @Operation(summary = "保存访客主管部门(传 deptId=null 清空)")
    @Operation(summary = "保存访客主管部门")
    @PutMapping("/visitor-competent-dept")
    @SaCheckPermission("config:approval-settings:update")
    public Result<Void> saveVisitorCompetentDept(@RequestBody VisitorCompetentDeptSaveRequest request) {
@@ -185,3 +278,4 @@
        return ResultUtil.success();
    }
}