cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java
@@ -1,225 +1,229 @@ //package com.ruoyi.personnel.controller; // //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //import com.baomidou.mybatisplus.core.metadata.IPage; //import com.baomidou.mybatisplus.core.toolkit.Wrappers; //import com.baomidou.mybatisplus.extension.plugins.pagination.Page; //import com.ruoyi.personnel.service.AnnexService; //import com.ruoyi.personnel.service.PersonBasicInfoFileService; //import com.ruoyi.personnel.service.PersonBasicInfoService; //import com.ruoyi.personnel.service.PersonBasicInfoWorkService; //import io.swagger.annotations.Api; //import io.swagger.annotations.ApiOperation; //import org.springframework.web.bind.annotation.RequestMapping; //import org.springframework.web.bind.annotation.RestController; //import org.springframework.web.multipart.MultipartFile; // //import javax.annotation.Resource; //import javax.servlet.http.HttpServletResponse; //import java.util.List; //import java.util.Map; // ///** // * <p> // * å端æ§å¶å¨ // * </p> // * // * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ // * @since 2024-08-30 09:19:57 // */ //@Api(tags = "人å-人ååºæ¬ä¿¡æ¯") //@RestController //@RequestMapping("/personBasicInfo") //public class PersonBasicInfoController { // // @Resource // private PersonBasicInfoService personBasicInfoService; // // @Resource // private PersonBasicInfoFileService personBasicInfoFileService; // @Resource // private PersonBasicInfoWorkService personBasicInfoWorkService; // // @Resource // private AnnexService annexService; // // // @ValueClassify("人ååºæ¬ä¿¡æ¯") // @ApiOperation(value = "æ¥è¯¢CNAS人åä¾§è¾¹æ ") // @GetMapping("/selectCNSAPersonTree") // public Result<List<DepartmentDto>> selectCNSAPersonTree() { // return Result.success(personBasicInfoService.selectCNSAPersonTree()); // } // // @ValueClassify("人ååºæ¬ä¿¡æ¯") // @ApiOperation(value = "è·åCNAS人ååºæ¬ä¿¡æ¯") // @GetMapping("/getCNASPersonnelInfo") // public Result getCNASPersonnelInfo(Integer userId) { // return Result.success(personBasicInfoService.getCNASPersonnelInfo(userId)); // } // // @ValueClassify("人ååºæ¬ä¿¡æ¯") // @ApiOperation(value = "ä¿åCNAS人ååºæ¬ä¿¡æ¯") // @PostMapping("/saveCNASPersonnelInfo") // public Result saveCNASPersonnelInfo(@RequestBody PersonBasicInfoDto personBasicInfoDto) { // personBasicInfoService.saveCNASPersonnelInfo(personBasicInfoDto); // return Result.success(); // } // // @ApiOperation(value = "人åæç»å页æ¥è¯¢") // @ValueClassify("人ååºæ¬ä¿¡æ¯") // @GetMapping("basicInformationOfPersonnelSelectPage") // public Result<IPage<Map<String, Object>>> basicInformationOfPersonnelSelectPage(Page<List<PersonBasicInfoDetailsDto>> page, String name, Integer departmentId) { // return Result.success(personBasicInfoService.basicInformationOfPersonnelSelectPage(page, name, departmentId)); // } // // // ä¸ä¼ æä»¶æ¥å£ // @ApiOperation(value = "ä¸ä¼ æä»¶æ¥å£") // @PostMapping("/saveCNASFile") // public Result saveFile(@RequestPart("file") MultipartFile file) { // String s = FileSaveUtil.uploadWordFile(file); // return Result.success("ä¸ä¼ æå", s); // } // // @GetMapping("/getAnnexByUserId") // public Result<List<Annex>> getAnnexByUserId(Integer userId) { // List<Annex> list = annexService.list(new LambdaQueryWrapper<Annex>().eq(Annex::getUserId, userId)); // return Result.success(list); // } // // // å 餿件 // @DeleteMapping("/deleteCNASFile") // public Result saveFile(String fileName) { // String[] split = fileName.split(","); // for (String s : split) { // FileSaveUtil.DeleteFile(s); // } // return Result.success(); // // } // // /** // * 人ååºæ¬ä¿¡æ¯éä»¶æ°å¢ // */ // @PostMapping("/addAnnex") // public Result addAnnex(@RequestBody Annex annex) { // annexService.save(annex); // return Result.success(); // } // // @GetMapping("/getAnnex") // public Result<Annex> getAnnex(Integer id) { // return Result.success(annexService.getById(id)); // } // /** // * 人ååºæ¬ä¿¡æ¯éä»¶å é¤ // */ // @DeleteMapping("/deleteAnnex/{id}") // public Result deleteAnnex(@PathVariable("id") Integer id) { // annexService.removeById(id); // return Result.success(); // } // // /** // * 人ååºæ¬ä¿¡æ¯éä»¶ä¿®æ¹ // * // */ // @PostMapping("/updateAnnex") // public Result updateAnnex(@RequestBody Annex annex) { // annexService.updateById(annex); // return Result.success(); // } // // @ApiOperation(value = "导åºäººååºæ¬ä¿¡æ¯") // @PostMapping("/exportPersonBasicInfo") // public void exportPersonBasicInfo(@RequestBody Map<String, Object> data, HttpServletResponse response) throws Exception { // UserPageDto userPageDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), UserPageDto.class); // personBasicInfoService.exportPersonBasicInfo(userPageDto,response); // } // // @ApiOperation(value = "ä¸è½½äººåæ¡£æ¡å¡") // @GetMapping("/exportPersonBasicInfoById") // public Result exportPersonBasicInfoById(Integer id, HttpServletResponse response) { // return Result.success(personBasicInfoService.exportPersonBasicInfoById(id,response)); // } // // /** // * 人åå¹è®åºæ¬ä¿¡æ¯éä»¶æ°å¢ // * @param userId // * @param file // * @return // */ // @ApiOperation(value = "人åå¹è®åºæ¬ä¿¡æ¯éä»¶æ°å¢") // @PostMapping("/uploadBasicInfoFile") // public Result<?> uploadBasicInfoFile(Integer userId, MultipartFile file) { // return Result.success(personBasicInfoService.uploadBasicInfoFile(userId, file)); // } // // // /** // * 人åå¹è®åºæ¬ä¿¡æ¯éä»¶å表 // * @return // */ // @ApiOperation(value = "人åå¹è®åºæ¬ä¿¡æ¯éä»¶å表") // @GetMapping("/getBasicInfoFileList") // public Result<List<PersonBasicInfoFile>> getBasicInfoFileList(Integer userId){ // return Result.success(personBasicInfoFileService.list(Wrappers.<PersonBasicInfoFile>lambdaQuery() // .eq(PersonBasicInfoFile::getUserId, userId))); // } // // /** // * 人åå¹è®åºæ¬ä¿¡æ¯éä»¶å é¤ // * @return // */ // @ApiOperation(value = "人åå¹è®åºæ¬ä¿¡æ¯éä»¶å é¤") // @GetMapping("/delBasicInfoFileList") // public Result delBasicInfoFileList(Integer basicInfoFileId){ // return Result.success(personBasicInfoFileService.removeById(basicInfoFileId)); // } // // /** // * 人åå¹è®åºæ¬ä¿¡æ¯å·¥ä½ç»åæ°å¢ // * @return // */ // @ApiOperation(value = "人åå¹è®åºæ¬ä¿¡æ¯å·¥ä½ç»åæ°å¢") // @PostMapping("/addBasicInfoWork") // public Result<?> addBasicInfoWork(@RequestBody PersonBasicInfoWork basicInfoWork) { // if (basicInfoWork.getUserId() == null) { // throw new ErrorException("缺å°äººåid"); // } // basicInfoWork.setUserId(basicInfoWork.getUserId()); // return Result.success(personBasicInfoWorkService.save(basicInfoWork)); // } // // // /** // * 人åå·¥ä½ç»åå表 // * @return // */ // @ApiOperation(value = "人åå·¥ä½ç»åå表") // @GetMapping("/getBasicInfoWorkList") // public Result<List<PersonBasicInfoWork>> getBasicInfoWorkList(Integer userId){ // return Result.success(personBasicInfoWorkService.list(Wrappers.<PersonBasicInfoWork>lambdaQuery() // .eq(PersonBasicInfoWork::getUserId, userId))); // } // // /** // * 人åå·¥ä½ç»åå é¤ // * @return // */ // @ApiOperation(value = "人åå·¥ä½ç»åå é¤") // @GetMapping("/delBasicInfoWorkList") // public Result delBasicInfoWorkList(Integer basicInfoWorkId){ // return Result.success(personBasicInfoWorkService.removeById(basicInfoWorkId)); // } // // /** // * 人ååºæ¬ä¿¡æ¯éä»¶å é¤ // * @return // */ // @ApiOperation(value = "人åå·¥ä½ç»åä¿®æ¹") // @PostMapping("/updateBasicInfoWorkList") // public Result updateBasicInfoWorkList(@RequestBody PersonBasicInfoWork basicInfoWork){ // return Result.success(personBasicInfoWorkService.updateById(basicInfoWork)); // } //} package com.ruoyi.personnel.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.core.domain.entity.DepartmentDto; import com.ruoyi.common.utils.FileSaveUtil; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.personnel.dto.PersonBasicInfoDetailsDto; import com.ruoyi.personnel.dto.PersonBasicInfoDto; import com.ruoyi.personnel.dto.UserPageDto; import com.ruoyi.personnel.pojo.Annex; import com.ruoyi.personnel.pojo.PersonBasicInfoFile; import com.ruoyi.personnel.pojo.PersonBasicInfoWork; import com.ruoyi.personnel.service.AnnexService; import com.ruoyi.personnel.service.PersonBasicInfoFileService; import com.ruoyi.personnel.service.PersonBasicInfoService; import com.ruoyi.personnel.service.PersonBasicInfoWorkService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; /** * <p> * å端æ§å¶å¨ * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2024-08-30 09:19:57 */ @Api(tags = "人å-人ååºæ¬ä¿¡æ¯") @RestController @RequestMapping("/personBasicInfo") public class PersonBasicInfoController { @Resource private PersonBasicInfoService personBasicInfoService; @Resource private PersonBasicInfoFileService personBasicInfoFileService; @Resource private PersonBasicInfoWorkService personBasicInfoWorkService; @Resource private AnnexService annexService; @ApiOperation(value = "æ¥è¯¢CNAS人åä¾§è¾¹æ ") @GetMapping("/selectCNSAPersonTree") public Result<List<DepartmentDto>> selectCNSAPersonTree() { return Result.success(personBasicInfoService.selectCNSAPersonTree()); } @ApiOperation(value = "è·åCNAS人ååºæ¬ä¿¡æ¯") @GetMapping("/getCNASPersonnelInfo") public Result getCNASPersonnelInfo(Integer userId) { return Result.success(personBasicInfoService.getCNASPersonnelInfo(userId)); } @ApiOperation(value = "ä¿åCNAS人ååºæ¬ä¿¡æ¯") @PostMapping("/saveCNASPersonnelInfo") public Result saveCNASPersonnelInfo(@RequestBody PersonBasicInfoDto personBasicInfoDto) { personBasicInfoService.saveCNASPersonnelInfo(personBasicInfoDto); return Result.success(); } @ApiOperation(value = "人åæç»å页æ¥è¯¢") @GetMapping("basicInformationOfPersonnelSelectPage") public Result<IPage<Map<String, Object>>> basicInformationOfPersonnelSelectPage(Page<List<PersonBasicInfoDetailsDto>> page, String name, Integer departmentId) { return Result.success(personBasicInfoService.basicInformationOfPersonnelSelectPage(page, name, departmentId)); } // ä¸ä¼ æä»¶æ¥å£ @ApiOperation(value = "ä¸ä¼ æä»¶æ¥å£") @PostMapping("/saveCNASFile") public Result saveFile(@RequestPart("file") MultipartFile file) { String s = FileSaveUtil.uploadWordFile(file); return Result.success("ä¸ä¼ æå", s); } @GetMapping("/getAnnexByUserId") public Result<List<Annex>> getAnnexByUserId(Integer userId) { List<Annex> list = annexService.list(new LambdaQueryWrapper<Annex>().eq(Annex::getUserId, userId)); return Result.success(list); } // å 餿件 @DeleteMapping("/deleteCNASFile") public Result saveFile(String fileName) { String[] split = fileName.split(","); for (String s : split) { FileSaveUtil.DeleteFile(s); } return Result.success(); } /** * 人ååºæ¬ä¿¡æ¯éä»¶æ°å¢ */ @PostMapping("/addAnnex") public Result addAnnex(@RequestBody Annex annex) { annexService.save(annex); return Result.success(); } @GetMapping("/getAnnex") public Result<Annex> getAnnex(Integer id) { return Result.success(annexService.getById(id)); } /** * 人ååºæ¬ä¿¡æ¯éä»¶å é¤ */ @DeleteMapping("/deleteAnnex") public Result deleteAnnex(Integer id) { annexService.removeById(id); return Result.success(); } /** * 人ååºæ¬ä¿¡æ¯éä»¶ä¿®æ¹ * */ @PostMapping("/updateAnnex") public Result updateAnnex(@RequestBody Annex annex) { annexService.updateById(annex); return Result.success(); } @ApiOperation(value = "导åºäººååºæ¬ä¿¡æ¯") @GetMapping("/exportPersonBasicInfo") public void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception { personBasicInfoService.exportPersonBasicInfo(userPageDto,response); } @ApiOperation(value = "ä¸è½½äººåæ¡£æ¡å¡") @GetMapping("/exportPersonBasicInfoById") public Result exportPersonBasicInfoById(Integer id, HttpServletResponse response) { return Result.success(personBasicInfoService.exportPersonBasicInfoById(id,response)); } /** * 人åå¹è®åºæ¬ä¿¡æ¯éä»¶æ°å¢ * @param userId * @param file * @return */ @ApiOperation(value = "人åå¹è®åºæ¬ä¿¡æ¯éä»¶æ°å¢") @PostMapping("/uploadBasicInfoFile") public Result<?> uploadBasicInfoFile(Integer userId, MultipartFile file) { return Result.success(personBasicInfoService.uploadBasicInfoFile(userId, file)); } /** * 人åå¹è®åºæ¬ä¿¡æ¯éä»¶å表 * @return */ @ApiOperation(value = "人åå¹è®åºæ¬ä¿¡æ¯éä»¶å表") @GetMapping("/getBasicInfoFileList") public Result<List<PersonBasicInfoFile>> getBasicInfoFileList(Integer userId){ return Result.success(personBasicInfoFileService.list(Wrappers.<PersonBasicInfoFile>lambdaQuery() .eq(PersonBasicInfoFile::getUserId, userId))); } /** * 人åå¹è®åºæ¬ä¿¡æ¯éä»¶å é¤ * @return */ @ApiOperation(value = "人åå¹è®åºæ¬ä¿¡æ¯éä»¶å é¤") @GetMapping("/delBasicInfoFileList") public Result delBasicInfoFileList(Integer basicInfoFileId){ return Result.success(personBasicInfoFileService.removeById(basicInfoFileId)); } /** * 人åå¹è®åºæ¬ä¿¡æ¯å·¥ä½ç»åæ°å¢ * @return */ @ApiOperation(value = "人åå¹è®åºæ¬ä¿¡æ¯å·¥ä½ç»åæ°å¢") @PostMapping("/addBasicInfoWork") public Result<?> addBasicInfoWork(@RequestBody PersonBasicInfoWork basicInfoWork) { if (basicInfoWork.getUserId() == null) { throw new ErrorException("缺å°äººåid"); } basicInfoWork.setUserId(basicInfoWork.getUserId()); return Result.success(personBasicInfoWorkService.save(basicInfoWork)); } /** * 人åå·¥ä½ç»åå表 * @return */ @ApiOperation(value = "人åå·¥ä½ç»åå表") @GetMapping("/getBasicInfoWorkList") public Result<List<PersonBasicInfoWork>> getBasicInfoWorkList(Integer userId){ return Result.success(personBasicInfoWorkService.list(Wrappers.<PersonBasicInfoWork>lambdaQuery() .eq(PersonBasicInfoWork::getUserId, userId))); } /** * 人åå·¥ä½ç»åå é¤ * @return */ @ApiOperation(value = "人åå·¥ä½ç»åå é¤") @GetMapping("/delBasicInfoWorkList") public Result delBasicInfoWorkList(Integer basicInfoWorkId){ return Result.success(personBasicInfoWorkService.removeById(basicInfoWorkId)); } /** * 人ååºæ¬ä¿¡æ¯éä»¶å é¤ * @return */ @ApiOperation(value = "人åå·¥ä½ç»åä¿®æ¹") @PostMapping("/updateBasicInfoWorkList") public Result updateBasicInfoWorkList(@RequestBody PersonBasicInfoWork basicInfoWork){ return Result.success(personBasicInfoWorkService.updateById(basicInfoWork)); } } cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,246 @@ package com.ruoyi.personnel.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.Result; import com.ruoyi.common.numgen.NumberGenerator; import com.ruoyi.personnel.dto.PersonTrainingDetailedDto; import com.ruoyi.personnel.dto.PersonTrainingDto; import com.ruoyi.personnel.dto.PersonTrainingRecordDto; import com.ruoyi.personnel.dto.PersonTrainingRecordSubmitDto; import com.ruoyi.personnel.mapper.PersonTrainingDetailedFileMapper; import com.ruoyi.personnel.pojo.PersonTraining; import com.ruoyi.personnel.pojo.PersonTrainingDetailed; import com.ruoyi.personnel.pojo.PersonTrainingDetailedFile; import com.ruoyi.personnel.pojo.PersonTrainingRecord; import com.ruoyi.personnel.service.PersonTrainingDetailedService; import com.ruoyi.personnel.service.PersonTrainingRecordService; import com.ruoyi.personnel.service.PersonTrainingService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * <p> * å¹è®è®¡å å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-11 01:11:49 */ @Api(tags = "人å - å¹è®è®¡å") @RestController @RequestMapping("/personTraining") public class PersonTrainingController { @Autowired private PersonTrainingService personTrainingService; @Autowired private PersonTrainingDetailedService personTrainingDetailedService; @Autowired private PersonTrainingRecordService personTrainingRecordService; @Autowired private PersonTrainingDetailedFileMapper personTrainingDetailedFileMapper; @Autowired private NumberGenerator<PersonTrainingDetailed> numberGenerator; @ApiOperation(value = "å¹è®è®¡å å¯¼å ¥") @PostMapping("personTrainingImport") public Result<?> personTrainingImport(@RequestPart("file") MultipartFile file, PersonTraining training) { personTrainingService.personTrainingImport(file, training); return Result.success(); } @ApiOperation(value = "å¹è®è®¡å å é¤") @DeleteMapping("personTrainingDelete") public Result<?> personTrainingDelete(@RequestParam("id") Integer id) { personTrainingService.personTrainingDelete(id); return Result.success(); } @ApiOperation(value = "å¹è®è®¡å æ¥è¯¢") @GetMapping("personTrainingSelect") public Result<IPage<PersonTrainingDto>> personTrainingSelect(Page page, String compilerName, String departmentId) { IPage<PersonTrainingDto> iPage = personTrainingService.personTrainingSelect(page, compilerName, departmentId); return Result.success(iPage); } @ApiOperation(value = "年度å¹è®è®¡å å®¡æ ¸") @PostMapping("reviewAnnualPersonnelTraining") public Result<?> reviewAnnualPersonnelTraining(@RequestBody PersonTraining training) { personTrainingService.reviewAnnualPersonnelTraining(training); return Result.success(); } @ApiOperation(value = "å¹è®è®¡å æ¹å") @PostMapping("approveAnnualPersonnelTraining") public Result<?> approveAnnualPersonnelTraining(@RequestBody PersonTraining training) { personTrainingService.approveAnnualPersonnelTraining(training); return Result.success(); } @ApiOperation(value = "年度计åæç»è¡¨ æ°å¢/ç¼è¾") @PostMapping("addOrUpdatePersonTrainingDetailed") public Result<?> addOrUpdatePersonTrainingDetailed(@RequestBody PersonTrainingDetailed personTrainingDetailed) { if (ObjectUtils.isEmpty(personTrainingDetailed.getId())) { personTrainingDetailed.setState(3); } personTrainingDetailedService.saveOrUpdate(personTrainingDetailed); return Result.success(); } @ApiOperation(value = "年度计åæç»è¡¨ æ¹éå é¤") @DeleteMapping("deleteAnnualPlanDetailTable") public Result<?> deleteAnnualPlanDetailTable(String ids) { personTrainingDetailedService.deleteAnnualPlanDetailTable(ids); return Result.success(); } @ApiOperation(value = "年度计åæç»è¡¨ æ¥è¯¢") @GetMapping("queryTheAnnualPlanDetailsTable") public Result<IPage<PersonTrainingDetailedDto>> queryTheAnnualPlanDetailsTable(Page page, String trainingLecturerName, String courseCode, String trainingDate, Integer id, Integer userId) { IPage<PersonTrainingDetailedDto> iPage = personTrainingDetailedService.queryTheAnnualPlanDetailsTable(page, trainingLecturerName, courseCode, trainingDate, id, userId); return Result.success(iPage); } @ApiOperation(value = "å¹è®ä¸èæ ¸è®°å½ æ¥è¯¢") @GetMapping("trainingAndAssessmentRecordsPage") public Result<List<PersonTrainingRecordDto>> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName) { List<PersonTrainingRecordDto> list = personTrainingRecordService.trainingAndAssessmentRecordsPage(trainingDetailedId, userName); return Result.success(list); } @ApiOperation(value = "å¹è®ä¸èæ ¸è®°å½ æ°å¢äººå") @PostMapping("newPersonnelAddedToTrainingRecords") public Result<?> newPersonnelAddedToTrainingRecords(@RequestBody List<PersonTrainingRecord> personTrainingRecord) { personTrainingRecordService.saveBatch(personTrainingRecord); return Result.success(); } @ApiOperation(value = "å¹è®ä¸èæ ¸è®°å½ è®¤é¢") @PostMapping("claimOfTrainingAndAssessmentRecords") public Result<?> claimOfTrainingAndAssessmentRecords(@RequestParam("claimAndClaim") Boolean claimAndClaim, @RequestParam("courseId") Integer courseId) { personTrainingRecordService.claimOfTrainingAndAssessmentRecords(claimAndClaim, courseId); return Result.success(); } @ApiOperation(value = "å¹è®ä¸èæ ¸è®°å½ æäº¤/æ¤é") @PostMapping("trainingAndAssessmentRecordsAdded") public Result<?> trainingAndAssessmentRecordsAdded(@RequestBody PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) { personTrainingRecordService.trainingAndAssessmentRecordsAdded(personTrainingRecordSubmitDto); return Result.success(); } @ApiOperation(value = "å¹è®ä¸èæ ¸è®°å½ è¯ä»·") @PostMapping("trainingAndAssessmentRecordsEvaluate") public Result<?> trainingAndAssessmentRecordsEvaluate(@RequestBody PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) { personTrainingDetailedService.update(Wrappers.<PersonTrainingDetailed>lambdaUpdate() .eq(PersonTrainingDetailed::getId, personTrainingRecordSubmitDto.getTrainingDetailedId()) .set(PersonTrainingDetailed::getComprehensiveAssessment, personTrainingRecordSubmitDto.getComprehensiveAssessment()) .set(PersonTrainingDetailed::getAssessmentDate, personTrainingRecordSubmitDto.getAssessmentDate()) .set(PersonTrainingDetailed::getState, personTrainingRecordSubmitDto.getState())); return Result.success(); } @ApiOperation(value = "å¹è®ä¸èæ ¸è®°å½ å é¤") @DeleteMapping("deleteTrainingAndAssessmentRecords") public Result<?> deleteTrainingAndAssessmentRecords(String ids) { personTrainingRecordService.deleteTrainingAndAssessmentRecords(ids); return Result.success(); } @PostMapping("outOfFocusPreservation") public Result<?> outOfFocusPreservation(@RequestBody PersonTrainingRecord personTrainingRecord) { personTrainingRecordService.updateById(personTrainingRecord); return Result.success(); } /** * 导åºäººåå¹è®è®¡å * @return */ @ApiOperation(value = "导åºäººåå¹è®è®¡å") @GetMapping("/exportPersonTraining") public void exportPersonTraining(Integer id, HttpServletResponse response){ personTrainingService.exportPersonTraining(id, response); } /** * 导åºäººåå¹è®ä¸èæ ¸è®°å½ * @return */ @ApiOperation(value = "导åºäººåå¹è®ä¸èæ ¸è®°å½") @GetMapping("/exportPersonTrainingRecord") public void exportPersonTrainingRecord(Integer id, HttpServletResponse response){ personTrainingService.exportPersonTrainingRecord(id, response); } /** * 人åå¹è®è¯¦æ éä»¶æ°å¢ * @param trainingDetailedId * @param file * @return */ @ApiOperation(value = "人åå¹è®è¯¦æ éä»¶æ°å¢") @PostMapping("/uploadTrainingDetailedFile") public Result<?> uploadTrainingDetailedFile(Integer trainingDetailedId, MultipartFile file) { return Result.success(personTrainingService.uploadTrainingDetailedFile(trainingDetailedId, file)); } /** * 人åå¹è®è¯¦æ éä»¶å表 * @return */ @ApiOperation(value = "人åå¹è®è¯¦æ éä»¶å表") @GetMapping("/getTrainingDetailedFileList") public Result<List<PersonTrainingDetailedFile>> getTrainingDetailedFileList(Integer trainingDetailedId){ return Result.success(personTrainingDetailedFileMapper.selectList(Wrappers.<PersonTrainingDetailedFile>lambdaQuery() .eq(PersonTrainingDetailedFile::getTrainingDetailedId, trainingDetailedId))); } /** * 人åå¹è®è¯¦æ éä»¶å é¤ * @return */ @ApiOperation(value = "人åå¹è®è¯¦æ éä»¶å é¤") @GetMapping("/delTrainingDetailedFileList") public Result delTrainingDetailedFileList(Integer detailedFileId){ return Result.success(personTrainingDetailedFileMapper.deleteById(detailedFileId)); } /** * æ¥è¯¢ä»å¹´äººåå¹è®ä¿¡æ¯ * @return */ @ApiOperation(value = "æ¥è¯¢ä»å¹´äººåå¹è®ä¿¡æ¯") @GetMapping("/getThisYearTrainingDetailed") public Result<List<PersonTrainingDetailed>> getThisYearTrainingDetailed(){ return Result.success(personTrainingService.getThisYearTrainingDetailed()); } } cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDetailsDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,65 @@ package com.ruoyi.personnel.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; /** * Author: yuan * Date: 2024-12-13 ææäº 13:52:52 * Description: */ @Data public class PersonBasicInfoDetailsDto { @ApiModelProperty("ç¨æ·id") private Integer userId; @ApiModelProperty("ç¨æ·å§å") private String name; @ApiModelProperty("å ¥èæ¶é´") private String entryTimeStr; @ApiModelProperty("å®é å®ä¹ ç»æ") private String endPracticalPracticeStr; @ApiModelProperty("ç±è´¯") private String nativePlace; @ApiModelProperty("身份è¯å·") private String identityCard; @ApiModelProperty("身份è¯å°å") private String idAddress; @ApiModelProperty("ç¨æ·ææºå·") private String phone; @ApiModelProperty("æ¯ä¸é¢æ ¡") private String graduatedInstitutions1; @ApiModelProperty("ä¸ä¸") private String major1; @ApiModelProperty("æ¯ä¸æ¶é´1") private LocalDateTime graduationTime1; @ApiModelProperty("æé«å¦å") private String officialAcademicRedentials; @ApiModelProperty("æé«å¦ä½") private String highestDegree; @ApiModelProperty("èç§°") private String professionalTitle; // èä¸è½å @ApiModelProperty("ç´§æ¥è系人") private String emergencyContact; @ApiModelProperty("ç´§æ¥è系人çµè¯") private String emergencyContactPhone; } cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoWorkDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.personnel.dto; import com.ruoyi.personnel.pojo.PersonBasicInfoWork; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @Author zhuo * @Date 2025/1/14 */ @Data public class PersonBasicInfoWorkDto extends PersonBasicInfoWork { @ApiModelProperty("å¡«å 使ç¨") private String fill; } cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDetailedDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.personnel.dto; import com.baomidou.mybatisplus.annotation.TableField; import com.ruoyi.personnel.pojo.PersonTrainingDetailed; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class PersonTrainingDetailedDto extends PersonTrainingDetailed { @ApiModelProperty("举åé¨é¨åç§°") private String holdingDepartmentName; @ApiModelProperty("å¹è®è®²å¸åç§°") private String trainingLecturerName; @ApiModelProperty("å½åç»å½äººæ¯å¦è®¤é¢") private Boolean whetherClaim; @ApiModelProperty("å¹è®æ¥æ") private String trainingDateString; // 导åºä½¿ç¨ @TableField(select = false, exist = false) @ApiModelProperty("åºå·(导åºä½¿ç¨)") private Integer index; } cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.ruoyi.personnel.dto; import com.ruoyi.personnel.pojo.PersonTraining; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel(value = "PersonTrainingDto对象", description = "å¹è®è®¡å") public class PersonTrainingDto extends PersonTraining { @ApiModelProperty("ç¼å¶äººå§å") private String compilerName; @ApiModelProperty("å®¡æ ¸äººå§å") private String reviewerName; @ApiModelProperty("æ¹å人å§å") private String approverName; @ApiModelProperty("å建人å§å") private String createUserName; } cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.ruoyi.personnel.dto; import com.ruoyi.personnel.pojo.PersonTrainingRecord; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class PersonTrainingRecordDto extends PersonTrainingRecord { @ApiModelProperty(value = "å§å") private String userName; @ApiModelProperty(value = "å·¥å·") private String account; @ApiModelProperty(value = "è§è²") private String roleName; @ApiModelProperty(value = "çµè¯å·ç ") private String phone; @ApiModelProperty(value = "é¨é¨") private String department; } cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordListDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.ruoyi.personnel.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDateTime; @Data public class PersonTrainingRecordListDto { @ApiModelProperty(value = "ç¨æ·id") private Integer userId; @ApiModelProperty("åå·¥ç¼å·") private String account; @ApiModelProperty("ç¨æ·å§å") private String name; @ApiModelProperty("æå¨é¨é¨") private String departLimsName; @ApiModelProperty("èç§°") private String professionalTitle; @ApiModelProperty("æé«å¦å") private String officialAcademicRedentials; @ApiModelProperty("å ¥å使¶é´") private LocalDateTime unitTime; @ApiModelProperty("å ¥å使¶é´") private String unitTimeSting; @ApiModelProperty("ä¸ä¸") private String major1; } cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonTrainingRecordSubmitDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,35 @@ package com.ruoyi.personnel.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDate; @Data public class PersonTrainingRecordSubmitDto { @ApiModelProperty("年度计åæç»ID") private Integer trainingDetailedId; @ApiModelProperty("å¹è®å°ç¹") private String placeTraining; @ApiModelProperty("å¹è®å®ææ¶é´") private LocalDate openingTime; @ApiModelProperty("èæ ¸æ¹å¼") private String assessmentMethod; @ApiModelProperty("æ¬æ¬¡å¹è®ç»¼åè¯ä»·") private String comprehensiveAssessment; @ApiModelProperty("è¯ä»·äºº") private Integer assessmentUserId; @ApiModelProperty("è¯ä»·æ¶é´") private LocalDate assessmentDate; private Integer state; } cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordExportDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,32 @@ package com.ruoyi.personnel.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @Author zhuo * @Date 2024/11/25 */ @Data public class TrainingRecordExportDto { @ApiModelProperty("ç¨æ·åç§°1") private String userName1; @ApiModelProperty("é¨é¨1") private String department1; @ApiModelProperty("èæ ¸ç»æ1") private String examinationResults1; @ApiModelProperty("ç¨æ·åç§°2") private String userName2; @ApiModelProperty("é¨é¨1") private String department2; @ApiModelProperty("èæ ¸ç»æ1") private String examinationResults2; } cnas-personnel/src/main/java/com/ruoyi/personnel/dto/TrainingRecordPersonDetailedDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ package com.ruoyi.personnel.dto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class TrainingRecordPersonDetailedDto { @ApiModelProperty("å¹è®æ¥æ") private String trainingDateString; @ApiModelProperty("å¹è®æ¥æ") private String trainingDate; @ApiModelProperty("å¹è®å 容") private String trainingContent; @ApiModelProperty("课æ¶") private Integer classHour; @ApiModelProperty("èæ ¸ç»æ") private String examinationResults; @ApiModelProperty("夿³¨") private String remarks; } cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedListener.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,42 @@ package com.ruoyi.personnel.excel; import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.ruoyi.personnel.service.PersonTrainingDetailedService; import lombok.Data; import java.util.ArrayList; import java.util.List; @Data public class PersonTrainingDetailedListener extends AnalysisEventListener<PersonTrainingDetailedUpload> { private Integer planId; private static final int BATCH_COUNT = 1000; List<PersonTrainingDetailedUpload> list = new ArrayList<>(); private PersonTrainingDetailedService personTrainingDetailedService; public PersonTrainingDetailedListener(PersonTrainingDetailedService personTrainingDetailedService) { this.personTrainingDetailedService = personTrainingDetailedService; } @Override public void invoke(PersonTrainingDetailedUpload data, AnalysisContext context) { list.add(data); if (list.size() >= BATCH_COUNT) { save(); list.clear(); } } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { save(); } private void save() { personTrainingDetailedService.importExcel(list, this.planId); } } cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonTrainingDetailedUpload.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,35 @@ package com.ruoyi.personnel.excel; import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class PersonTrainingDetailedUpload { @ExcelProperty("å¹è®ç®æ ") private String trainingObjectives; @ExcelProperty("å¹è®å 容") private String trainingContent; @ExcelProperty("å¹è®æ¹å¼") private String trainingMode; @ExcelProperty("åå 对象") private String participants; @ExcelProperty("举åé¨é¨") private String holdingDepartment; @ExcelProperty("å¹è®è®²å¸") private String trainingLecturerName; @ExcelProperty("å¹è®æ¶é´") private String trainingDate; @ExcelProperty("课æ¶") private Integer classHour; @ExcelProperty("夿³¨") private String remarks; } cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedFileMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.ruoyi.personnel.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.personnel.pojo.PersonTrainingDetailedFile; /** * 人åå¹è®è®¡å详æ é件表(CnasPersonTrainingDetailedFile)$desc * * @author makejava * @since 2024-12-25 14:18:22 */ public interface PersonTrainingDetailedFileMapper extends BaseMapper<PersonTrainingDetailedFile> { } cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingDetailedMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,48 @@ package com.ruoyi.personnel.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.mybatis_config.MyBaseMapper; import com.ruoyi.personnel.dto.PersonTrainingDetailedDto; import com.ruoyi.personnel.pojo.PersonTrainingDetailed; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> * å¹è®è®¡å详æ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-11 01:46:27 */ public interface PersonTrainingDetailedMapper extends MyBaseMapper<PersonTrainingDetailed> { IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page, String trainingLecturerName, String courseCode, String trainingDate, Integer id, Integer userId, Integer loginUserId); /** * æ ¹æ®ä¸»è¡¨idæ¥è¯¢è¯¦æ * @param trainingId * @return */ List<PersonTrainingDetailedDto> selectTrainingList(@Param("trainingId") Integer trainingId); /** * æ¥è¯¢è¯¦ç» * @param id * @return */ PersonTrainingDetailedDto selectTrainingDetail(@Param("id") Integer id); /** * æ¥è¯¢ä»å¹´äººåå¹è®ä¿¡æ¯ * @return */ List<PersonTrainingDetailed> getThisYearTrainingDetailed(); } cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.personnel.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.personnel.dto.PersonTrainingDto; import com.ruoyi.personnel.pojo.PersonTraining; /** * <p> * å¹è®è®¡å Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-11 01:11:49 */ public interface PersonTrainingMapper extends BaseMapper<PersonTraining> { IPage<PersonTrainingDto> personTrainingSelect(Page page, String compilerName, String departLimsId); } cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonTrainingRecordMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,67 @@ package com.ruoyi.personnel.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.personnel.dto.PersonTrainingRecordDto; import com.ruoyi.personnel.dto.PersonTrainingRecordListDto; import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto; import com.ruoyi.personnel.pojo.PersonTrainingRecord; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> * å¹è®è®°å½ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-12 04:50:48 */ public interface PersonTrainingRecordMapper extends BaseMapper<PersonTrainingRecord> { List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName); IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, String userName, Integer userId, Integer departLimsId); IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetails(Page page, Integer userId); /** * æ ¹æ®è¯¦æ idæ¥è¯¢å¹è®äººå * @param trainingDetailedId * @return */ List<PersonTrainingRecordDto> selectListByTrainingDetailedId(@Param("trainingDetailedId") Integer trainingDetailedId); /** * æ¥è¯¢äººåä¿¡æ¯ * @param userId * @return */ PersonTrainingRecordListDto selectUserTraining(@Param("userId") Integer userId); /** * æ ¹æ®ç¨æ·idæ¥è¯¢å¹è®è®°å½ * @param userId * @return */ List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtos(Integer userId); /** * æ ¹æ®ç¨æ·idå年份æ¥è¯¢äººåæç» å¹è®è®°å½ * @param page * @param userId * @param year * @return */ IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year); /** * æ ¹æ®ç¨æ·idå年份æ¥è¯¢äººåæç» å¹è®è®°å½å¯¼åº * @param userId * @param trainingDate * @return */ List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtosByTrainingDate(Integer userId, Integer year); } cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTraining.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,83 @@ package com.ruoyi.personnel.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * å¹è®è®¡å * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-11 01:11:49 */ @Getter @Setter @TableName("cnas_person_training") @ApiModel(value = "PersonTraining对象", description = "å¹è®è®¡å") public class PersonTraining implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("主é®id") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("æä»¶åç§°") private String fileName; @ApiModelProperty("计å年份") private String planYear; @ApiModelProperty("ç¼å¶äººid") private Integer compilerId; @ApiModelProperty("ç¼å¶æ¥æ") private LocalDateTime compilationDate; @ApiModelProperty("å®¡æ ¸äººid") private Integer reviewerId; @ApiModelProperty("å®¡æ ¸æ¥æ") private LocalDateTime auditDate; @ApiModelProperty("å®¡æ ¸ç¶æ") private Integer reviewerStatus; @ApiModelProperty("å®¡æ ¸å¤æ³¨") private String auditRemarks; @ApiModelProperty("æ¹å人id") private Integer approverId; @ApiModelProperty("æ¹å夿³¨") private String approvalRemarks; @ApiModelProperty("æ¹åç¶æ(1ï¼æ¹åï¼2ï¼ä¸æ¹å)") private Integer approvalStatus; @ApiModelProperty("æ¹åæ¥æ") private LocalDateTime approvalDate; @ApiModelProperty("åå»ºæ¥æ") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty("å建人id") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty("æ´æ°æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty("æ´æ°äººid") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; } cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailed.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,99 @@ package com.ruoyi.personnel.pojo; import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; /** * <p> * å¹è®è®¡å详æ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-11 01:46:27 */ @Getter @Setter @TableName("cnas_person_training_detailed") @ApiModel(value = "PersonTrainingDetailed对象", description = "å¹è®è®¡å详æ ") public class PersonTrainingDetailed implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("å¹è®è®¡å") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("å¹è®ç®æ ") private String trainingObjectives; @ApiModelProperty("å¹è®å 容") private String trainingContent; @ApiModelProperty("å¹è®æ¹å¼") private String trainingMode; @ApiModelProperty("ç¶æ(1ï¼å·²å®æï¼2ï¼å¾ è¯ä»·ï¼3: æªå¼å§)") private Integer state; @ApiModelProperty("åå 对象") private String participants; @ApiModelProperty("举åé¨é¨") private String holdingDepartment; @ApiModelProperty("å¹è®å°ç¹") private String placeTraining; @ApiModelProperty("å¹è®è®²å¸_id") private Integer trainingLecturerId; @ApiModelProperty("计åå¹è®æ¥æ") private String trainingDate; @ApiModelProperty("å¹è®å®ææ¶é´") private LocalDate openingTime; @ApiModelProperty("课æ¶") private Integer classHour; @ApiModelProperty("夿³¨") private String remarks; @ApiModelProperty("å¹è®è®¡åid") private Integer planId; @ApiModelProperty(value = "å建æ¶é´", hidden = true) @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "å建人id", hidden = true) @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty(value = "æ´æ°äººid", hidden = true) @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @ApiModelProperty(value = "æ´æ°æ¶é´", hidden = true) @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty("èæ ¸æ¹å¼") private String assessmentMethod; @ApiModelProperty("æ¬æ¬¡å¹è®ç»¼åè¯ä»·") private String comprehensiveAssessment; @ApiModelProperty("è¯ä»·äºº") private Integer assessmentUserId; @ApiModelProperty("è¯ä»·æ¶é´") private LocalDate assessmentDate; } cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingDetailedFile.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,49 @@ package com.ruoyi.personnel.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.Date; /** * 人åå¹è®è®¡å详æ é件表(CnasPersonTrainingDetailedFile)$desc * * @author makejava * @since 2024-12-25 14:18:22 */ @Data @TableName("cnas_person_training_detailed_file") public class PersonTrainingDetailedFile { @TableId(type = IdType.AUTO) private Integer detailedFileId; @ApiModelProperty("人åä½ å¹è®è®¡å详æ id") private Integer trainingDetailedId; @ApiModelProperty("ç±»å:1å¾ç/2æä»¶") private Integer type; @ApiModelProperty("éä»¶è·¯å¾") private String fileUrl; @ApiModelProperty("éä»¶åç§°") private String fileName; @ApiModelProperty("å建人") private Integer createUser; @ApiModelProperty("å建æ¶é´") private Date createTime; @ApiModelProperty("ä¿®æ¹äºº") private Integer updateUser; @ApiModelProperty("ä¿®æ¹æ¶é´") private Date updateTime; } cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonTrainingRecord.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.ruoyi.personnel.pojo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import java.io.Serializable; /** * <p> * å¹è®è®°å½ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-12 04:50:48 */ @Getter @Setter @TableName("cnas_person_training_record") @ApiModel(value = "PersonTrainingRecord对象", description = "å¹è®è®°å½") public class PersonTrainingRecord implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("主é®id") @TableId(value = "training_record_id", type = IdType.AUTO) private Integer trainingRecordId; @ApiModelProperty("ç¨æ·è¡¨æ ¼ï¼userï¼ä¸»é®") private Integer userId; @ApiModelProperty("å¹è®è®¡å详æ - å id") private Integer courseId; @ApiModelProperty("èæ ¸ç»æ") private String examinationResults; } cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingDetailedService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.personnel.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.personnel.dto.PersonTrainingDetailedDto; import com.ruoyi.personnel.excel.PersonTrainingDetailedUpload; import com.ruoyi.personnel.pojo.PersonTrainingDetailed; import java.util.List; /** * <p> * å¹è®è®¡åè¯¦æ æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-11 01:46:27 */ public interface PersonTrainingDetailedService extends IService<PersonTrainingDetailed> { void importExcel(List<PersonTrainingDetailedUpload> list, Integer planId); void deleteAnnualPlanDetailTable(String ids); IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page, String trainingLecturerName, String courseCode, String trainingDate, Integer id, Integer userId); } cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingRecordService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,59 @@ package com.ruoyi.personnel.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.personnel.dto.PersonTrainingRecordDto; import com.ruoyi.personnel.dto.PersonTrainingRecordListDto; import com.ruoyi.personnel.dto.PersonTrainingRecordSubmitDto; import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto; import com.ruoyi.personnel.pojo.PersonTrainingRecord; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * <p> * å¹è®è®°å½ æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-12 04:50:48 */ public interface PersonTrainingRecordService extends IService<PersonTrainingRecord> { List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName); void deleteTrainingAndAssessmentRecords(String ids); IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, String userName, Integer userId, Integer departLimsId); void claimOfTrainingAndAssessmentRecords(Boolean claimAndClaim, Integer courseId); /** * æ ¹æ®ç¨æ·idå年份æ¥è¯¢äººåæç» å¹è®è®°å½ * @param page * @param userId * @param year * @return */ IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year); /** * 导åºäººåå¹è®è®°å½ * @param userId * @param trainingDate * @param response */ void exportTrainingRecordAddTrainingDate(Integer userId, Integer trainingDate, HttpServletResponse response); /** * å¹è®æäº¤ * @param personTrainingRecordSubmitDto */ void trainingAndAssessmentRecordsAdded(PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto); } cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonTrainingService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,63 @@ package com.ruoyi.personnel.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.personnel.dto.PersonTrainingDto; import com.ruoyi.personnel.pojo.PersonTraining; import com.ruoyi.personnel.pojo.PersonTrainingDetailed; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * <p> * å¹è®è®¡å æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-11 01:11:49 */ public interface PersonTrainingService extends IService<PersonTraining> { IPage<PersonTrainingDto> personTrainingSelect(Page page, String compilerName, String departmentId); void personTrainingImport(MultipartFile file, PersonTraining training); void personTrainingDelete(Integer id); void reviewAnnualPersonnelTraining(PersonTraining training); void approveAnnualPersonnelTraining(PersonTraining training); /** * 导åºäººåå¹è®è®¡å * @param id * @param response */ void exportPersonTraining(Integer id, HttpServletResponse response); /** * 导åºäººåå¹è®ä¸èæ ¸è®°å½ * @param id * @param response */ void exportPersonTrainingRecord(Integer id, HttpServletResponse response); /** * 人åå¹è®è¯¦æ éä»¶æ°å¢ * @param trainingDetailedId * @param file * @return */ boolean uploadTrainingDetailedFile(Integer trainingDetailedId, MultipartFile file); /** * æ¥è¯¢ä»å¹´äººåå¹è®ä¿¡æ¯ * @return */ List<PersonTrainingDetailed> getThisYearTrainingDetailed(); } cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java
@@ -1,336 +1,340 @@ //package com.ruoyi.personnel.service.impl; // //import com.alibaba.excel.EasyExcel; //import com.alibaba.excel.ExcelWriter; //import com.alibaba.excel.write.metadata.WriteSheet; //import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; //import com.alibaba.fastjson2.JSON; //import com.alibaba.fastjson2.JSONObject; //import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; //import com.baomidou.mybatisplus.core.metadata.IPage; //import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; //import com.baomidou.mybatisplus.core.toolkit.Wrappers; //import com.baomidou.mybatisplus.extension.plugins.pagination.Page; //import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; //import com.ruoyi.common.core.domain.entity.DepartmentDto; //import com.ruoyi.common.core.domain.entity.DepartmentLims; //import com.ruoyi.common.core.domain.entity.User; //import com.ruoyi.common.utils.QueryWrappers; //import com.ruoyi.framework.exception.ErrorException; //import com.ruoyi.personnel.dto.PersonBasicInfoDto; //import com.ruoyi.personnel.dto.UserPageDto; //import com.ruoyi.personnel.mapper.AnnexMapper; //import com.ruoyi.personnel.mapper.PersonBasicInfoFileMapper; //import com.ruoyi.personnel.mapper.PersonBasicInfoMapper; //import com.ruoyi.personnel.mapper.PersonBasicInfoWorkMapper; //import com.ruoyi.personnel.pojo.Annex; //import com.ruoyi.personnel.pojo.PersonBasicInfo; //import com.ruoyi.personnel.pojo.PersonBasicInfoFile; //import com.ruoyi.personnel.pojo.PersonBasicInfoWork; //import com.ruoyi.personnel.service.PersonBasicInfoService; //import com.ruoyi.system.mapper.DepartmentLimsMapper; //import com.ruoyi.system.mapper.UserMapper; //import org.apache.poi.xwpf.usermodel.XWPFTable; //import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; //import org.springframework.beans.BeanUtils; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.beans.factory.annotation.Value; //import org.springframework.stereotype.Service; //import org.springframework.transaction.annotation.Transactional; //import org.springframework.web.multipart.MultipartFile; // //import javax.annotation.Resource; //import javax.servlet.http.HttpServletResponse; //import java.io.File; //import java.io.IOException; //import java.io.InputStream; //import java.io.OutputStream; //import java.net.URLEncoder; //import java.time.LocalDateTime; //import java.time.format.DateTimeFormatter; //import java.util.*; //import java.util.stream.Collectors; // ///** // * <p> // * æå¡å®ç°ç±» // * </p> // * // * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ // * @since 2024-08-30 09:19:57 // */ // //@Service //@Transactional(rollbackFor = Exception.class) //public class PersonBasicInfoServiceImpl extends ServiceImpl<PersonBasicInfoMapper, PersonBasicInfo> implements PersonBasicInfoService { // // @Autowired // private DepartmentLimsMapper departmentMapper; // @Value("${file.path}") // private String imgUrl; // @Value("${wordUrl}") // private String wordUrl; // @Resource // private UserMapper userMapper; // @Resource // private AnnexMapper annexMapper; // @Resource // private PersonBasicInfoFileMapper personBasicInfoFileMapper; // @Resource // private PersonBasicInfoWorkMapper personBasicInfoWorkMapper; // // @Override // public List<DepartmentDto> selectCNSAPersonTree() { // List<DepartmentDto> departments = departmentMapper.selectDepartment(); // List<DepartmentDto> limsUser = baseMapper.selectLimsUser(); // departments.addAll(limsUser); // //è·åç¶èç¹ // return departments.stream().filter(m -> m.getFatherId() == null).peek( // (m) -> m.setChildren(getChildren(m, departments)) // ).collect(Collectors.toList()); // } // // @Override // public Map<String,Object> getCNASPersonnelInfo(Integer userId) { // Map<String, Object> map = new HashMap<>(); // Map<Integer,List<DepartmentLims>> childrenMap = new HashMap<>(); // List<DepartmentLims> deptS = departmentMapper.selectList(null); // for (DepartmentLims dept : deptS) { // if(!Objects.isNull(dept.getFatherId())) { // if(!childrenMap.containsKey(dept.getFatherId())) { // childrenMap.put(dept.getFatherId(),new ArrayList<>()); // } // childrenMap.get(dept.getFatherId()).add(dept); // } // } // // ç¶èç¹ // List<DepartmentLims> deptF = new ArrayList<>(); // for (DepartmentLims dept : deptS) { // if(Objects.isNull(dept.getFatherId())) { // deptF.add(buildTree(dept,childrenMap)); // } // } // map.put("department",deptF); // map.put("PersonBasicInfoDto",baseMapper.getCNASPersonnelInfo(userId)); // map.put("annexList",annexMapper.selectList(new LambdaQueryWrapper<Annex>().eq(Annex::getUserId,userId))); // return map; // } // // private DepartmentLims buildTree(DepartmentLims departmentLims, Map<Integer,List<DepartmentLims>> childrenMap) { // if(childrenMap.containsKey(departmentLims.getId())) { // departmentLims.setChildren(childrenMap.get(departmentLims.getId())); // for (DepartmentLims departmentLims1 : departmentLims.getChildren()) { // buildTree(departmentLims1,childrenMap); // } // } // return departmentLims; // } // // @Override // public void saveCNASPersonnelInfo(PersonBasicInfoDto personBasicInfoDto) { // User user = new User(); // user.setId(personBasicInfoDto.getUserId()); // user.setAccount(personBasicInfoDto.getAccount()); // user.setName(personBasicInfoDto.getName()); // user.setNameEn(personBasicInfoDto.getNameEn()); // user.setAge(personBasicInfoDto.getAge()); // user.setPhone(personBasicInfoDto.getPhone()); // user.setEmail(personBasicInfoDto.getEmail()); // user.setSignatureUrl(personBasicInfoDto.getSignatureUrl()); // user.setPictureUrl(personBasicInfoDto.getPictureUrl()); // user.setDepartLimsId(personBasicInfoDto.getDepartLimsId()); // userMapper.updateById(user); // PersonBasicInfo personBasicInfo = JSONObject.parseObject(JSON.toJSONString(personBasicInfoDto), PersonBasicInfo.class); // PersonBasicInfo one = baseMapper.selectOne(new LambdaQueryWrapper<PersonBasicInfo>() // .eq(PersonBasicInfo::getUserId, personBasicInfoDto.getUserId())); // if(Objects.isNull(one)) { // baseMapper.insert(personBasicInfo); // }else { // baseMapper.updateById(personBasicInfo); // } // } // // @Override // public IPage<Map<String, Object>> basicInformationOfPersonnelSelectPage(Page page, String name, Integer departmentId) { // return baseMapper.selectPersonBasecInfoAndUser(page, name, departmentId); // } // // @Override // public void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception { // ArrayList<PersonBasicInfoDto> data = new ArrayList<>(); // List<User> list = userMapper.selectUserDtoPageList(new Page(-1, -1), QueryWrappers.queryWrappers(userPageDto)).getRecords(); // for (User user : list) { // PersonBasicInfoDto personBasicInfoDto = new PersonBasicInfoDto(); // PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId())); // if (ObjectUtils.isNotEmpty(personBasicInfo)) { // BeanUtils.copyProperties(personBasicInfo, personBasicInfoDto); // } // personBasicInfoDto.setName(user.getName()); // personBasicInfoDto.setAccount(user.getAccount()); // personBasicInfoDto.setPhone(ObjectUtils.isNotEmpty(user.getPhone()) ? user.getPhone() : " "); // data.add(personBasicInfoDto); // } // response.setContentType("application/vnd.ms-excel"); // response.setCharacterEncoding("UTF-8"); // String fileName = URLEncoder.encode("人ååºæ¬ä¿¡æ¯å表导åº", "UTF-8"); // response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); // try { // // æ°å»ºExcelWriter // ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build(); // WriteSheet mainSheet = EasyExcel.writerSheet(0, "人ååºæ¬ä¿¡æ¯å¯¼åº").head(PersonBasicInfoDto.class).build(); // excelWriter.write(data, mainSheet); // // å ³éæµ // excelWriter.finish(); // } catch (IOException e) { // throw new RuntimeException("导åºå¤±è´¥"); // } // } // // @Override // public String exportPersonBasicInfoById(Integer id, HttpServletResponse response) { // Map<String, Object> userMap = baseMapper.selectexportPersonBasic(id); // User user = userMapper.selectById(id); // PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId())); // if (ObjectUtils.isEmpty(personBasicInfo)){ // throw new ErrorException("è¯¥ç¨æ·çåºæ¬ä¿¡æ¯æ²¡æå½å ¥,ææ æ³å¯¼åº"); // } // // è¯ä»¶ // List<Annex> annexList = annexMapper.selectList(Wrappers.<Annex>lambdaQuery() // .eq(Annex::getUserId, id)); // // å·¥ä½ç»å // List<PersonBasicInfoWork> personBasicInfoWorks = personBasicInfoWorkMapper.selectList(Wrappers.<PersonBasicInfoWork>lambdaQuery() // .eq(PersonBasicInfoWork::getUserId, id)); // // List<PersonBasicInfoWorkDto> workList = personBasicInfoWorks.stream().map(basicInfoWork -> { // PersonBasicInfoWorkDto personBasicInfoWorkDto = new PersonBasicInfoWorkDto(); // personBasicInfoWorkDto.setWorkExperience(basicInfoWork.getWorkExperience()); // personBasicInfoWorkDto.setFill("主è¦å·¥ä½ç»å\nMain work experienceâ1"); // return personBasicInfoWorkDto; // }).collect(Collectors.toList()); // // // æ£æ¥å表é¿åº¦å¹¶å¡«å 空对象 // while (annexList.size() < 10) { // annexList.add(new Annex()); // } // // // æ£æ¥å表é¿åº¦å¹¶å¡«å 空对象 // while (workList.size() < 4) { // workList.add(new PersonBasicInfoWorkDto()); // } // // // è·åè·¯å¾ // InputStream inputStream = this.getClass().getResourceAsStream("/static/person-basic-info.docx"); // Configure configure = Configure.builder() // .bind("annexList", new HackLoopTableRenderPolicy()) // .bind("workList", new HackLoopTableRenderPolicy()) // .build(); // XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( // new HashMap<String, Object>() {{ // put("user", userMap); // put("annexList", annexList); // put("workList", workList); // }}); // // try { // response.setContentType("application/msword"); // String fileName = URLEncoder.encode( // userMap.get("name") + "äººåæ¡£æ¡", "UTF-8"); // response.setHeader("Content-disposition", // "attachment;filename=" + fileName + ".docx"); // OutputStream os = response.getOutputStream(); // template.write(os); // os.flush(); // os.close(); // } catch (Exception e) { // e.printStackTrace(); // throw new RuntimeException("导åºå¤±è´¥"); // } // // return null; // } // // /** // * 人åå¹è®åºæ¬ä¿¡æ¯éä»¶æ°å¢ // * @param userId // * @param file // * @return // */ // @Override // public boolean uploadBasicInfoFile(Integer userId, MultipartFile file) { // if (userId == null) { // throw new ErrorException("缺å°äººåid"); // } // // String urlString; // String pathName; // String path; // String filename = file.getOriginalFilename(); // String contentType = file.getContentType(); // PersonBasicInfoFile personBasicInfoFile = new PersonBasicInfoFile(); // personBasicInfoFile.setUserId(userId); // personBasicInfoFile.setFileName(filename); // if (contentType != null && contentType.startsWith("image/")) { // // æ¯å¾ç // path = imgUrl; // personBasicInfoFile.setType(1); // } else { // // æ¯æä»¶ // path = wordUrl; // personBasicInfoFile.setType(2); // } // try { // File realpath = new File(path); // if (!realpath.exists()) { // realpath.mkdirs(); // } // pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename(); // urlString = realpath + "/" + pathName; // file.transferTo(new File(urlString)); // personBasicInfoFile.setFileUrl(pathName); // personBasicInfoFileMapper.insert(personBasicInfoFile); // return true; // } catch (Exception e) { // e.printStackTrace(); // System.err.println("éä»¶ä¸ä¼ é误"); // return false; // } // } // // /** // * é彿¥è¯¢åèç¹ // * @param root æ ¹èç¹ // * @param all ææèç¹ // * @return æ ¹èç¹ä¿¡æ¯ // */ // private List<DepartmentDto> getChildren(DepartmentDto root, List<DepartmentDto> all) { // if (ObjectUtils.isNotEmpty(root.getId())) { // return all.stream().filter(m -> Objects.equals(m.getFatherId(), root.getId())).peek( // (m) -> m.setChildren(getChildren(m, all)) // ).collect(Collectors.toList()); // } else { // return Collections.emptyList(); // } // } // // // æ°´å¹³åå¹¶åå æ ¼ // private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) { // for (int i = fromCol; i <= toCol; i++) { // if (i == fromCol) { // table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); // } else { // table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE); // } // } // } // // // åç´åå¹¶åå æ ¼ // private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) { // for (int i = fromRow; i <= toRow; i++) { // if (i == fromRow) { // table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); // } else { // table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); // } // } // } //} package com.ruoyi.personnel.service.impl; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.write.metadata.WriteSheet; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.ruoyi.common.core.domain.entity.DepartmentDto; import com.ruoyi.common.core.domain.entity.DepartmentLims; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.common.utils.QueryWrappers; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; import com.ruoyi.personnel.dto.PersonBasicInfoDto; import com.ruoyi.personnel.dto.PersonBasicInfoWorkDto; import com.ruoyi.personnel.dto.UserPageDto; import com.ruoyi.personnel.mapper.AnnexMapper; import com.ruoyi.personnel.mapper.PersonBasicInfoFileMapper; import com.ruoyi.personnel.mapper.PersonBasicInfoMapper; import com.ruoyi.personnel.mapper.PersonBasicInfoWorkMapper; import com.ruoyi.personnel.pojo.Annex; import com.ruoyi.personnel.pojo.PersonBasicInfo; import com.ruoyi.personnel.pojo.PersonBasicInfoFile; import com.ruoyi.personnel.pojo.PersonBasicInfoWork; import com.ruoyi.personnel.service.PersonBasicInfoService; import com.ruoyi.system.mapper.DepartmentLimsMapper; import com.ruoyi.system.mapper.UserMapper; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; /** * <p> * æå¡å®ç°ç±» * </p> * * @author æ±èéµ·éç½ç»ç§ææéå ¬å¸ * @since 2024-08-30 09:19:57 */ @Service @Transactional(rollbackFor = Exception.class) public class PersonBasicInfoServiceImpl extends ServiceImpl<PersonBasicInfoMapper, PersonBasicInfo> implements PersonBasicInfoService { @Autowired private DepartmentLimsMapper departmentMapper; @Value("${file.path}") private String imgUrl; @Value("${wordUrl}") private String wordUrl; @Resource private UserMapper userMapper; @Resource private AnnexMapper annexMapper; @Resource private PersonBasicInfoFileMapper personBasicInfoFileMapper; @Resource private PersonBasicInfoWorkMapper personBasicInfoWorkMapper; @Override public List<DepartmentDto> selectCNSAPersonTree() { List<DepartmentDto> departments = departmentMapper.selectDepartment(); List<DepartmentDto> limsUser = baseMapper.selectLimsUser(); departments.addAll(limsUser); //è·åç¶èç¹ return departments.stream().filter(m -> m.getFatherId() == null).peek( (m) -> m.setChildren(getChildren(m, departments)) ).collect(Collectors.toList()); } @Override public Map<String,Object> getCNASPersonnelInfo(Integer userId) { Map<String, Object> map = new HashMap<>(); Map<Integer,List<DepartmentLims>> childrenMap = new HashMap<>(); List<DepartmentLims> deptS = departmentMapper.selectList(null); for (DepartmentLims dept : deptS) { if(!Objects.isNull(dept.getFatherId())) { if(!childrenMap.containsKey(dept.getFatherId())) { childrenMap.put(dept.getFatherId(),new ArrayList<>()); } childrenMap.get(dept.getFatherId()).add(dept); } } // ç¶èç¹ List<DepartmentLims> deptF = new ArrayList<>(); for (DepartmentLims dept : deptS) { if(Objects.isNull(dept.getFatherId())) { deptF.add(buildTree(dept,childrenMap)); } } map.put("department",deptF); map.put("PersonBasicInfoDto",baseMapper.getCNASPersonnelInfo(userId)); map.put("annexList",annexMapper.selectList(new LambdaQueryWrapper<Annex>().eq(Annex::getUserId,userId))); return map; } private DepartmentLims buildTree(DepartmentLims departmentLims, Map<Integer,List<DepartmentLims>> childrenMap) { if(childrenMap.containsKey(departmentLims.getId())) { departmentLims.setChildren(childrenMap.get(departmentLims.getId())); for (DepartmentLims departmentLims1 : departmentLims.getChildren()) { buildTree(departmentLims1,childrenMap); } } return departmentLims; } @Override public void saveCNASPersonnelInfo(PersonBasicInfoDto personBasicInfoDto) { User user = new User(); user.setId(personBasicInfoDto.getUserId()); user.setAccount(personBasicInfoDto.getAccount()); user.setName(personBasicInfoDto.getName()); user.setNameEn(personBasicInfoDto.getNameEn()); user.setAge(personBasicInfoDto.getAge()); user.setPhone(personBasicInfoDto.getPhone()); user.setEmail(personBasicInfoDto.getEmail()); user.setSignatureUrl(personBasicInfoDto.getSignatureUrl()); user.setPictureUrl(personBasicInfoDto.getPictureUrl()); user.setDepartLimsId(personBasicInfoDto.getDepartLimsId()); userMapper.updateById(user); PersonBasicInfo personBasicInfo = JSONObject.parseObject(JSON.toJSONString(personBasicInfoDto), PersonBasicInfo.class); PersonBasicInfo one = baseMapper.selectOne(new LambdaQueryWrapper<PersonBasicInfo>() .eq(PersonBasicInfo::getUserId, personBasicInfoDto.getUserId())); if(Objects.isNull(one)) { baseMapper.insert(personBasicInfo); }else { baseMapper.updateById(personBasicInfo); } } @Override public IPage<Map<String, Object>> basicInformationOfPersonnelSelectPage(Page page, String name, Integer departmentId) { return baseMapper.selectPersonBasecInfoAndUser(page, name, departmentId); } @Override public void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception { ArrayList<PersonBasicInfoDto> data = new ArrayList<>(); List<User> list = userMapper.selectList(null); for (User user : list) { PersonBasicInfoDto personBasicInfoDto = new PersonBasicInfoDto(); PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId())); if (ObjectUtils.isNotEmpty(personBasicInfo)) { BeanUtils.copyProperties(personBasicInfo, personBasicInfoDto); } personBasicInfoDto.setName(user.getName()); personBasicInfoDto.setAccount(user.getAccount()); personBasicInfoDto.setPhone(ObjectUtils.isNotEmpty(user.getPhone()) ? user.getPhone() : " "); data.add(personBasicInfoDto); } response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("UTF-8"); String fileName = URLEncoder.encode("人ååºæ¬ä¿¡æ¯å表导åº", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); try { // æ°å»ºExcelWriter ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build(); WriteSheet mainSheet = EasyExcel.writerSheet(0, "人ååºæ¬ä¿¡æ¯å¯¼åº").head(PersonBasicInfoDto.class).build(); excelWriter.write(data, mainSheet); // å ³éæµ excelWriter.finish(); } catch (IOException e) { throw new RuntimeException("导åºå¤±è´¥"); } } @Override public String exportPersonBasicInfoById(Integer id, HttpServletResponse response) { Map<String, Object> userMap = baseMapper.selectexportPersonBasic(id); User user = userMapper.selectById(id); PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId())); if (ObjectUtils.isEmpty(personBasicInfo)){ throw new ErrorException("è¯¥ç¨æ·çåºæ¬ä¿¡æ¯æ²¡æå½å ¥,ææ æ³å¯¼åº"); } // è¯ä»¶ List<Annex> annexList = annexMapper.selectList(Wrappers.<Annex>lambdaQuery() .eq(Annex::getUserId, id)); // å·¥ä½ç»å List<PersonBasicInfoWork> personBasicInfoWorks = personBasicInfoWorkMapper.selectList(Wrappers.<PersonBasicInfoWork>lambdaQuery() .eq(PersonBasicInfoWork::getUserId, id)); List<PersonBasicInfoWorkDto> workList = personBasicInfoWorks.stream().map(basicInfoWork -> { PersonBasicInfoWorkDto personBasicInfoWorkDto = new PersonBasicInfoWorkDto(); personBasicInfoWorkDto.setWorkExperience(basicInfoWork.getWorkExperience()); personBasicInfoWorkDto.setFill("主è¦å·¥ä½ç»å\nMain work experienceâ1"); return personBasicInfoWorkDto; }).collect(Collectors.toList()); // æ£æ¥å表é¿åº¦å¹¶å¡«å 空对象 while (annexList.size() < 10) { annexList.add(new Annex()); } // æ£æ¥å表é¿åº¦å¹¶å¡«å 空对象 while (workList.size() < 4) { workList.add(new PersonBasicInfoWorkDto()); } // è·åè·¯å¾ InputStream inputStream = this.getClass().getResourceAsStream("/static/person-basic-info.docx"); Configure configure = Configure.builder() .bind("annexList", new HackLoopTableRenderPolicy()) .bind("workList", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap<String, Object>() {{ put("user", userMap); put("annexList", annexList); put("workList", workList); }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( userMap.get("name") + "äººåæ¡£æ¡", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx"); OutputStream os = response.getOutputStream(); template.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("导åºå¤±è´¥"); } return null; } /** * 人åå¹è®åºæ¬ä¿¡æ¯éä»¶æ°å¢ * @param userId * @param file * @return */ @Override public boolean uploadBasicInfoFile(Integer userId, MultipartFile file) { if (userId == null) { throw new ErrorException("缺å°äººåid"); } String urlString; String pathName; String path; String filename = file.getOriginalFilename(); String contentType = file.getContentType(); PersonBasicInfoFile personBasicInfoFile = new PersonBasicInfoFile(); personBasicInfoFile.setUserId(userId); personBasicInfoFile.setFileName(filename); if (contentType != null && contentType.startsWith("image/")) { // æ¯å¾ç path = imgUrl; personBasicInfoFile.setType(1); } else { // æ¯æä»¶ path = wordUrl; personBasicInfoFile.setType(2); } try { File realpath = new File(path); if (!realpath.exists()) { realpath.mkdirs(); } pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename(); urlString = realpath + "/" + pathName; file.transferTo(new File(urlString)); personBasicInfoFile.setFileUrl(pathName); personBasicInfoFileMapper.insert(personBasicInfoFile); return true; } catch (Exception e) { e.printStackTrace(); System.err.println("éä»¶ä¸ä¼ é误"); return false; } } /** * é彿¥è¯¢åèç¹ * @param root æ ¹èç¹ * @param all ææèç¹ * @return æ ¹èç¹ä¿¡æ¯ */ private List<DepartmentDto> getChildren(DepartmentDto root, List<DepartmentDto> all) { if (ObjectUtils.isNotEmpty(root.getId())) { return all.stream().filter(m -> Objects.equals(m.getFatherId(), root.getId())).peek( (m) -> m.setChildren(getChildren(m, all)) ).collect(Collectors.toList()); } else { return Collections.emptyList(); } } // æ°´å¹³åå¹¶åå æ ¼ private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) { for (int i = fromCol; i <= toCol; i++) { if (i == fromCol) { table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART); } else { table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE); } } } // åç´åå¹¶åå æ ¼ private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) { for (int i = fromRow; i <= toRow; i++) { if (i == fromRow) { table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART); } else { table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE); } } } } cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingDetailedServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,85 @@ package com.ruoyi.personnel.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.common.numgen.NumberGenerator; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.personnel.dto.PersonTrainingDetailedDto; import com.ruoyi.personnel.excel.PersonTrainingDetailedUpload; import com.ruoyi.personnel.mapper.PersonTrainingDetailedMapper; import com.ruoyi.personnel.pojo.PersonTrainingDetailed; import com.ruoyi.personnel.service.PersonTrainingDetailedService; import com.ruoyi.system.mapper.UserMapper; import lombok.AllArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; /** * <p> * å¹è®è®¡åè¯¦æ æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-11 01:46:27 */ @Service @Transactional(rollbackFor = Exception.class) @AllArgsConstructor public class PersonTrainingDetailedServiceImpl extends ServiceImpl<PersonTrainingDetailedMapper, PersonTrainingDetailed> implements PersonTrainingDetailedService { private UserMapper userMapper; @Override public void importExcel(List<PersonTrainingDetailedUpload> list, Integer planId) { List<PersonTrainingDetailed> personTrainingDetailedList = new ArrayList<>(); list.forEach(i -> { PersonTrainingDetailed personTrainingDetailed = new PersonTrainingDetailed(); BeanUtils.copyProperties(i, personTrainingDetailed); // å¹é è®²å¸ User user = userMapper.selectOne(Wrappers.<User>lambdaQuery() .eq(User::getName, i.getTrainingLecturerName())); if (ObjectUtils.isEmpty(user)) { throw new ErrorException("æªæ¾å°è¯¥è®²å¸ï¼" + i.getTrainingLecturerName()); } personTrainingDetailed.setTrainingLecturerId(user.getId()); personTrainingDetailed.setPlanId(planId); personTrainingDetailed.setState(3); personTrainingDetailed.setTrainingDate(i.getTrainingDate()); personTrainingDetailedList.add(personTrainingDetailed); }); // æ¹éæ°å¢ if (CollectionUtils.isNotEmpty(personTrainingDetailedList)) { baseMapper.insertBatchSomeColumn(personTrainingDetailedList); } } @Override public void deleteAnnualPlanDetailTable(String ids) { String[] split = ids.split(","); if (split.length > 0) { for (String s : split) { baseMapper.deleteById(s); } } } @Override public IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page, String trainingLecturerName, String courseCode, String trainingDate, Integer id, Integer userId) { return baseMapper.queryTheAnnualPlanDetailsTable(page, trainingLecturerName, courseCode, trainingDate, id, userId, null); } } cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,177 @@ package com.ruoyi.personnel.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.ruoyi.common.core.domain.entity.InformationNotification; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.WxCpUtils; import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; import com.ruoyi.personnel.dto.PersonTrainingRecordDto; import com.ruoyi.personnel.dto.PersonTrainingRecordListDto; import com.ruoyi.personnel.dto.PersonTrainingRecordSubmitDto; import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto; import com.ruoyi.personnel.mapper.PersonTrainingRecordMapper; import com.ruoyi.personnel.pojo.PersonTrainingDetailed; import com.ruoyi.personnel.pojo.PersonTrainingRecord; import com.ruoyi.personnel.service.PersonTrainingDetailedService; import com.ruoyi.personnel.service.PersonTrainingRecordService; import com.ruoyi.system.mapper.UserMapper; import com.ruoyi.system.service.InformationNotificationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; /** * <p> * å¹è®è®°å½ æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-12 04:50:48 */ @Transactional(rollbackFor = Exception.class) @Service public class PersonTrainingRecordServiceImpl extends ServiceImpl<PersonTrainingRecordMapper, PersonTrainingRecord> implements PersonTrainingRecordService { @Autowired private PersonTrainingDetailedService personTrainingDetailedService; @Resource private InformationNotificationService informationNotificationService; @Resource private ThreadPoolTaskExecutor threadPoolTaskExecutor; @Resource private UserMapper userMapper; @Override public List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName) { return baseMapper.trainingAndAssessmentRecordsPage(trainingDetailedId, userName); } @Override public void deleteTrainingAndAssessmentRecords(String ids) { String[] split = ids.split(","); if (split.length > 0) { for (String s : split) { baseMapper.deleteById(s); } } } @Override public IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, String userName, Integer userId, Integer departLimsId) { return baseMapper.personnelTrainingPersonnel(page, userName, userId, departLimsId); } @Override public void claimOfTrainingAndAssessmentRecords(Boolean claimAndClaim, Integer courseId) { } @Override public IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year) { return baseMapper.queryPersonnelDetailsOfUserIdAndYear(page, userId, year); } @Override public void exportTrainingRecordAddTrainingDate(Integer userId, Integer trainingDate, HttpServletResponse response) { // æ¥è¯¢äººåäººä¿¡æ¯ PersonTrainingRecordListDto trainingRecordListDto = baseMapper.selectUserTraining(userId); // æ¥è¯¢å¹è®è®°å½ List<TrainingRecordPersonDetailedDto> personDetailedDtos = baseMapper.selectPersonDetailedDtosByTrainingDate(userId, trainingDate); // è·åè·¯å¾ InputStream inputStream = this.getClass().getResourceAsStream("/static/training-record.docx"); Configure configure = Configure.builder() .bind("personnelDetailsLisat", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap<String, Object>() {{ put("traning", trainingRecordListDto); put("personnelDetailsLisat", personDetailedDtos); }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( "人åå¹è®è®°å½å¯¼åº", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx"); OutputStream os = response.getOutputStream(); template.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("导åºå¤±è´¥"); } } /** * å¹è®æäº¤ * @param personTrainingRecordSubmitDto */ @Override public void trainingAndAssessmentRecordsAdded(PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) { personTrainingDetailedService.update(Wrappers.<PersonTrainingDetailed>lambdaUpdate() .eq(PersonTrainingDetailed::getId, personTrainingRecordSubmitDto.getTrainingDetailedId()) .set(PersonTrainingDetailed::getAssessmentMethod, personTrainingRecordSubmitDto.getAssessmentMethod()) .set(PersonTrainingDetailed::getPlaceTraining, personTrainingRecordSubmitDto.getPlaceTraining()) .set(PersonTrainingDetailed::getOpeningTime, personTrainingRecordSubmitDto.getOpeningTime()) .set(PersonTrainingDetailed::getAssessmentUserId, personTrainingRecordSubmitDto.getAssessmentUserId()) .set(PersonTrainingDetailed::getState, personTrainingRecordSubmitDto.getState())); // åéæ¶æ¯éç¥ if (personTrainingRecordSubmitDto.getState().equals(2)) { PersonTrainingDetailed personPersonnelCapacity = personTrainingDetailedService.getById(personTrainingRecordSubmitDto.getTrainingDetailedId()); Integer userId = SecurityUtils.getUserId().intValue(); User user = userMapper.selectById(userId); // æ¶æ¯åé InformationNotification info = new InformationNotification(); // åé人 info.setCreateUser(user.getName()); info.setMessageType("6"); info.setTheme("CNAS人åå¹è®è®¡åå¾ è¯ä»·"); info.setContent("å¹è®å 容:" + personPersonnelCapacity.getTrainingContent() + "ç人åå¹è®å¾ è¯ä»·"); info.setSenderId(userId); // æ¥æ¶äºº info.setConsigneeId(personTrainingRecordSubmitDto.getAssessmentUserId()); info.setJumpPath("a6-personnel"); informationNotificationService.addInformationNotification(info); // åéä¼ä¸å¾®ä¿¡éç¥ threadPoolTaskExecutor.execute(() -> { // æ¥è¯¢æ¥æ¶äºº User personnel = userMapper.selectById(personTrainingRecordSubmitDto.getAssessmentUserId()); String message = ""; message += "CNAS人åå¹è®è®¡åå¾ è¯ä»·"; message += "\n请å»èµæºç®¡ç-人å-人åå¹è®è®¡å"; message += "\n" + "å¹è®å 容:" + personPersonnelCapacity.getTrainingContent() + "ç人åå¹è®å¾ è¯ä»·"; //åéä¼ä¸å¾®ä¿¡æ¶æ¯éç¥ try { WxCpUtils.inform(personnel.getAccount(), message, null); } catch (Exception e) { throw new RuntimeException(e); } }); } } } cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonTrainingServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,429 @@ package com.ruoyi.personnel.service.impl; import com.alibaba.excel.EasyExcel; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.deepoove.poi.data.Pictures; import com.ruoyi.common.core.domain.entity.InformationNotification; import com.ruoyi.common.core.domain.entity.User; import com.ruoyi.common.utils.DateImageUtil; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.WxCpUtils; import com.ruoyi.framework.exception.ErrorException; import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; import com.ruoyi.personnel.dto.PersonTrainingDetailedDto; import com.ruoyi.personnel.dto.PersonTrainingDto; import com.ruoyi.personnel.dto.PersonTrainingRecordDto; import com.ruoyi.personnel.dto.TrainingRecordExportDto; import com.ruoyi.personnel.excel.PersonTrainingDetailedListener; import com.ruoyi.personnel.excel.PersonTrainingDetailedUpload; import com.ruoyi.personnel.mapper.PersonTrainingDetailedFileMapper; import com.ruoyi.personnel.mapper.PersonTrainingDetailedMapper; import com.ruoyi.personnel.mapper.PersonTrainingMapper; import com.ruoyi.personnel.mapper.PersonTrainingRecordMapper; import com.ruoyi.personnel.pojo.PersonTraining; import com.ruoyi.personnel.pojo.PersonTrainingDetailed; import com.ruoyi.personnel.pojo.PersonTrainingDetailedFile; import com.ruoyi.personnel.service.PersonTrainingDetailedService; import com.ruoyi.personnel.service.PersonTrainingService; import com.ruoyi.system.mapper.UserMapper; import com.ruoyi.system.service.InformationNotificationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Optional; /** * <p> * å¹è®è®¡å æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2024-10-11 01:11:49 */ @Service @Transactional(rollbackFor = Exception.class) public class PersonTrainingServiceImpl extends ServiceImpl<PersonTrainingMapper, PersonTraining> implements PersonTrainingService { @Autowired private PersonTrainingDetailedService personTrainingDetailedService; @Autowired private UserMapper userMapper; @Autowired private PersonTrainingDetailedMapper personTrainingDetailedMapper; @Autowired private PersonTrainingRecordMapper personTrainingRecordMapper; @Autowired private PersonTrainingDetailedFileMapper personTrainingDetailedFileMapper; @Resource private InformationNotificationService informationNotificationService; @Resource private ThreadPoolTaskExecutor threadPoolTaskExecutor; @Value("${file.path}") private String imgUrl; @Value("${wordUrl}") private String wordUrl; @Override public IPage<PersonTrainingDto> personTrainingSelect(Page page, String compilerName, String departmentId) { return baseMapper.personTrainingSelect(page, compilerName, departmentId); } @Override public void personTrainingImport(MultipartFile file, PersonTraining training) { Integer userId = SecurityUtils.getUserId().intValue(); // 年度计åç¶çº§æ°å¢æ°æ® PersonTraining personSupervisePlan = new PersonTraining(); String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf(".")); personSupervisePlan.setFileName(fileName); personSupervisePlan.setPlanYear(training.getPlanYear()); personSupervisePlan.setCompilerId(userId); personSupervisePlan.setReviewerId(training.getReviewerId()); personSupervisePlan.setCompilationDate(LocalDateTime.now()); baseMapper.insert(personSupervisePlan); User user = userMapper.selectById(userId); // æ¶æ¯åé InformationNotification info = new InformationNotification(); // åé人 info.setCreateUser(user.getName()); info.setMessageType("6"); info.setTheme("CNASå¹è®è®¡åå®¡æ ¸éç¥"); info.setContent("æ¨æä¸æ¡å¹è®è®¡åå¾ å®¡æ ¸"); info.setSenderId(userId); // æ¥æ¶äºº info.setConsigneeId(training.getApproverId()); info.setJumpPath("a6-personnel"); informationNotificationService.addInformationNotification(info); // åéä¼ä¸å¾®ä¿¡éç¥ threadPoolTaskExecutor.execute(() -> { // æ¥è¯¢æ¥æ¶äºº User personnel = userMapper.selectById(training.getApproverId()); String message = ""; message += "CNASå¹è®è®¡åå®¡æ ¸éç¥"; message += "\n请å»èµæºç®¡ç-人å-å¹è®è®¡åå¡«å"; message += "\n" + fileName + "çå¹è®è®¡åå¾ å®¡æ ¸"; //åéä¼ä¸å¾®ä¿¡æ¶æ¯éç¥ try { WxCpUtils.inform(personnel.getAccount(), message, null); } catch (Exception e) { throw new RuntimeException(e); } }); // 年度计åè¯¦æ æ°å¢ try { PersonTrainingDetailedListener personSupervisePlanDetailsListener = new PersonTrainingDetailedListener(personTrainingDetailedService); personSupervisePlanDetailsListener.setPlanId(personSupervisePlan.getId()); EasyExcel.read(file.getInputStream(), PersonTrainingDetailedUpload.class, personSupervisePlanDetailsListener).sheet().doRead(); } catch (IOException e) { e.printStackTrace(); } } @Override public void personTrainingDelete(Integer id) { personTrainingDetailedService.remove(Wrappers.<PersonTrainingDetailed>lambdaQuery() .eq(PersonTrainingDetailed::getPlanId, id)); baseMapper.deleteById(id); } @Override public void reviewAnnualPersonnelTraining(PersonTraining training) { PersonTraining personTraining = new PersonTraining(); personTraining.setId(training.getId()); personTraining.setApproverId(training.getApproverId());// æ·»å æ¹å人 personTraining.setAuditDate(LocalDateTime.now()); personTraining.setAuditRemarks(training.getAuditRemarks()); personTraining.setReviewerStatus(training.getReviewerStatus()); PersonTraining old = baseMapper.selectById(training.getId()); // æ¶æ¯åé Integer userId = SecurityUtils.getUserId().intValue(); User user = userMapper.selectById(userId); InformationNotification info = new InformationNotification(); // åé人 info.setCreateUser(user.getName()); info.setMessageType("6"); info.setTheme("CNASå¹è®è®¡åå®¡æ ¸éç¥"); info.setContent("æ¨æä¸æ¡å¹è®è®¡åå¾ æ¹å"); info.setSenderId(userId); // æ¥æ¶äºº info.setConsigneeId(training.getApproverId()); info.setJumpPath("a6-personnel"); informationNotificationService.addInformationNotification(info); // åéä¼ä¸å¾®ä¿¡éç¥ threadPoolTaskExecutor.execute(() -> { // æ¥è¯¢æ¥æ¶äºº User personnel = userMapper.selectById(training.getApproverId()); String message = ""; message += "CNASå¹è®è®¡åæ¹åéç¥"; message += "\n请å»èµæºç®¡ç-人å-å¹è®è®¡åå¡«å"; message += "\n" + old.getFileName() + "çå¹è®è®¡åå¾ æ¹å"; //åéä¼ä¸å¾®ä¿¡æ¶æ¯éç¥ try { WxCpUtils.inform(personnel.getAccount(), message, null); } catch (Exception e) { throw new RuntimeException(e); } }); baseMapper.updateById(personTraining); } @Override public void approveAnnualPersonnelTraining(PersonTraining training) { LambdaUpdateWrapper<PersonTraining> wrapper = Wrappers.<PersonTraining>lambdaUpdate() .eq(PersonTraining::getId, training.getId()) .set(PersonTraining::getApprovalDate, LocalDateTime.now()) .set(PersonTraining::getApprovalRemarks, training.getApprovalRemarks()) .set(PersonTraining::getApprovalStatus, training.getApprovalStatus()); baseMapper.update(new PersonTraining(), wrapper); } /** * 导åºäººåå¹è®è®¡å * @param id * @param response */ @Override public void exportPersonTraining(Integer id, HttpServletResponse response) { // æ¥è¯¢è¯¦æ PersonTraining personTraining = baseMapper.selectById(id); //è·åæäº¤äººçç¾åå°å String writeUrl = userMapper.selectById(personTraining.getCompilerId()).getSignatureUrl(); if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) { throw new ErrorException("æ¾ä¸å°æ£éªäººçç¾å"); } //è·å夿 ¸äººçç¾åå°å String examineUrl = null; if (personTraining.getReviewerId() != null) { examineUrl = userMapper.selectById(personTraining.getReviewerId()).getSignatureUrl(); if (StringUtils.isBlank(examineUrl)) { throw new ErrorException("æ¾ä¸å°å¤æ ¸äººçç¾å"); } } //è·åæ¹å人çç¾åå°å String ratifyUrl = null; if (personTraining.getApproverId() != null) { ratifyUrl = userMapper.selectById(personTraining.getApproverId()).getSignatureUrl(); if (StringUtils.isBlank(ratifyUrl)) { throw new ErrorException("æ¾ä¸å°å¤æ ¸äººçç¾å"); } } // æ¥è¯¢è¯¦æ List<PersonTrainingDetailedDto> detailedDtos = personTrainingDetailedMapper.selectTrainingList(id); int index = 1; for (PersonTrainingDetailedDto detailedDto : detailedDtos) { detailedDto.setTrainingDateString(detailedDto.getTrainingDate()); detailedDto.setIndex(index); index++; } // è·åè·¯å¾ InputStream inputStream = this.getClass().getResourceAsStream("/static/person-training.docx"); String finalExamineUrl = examineUrl; String finalRatifyUrl = ratifyUrl; Configure configure = Configure.builder() .bind("trainingDetailedList", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap<String, Object>() {{ put("year", personTraining.getPlanYear()); put("trainingDetailedList", detailedDtos); put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null); put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null); put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null); put("writeDateUrl", personTraining.getCompilationDate() != null ? Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getCompilationDate())).create() : null); put("examineDateUrl", personTraining.getAuditDate() != null ? Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getAuditDate())).create() : null); put("ratifyDateUrl", personTraining.getApprovalDate() != null ? Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getApprovalDate())).create() : null); }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( "人åå¹è®è®¡å导åº", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx"); OutputStream os = response.getOutputStream(); template.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("导åºå¤±è´¥"); } } /** * 导åºäººåå¹è®ä¸èæ ¸è®°å½ * @param id * @param response */ @Override public void exportPersonTrainingRecord(Integer id, HttpServletResponse response) { // æ¥è¯¢äººåå¹è®æç» PersonTrainingDetailedDto detailedDto = personTrainingDetailedMapper.selectTrainingDetail(id); // æ¥è¯¢å¹è®ç人å List<PersonTrainingRecordDto> recordDtos = personTrainingRecordMapper.selectListByTrainingDetailedId(id); List<TrainingRecordExportDto> exportDtoList = new ArrayList<>(); TrainingRecordExportDto exportDto = new TrainingRecordExportDto(); int count = 0; for (PersonTrainingRecordDto recordDto : recordDtos) { switch (count) { case 0: exportDto.setUserName1(recordDto.getUserName()); exportDto.setDepartment1(recordDto.getDepartment()); exportDto.setExaminationResults1(recordDto.getExaminationResults()); count ++; break; case 1: exportDto.setUserName2(recordDto.getUserName()); exportDto.setDepartment2(recordDto.getDepartment()); exportDto.setExaminationResults2(recordDto.getExaminationResults()); exportDtoList.add(exportDto); exportDto = new TrainingRecordExportDto(); count = 0; break; } } exportDtoList.add(exportDto); // è´¨éè´è´£äºº String assessmentUserUrl = null; if (detailedDto.getAssessmentUserId() != null) { assessmentUserUrl = userMapper.selectById(detailedDto.getAssessmentUserId()).getSignatureUrl(); if (StringUtils.isBlank(assessmentUserUrl)) { throw new ErrorException("æ¾ä¸å°è¯ä»·äººçç¾å"); } } // è·åè·¯å¾ InputStream inputStream = this.getClass().getResourceAsStream("/static/person-training-record.docx"); Configure configure = Configure.builder() .bind("trainingRecordsList", new HackLoopTableRenderPolicy()) .build(); String finalAssessmentUserUrl = assessmentUserUrl; XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap<String, Object>() {{ put("trainingDetail", detailedDto); put("trainingRecordsList", exportDtoList); put("assessmentUserUrl", StringUtils.isNotBlank(finalAssessmentUserUrl) ? Pictures.ofLocal(imgUrl + "/" + finalAssessmentUserUrl).create() : null); }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( "å¹è®ä¸èæ ¸è®°å½å¯¼åº", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx"); OutputStream os = response.getOutputStream(); template.write(os); os.flush(); os.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("导åºå¤±è´¥"); } } /** * 人åå¹è®è¯¦æ éä»¶æ°å¢ * @param trainingDetailedId * @param file * @return */ @Override public boolean uploadTrainingDetailedFile(Integer trainingDetailedId, MultipartFile file) { if (trainingDetailedId == null) { throw new ErrorException("缺å°éªæ¶id"); } String urlString; String pathName; String path; String filename = file.getOriginalFilename(); String contentType = file.getContentType(); PersonTrainingDetailedFile detailedFile = new PersonTrainingDetailedFile(); detailedFile.setTrainingDetailedId(trainingDetailedId); detailedFile.setFileName(filename); if (contentType != null && contentType.startsWith("image/")) { // æ¯å¾ç path = imgUrl; detailedFile.setType(1); } else { // æ¯æä»¶ path = wordUrl; detailedFile.setType(2); } try { File realpath = new File(path); if (!realpath.exists()) { realpath.mkdirs(); } pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename(); urlString = realpath + "/" + pathName; file.transferTo(new File(urlString)); detailedFile.setFileUrl(pathName); personTrainingDetailedFileMapper.insert(detailedFile); return true; } catch (Exception e) { e.printStackTrace(); System.err.println("éä»¶ä¸ä¼ é误"); return false; } } /** * æ¥è¯¢ä»å¹´äººåå¹è®ä¿¡æ¯ * @return */ @Override public List<PersonTrainingDetailed> getThisYearTrainingDetailed() { return personTrainingDetailedMapper.getThisYearTrainingDetailed(); } } cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,65 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.personnel.mapper.PersonBasicInfoMapper"> <select id="selectLimsUser" resultType="com.ruoyi.common.core.domain.entity.DepartmentDto"> SELECT u.id userId, u.name, SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1) AS fatherId FROM user u where u.is_custom = 0 and u.depart_lims_id is not null and u.depart_lims_id != '' </select> <select id="getCNASPersonnelInfo" resultType="com.ruoyi.personnel.dto.PersonBasicInfoDto"> SELECT * FROM user u left join cnas_person_basic_info cpbi on cpbi.user_id = u.id where u.id = #{userId} </select> <select id="selectPersonBasecInfoAndUser" resultType="java.util.Map"> select u.id userId, u.`name` name, u.account account, DATE_FORMAT(cpbi.group_time, '%Y-%m-%d') groupTime, cpbi.native_place nativePlace, cpbi.identity_card identityCard, cpbi.id_address idAddress, u.phone telephone, cpbi.graduated_institutions1 graduatedInstitutions1, cpbi.major1 major1, DATE_FORMAT(cpbi.graduation_time1, '%Y-%m-%d') graduationTime1, cpbi.official_academic_redentials officialAcademicRedentials, cpbi.highest_degree highestDegree, cpbi.professional_title professionalTitle from user u left join cnas_person_basic_info cpbi on cpbi.user_id = u.id left join user u1 on u1.id = u.create_user <where> FIND_IN_SET(#{departmentId},u.depart_lims_id) <if test="name != null and name != ''"> and u.name like concat('%',#{name},'%') </if> </where> </select> <!-- å¯¼åºæ¥è¯¢äººåä¿¡æ¯ --> <select id="selectexportPersonBasic" resultType="java.util.Map"> select DATE_FORMAT(cpbi.last_update_time, '%Yå¹´%mæ%dæ¥') lastUpdateTimeString, u.account, u.`name`, cpbi.sex, cpbi.post_name postName, u.age, DATE_FORMAT(cpbi.working_time, '%Yå¹´%mæ') workingTimeString, cpbi.major1, DATE_FORMAT(cpbi.graduation_time1, '%Yå¹´%mæ') graduationTime1string, cpbi.official_academic_redentials officialAcademicRedentials, cpbi.graduated_institutions1 graduatedInstitutions1, cpbi.remarks from user u left join cnas_person_basic_info cpbi on cpbi.user_id = u.id where u.id = #{userId} </select> </mapper> cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,46 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.personnel.mapper.PersonTrainingMapper"> <!-- æ ¹æ®å建人çé¨é¨çéæ°æ®ï¼å¯æ¯å建人å¯è½æªåé é¨é¨ä¹éè¦æ¥ç --> <select id="personTrainingSelect" resultType="com.ruoyi.personnel.dto.PersonTrainingDto"> SELECT cpt.*, u1.name compiler_name, u2.name reviewer_name, u3.name approver_name, u4.name create_user_name FROM cnas_person_training cpt LEFT JOIN user u1 ON cpt.compiler_id = u1.id LEFT JOIN user u2 ON cpt.reviewer_id = u2.id LEFT JOIN user u3 ON cpt.approver_id = u3.id LEFT JOIN user u4 ON cpt.create_user = u4.id <where> <if test="departLimsId != null and departLimsId != ''"> and FIND_IN_SET(#{departLimsId}, u4.depart_lims_id) </if> <if test="compilerName != null and compilerName != ''"> and u4.name like concat('%', #{compilerName}, '%') </if> </where> union SELECT cpt.*, u1.name compiler_name, u2.name reviewer_name, u3.name approver_name, u4.name create_user_name FROM cnas_person_training cpt LEFT JOIN user u1 ON cpt.compiler_id = u1.id LEFT JOIN user u2 ON cpt.reviewer_id = u2.id LEFT JOIN user u3 ON cpt.approver_id = u3.id LEFT JOIN user u4 ON cpt.create_user = u4.id WHERE u4.depart_lims_id is not null and length(u4.depart_lims_id) = 0 <if test="compilerName != null and compilerName != ''"> and u4.name like concat('%', #{compilerName}, '%') </if> </select> </mapper> cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,126 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.personnel.mapper.PersonTrainingRecordMapper"> <select id="trainingAndAssessmentRecordsPage" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordDto"> select cptr.*, u.account, u.name user_name, u.phone, r.name role_name from cnas_person_training_record cptr left join user u on u.id = cptr.user_id left join role r on r.id = u.role_id where cptr.course_id = #{trainingDetailedId} <if test="userName != null and userName != ''"> and u.name like concat('%', #{userName}, '%') </if> </select> <select id="personnelTrainingPersonnel" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordListDto"> select u.name, u.account, dl.name depart_lims_name, cpbi.professional_title, cpbi.official_academic_redentials, u.id user_id from user u left join cnas_person_basic_info cpbi on cpbi.user_id = u.id left join department_lims dl on dl.id = SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1) where u.is_custom = 0 <if test="userName != '' and userName != null and userName != 'null'"> and u.name like concat('%', #{userName}, '%') </if> <if test="userId != null and userId != ''"> and u.id = #{userId} </if> <if test="departLimsId != null and departLimsId != ''"> and FIND_IN_SET(#{departLimsId}, u.depart_lims_id) </if> </select> <select id="queryPersonnelDetails" resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto"> select cptd.training_date, cptd.training_content, cptd.class_hour, cptr.examination_results, cptd.remarks from cnas_person_training_record cptr inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id <where> <if test="userId != null and userId != ''"> and cptr.user_id = #{userId} </if> </where> </select> <!-- æ ¹æ®è¯¦æ idæ¥è¯¢å¹è®ä¿¡æ¯ --> <select id="selectListByTrainingDetailedId" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordDto"> select cptr.*, u.name userName, dl.name department from cnas_person_training_record cptr left join user u on u.id = cptr.user_id left join department_lims dl on find_in_set(dl.id, u.depart_lims_id) and dl.id != 1 where cptr.course_id = #{trainingDetailedId} </select> <!-- æ ¹æ®idæ¥è¯¢äººåä¿¡æ¯ --> <select id="selectUserTraining" resultType="com.ruoyi.personnel.dto.PersonTrainingRecordListDto"> select u.name, u.account, dl.name depart_lims_name, cpbi.professional_title, cpbi.official_academic_redentials, cpbi.unit_time, cpbi.major1, u.id user_id, DATE_FORMAT(cpbi.unit_time, '%Y-%m-%d') AS unitTimeSting from user u left join cnas_person_basic_info cpbi on cpbi.user_id = u.id left join department_lims dl on dl.id = SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1) where u.is_custom = 0 and u.id = #{userId} </select> <!-- æ ¹æ®ç¨æ·idæ¥è¯¢äººåè®°å½ --> <select id="selectPersonDetailedDtos" resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto"> select cptd.training_date, cptd.training_content, cptd.class_hour, cptr.examination_results, cptd.remarks, DATE_FORMAT(cptd.training_date, '%Y-%m-%d') AS trainingDateString from cnas_person_training_record cptr inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id and cptr.user_id = #{userId} <where> <if test="year!= null and year!= ''"> and YEAR(cptd.training_date) = ${year} </if> </where> </select> <!--æ ¹æ®ç¨æ·idå年份æ¥è¯¢äººåæç» å¹è®è®°å½--> <select id="queryPersonnelDetailsOfUserIdAndYear" resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto"> select cptd.training_date, cptd.training_content, cptd.class_hour, cptr.examination_results, cptd.remarks from cnas_person_training_record cptr inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id <where> <if test="userId != null and userId != ''"> and cptr.user_id = #{userId} </if> <if test="year!= null and year!= ''"> and YEAR(cptd.training_date) = ${year} </if> </where> </select> <!-- æ ¹æ®ç¨æ·idå年份æ¥è¯¢äººåæç» å¹è®è®°å½å¯¼åº --> <select id="selectPersonDetailedDtosByTrainingDate" resultType="com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto"> select cptd.training_date, cptd.training_content, cptd.class_hour, cptr.examination_results, cptd.remarks, DATE_FORMAT(cptd.training_date, '%Y-%m-%d') AS trainingDateString from cnas_person_training_record cptr inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id and cptr.user_id = #{userId} <where> <if test="year!= null and year!= ''"> and YEAR(cptd.training_date) = ${year} </if> </where> </select> </mapper>