From a5e9c8082a14226ca068e2b0c9ce883c7aee2dfb Mon Sep 17 00:00:00 2001 From: zhangyue Date: Fri, 6 Feb 2026 14:08:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=B8=AA=E4=BA=BA=E6=A1=A3?= =?UTF-8?q?=E6=A1=88=E4=B8=8B=E8=BD=BD=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=9F=B9=E8=AE=AD=E7=94=B3=E8=AF=B7=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/template/attendance_record.docx | Bin 0 -> 13546 bytes .../resources/templates/template/exam.docx | Bin 0 -> 14046 bytes .../templates/template/studentInfo.docx | Bin 0 -> 13000 bytes .../templates/template/studyRecord.docx | Bin 0 -> 13605 bytes .../edu/web/archives/ArchivesController.java | 2 +- .../training/TrainingApplyUserController.java | 16 +- .../query/archives/ArchivesQueryExe.java | 245 +++++++++++++++++- .../training/TrainingApplyUserQueryExe.java | 14 +- .../service/TrainingApplyUserServiceImpl.java | 6 + .../service/archives/ArchivesServiceImpl.java | 37 ++- .../training/TrainingApplyUserServiceI.java | 4 + .../zcloud/edu/dto/archives/ArchivesQry.java | 3 + .../archives/ArchivesReviewCO.java | 8 +- .../dto/clientobject/study/StudentSignCO.java | 4 + .../training/TrainingApplyUserCO.java | 40 +++ .../dto/data/archives/PersonArchivesDTO.java | 12 + .../TrainingApplyUserPhonePageQry.java | 33 +++ .../model/archives/ArchivesPdfFileE.java | 18 ++ .../model/archives/PersonArchivesE.java | 64 +++++ .../edu/domain/model/study/StudentSignE.java | 9 +- .../dataobject/TrainingApplyUserDO.java | 39 +++ .../dataobject/study/StudentDO.java | 1 + .../mapper/TrainingApplyUserMapper.java | 4 + .../impl/TrainingApplyUserRepositoryImpl.java | 17 +- .../training/TrainingApplyUserRepository.java | 3 + .../mapper/TrainingApplyUserMapper.xml | 23 +- 26 files changed, 564 insertions(+), 38 deletions(-) create mode 100644 start/src/main/resources/templates/template/attendance_record.docx create mode 100644 start/src/main/resources/templates/template/exam.docx create mode 100644 start/src/main/resources/templates/template/studentInfo.docx create mode 100644 start/src/main/resources/templates/template/studyRecord.docx create mode 100644 web-client/src/main/java/com/zcloud/edu/dto/training/TrainingApplyUserPhonePageQry.java diff --git a/start/src/main/resources/templates/template/attendance_record.docx b/start/src/main/resources/templates/template/attendance_record.docx new file mode 100644 index 0000000000000000000000000000000000000000..b7d0e1377c7621ad3cc7bf1a8bfb98d90f0dac50 GIT binary patch literal 13546 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 downloadPersonArchives(@RequestBody ArchivesQry qry) { archivesService.downloadPersonArchives(qry); return null; - } + } } diff --git a/web-adapter/src/main/java/com/zcloud/edu/web/training/TrainingApplyUserController.java b/web-adapter/src/main/java/com/zcloud/edu/web/training/TrainingApplyUserController.java index 737e3d1..0343937 100644 --- a/web-adapter/src/main/java/com/zcloud/edu/web/training/TrainingApplyUserController.java +++ b/web-adapter/src/main/java/com/zcloud/edu/web/training/TrainingApplyUserController.java @@ -1,17 +1,18 @@ package com.zcloud.edu.web.training; -import com.zcloud.edu.api.training.TrainingApplyUserServiceI; -import com.zcloud.edu.dto.training.TrainingApplyUserAddCmd; -import com.zcloud.edu.dto.training.TrainingApplyUserPageQry; -import com.zcloud.edu.dto.training.TrainingApplyUserUpdateCmd; -import com.zcloud.edu.dto.clientobject.training.TrainingApplyUserCO; import com.alibaba.cola.dto.MultiResponse; import com.alibaba.cola.dto.PageResponse; import com.alibaba.cola.dto.Response; import com.alibaba.cola.dto.SingleResponse; import com.jjb.saas.framework.auth.model.SSOUser; import com.jjb.saas.framework.auth.utils.AuthContext; +import com.zcloud.edu.api.training.TrainingApplyUserServiceI; +import com.zcloud.edu.dto.clientobject.training.TrainingApplyUserCO; +import com.zcloud.edu.dto.training.TrainingApplyUserAddCmd; +import com.zcloud.edu.dto.training.TrainingApplyUserPageQry; +import com.zcloud.edu.dto.training.TrainingApplyUserPhonePageQry; +import com.zcloud.edu.dto.training.TrainingApplyUserUpdateCmd; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; @@ -38,6 +39,11 @@ public class TrainingApplyUserController { return trainingApplyUserService.add(cmd); } + @ApiOperation("根据手机号和所属相关方查询分页") + @PostMapping("/listPageByPhone") + public PageResponse listPageByPhone(@RequestBody TrainingApplyUserPhonePageQry qry) { + return trainingApplyUserService.listPageByPhone(qry); + } @ApiOperation("分页") @PostMapping("/list") public PageResponse page(@RequestBody TrainingApplyUserPageQry qry) { diff --git a/web-app/src/main/java/com/zcloud/edu/command/query/archives/ArchivesQueryExe.java b/web-app/src/main/java/com/zcloud/edu/command/query/archives/ArchivesQueryExe.java index d641234..d1bc804 100644 --- a/web-app/src/main/java/com/zcloud/edu/command/query/archives/ArchivesQueryExe.java +++ b/web-app/src/main/java/com/zcloud/edu/command/query/archives/ArchivesQueryExe.java @@ -1,18 +1,49 @@ package com.zcloud.edu.command.query.archives; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.unit.DataUnit; import com.alibaba.cola.dto.PageResponse; +import com.alibaba.cola.dto.SingleResponse; +import com.deepoove.poi.data.PictureRenderData; +import com.deepoove.poi.data.PictureType; +import com.deepoove.poi.data.Pictures; import com.zcloud.edu.command.convertor.archives.ArchivesPdfFileCoConvertor; +import com.zcloud.edu.command.convertor.study.StudentCoConvertor; +import com.zcloud.edu.command.convertor.study.StudentExamRecordCoConvertor; +import com.zcloud.edu.command.convertor.study.StudentExamRecordItemCoConvertor; +import com.zcloud.edu.domain.model.archives.ArchivesPdfFileE; +import com.zcloud.edu.domain.model.archives.PersonArchivesE; +import com.zcloud.edu.domain.model.study.*; import com.zcloud.edu.dto.archives.ArchivesPdfFilePageQry; +import com.zcloud.edu.dto.archives.ArchivesQry; import com.zcloud.edu.dto.clientobject.archives.ArchivesPdfFileCO; +import com.zcloud.edu.dto.clientobject.study.StudentExamRecordCO; +import com.zcloud.edu.dto.clientobject.study.StudentExamRecordItemCO; +import com.zcloud.edu.dto.data.archives.PersonArchivesDTO; import com.zcloud.edu.persistence.dataobject.archives.ArchivesPdfFileDO; +import com.zcloud.edu.persistence.dataobject.study.*; import com.zcloud.edu.persistence.repository.archives.ArchivesPdfFileRepository; +import com.zcloud.edu.persistence.repository.study.*; +import com.zcloud.gbscommon.utils.DateUtil; import com.zcloud.gbscommon.utils.PageQueryHelper; +import com.zcloud.gbscommon.utils.Tools; +import com.zcloud.gbscommon.utils.WordToPdfUtil; +import com.zcloud.gbscommon.zcloudimgfiles.facade.ZcloudImgFilesFacade; +import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.io.output.ByteArrayOutputStream; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; -import java.util.List; -import java.util.Map; +import java.lang.reflect.InvocationTargetException; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; /** @@ -26,7 +57,26 @@ import java.util.Map; public class ArchivesQueryExe { private final ArchivesPdfFileRepository archivesPdfFileRepository; private final ArchivesPdfFileCoConvertor archivesPdfFileCoConvertor; + private final StudentRepository studentRepository; + private final StudentCoConvertor studentCoConvertor; + private final ClassRepository classRepository; + private final ClassCurriculumRepository classCurriculumRepository; + private final ClassCurriculumChapterRepository classCurriculumChapterRepository; + private final StudentSignRepository studentSignRepository; + private final StudentExamRecordRepository studentExamRecordRepository; + private final StudentExamRecordItemRepository studentExamRecordItemRepository; + private final StudentExamRecordItemCoConvertor studentExamRecordItemCoConvertor; + private static String prefixUrl; + // = "https://jpfz.qhdsafety.com/gbsFileTest/"; +// public static Integer corePoolSize; + @Value("${file.url}") + public void setPrefixUrl(String prefixUrlProperties) { + prefixUrl = prefixUrlProperties; + } + + @DubboReference + private ZcloudImgFilesFacade zcloudImgFilesFacade; /** * 分页 * @@ -40,18 +90,195 @@ public class ArchivesQueryExe { return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex()); } - public void execte1(){ - System.out.println(1); + public PersonArchivesDTO downloadPersonArchives(ArchivesQry qry){ + + ClassE classE = null; + List classCurList = new ArrayList(); + List classChapterEList = new ArrayList(); + List studentSignEList = new ArrayList(); + HashMap params = new HashMap(); + + // 学员信息 + StudentDO studentDO = studentRepository.getById(qry.getStuId()); + byte[] userIdCardBytes = Base64.getDecoder().decode(studentDO.getUserIdCard()); + String userIdCardString = new String(userIdCardBytes); + studentDO.setUserIdCard(userIdCardString); + StudentE studentE = new StudentE(); + BeanUtils.copyProperties(studentDO, studentE); + + // 班级信息 + ClassDO classDO = classRepository.getByClassId(studentDO.getClassId()); + classE = new ClassE(); + BeanUtils.copyProperties(classDO, classE); + + if (qry.getTypeList().contains(2) || qry.getTypeList().contains(3) || qry.getTypeList().contains(4)) { + + + params.put("classId", studentDO.getClassId()); + // 课程信息 + List curEList = classCurriculumRepository.listAll(params); + classCurList = BeanUtil.copyToList(curEList, ClassCurriculumE.class); + } + + if (qry.getTypeList().contains(2)) { + // 课件信息 + List classChapterList = classCurriculumChapterRepository.listVideoByClassId(classE.getClassId()); + classChapterEList = BeanUtil.copyToList(classChapterList, ClassCurriculumChapterE.class); + } + if (qry.getTypeList().contains(3)) { + // 学员人脸记录 + StudentDO studentUrl = studentRepository.findFaceUrlByPhone(studentDO.getPhone()); + studentE.setUserAvatarUrl(studentUrl.getUserAvatarUrl()); + } + if (qry.getTypeList().contains(4)) { + // 签到照片 + params.put("studentId", studentDO.getStudentId()); + List studentSignList = studentSignRepository.listAllByStudentId(params); + studentSignEList = BeanUtil.copyToList(studentSignList, StudentSignE.class); + } + + PersonArchivesE personArchivesE = new PersonArchivesE(); + personArchivesE.initDownload(studentE, + classE, + classCurList, + classChapterEList, + studentSignEList); + PersonArchivesDTO personArchivesDTO = new PersonArchivesDTO(); + BeanUtils.copyProperties(personArchivesE, personArchivesDTO); + if (qry.getTypeList().contains(5)) { + StudentExamRecordDO studentExamRecordDO = studentExamRecordRepository.getInfoByStudentId(studentDO.getStudentId()); + StudentExamRecordCO studentExamRecordCO = new StudentExamRecordCO(); + BeanUtils.copyProperties(studentExamRecordDO, studentExamRecordCO); + List recordList = studentExamRecordItemRepository.listByExamRecordId(studentExamRecordDO.getStudentExamRecordId()); + List recordCoList = studentExamRecordItemCoConvertor.converDOsToCOs(recordList); + studentExamRecordCO.setExamRecordItemList(recordCoList); + personArchivesDTO.setStudentExamRecord(studentExamRecordCO); + } + // 新增档案下载记录 + ArchivesPdfFileE archivesPdfFileE = new ArchivesPdfFileE(); + archivesPdfFileE.init("student", personArchivesDTO.getStudentId(), 1); + ArchivesPdfFileDO archivesPdfFileDO = new ArchivesPdfFileDO(); + BeanUtils.copyProperties(archivesPdfFileE, archivesPdfFileDO); + archivesPdfFileRepository.save(archivesPdfFileDO); + personArchivesDTO.setArchivesPdfFileId(archivesPdfFileDO.getId()); + return personArchivesDTO; } @Async("archivesAsyncExecutor") - public void execte2(){ - // 5s后执行 + public void execteGeneratePdf(ArchivesQry qry, PersonArchivesDTO params){ + List byteArrayList = new ArrayList<>(); + if (qry.getTypeList().contains(2)){ + byteArrayList.add(execteAttendanceRecord(params)); + } + if (qry.getTypeList().contains(3)){ + byteArrayList.add(execteStudentRecord(params)); + } + if (qry.getTypeList().contains(4)){ + byteArrayList.add(execteStudyRecord(params)); + } + if (qry.getTypeList().contains(5)){ + byteArrayList.add(execteExamRecord(params)); + } + try { - Thread.sleep(5000); - } catch (InterruptedException e) { + byte[] pdf = WordToPdfUtil.mergeWordToPdf(byteArrayList); + String filepath = zcloudImgFilesFacade.saveFile(pdf, params.getName()+"-"+params.getClassName()+"-"+ DateUtil.getSdfTimes()+".pdf","personArchives", params.getClassCorpinfoId()); + + ArchivesPdfFileE archivesPdfFileE = new ArchivesPdfFileE(); + archivesPdfFileE.initEdit(params.getArchivesPdfFileId(), filepath, 1, null); + + ArchivesPdfFileDO archivesPdfFileDO = new ArchivesPdfFileDO(); + BeanUtils.copyProperties(archivesPdfFileE, archivesPdfFileDO); +// archivesPdfFileRepository.updateById(archivesPdfFileDO); + } catch (Exception e) { throw new RuntimeException(e); } - System.out.println(2); } + + public byte[] execteAttendanceRecord(PersonArchivesDTO params){ + try { + Map workItem = PropertyUtils.describe( params); + String templatePath = "templates/template/attendance_record.docx"; + ByteArrayOutputStream outputStream = Tools.renderTemplate(templatePath, workItem); + return outputStream.toByteArray(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public byte[] execteStudentRecord(PersonArchivesDTO params){ + try { + Map workItem = PropertyUtils.describe( params); + PictureRenderData picture = Pictures.ofUrl(prefixUrl + params.getUserAvatarUrl(), PictureType.JPEG).size(100, 100).create();//网络图片地址 + workItem.put("img", picture); + String templatePath = "templates/template/studentInfo.docx"; + ByteArrayOutputStream outputStream = Tools.renderTemplate(templatePath, workItem); + return outputStream.toByteArray(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + + + public byte[] execteStudyRecord(PersonArchivesDTO params){ + try { + Map workItem = PropertyUtils.describe( params); + if(!ObjectUtils.isEmpty(params.getSignFaceUrl())){ + PictureRenderData signFacePicture = Pictures.ofUrl(prefixUrl + params.getSignFaceUrl(), PictureType.JPEG).size(100, 100).create();//网络图片地址 + workItem.put("signFacePicture", signFacePicture); + } + if(!ObjectUtils.isEmpty(params.getExamSignFlag())){ + PictureRenderData examSignFacePicture = Pictures.ofUrl(prefixUrl + params.getExamSignFaceUrl(), PictureType.JPEG).size(100, 100).create();//网络图片地址 + workItem.put("examSignFacePicture", examSignFacePicture); + } + String templatePath = "templates/template/studyRecord.docx"; + ByteArrayOutputStream outputStream = Tools.renderTemplate(templatePath, workItem); + return outputStream.toByteArray(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + public byte[] execteExamRecord(PersonArchivesDTO params){ + try { + Map workItem = PropertyUtils.describe( params.getStudentExamRecord()); + ArrayList workList = CollUtil.newArrayList(); + AtomicInteger atomicIndex = new AtomicInteger(1); + params.getStudentExamRecord().getExamRecordItemList().forEach(item -> { + try { + Map itemMap = PropertyUtils.describe( item); + int index = atomicIndex.getAndIncrement(); + itemMap.put("index", index); + if(item.getQuestionType() == 1){ + itemMap.put("questionTypeName", "单选题"); + } else if(item.getQuestionType() == 2){ + itemMap.put("questionTypeName", "多选题"); + }else if(item.getQuestionType() == 3){ + itemMap.put("questionTypeName", "判断题"); + } + workList.add(itemMap); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + workItem.put("examRecord_list", workList); +// if(!ObjectUtils.isEmpty(params.getStudentExamRecord().getSignUrl())){ +// PictureRenderData signPicture = Pictures.ofUrl(prefixUrl + params.getStudentExamRecord().getSignUrl(), PictureType.JPEG).size(100, 100).create();//网络图片地址 +// workItem.put("signPicture", signPicture); +// } +// if(!ObjectUtils.isEmpty(params.getExamSignFlag())){ +// PictureRenderData examSignFacePicture = Pictures.ofUrl(prefixUrl + params.getExamSignFaceUrl(), PictureType.JPEG).size(100, 100).create();//网络图片地址 +// workItem.put("examSignFacePicture", examSignFacePicture); +// } + String templatePath = "templates/template/exam.docx"; + ByteArrayOutputStream outputStream = Tools.renderTemplate(templatePath, workItem); + System.out.println("5555555555555"); + return outputStream.toByteArray(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + + } diff --git a/web-app/src/main/java/com/zcloud/edu/command/query/training/TrainingApplyUserQueryExe.java b/web-app/src/main/java/com/zcloud/edu/command/query/training/TrainingApplyUserQueryExe.java index 9b16a9d..326860a 100644 --- a/web-app/src/main/java/com/zcloud/edu/command/query/training/TrainingApplyUserQueryExe.java +++ b/web-app/src/main/java/com/zcloud/edu/command/query/training/TrainingApplyUserQueryExe.java @@ -1,12 +1,13 @@ package com.zcloud.edu.command.query.training; +import com.alibaba.cola.dto.PageResponse; import com.zcloud.edu.command.convertor.training.TrainingApplyUserCoConvertor; -import com.zcloud.edu.dto.training.TrainingApplyUserPageQry; import com.zcloud.edu.dto.clientobject.training.TrainingApplyUserCO; +import com.zcloud.edu.dto.training.TrainingApplyUserPageQry; +import com.zcloud.edu.dto.training.TrainingApplyUserPhonePageQry; import com.zcloud.edu.persistence.dataobject.TrainingApplyUserDO; import com.zcloud.edu.persistence.repository.training.TrainingApplyUserRepository; import com.zcloud.gbscommon.utils.PageQueryHelper; -import com.alibaba.cola.dto.PageResponse; import lombok.AllArgsConstructor; import org.springframework.stereotype.Component; @@ -38,5 +39,14 @@ public class TrainingApplyUserQueryExe { List examCenterCOS = trainingApplyUserCoConvertor.converDOsToCOs(pageResponse.getData()); return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex()); } + + + + public PageResponse executeListPageByPhone(TrainingApplyUserPhonePageQry qry) { + Map params = PageQueryHelper.toHashMap(qry); + PageResponse pageResponse = trainingApplyUserRepository.listPageByPhone(params); + List examCenterCOS = trainingApplyUserCoConvertor.converDOsToCOs(pageResponse.getData()); + return PageResponse.of(examCenterCOS, pageResponse.getTotalCount(), pageResponse.getPageSize(), pageResponse.getPageIndex()); + } } diff --git a/web-app/src/main/java/com/zcloud/edu/service/TrainingApplyUserServiceImpl.java b/web-app/src/main/java/com/zcloud/edu/service/TrainingApplyUserServiceImpl.java index 9c589af..09d61bc 100644 --- a/web-app/src/main/java/com/zcloud/edu/service/TrainingApplyUserServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/edu/service/TrainingApplyUserServiceImpl.java @@ -7,6 +7,7 @@ import com.zcloud.edu.command.training.TrainingApplyUserUpdateExe; import com.zcloud.edu.command.query.training.TrainingApplyUserQueryExe; import com.zcloud.edu.dto.training.TrainingApplyUserAddCmd; import com.zcloud.edu.dto.training.TrainingApplyUserPageQry; +import com.zcloud.edu.dto.training.TrainingApplyUserPhonePageQry; import com.zcloud.edu.dto.training.TrainingApplyUserUpdateCmd; import com.zcloud.edu.dto.clientobject.training.TrainingApplyUserCO; @@ -34,6 +35,11 @@ public class TrainingApplyUserServiceImpl implements TrainingApplyUserServiceI { return trainingApplyUserQueryExe.execute(qry); } + @Override + public PageResponse listPageByPhone(TrainingApplyUserPhonePageQry qry) { + return trainingApplyUserQueryExe.executeListPageByPhone(qry); + } + @Override public SingleResponse add(TrainingApplyUserAddCmd cmd) { diff --git a/web-app/src/main/java/com/zcloud/edu/service/archives/ArchivesServiceImpl.java b/web-app/src/main/java/com/zcloud/edu/service/archives/ArchivesServiceImpl.java index 6b44cea..5a5bbff 100644 --- a/web-app/src/main/java/com/zcloud/edu/service/archives/ArchivesServiceImpl.java +++ b/web-app/src/main/java/com/zcloud/edu/service/archives/ArchivesServiceImpl.java @@ -15,6 +15,7 @@ import com.zcloud.edu.dto.archives.ArchivesReviewAddCmd; import com.zcloud.edu.dto.archives.ArchivesReviewPageQry; import com.zcloud.edu.dto.archives.ArchivesReviewUpdateCmd; import com.zcloud.edu.dto.clientobject.archives.ArchivesReviewCO; +import com.zcloud.edu.dto.data.archives.PersonArchivesDTO; import com.zcloud.gbscommon.utils.Tools; import com.zcloud.gbscommon.utils.WordToPdfUtil; import com.zcloud.gbscommon.zcloudimgfiles.facade.ZcloudImgFilesFacade; @@ -26,7 +27,9 @@ import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** * web-app @@ -47,19 +50,37 @@ public class ArchivesServiceImpl implements ArchivesServiceI { // HashMap workItem = new HashMap<>(); // workItem.put("qry", "555"); // String templatePath = "templates/template/category_score_list.docx"; -// try { + try { // ByteArrayOutputStream outputStream = Tools.renderTemplate(templatePath, workItem); +// workItem.put("qry", "16516851"); +// ByteArrayOutputStream outputStream1 = Tools.renderTemplate(templatePath, workItem); +// +// List byteArrayList = new ArrayList<>(); +// byteArrayList.add(outputStream.toByteArray()); +// byteArrayList.add(outputStream1.toByteArray()); +// byte[] pdf = WordToPdfUtil.mergeWordToPdf(byteArrayList); // byte[] pdfBytes = WordToPdfUtil.convertWordBytesToPdfBytes(outputStream.toByteArray()); -// String s = zcloudImgFilesFacade.saveFile(pdfBytes, "clockSign.pdf","clockSign"); - +// String s = zcloudImgFilesFacade.saveFile(pdf, "clockSign11.pdf","clockSign"); +// // System.out.println(s); -// archivesQueryExe.downloadPersonArchives(); - archivesQueryExe.execte2(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + PersonArchivesDTO personArchivesDTO = archivesQueryExe.downloadPersonArchives(qry); + + // 首页 +// archivesQueryExe.execteHomePage(personArchivesDTO); + // 查询学时证明 + archivesQueryExe.execteGeneratePdf(qry,personArchivesDTO); + // 查询学习档案 +// archivesQueryExe.execteStudyArchives(personArchivesDTO); + // 查询学习记录 +// archivesQueryExe.execteStudyRecord(personArchivesDTO); + // 查询考试记录 +// archivesQueryExe.execteStudentExamRecord(personArchivesDTO); System.out.println("下载成功"); -// } catch (IOException e) { -// throw new RuntimeException(e); -// } } } diff --git a/web-client/src/main/java/com/zcloud/edu/api/training/TrainingApplyUserServiceI.java b/web-client/src/main/java/com/zcloud/edu/api/training/TrainingApplyUserServiceI.java index c174af5..7f83a35 100644 --- a/web-client/src/main/java/com/zcloud/edu/api/training/TrainingApplyUserServiceI.java +++ b/web-client/src/main/java/com/zcloud/edu/api/training/TrainingApplyUserServiceI.java @@ -1,7 +1,9 @@ package com.zcloud.edu.api.training; +import com.zcloud.edu.dto.clientobject.training.TrainingApplyRecordCO; import com.zcloud.edu.dto.training.TrainingApplyUserAddCmd; import com.zcloud.edu.dto.training.TrainingApplyUserPageQry; +import com.zcloud.edu.dto.training.TrainingApplyUserPhonePageQry; import com.zcloud.edu.dto.training.TrainingApplyUserUpdateCmd; import com.zcloud.edu.dto.clientobject.training.TrainingApplyUserCO; @@ -16,6 +18,8 @@ import com.alibaba.cola.dto.SingleResponse; public interface TrainingApplyUserServiceI { PageResponse listPage(TrainingApplyUserPageQry qry); + PageResponse listPageByPhone(TrainingApplyUserPhonePageQry qry); + SingleResponse add(TrainingApplyUserAddCmd cmd); void edit(TrainingApplyUserUpdateCmd cmd); diff --git a/web-client/src/main/java/com/zcloud/edu/dto/archives/ArchivesQry.java b/web-client/src/main/java/com/zcloud/edu/dto/archives/ArchivesQry.java index 61703b2..9c663b2 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/archives/ArchivesQry.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/archives/ArchivesQry.java @@ -24,7 +24,10 @@ public class ArchivesQry { * - `le`: 小于等于比较查询 * - `ne`: 不等比较查询,对应SQL的!=操作符 */ + // 档案类型 1-首页 2-学时证明 3-学员学习档案 4-学习记录 5-考卷信息 private List typeList; + private String studentId; + private Long stuId; } diff --git a/web-client/src/main/java/com/zcloud/edu/dto/clientobject/archives/ArchivesReviewCO.java b/web-client/src/main/java/com/zcloud/edu/dto/clientobject/archives/ArchivesReviewCO.java index aaa3e52..790821c 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/clientobject/archives/ArchivesReviewCO.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/clientobject/archives/ArchivesReviewCO.java @@ -39,7 +39,7 @@ public class ArchivesReviewCO extends ClientObject { private String corpName; //编写时间 @ApiModelProperty(value = "编写时间") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime writeDate; //教材类型 @ApiModelProperty(value = "教材类型") @@ -52,7 +52,7 @@ public class ArchivesReviewCO extends ClientObject { private String compere; //会审时间 @ApiModelProperty(value = "会审时间") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime auditDate; //会审意见 @ApiModelProperty(value = "会审意见") @@ -89,11 +89,11 @@ public class ArchivesReviewCO extends ClientObject { private Integer version; //创建时间 @ApiModelProperty(value = "创建时间") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; //修改时间 @ApiModelProperty(value = "修改时间") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; //创建人id @ApiModelProperty(value = "创建人id") diff --git a/web-client/src/main/java/com/zcloud/edu/dto/clientobject/study/StudentSignCO.java b/web-client/src/main/java/com/zcloud/edu/dto/clientobject/study/StudentSignCO.java index fff21cf..dbfa278 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/clientobject/study/StudentSignCO.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/clientobject/study/StudentSignCO.java @@ -41,6 +41,10 @@ public class StudentSignCO extends ClientObject { @ApiModelProperty(value = "打卡签字路径") private String signUrl; + //学员姓名 + @ApiModelProperty(value = "学员姓名") + private String studentName; + @ApiModelProperty(value = "培训地点") @TableField(exist = false) diff --git a/web-client/src/main/java/com/zcloud/edu/dto/clientobject/training/TrainingApplyUserCO.java b/web-client/src/main/java/com/zcloud/edu/dto/clientobject/training/TrainingApplyUserCO.java index e2b1d3f..f7a7998 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/clientobject/training/TrainingApplyUserCO.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/clientobject/training/TrainingApplyUserCO.java @@ -1,6 +1,7 @@ package com.zcloud.edu.dto.clientobject.training; import com.alibaba.cola.dto.ClientObject; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -38,9 +39,48 @@ public class TrainingApplyUserCO extends ClientObject { //身份证号 @ApiModelProperty(value = "身份证号") private String idCard; + //关联项目 @ApiModelProperty(value = "关联项目") private String projectName; + + + + //申请企业id + @ApiModelProperty(value = "申请企业id") + @TableField(exist = false) + private Long applyCorpinfoId; + //申请企业名称 + @ApiModelProperty(value = "申请企业名称") + @TableField(exist = false) + private String applyCorpinfoName; + //审批企业id + @ApiModelProperty(value = "审批企业id") + @TableField(exist = false) + private Long approvalCorpinfoId; + //审批部门id + @ApiModelProperty(value = "审批部门id") + @TableField(exist = false) + private Long approvalDepartmentId; + //审批用户id + @ApiModelProperty(value = "审批用户id") + @TableField(exist = false) + private Long approvalUserId; + + //审批企业id + @ApiModelProperty(value = "审批企业名称") + @TableField(exist = false) + private String approvalCorpinfoName; + //审批部门id + @ApiModelProperty(value = "审批部门名称") + @TableField(exist = false) + private String approvalDepartmentName; + //审批用户id + @ApiModelProperty(value = "审批用户名称") + @TableField(exist = false) + private String approvalUserName; + + //乐观锁 @ApiModelProperty(value = "乐观锁") private Integer version; diff --git a/web-client/src/main/java/com/zcloud/edu/dto/data/archives/PersonArchivesDTO.java b/web-client/src/main/java/com/zcloud/edu/dto/data/archives/PersonArchivesDTO.java index 8b7367e..2fd8597 100644 --- a/web-client/src/main/java/com/zcloud/edu/dto/data/archives/PersonArchivesDTO.java +++ b/web-client/src/main/java/com/zcloud/edu/dto/data/archives/PersonArchivesDTO.java @@ -1,5 +1,6 @@ package com.zcloud.edu.dto.data.archives; +import com.zcloud.edu.dto.clientobject.study.StudentExamRecordCO; import com.zcloud.edu.dto.clientobject.study.StudentSignCO; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -80,6 +81,9 @@ public class PersonArchivesDTO { //学员状态 0-未学习 1-已签到 2-考试通过 3-未签到 4-考试未通过 @ApiModelProperty(value = "学员状态 0-未学习 1-已签到 2-考试通过 3-未签到 4-考试未通过") private Integer state; + //学员状态 0-未学习 1-已签到 2-考试通过 3-未签到 4-考试未通过 + @ApiModelProperty(value = "学员状态翻译") + private String stateName; //班级名称 @@ -109,6 +113,9 @@ public class PersonArchivesDTO { //机构ID @ApiModelProperty(value = "机构ID") private Long corpinfoId; + + //机构名称 + private String corpName; //状态:1-未申请 2-待开班 3- 培训中 4-培训结束 @ApiModelProperty(value = "状态:1-未申请 2-待开班 3- 培训中 4-培训结束 ") private Integer classState; @@ -140,4 +147,9 @@ public class PersonArchivesDTO { private String examSignFaceUrl; @ApiModelProperty(value = "签字列表") private List signList; + @ApiModelProperty(value = "考试记录") + private StudentExamRecordCO studentExamRecord; + + @ApiModelProperty(value = "档案pdf文件id") + private Long archivesPdfFileId; } diff --git a/web-client/src/main/java/com/zcloud/edu/dto/training/TrainingApplyUserPhonePageQry.java b/web-client/src/main/java/com/zcloud/edu/dto/training/TrainingApplyUserPhonePageQry.java new file mode 100644 index 0000000..26ddbc3 --- /dev/null +++ b/web-client/src/main/java/com/zcloud/edu/dto/training/TrainingApplyUserPhonePageQry.java @@ -0,0 +1,33 @@ +package com.zcloud.edu.dto.training; + +import com.alibaba.cola.dto.PageQuery; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + + +/** +* web-client +* @Author makejava +* @Date 2026-01-12 15:36:36 +*/ +@Data +public class TrainingApplyUserPhonePageQry extends PageQuery { + +/** +* 查询条件操作前缀,支持以下几种数据库查询操作: +* - `like`: 模糊匹配查询,对应SQL的LIKE操作符 +* - `eq`: 等值查询,对应SQL的=操作符 +* - `gt`: 大于比较查询 +* - `lt`: 小于比较查询 +* - `ge`: 大于等于比较查询 +* - `le`: 小于等于比较查询 +* - `ne`: 不等比较查询,对应SQL的!=操作符 +*/ + + @ApiModelProperty(value = "所属相关方(uuid)", name = "eqCorpinfoId", required = false) + private String eqCorpinfoId; + + @ApiModelProperty(value = "手机号" , name = "eqPhone", required = false) + private String eqPhone; +} + diff --git a/web-domain/src/main/java/com/zcloud/edu/domain/model/archives/ArchivesPdfFileE.java b/web-domain/src/main/java/com/zcloud/edu/domain/model/archives/ArchivesPdfFileE.java index 8ad860c..cdc7642 100644 --- a/web-domain/src/main/java/com/zcloud/edu/domain/model/archives/ArchivesPdfFileE.java +++ b/web-domain/src/main/java/com/zcloud/edu/domain/model/archives/ArchivesPdfFileE.java @@ -1,7 +1,9 @@ package com.zcloud.edu.domain.model.archives; import com.jjb.saas.framework.domain.model.BaseE; +import com.zcloud.gbscommon.utils.Tools; import lombok.Data; +import org.springframework.util.ObjectUtils; import java.time.LocalDateTime; @@ -57,5 +59,21 @@ public class ArchivesPdfFileE extends BaseE { private Long createId; //修改人id private Long updateId; + + public void init(String tableName, String tableId, Integer type){ + this.setArchivesPdfFileId(Tools.get32UUID()); + this.setTableName(tableName); + this.setTableId(tableId); + this.setType(type); + this.setStatus(0); + } + public void initEdit(Long id, String filePath, Integer status, String errormsg){ + this.setId(id); + this.setFilePath(filePath); + this.setStatus(status); + if(!ObjectUtils.isEmpty(errormsg)){ + this.setErrormsg(errormsg.length() > 3000 ? errormsg.substring(0, 3000) : errormsg); + } + } } diff --git a/web-domain/src/main/java/com/zcloud/edu/domain/model/archives/PersonArchivesE.java b/web-domain/src/main/java/com/zcloud/edu/domain/model/archives/PersonArchivesE.java index 4d85c18..c343ba1 100644 --- a/web-domain/src/main/java/com/zcloud/edu/domain/model/archives/PersonArchivesE.java +++ b/web-domain/src/main/java/com/zcloud/edu/domain/model/archives/PersonArchivesE.java @@ -116,6 +116,9 @@ public class PersonArchivesE extends BaseE { //机构ID @ApiModelProperty(value = "机构ID") private Long corpinfoId; + + //机构名称 + private String corpName; //状态:1-未申请 2-待开班 3- 培训中 4-培训结束 @ApiModelProperty(value = "状态:1-未申请 2-待开班 3- 培训中 4-培训结束 ") private Integer classState; @@ -144,6 +147,9 @@ public class PersonArchivesE extends BaseE { @ApiModelProperty(value = "考试签到人脸图片路径") private String examSignFaceUrl; + @ApiModelProperty(value = "学员状态翻译") + private String stateName; + public void init(StudentE studentE, ClassE classE, List classCurList) { BeanUtils.copyProperties(studentE, this); setStuId(studentE.getId()); @@ -230,4 +236,62 @@ public class PersonArchivesE extends BaseE { } } + public void initDownload(StudentE studentE, + ClassE classE, + List classCurList, + List chapterEList, + List studentSignEList){ + BeanUtils.copyProperties(studentE, this); + setStuId(studentE.getId()); + if (!ObjectUtils.isEmpty(studentE.getState())){ + setStateName(studentE.getState() == 1 ? "已完成" : "未完成"); + } + if (classE != null){ + setClassName(classE.getName()); + setStartTime(classE.getStartTime()); + setEndTime(classE.getEndTime()); + setTeacherId(classE.getTeacherId()); + setTeacherName(classE.getTeacherName()); + setTrainType(classE.getTrainType()); + setTrainTypeName(classE.getTrainTypeName()); + setTrainingLocation(classE.getTrainingLocation()); + setCorpinfoId(classE.getCorpinfoId()); + setClassState(classE.getState()); + setValidStartTime(classE.getValidStartTime()); + setValidEndTime(classE.getValidEndTime()); + setExamination(classE.getExamination()); + setNumberofexams(classE.getNumberofexams()); + setCorpName(classE.getCorpName()); + setTrainDurationTime(DateUtil.getMinuteSub(classE.getStartTime(), classE.getEndTime())); + } + + if (classCurList != null && classCurList.size() > 0){ + String trainSubject = classCurList.stream().map(ClassCurriculumE::getCurriculumName).collect(Collectors.joining(",")); + setTrainSubject(trainSubject); + BigDecimal videoTotalTime = classCurList.stream() + .map(ClassCurriculumE::getVideoTotalTime) // 假设getBigDecimalField是获取BigDecimal字段的方法 + .filter(bigDecimal -> bigDecimal != null) // 过滤null值,防止空指针异常 + .reduce(BigDecimal.ZERO, BigDecimal::add); + setVideoTotalTime(videoTotalTime); + } + if (chapterEList != null && chapterEList.size() > 0){ + setVideoCount(chapterEList.size()); + } + + if (studentSignEList != null && studentSignEList.size() > 0){ + for (StudentSignE studentSignE : studentSignEList){ + if(studentSignE.getType() == 1 + && !ObjectUtils.isEmpty(studentSignE.getFaceUrl()) + && ObjectUtils.isEmpty(this.getSignFaceUrl()) ){ + this.setSignFaceUrl(studentSignE.getFaceUrl()); + } + if(studentSignE.getType() == 2 + && !ObjectUtils.isEmpty(studentSignE.getFaceUrl()) + && ObjectUtils.isEmpty(this.getExamSignFaceUrl()) ){ + this.setExamSignFaceUrl(studentSignE.getFaceUrl()); + } + } + } + } + } diff --git a/web-domain/src/main/java/com/zcloud/edu/domain/model/study/StudentSignE.java b/web-domain/src/main/java/com/zcloud/edu/domain/model/study/StudentSignE.java index 3b4a334..fe86539 100644 --- a/web-domain/src/main/java/com/zcloud/edu/domain/model/study/StudentSignE.java +++ b/web-domain/src/main/java/com/zcloud/edu/domain/model/study/StudentSignE.java @@ -71,8 +71,13 @@ public class StudentSignE extends BaseE { private Long createId; //修改人id private Long updateId; - private String prefixUrl = "https://jpfz.qhdsafety.com/gbsFileTest/"; - + private static String prefixUrl; +// = "https://jpfz.qhdsafety.com/gbsFileTest/"; +// public static Integer corePoolSize; + @Value("${file.url}") + public void setPrefixUrl(String prefixUrlProperties) { + prefixUrl = prefixUrlProperties; + } @DubboReference private ZcloudImgFilesFacade zcloudImgFilesFacade; diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/TrainingApplyUserDO.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/TrainingApplyUserDO.java index 413e024..8557927 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/TrainingApplyUserDO.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/TrainingApplyUserDO.java @@ -7,6 +7,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import java.time.LocalDateTime; + /** * web-infrastructure * @Author makejava @@ -42,6 +44,43 @@ public class TrainingApplyUserDO extends BaseDO { @TableField(exist = false) private String userName; + //申请企业id + @ApiModelProperty(value = "申请企业id") + @TableField(exist = false) + private Long applyCorpinfoId; + //申请企业名称 + @ApiModelProperty(value = "申请企业名称") + @TableField(exist = false) + private String applyCorpinfoName; + //更新时间 + @ApiModelProperty(value = "更新时间") + private LocalDateTime updateTime; + //审批企业id + @ApiModelProperty(value = "审批企业id") + @TableField(exist = false) + private Long approvalCorpinfoId; + //审批部门id + @ApiModelProperty(value = "审批部门id") + @TableField(exist = false) + private Long approvalDepartmentId; + //审批用户id + @ApiModelProperty(value = "审批用户id") + @TableField(exist = false) + private Long approvalUserId; + + //审批企业id + @ApiModelProperty(value = "审批企业名称") + @TableField(exist = false) + private String approvalCorpinfoName; + //审批部门id + @ApiModelProperty(value = "审批部门名称") + @TableField(exist = false) + private String approvalDepartmentName; + //审批用户id + @ApiModelProperty(value = "审批用户名称") + @TableField(exist = false) + private String approvalUserName; + public TrainingApplyUserDO(String trainingApplyUserId) { this.trainingApplyUserId = trainingApplyUserId; } diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/study/StudentDO.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/study/StudentDO.java index eddd9df..a1683fb 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/study/StudentDO.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/dataobject/study/StudentDO.java @@ -36,6 +36,7 @@ public class StudentDO extends BaseDO { private String classId; //班级id(雪花) @ApiModelProperty(value = "班级id(雪花)") + @TableField(exist = false) private String clzId; //学员姓名 @ApiModelProperty(value = "学员姓名") diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/mapper/TrainingApplyUserMapper.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/mapper/TrainingApplyUserMapper.java index c65e498..cd54eb7 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/mapper/TrainingApplyUserMapper.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/mapper/TrainingApplyUserMapper.java @@ -1,5 +1,7 @@ package com.zcloud.edu.persistence.mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.zcloud.edu.persistence.dataobject.TrainingApplyRecordDO; import com.zcloud.edu.persistence.dataobject.TrainingApplyUserDO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @@ -21,6 +23,8 @@ public interface TrainingApplyUserMapper extends BaseMapper */ List selectByRecordId(@Param("trainingApplyRecordId") String trainingApplyRecordId); + IPage listPageByPhone(IPage page, @Param("params") Map params); + /** * 根据手机号集合查询用户信息 */ diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/TrainingApplyUserRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/TrainingApplyUserRepositoryImpl.java index 01d1645..5270558 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/TrainingApplyUserRepositoryImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/TrainingApplyUserRepositoryImpl.java @@ -1,21 +1,19 @@ package com.zcloud.edu.persistence.repository.impl; -import com.jjb.saas.framework.auth.model.SSOUser; +import com.alibaba.cola.dto.PageResponse; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.jjb.saas.framework.auth.utils.AuthContext; import com.jjb.saas.framework.repository.common.PageHelper; +import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl; import com.zcloud.edu.persistence.dataobject.TrainingApplyUserDO; import com.zcloud.edu.persistence.mapper.TrainingApplyUserMapper; import com.zcloud.edu.persistence.repository.training.TrainingApplyUserRepository; -import com.alibaba.cola.dto.PageResponse; import com.zcloud.gbscommon.utils.PageQueryHelper; import com.zcloud.gbscommon.utils.Query; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -39,6 +37,13 @@ public class TrainingApplyUserRepositoryImpl extends BaseRepositoryImpl listPageByPhone(Map params) { + IPage iPage = new Query().getPage(params); + IPage result = trainingApplyUserMapper.listPageByPhone(iPage, params); + return PageHelper.pageToResponse(result, result.getRecords()); + } + @Override public List getByRecordId(String trainingApplyRecordId) { return trainingApplyUserMapper.selectByRecordId(trainingApplyRecordId); diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/training/TrainingApplyUserRepository.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/training/TrainingApplyUserRepository.java index 9f207e1..852402d 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/training/TrainingApplyUserRepository.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/training/TrainingApplyUserRepository.java @@ -1,5 +1,6 @@ package com.zcloud.edu.persistence.repository.training; +import com.zcloud.edu.persistence.dataobject.TrainingApplyRecordDO; import com.zcloud.edu.persistence.dataobject.TrainingApplyUserDO; import com.alibaba.cola.dto.PageResponse; import com.jjb.saas.framework.repository.repo.BaseRepository; @@ -16,6 +17,8 @@ public interface TrainingApplyUserRepository extends BaseRepository listPage(Map params); + PageResponse listPageByPhone(Map params); + /** * 根据申请记录ID查询申请人员(含姓名、身份证等) */ diff --git a/web-infrastructure/src/main/resources/mapper/TrainingApplyUserMapper.xml b/web-infrastructure/src/main/resources/mapper/TrainingApplyUserMapper.xml index 49f04cb..a683eef 100644 --- a/web-infrastructure/src/main/resources/mapper/TrainingApplyUserMapper.xml +++ b/web-infrastructure/src/main/resources/mapper/TrainingApplyUserMapper.xml @@ -48,7 +48,28 @@ - +