| | |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeContractSaveReqVO; |
| | | import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeContractTerminateReqVO; |
| | | import cn.iocoder.yudao.module.hrm.service.employee.HrmEmployeeContractService; |
| | | import cn.iocoder.yudao.module.hrm.service.employee.contract.ContractDocumentService; |
| | | import cn.iocoder.yudao.module.hrm.service.employee.contract.ByteArrayMultipartFile; |
| | | import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi; |
| | | import cn.iocoder.yudao.module.system.service.storage.SystemStorageBlobService; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.math.BigDecimal; |
| | | import java.net.URLEncoder; |
| | | import java.nio.charset.StandardCharsets; |
| | | import java.time.LocalDate; |
| | | import java.util.Arrays; |
| | | import java.util.Collections; |
| | | import java.util.List; |
| | | |
| | | import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; |
| | | import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; |
| | | import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.CONTRACT_TEMPLATE_LOAD_FAILED; |
| | | import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.CONTRACT_TEMPLATE_TYPE_NOT_SUPPORT; |
| | | |
| | | @Tag(name = "管理后台 - HRM 员工合同") |
| | | @RestController |
| | |
| | | |
| | | @Resource |
| | | private HrmEmployeeContractService contractService; |
| | | @Resource |
| | | private ContractDocumentService contractDocumentService; |
| | | @Resource |
| | | private SystemStorageBlobService storageBlobService; |
| | | @Resource |
| | | private StorageAttachmentApi storageAttachmentApi; |
| | | |
| | | @PostMapping("/create") |
| | | @Operation(summary = "创建员工合同") |
| | |
| | | return success(contractService.getExpiringCount()); |
| | | } |
| | | |
| | | @PostMapping("/generate") |
| | | @Operation(summary = "生成合同并回存为合同附件") |
| | | @Parameter(name = "id", description = "合同ID", required = true) |
| | | @Parameter(name = "templateType", description = "模板类型:1-劳动合同(简版) 2-劳动合同(标准) 3-劳务合同", required = true) |
| | | @PreAuthorize("@ss.hasPermission('hrm:employee-contract:query')") |
| | | public CommonResult<Long> generateContract(@RequestParam("id") Long id, |
| | | @RequestParam("templateType") Integer templateType) { |
| | | byte[] bytes = contractDocumentService.generateDocx(id, templateType); |
| | | String fileName = contractDocumentService.buildFileName(id, templateType); |
| | | MultipartFile file = new ByteArrayMultipartFile("file", fileName, |
| | | "application/vnd.openxmlformats-officedocument.wordprocessingml.document", bytes); |
| | | Long blobId = storageBlobService.upload(Collections.singletonList(file), false).get(0).getId(); |
| | | storageAttachmentApi.bindAttachments("file", "hrm_employee_contract", id, Collections.singletonList(blobId)); |
| | | return success(blobId); |
| | | } |
| | | |
| | | @GetMapping("/generate-docx") |
| | | @Operation(summary = "生成并下载合同文档(docx)") |
| | | @Parameter(name = "id", description = "合同ID", required = true) |
| | | @Parameter(name = "templateType", description = "模板类型:1-劳动合同(简版) 2-劳动合同(标准) 3-劳务合同", required = true) |
| | | @PreAuthorize("@ss.hasPermission('hrm:employee-contract:query')") |
| | | public void generateDocx(@RequestParam("id") Long id, |
| | | @RequestParam("templateType") Integer templateType, |
| | | HttpServletResponse response) throws IOException { |
| | | byte[] bytes = contractDocumentService.generateDocx(id, templateType); |
| | | String fileName = URLEncoder.encode(contractDocumentService.buildFileName(id, templateType), StandardCharsets.UTF_8); |
| | | response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); |
| | | response.setHeader("Content-Disposition", "attachment; filename=" + fileName + "; filename*=UTF-8''" + fileName); |
| | | response.getOutputStream().write(bytes); |
| | | } |
| | | |
| | | @GetMapping("/download-template") |
| | | @Operation(summary = "下载合同空白模板", description = "1-劳动合同(简版) 2-劳动合同(标准) 3-劳务合同") |
| | | @Parameter(name = "type", description = "模板类型:1-劳动合同(简版) 2-劳动合同(标准) 3-劳务合同", required = true) |
| | | @PreAuthorize("@ss.hasPermission('hrm:employee-contract:query')") |
| | | public void downloadTemplate(@RequestParam("type") Integer type, HttpServletResponse response) throws IOException { |
| | | String path; |
| | | String fileName; |
| | | String contentType; |
| | | if (type == 1) { |
| | | path = "template/contract/original/labor_simple.docx"; |
| | | fileName = "劳动合同(简版).docx"; |
| | | contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; |
| | | } else if (type == 2) { |
| | | path = "template/contract/original/labor_standard.docx"; |
| | | fileName = "劳动合同(标准).docx"; |
| | | contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; |
| | | } else if (type == 3) { |
| | | path = "template/contract/original/service.doc"; |
| | | fileName = "劳务合同.doc"; |
| | | contentType = "application/msword"; |
| | | } else { |
| | | throw exception(CONTRACT_TEMPLATE_TYPE_NOT_SUPPORT); |
| | | } |
| | | try (InputStream in = getClass().getClassLoader().getResourceAsStream(path)) { |
| | | if (in == null) { |
| | | throw exception(CONTRACT_TEMPLATE_LOAD_FAILED); |
| | | } |
| | | byte[] bytes = in.readAllBytes(); |
| | | String enc = URLEncoder.encode(fileName, StandardCharsets.UTF_8); |
| | | response.setContentType(contentType); |
| | | response.setHeader("Content-Disposition", "attachment; filename=" + enc + "; filename*=UTF-8''" + enc); |
| | | response.getOutputStream().write(bytes); |
| | | } |
| | | } |
| | | |
| | | @GetMapping("/import-template") |
| | | @Operation(summary = "下载员工合同导入模板") |
| | | @PreAuthorize("@ss.hasPermission('hrm:employee-contract:import')") |