package cn.iocoder.yudao.module.mes.controller.admin.safety; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.cert.SafetyCertificatePageReqVO; import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.cert.SafetyCertificateRespVO; import cn.iocoder.yudao.module.mes.controller.admin.safety.vo.cert.SafetyCertificateSaveReqVO; import cn.iocoder.yudao.module.mes.service.safety.SafetyCertificateService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; /** * 安全生产 - 特种作业证台账(含到期自动预警) * * @author 超级管理员 */ @Tag(name = "管理后台 - 安全生产-特种作业证") @RestController @RequestMapping("/safety/certificate") @Validated public class SafetyCertificateController { @Resource private SafetyCertificateService certificateService; @PostMapping("/create") @Operation(summary = "新增特种作业证") @PreAuthorize("@ss.hasPermission('safety:cert:create')") public CommonResult create(@Valid @RequestBody SafetyCertificateSaveReqVO reqVO) { return success(certificateService.createCertificate(reqVO)); } @PutMapping("/update") @Operation(summary = "修改特种作业证") @PreAuthorize("@ss.hasPermission('safety:cert:update')") public CommonResult update(@Valid @RequestBody SafetyCertificateSaveReqVO reqVO) { certificateService.updateCertificate(reqVO); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除特种作业证") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('safety:cert:delete')") public CommonResult delete(@RequestParam("id") Long id) { certificateService.deleteCertificate(id); return success(true); } @GetMapping("/get") @Operation(summary = "获得特种作业证") @Parameter(name = "id", description = "编号", required = true) @PreAuthorize("@ss.hasPermission('safety:cert:query')") public CommonResult get(@RequestParam("id") Long id) { var cert = certificateService.getCertificate(id); var resp = BeanUtils.toBean(cert, SafetyCertificateRespVO.class); certificateService.fillDisplayFields(cert, resp); return success(resp); } @GetMapping("/page") @Operation(summary = "获得特种作业证分页") @PreAuthorize("@ss.hasPermission('safety:cert:query')") public CommonResult> page(@Valid SafetyCertificatePageReqVO reqVO) { var page = certificateService.getCertificatePage(reqVO); // 批量补全持证人最新档案(姓名/工号/部门),一次性查好避免 N+1 certificateService.fillEmployeeInfo(page.getList()); var result = BeanUtils.toBean(page, SafetyCertificateRespVO.class); certificateService.fillDisplayFieldsBatch(page.getList(), result.getList()); return success(result); } @GetMapping("/expiring-list") @Operation(summary = "获得即将到期/已过期的特种作业证(到期自动预警)") @Parameter(name = "days", description = "提前预警天数,默认 30 天") @PreAuthorize("@ss.hasPermission('safety:cert:query')") public CommonResult> expiringList( @RequestParam(value = "days", required = false) Integer days) { List certs = certificateService.getExpiringCertificates(days); certificateService.fillEmployeeInfo(certs); var resps = BeanUtils.toBean(certs, SafetyCertificateRespVO.class); certificateService.fillDisplayFieldsBatch(certs, resps); return success(resps); } }