package com.kaidi.oa.web; import com.kaidi.oa.common.ApiException; import com.kaidi.oa.common.ApiResp; import com.kaidi.oa.common.NotFoundException; import com.kaidi.oa.domain.DeclarationTemplate; import com.kaidi.oa.repository.DeclarationTemplateRepository; 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.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.time.Instant; import java.util.List; /** * Declaration template library (申报模板库) supporting auto-assembly of * declaration packages (申报模板自动搭建). program is one of 高新技术企业 / * 科技型中小企业 / 省重点研发计划 / 专精特新 / 创新平台; status is one of 启用 / * 停用. */ @RestController @RequestMapping("/api/oa/declaration-templates") public class DeclarationTemplateController { private final DeclarationTemplateRepository templateRepo; public DeclarationTemplateController(DeclarationTemplateRepository templateRepo) { this.templateRepo = templateRepo; } @GetMapping public ApiResp> list(@RequestParam(required = false) String program, @RequestParam(required = false) String status) { List list; if (program != null && !program.isBlank()) { list = templateRepo.findByProgram(program); } else if (status != null && !status.isBlank()) { list = templateRepo.findByStatus(status); } else { list = templateRepo.findAll(); } return ApiResp.ok(list); } @GetMapping("/{id}") public ApiResp get(@PathVariable Long id) { return ApiResp.ok(templateRepo.findById(id) .orElseThrow(() -> new NotFoundException("declaration template not found: " + id))); } public record CreateDeclarationTemplateRequest( String name, String program, String authority, String requiredMaterials, String autoCheckRules, String bodyTemplate, String version, String status, String updatedBy) { } @PostMapping public ApiResp create(@RequestBody CreateDeclarationTemplateRequest req) { if (req.name() == null || req.name().isBlank()) { throw new ApiException(400, "name is required"); } DeclarationTemplate t = new DeclarationTemplate(); t.setName(req.name()); t.setProgram(req.program()); t.setAuthority(req.authority()); t.setRequiredMaterials(req.requiredMaterials()); t.setAutoCheckRules(req.autoCheckRules()); t.setBodyTemplate(req.bodyTemplate()); t.setVersion(req.version() == null || req.version().isBlank() ? "V1.0" : req.version()); t.setStatus(req.status() == null || req.status().isBlank() ? "启用" : req.status()); t.setUpdatedBy(req.updatedBy()); t.setCreatedAt(Instant.now()); return ApiResp.ok(templateRepo.save(t)); } }