From 0030161f6fc7e786f8c7322d137048c5f34d207b Mon Sep 17 00:00:00 2001 From: wangpeng Date: Tue, 27 May 2025 09:06:25 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=8F=B0=E5=B8=90=E5=AF=BC?= =?UTF-8?q?=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 32 + .../bus/ArchivesEduManagerController.java | 503 +++ .../controller/bus/CheckRecordController.java | 35 +- .../controller/bus/HiddenController.java | 385 +- .../controller/bus/ListManagerController.java | 99 + .../StageStudentRelationController.java | 63 + .../onlinexxks/StudyTaskController.java | 61 + .../SuperviseInspectController.java | 16 + .../SuperviseInspectHiddenController.java | 21 +- .../controller/system/LoginController.java | 14 +- .../controller/system/UsersController.java | 86 +- src/main/java/com/zcloud/entity/PageData.java | 5 + .../zcloud/entity/word/TrainingPlanDao.java | 257 ++ .../SuperviseInspectHiddenMapper.java | 1 + .../SuperviseInspectMapper.java | 3 +- .../dsno2/archives/ArchivesCapitalMapper.java | 24 + .../archives/ArchivesEduManagerMapper.java | 24 + .../dsno2/archives/ArchivesEduPlanMapper.java | 24 + .../dsno2/archives/ArchivesFilesMapper.java | 59 + .../dsno2/archives/ArchivesPostManMapper.java | 24 + .../dsno2/archives/ArchivesTeacherMapper.java | 24 + .../mapper/dsno2/bus/CheckRecordMapper.java | 2 + .../mapper/dsno2/bus/HiddenCheckMapper.java | 3 +- .../mapper/dsno2/bus/HiddenSchemeMapper.java | 3 +- .../mapper/dsno2/bus/ListManagerMapper.java | 26 + .../dsno2/bus/TrainingScheduleMapper.java | 24 + .../dsno2/onlinexxks/StageExamMapper.java | 23 + .../StageExamPaperQuestionMapper.java | 24 + .../onlinexxks/StageExamRecordMapper.java | 22 + .../StageStudentRelationMapper.java | 30 + .../onlinexxks/StageexampaperMapper.java | 22 + .../dsno2/onlinexxks/StudyTaskMapper.java | 34 + .../mapper/dsno2/system/Users2Mapper.java | 4 + .../archives/ArchivesCapitalService.java | 24 + .../archives/ArchivesEduManagerService.java | 147 + .../archives/ArchivesEduPlanService.java | 23 + .../archives/ArchivesFilesService.java | 59 + .../archives/ArchivesPostManService.java | 24 + .../archives/ArchivesTeacherService.java | 24 + .../impl/ArchivesCapitalServiceImpl.java | 36 + .../impl/ArchivesEduManagerServiceImpl.java | 1351 +++++++ .../impl/ArchivesEduPlanServiceImpl.java | 36 + .../impl/ArchivesFilesServiceImpl.java | 83 + .../impl/ArchivesPostManServiceImpl.java | 35 + .../impl/ArchivesTeacherServiceImpl.java | 35 + .../service/bus/CheckRecordService.java | 2 + .../service/bus/HiddenCheckService.java | 9 +- .../service/bus/HiddenSchemeService.java | 3 +- .../service/bus/ListManagerService.java | 26 + .../service/bus/TrainingScheduleService.java | 23 + .../bus/impl/CheckRecordServiceImpl.java | 27 + .../bus/impl/HiddenCheckServiceImpl.java | 8 + .../bus/impl/HiddenSchemeServiceImpl.java | 8 + .../bus/impl/ListManagerServiceImpl.java | 70 + .../bus/impl/TrainingScheduleServiceImpl.java | 35 + .../StageExamPaperQuestionService.java | 23 + .../onlinexxks/StageExamRecordService.java | 22 + .../service/onlinexxks/StageExamService.java | 24 + .../StageStudentRelationService.java | 31 + .../onlinexxks/StageexampaperService.java | 22 + .../service/onlinexxks/StudyTaskService.java | 30 + .../StageExamPaperQuestionServiceImpl.java | 37 + .../impl/StageExamRecordServiceImpl.java | 36 + .../onlinexxks/impl/StageExamServiceImpl.java | 59 + .../impl/StageStudentRelationServiceImpl.java | 88 + .../impl/StageexampaperServiceImpl.java | 37 + .../onlinexxks/impl/StudyTaskServiceImpl.java | 93 + .../SuperviseInspectHiddenService.java | 3 + .../SuperviseInspectService.java | 8 + .../SuperviseInspectHiddenServiceImpl.java | 155 + .../impl/SuperviseInspectServiceImpl.java | 94 +- .../service/system/Department2Service.java | 2 +- .../zcloud/service/system/Users2Service.java | 6 + .../zcloud/service/system/UsersService.java | 12 + .../system/impl/Department2ServiceImpl.java | 4 +- .../system/impl/Users2ServiceImpl.java | 114 +- .../service/system/impl/UsersServiceImpl.java | 83 +- src/main/java/com/zcloud/util/Const.java | 10 +- src/main/java/com/zcloud/util/DateUtil.java | 10 + .../zcloud/util/ExcelExportCompressImg.java | 192 + .../java/com/zcloud/util/FileDownload.java | 34 + src/main/java/com/zcloud/util/FileUtil.java | 42 + src/main/java/com/zcloud/util/FileZip.java | 46 +- src/main/java/com/zcloud/util/PathUtil.java | 2 +- src/main/java/com/zcloud/util/Smb.java | 18 +- .../java/com/zcloud/util/WordToPdfUtil.java | 141 + src/main/resources/application.properties | 2 +- .../SuperviseInspectFilesMapper.xml | 4 +- .../SuperviseInspectHiddenMapper.xml | 31 + .../SuperviseInspectMapper.xml | 22 + .../mybatis/datasource/system/UsersMapper.xml | 35 +- .../dsno2/archives/ArchivesCapitalMapper.xml | 100 + .../archives/ArchivesEduManagerMapper.xml | 97 + .../dsno2/archives/ArchivesEduPlanMapper.xml | 100 + .../dsno2/archives/ArchivesFilesMapper.xml | 145 + .../dsno2/archives/ArchivesPostManMapper.xml | 85 + .../dsno2/archives/ArchivesTeacherMapper.xml | 94 + .../mybatis/dsno2/bus/CheckRecordMapper.xml | 33 + .../mybatis/dsno2/bus/HiddenCheckMapper.xml | 102 + .../mybatis/dsno2/bus/HiddenMapper.xml | 2 +- .../mybatis/dsno2/bus/HiddenSchemeMapper.xml | 101 + .../mybatis/dsno2/bus/ListManagerMapper.xml | 112 + .../dsno2/bus/TrainingScheduleMapper.xml | 100 + .../dsno2/onlinexxks/StageExamMapper.xml | 98 + .../StageExamPaperQuestionMapper.xml | 90 + .../onlinexxks/StageExamRecordMapper.xml | 104 + .../onlinexxks/StageStudentRelationMapper.xml | 138 + .../dsno2/onlinexxks/StageexampaperMapper.xml | 86 + .../dsno2/onlinexxks/StudyTaskMapper.xml | 184 + .../dsno2/system/Department2Mapper.xml | 12 +- .../mybatis/dsno2/system/UsersMapper.xml | 179 +- .../wordTemplate/archivesCapital.docx | Bin 0 -> 14480 bytes .../wordTemplate/archivesEduManager.docx | Bin 0 -> 13565 bytes .../wordTemplate/archivesEduPlan.docx | Bin 0 -> 13357 bytes .../wordTemplate/archivesExam.docx | Bin 0 -> 13996 bytes .../wordTemplate/archivesPostMan.docx | Bin 0 -> 12737 bytes .../wordTemplate/archivesReport.docx | Bin 0 -> 13749 bytes .../wordTemplate/archivesStudentScore.docx | Bin 0 -> 14883 bytes .../wordTemplate/archivesStudyTask.docx | Bin 0 -> 13838 bytes .../wordTemplate/archivesTeacher.docx | Bin 0 -> 13073 bytes .../wordTemplate/classhour-new.docx | Bin 0 -> 21435 bytes .../uploadFiles/wordTemplate/courseware.docx | Bin 0 -> 12803 bytes .../wordTemplate/curriculum-new.docx | Bin 0 -> 12591 bytes .../webapp/uploadFiles/wordTemplate/exam.docx | Bin 0 -> 14957 bytes .../uploadFiles/wordTemplate/homepage.docx | Bin 0 -> 11627 bytes .../uploadFiles/wordTemplate/practice-new.ftl | 3209 +++++++++++++++ .../wordTemplate/registerform.docx | Bin 0 -> 23631 bytes .../uploadFiles/wordTemplate/safelog-new2.ftl | 3482 +++++++++++++++++ .../uploadFiles/wordTemplate/safelog.docx | Bin 0 -> 14654 bytes .../uploadFiles/wordTemplate/studentInfo.docx | Bin 0 -> 221282 bytes .../wordTemplate/trainingSchedule.docx | Bin 0 -> 12807 bytes 131 files changed, 14145 insertions(+), 145 deletions(-) create mode 100644 src/main/java/com/zcloud/controller/bus/ArchivesEduManagerController.java create mode 100644 src/main/java/com/zcloud/controller/bus/ListManagerController.java create mode 100644 src/main/java/com/zcloud/controller/onlinexxks/StageStudentRelationController.java create mode 100644 src/main/java/com/zcloud/controller/onlinexxks/StudyTaskController.java create mode 100644 src/main/java/com/zcloud/entity/word/TrainingPlanDao.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesCapitalMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesEduManagerMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesEduPlanMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesFilesMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesPostManMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesTeacherMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/bus/ListManagerMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/bus/TrainingScheduleMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamPaperQuestionMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamRecordMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageStudentRelationMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageexampaperMapper.java create mode 100644 src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StudyTaskMapper.java create mode 100644 src/main/java/com/zcloud/service/archives/ArchivesCapitalService.java create mode 100644 src/main/java/com/zcloud/service/archives/ArchivesEduManagerService.java create mode 100644 src/main/java/com/zcloud/service/archives/ArchivesEduPlanService.java create mode 100644 src/main/java/com/zcloud/service/archives/ArchivesFilesService.java create mode 100644 src/main/java/com/zcloud/service/archives/ArchivesPostManService.java create mode 100644 src/main/java/com/zcloud/service/archives/ArchivesTeacherService.java create mode 100644 src/main/java/com/zcloud/service/archives/impl/ArchivesCapitalServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/archives/impl/ArchivesEduManagerServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/archives/impl/ArchivesEduPlanServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/archives/impl/ArchivesFilesServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/archives/impl/ArchivesPostManServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/archives/impl/ArchivesTeacherServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/bus/ListManagerService.java create mode 100644 src/main/java/com/zcloud/service/bus/TrainingScheduleService.java create mode 100644 src/main/java/com/zcloud/service/bus/impl/ListManagerServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/bus/impl/TrainingScheduleServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/StageExamPaperQuestionService.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/StageExamRecordService.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/StageExamService.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/StageStudentRelationService.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/StageexampaperService.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/StudyTaskService.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/impl/StageExamPaperQuestionServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/impl/StageExamRecordServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/impl/StageExamServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/impl/StageStudentRelationServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/impl/StageexampaperServiceImpl.java create mode 100644 src/main/java/com/zcloud/service/onlinexxks/impl/StudyTaskServiceImpl.java create mode 100644 src/main/java/com/zcloud/util/ExcelExportCompressImg.java create mode 100644 src/main/java/com/zcloud/util/WordToPdfUtil.java create mode 100644 src/main/resources/mybatis/dsno2/archives/ArchivesCapitalMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/archives/ArchivesEduManagerMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/archives/ArchivesEduPlanMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/archives/ArchivesFilesMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/archives/ArchivesPostManMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/archives/ArchivesTeacherMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/bus/ListManagerMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/bus/TrainingScheduleMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/onlinexxks/StageExamMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/onlinexxks/StageExamPaperQuestionMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/onlinexxks/StageExamRecordMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/onlinexxks/StageStudentRelationMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/onlinexxks/StageexampaperMapper.xml create mode 100644 src/main/resources/mybatis/dsno2/onlinexxks/StudyTaskMapper.xml create mode 100644 src/main/webapp/uploadFiles/wordTemplate/archivesCapital.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/archivesEduManager.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/archivesEduPlan.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/archivesExam.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/archivesPostMan.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/archivesReport.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/archivesStudentScore.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/archivesStudyTask.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/archivesTeacher.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/classhour-new.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/courseware.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/curriculum-new.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/exam.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/homepage.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/practice-new.ftl create mode 100644 src/main/webapp/uploadFiles/wordTemplate/registerform.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/safelog-new2.ftl create mode 100644 src/main/webapp/uploadFiles/wordTemplate/safelog.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/studentInfo.docx create mode 100644 src/main/webapp/uploadFiles/wordTemplate/trainingSchedule.docx diff --git a/pom.xml b/pom.xml index 1108c71..b8c1338 100644 --- a/pom.xml +++ b/pom.xml @@ -358,6 +358,38 @@ 1.6.4 + + com.aspose + aspose-words + 15.8.0 + + + + fr.opensagres.xdocreport + fr.opensagres.xdocreport.core + 2.0.2 + + + fr.opensagres.xdocreport + fr.opensagres.xdocreport.document + 2.0.2 + + + fr.opensagres.xdocreport + fr.opensagres.xdocreport.template + 2.0.2 + + + fr.opensagres.xdocreport + fr.opensagres.xdocreport.document.docx + 2.0.2 + + + fr.opensagres.xdocreport + fr.opensagres.xdocreport.template.freemarker + 2.0.2 + + net.sf.json-lib diff --git a/src/main/java/com/zcloud/controller/bus/ArchivesEduManagerController.java b/src/main/java/com/zcloud/controller/bus/ArchivesEduManagerController.java new file mode 100644 index 0000000..ec0f768 --- /dev/null +++ b/src/main/java/com/zcloud/controller/bus/ArchivesEduManagerController.java @@ -0,0 +1,503 @@ +package com.zcloud.controller.bus; + +import com.zcloud.controller.base.BaseController; +import com.zcloud.entity.PageData; +import com.zcloud.entity.system.Dictionaries; +import com.zcloud.service.archives.*; +import com.zcloud.service.bus.CorpInfoService; +import com.zcloud.service.bus.TrainingScheduleService; +import com.zcloud.service.onlinexxks.*; +import com.zcloud.service.system.Users2Service; +import com.zcloud.util.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.util.*; + +/** + * 说明:年度安全培训教育管理台账 + * 作者:luoxiaobao + * 时间:2021-12-17 + * 官网:www.zcloudchina.com + */ +@Controller +@RequestMapping("/archivesedumanager") +public class ArchivesEduManagerController extends BaseController { + + @Autowired + private ArchivesEduManagerService archivesEduManagerService; + + @Autowired + private CorpInfoService corpInfoService; + + @Autowired + private Users2Service corpUsersService; + @Autowired + private StudyTaskService studyTaskService; + @Autowired + private StageExamService stageExamService; + @Autowired + private StageExamRecordService stageExamRecordService; + @Autowired + private StageStudentRelationService stageStudentRelationService; + @Autowired + private ArchivesFilesService archivesFilesService; + @Autowired + private TrainingScheduleService trainingScheduleService; + @Autowired + private StageexampaperService stageExamPaperService; + @Autowired + private StageExamPaperQuestionService stageExamPaperQuestionService; + @Autowired + private ArchivesPostManService archivesPostManService; + @Autowired + private ArchivesTeacherService archivesTeacherService; + @Autowired + private ArchivesEduPlanService archivesEduPlanService; + @Autowired + private ArchivesCapitalService archivesCapitalService; + + + /**导出一人一档 + * @param + * @throws Exception + */ + @RequestMapping(value="/exportExcelSystemLedger") + public void exportExcelSystemLedger(HttpServletResponse response) throws Exception{ + PageData pd = this.getPageData(); + + String projectPath = PathUtil.getProjectpath(); + List corpList = corpInfoService.getSelectByCorpInfo(pd); + ArrayList corpOutFiles = new ArrayList<>(); + String now = DateUtil.getSdfTimesSSS(); + for (PageData corp : corpList) { + ArrayList userOutfiles = new ArrayList<>(); + List corpUserList = corpUsersService.listAllForExport(corp); + for (PageData user : corpUserList) { + ArrayList userFiles = new ArrayList<>(); + if ("1".equals(user.getString2("ISMAIN"))) { + continue; + } + user.put("projectPath", projectPath); + String USER_NAME = user.getString2("NAME").replaceAll(" ","").replaceAll("\t","")+user.getString("USERNAME"); + now = DateUtil.getSdfTimesSSS(); + File pdf = archivesEduManagerService.registertable(user); + if (pdf != null) { + //人员登记表返回PDF文件 + userFiles.add(pdf); + } + PageData st = new PageData(); + st.put("USER_ID", user.getString2("USER_ID")); + List taskList = studyTaskService.listAll(st); + for (PageData task : taskList) { + now = DateUtil.getSdfTimesSSS(); + List pathList = new ArrayList(); + st.put("STUDYTASK_ID", task.getString2("STUDYTASK_ID")); + List stuList = stageStudentRelationService.listStudentTask(st); + PageData stu = new PageData(); + if (stuList.size() > 0) { + stu = stuList.get(0); + } else { + continue; + } + stu.put("projectPath", projectPath); + stu.put("TYPE_OF_WORK_NAME", user.getString2("TYPE_OF_WORK_NAME")); + stu.put("PERSONNEL_TYPE_NAME",user.getString2("PERSONNEL_TYPE_NAME")); + stu.put("USERAVATARPREFIX", user.getString2("USERAVATARPREFIX")); + stu.put("USERAVATARURL_CONVERT", user.getString2("USERAVATARURL_CONVERT")); + task.put("STAGEEXAM_ID", stu.getString2("STAGEEXAM_ID")); + task.put("USER_ID", user.getString2("USER_ID")); + PageData para = new PageData(); + para.put("CORP_NAME", corp.getString2("CORP_NAME")); + para.put("ENTERPRISE_NAME", corp.getString2("CORP_NAME")); //企业名称 + para.put("ASSESSOR_SIGN", ""); //签字数据 + para.put("RECORDOR_SIGN", ""); //签字数据 + para.put("SAFETYDEPTOR_SIGN", ""); //签字数据 + para.put("SIGNATURE_PATH", stu.getString2("SIGNATURE_PATH")); //签字数据 + para.put("CLASS_ID", task.get("STUDYTASK_ID")); + para.put("POST_ID", stu.get("POST_ID")); + para.put("STUDENT_ID", stu.get("USER_ID")); + List personnelTypeList = new ArrayList<>(); + + List curList = studyTaskService.getcurriculumAllBystudyTaskId(task); // 任务 -- 课件关系 + List coursewaresList = studyTaskService.getAllCourseware(task); //列出StudyTask列表 + + PageData paper = stageExamService.findResult(task); + String wordPathSy = archivesEduManagerService.homepage(stu, para, now, paper, task); + pathList.add(wordPathSy); //首页PDF + String wordPathXszm = archivesEduManagerService.classHour(stu, task, coursewaresList, corp, para, now, paper); + pathList.add(wordPathXszm); //学时证明 +// String wordPathSi = archivesEduManagerService.studyInfo(stu, task, curList, coursewaresList, para, now, corp, paper); +// pathList.add(wordPathSi); // 学习档案 + String wordPathKccl = archivesEduManagerService.curriculumword(stu, task, coursewaresList, corp, now); + pathList.add(wordPathKccl); //课程材料 + if (!Tools.isEmpty(paper.get("QUESTIONLIST"))) { //有试卷就走里边 + String wordPathKjxx = archivesEduManagerService.papermword(stu, task, corp, paper, now); + pathList.add(wordPathKjxx); //考卷信息 + } + String wordPathPxkh = archivesEduManagerService.safelogword(stu, task, coursewaresList, para, corp, paper, now, personnelTypeList); + pathList.add(wordPathPxkh); //培训考核记录 + WordToPdfUtil.mergePdf(pathList, projectPath + Const.FILEPATHFILE + USER_NAME + "-" + task.getString("STUDY_NAME") + "-档案详情-" + now + ".pdf"); + //组装档案详情数据 + userFiles.add(new File(projectPath + Const.FILEPATHFILE + USER_NAME + "-" + task.getString("STUDY_NAME") + "-档案详情-" + now + ".pdf")); + for (Object filepath : pathList) { + new File((String) filepath).delete(); //删除缓存文件 + } + } + if (userFiles.size() == 0) { + System.out.println("学员【" + USER_NAME + "】无一人一档档案记录"); + continue; + } + String path = projectPath + Const.TEMPZIPFILES + USER_NAME + "-" + now + ".zip"; + FileZip.zipList(path, userFiles); + userOutfiles.add(new File(path)); + } + if (userOutfiles.isEmpty()) { + System.out.println("企业【" + corp.getString("CORP_NAME") + "】暂无一人一档档案记录"); + continue; + } + String path = projectPath + Const.TEMPZIPFILES + corp.getString("CORP_NAME") + "一人一档-" + now + ".zip"; + FileZip.zipList(path, userOutfiles); + corpOutFiles.add(new File(path)); + for (File filepath : userOutfiles) { + filepath.delete(); //删除缓存文件 + } + } + if (!corpOutFiles.isEmpty()) { + String path = projectPath + Const.TEMPZIPFILES + "系统一人一档-" + now + ".zip"; + FileZip.zipList(path, corpOutFiles); + for (File filepath : corpOutFiles) { + filepath.delete(); //删除缓存文件 + } + FileDownload.mfFileDownload(response, path, "系统一人一档-" + now + ".zip"); + } + } + + + /**导出到一期一档 + * @param + * @throws Exception + */ + @RequestMapping(value="/exportExcelSystemLedgerEduArchive2") + public void exportExcelSystemLedgerEduArchive2(HttpServletResponse response) throws Exception{ + PageData pd = this.getPageData(); + + String projectPath = PathUtil.getProjectpath(); + List corpList = corpInfoService.getSelectByCorpInfo(pd); + String now = DateUtil.getSdfTimesSSS(); + ArrayList outfiles = new ArrayList<>(); + for (PageData corp : corpList) { + ArrayList userOutfiles = new ArrayList<>(); + PageData st = new PageData(); + st.put("CORPINFO_ID", corp.getString2("CORPINFO_ID")); + List taskList = studyTaskService.listAll(st); + for (PageData task : taskList) { + now = DateUtil.getSdfTimesSSS(); + task.put("projectPath", projectPath); + String className = task.getString("STUDY_NAME"); + ArrayList files = new ArrayList<>(); + PageData af = new PageData(); + af.put("STUDYTASK_ID", task.getString("STUDYTASK_ID")); + ArrayList archivesFiles = new ArrayList<>(); + List fileList = archivesFilesService.listAll(af); + String saveDir= projectPath + Const.FILEPATHFILE; + for (PageData filePd : fileList) { + if ("5".equals(filePd.getString2("TYPE"))) { // 5.安全培训教材会审表 + now = DateUtil.getSdfTimesSSS(); + String url = Const.HTTPFILEURL + filePd.getString("FILE_PATH"); + String name = filePd.getString2("YEAR")+filePd.getString2("FILE_NAME").substring(0, filePd.getString("FILE_NAME").lastIndexOf(".")) + now + filePd.getString2("FILE_NAME").substring(filePd.getString("FILE_NAME").lastIndexOf(".")); + if ("ok".equals(FileDownload.downloadFile(url, name, saveDir))) { + File file = new File(saveDir + name); + archivesFiles.add(file); + } + } + } + if (archivesFiles.size() > 0) { + String path = projectPath + Const.TEMPZIPFILES + "安全培训教材会审表-" + now + ".zip"; + FileZip.zipList(path, archivesFiles); + files.add(new File(path)); + archivesFiles.clear(); + } + // 培训日程安排通知/也可称为培训计划 + List tsList = trainingScheduleService.listAll(task); + if (tsList.size() > 0) { + File pdf = archivesEduManagerService.exportPdfTrainingSchedule(task, tsList); + if (pdf != null) { + //人员登记表返回PDF文件 + files.add(pdf); + } + } + // 安全培训教材或课程讲义 + List coursewaresList = studyTaskService.getAllCourseware(task); //列出StudyTask列表 + if (tsList.size() > 0) { + File pdf = archivesEduManagerService.exportPdfCourseware(task, coursewaresList); + if (pdf != null) { + //培训日程安排通知(也可称为培训计划) + files.add(pdf); + } + } + // 安全培训教育记录及签字表 + List stuList = stageStudentRelationService.listStudentTask(task); //列出StudyTask列表 + if (tsList.size() > 0) { + File pdf = archivesEduManagerService.exportPdfStudyTask(task, coursewaresList,stuList); + if (pdf != null) { + //培训日程安排通知(也可称为培训计划) + files.add(pdf); + } + } + // 培训影像资料 + for (PageData filePd : fileList) { + if ("7".equals(filePd.getString2("TYPE"))) { // 7.培训影像资料 + now = DateUtil.getSdfTimesSSS(); + String url = Const.HTTPFILEURL + filePd.getString("FILE_PATH"); + String name = filePd.getString2("YEAR")+filePd.getString2("FILE_NAME").substring(0, filePd.getString("FILE_NAME").lastIndexOf(".")) + now + filePd.getString2("FILE_NAME").substring(filePd.getString("FILE_NAME").lastIndexOf(".")); + if ("ok".equals(FileDownload.downloadFile(url, name, saveDir))) { + File file = new File(saveDir + name); + archivesFiles.add(file); + } + } + } + if (archivesFiles.size() > 0) { + String path = projectPath + Const.TEMPZIPFILES + "培训影像资料-" + now + ".zip"; + FileZip.zipList(path, archivesFiles); + files.add(new File(path)); + archivesFiles.clear(); + } + + //培训考核试卷 + PageData paper = stageExamPaperService.getDataById(task); + List questionList = stageExamPaperQuestionService.findByExamPaper(task); + File examPaper = archivesEduManagerService.exportPdfExamPaper(task, paper, questionList); + if (examPaper != null) { + files.add(examPaper); + } + + //学员考核成绩统计表 + File archivesStudentScore = archivesEduManagerService.exportPdfArchivesStudentScore(task, coursewaresList, stuList); + if (archivesStudentScore != null) { + files.add(archivesStudentScore); + } + + //学员考核成绩统计表 + List curList = studyTaskService.getcurriculumAllBystudyTaskId(task); // 任务 -- 课件关系 + File archivesReport = archivesEduManagerService.exportPdfArchivesReport(task, curList, stuList); + if (archivesReport != null) { + files.add(archivesReport); + } + // 与培训机构签订的服务合同或者协议复印件 + for (PageData filePd : fileList) { + if ("6".equals(filePd.getString2("TYPE"))) { // 7.与培训机构签订的服务合同或者协议复印件 + now = DateUtil.getSdfTimesSSS(); + String url = Const.HTTPFILEURL + filePd.getString("FILE_PATH"); + String name = filePd.getString2("YEAR")+filePd.getString2("FILE_NAME").substring(0, filePd.getString("FILE_NAME").lastIndexOf(".")) + now + filePd.getString2("FILE_NAME").substring(filePd.getString("FILE_NAME").lastIndexOf(".")); + if ("ok".equals(FileDownload.downloadFile(url, name, saveDir))) { + File file = new File(saveDir + name); + archivesFiles.add(file); + } + } + } + if (archivesFiles.size() > 0) { + String path = projectPath + Const.TEMPZIPFILES + "与培训机构签订的服务合同或者协议复印件-" + now + ".zip"; + FileZip.zipList(path, archivesFiles); + files.add(new File(path)); + archivesFiles.clear(); + } + + if (files.size() > 0) { + String path = projectPath + Const.TEMPZIPFILES + className + "-一期一档-" + now + ".zip"; + FileZip.zipList(path, files); + for (File filepath : files) { + filepath.delete(); //删除缓存文件 + } + userOutfiles.add(new File(path)); + } + } + if (userOutfiles.isEmpty()) { + System.out.println("企业【" + corp.getString("CORP_NAME") + "】暂无一期一档档案记录"); + continue; + } + String path = projectPath + Const.TEMPZIPFILES + corp.getString("CORP_NAME") + "【一期一档】-" + now + ".zip"; + FileZip.zipList(path, userOutfiles); + for (File filepath : userOutfiles) { + filepath.delete(); //删除缓存文件 + } + outfiles.add(new File(path)); + } + if (outfiles.isEmpty()) { + System.out.println("系统暂无一期一档档案记录"); + } else { + String path = projectPath + Const.TEMPZIPFILES + "系统一期一档-" + now + ".zip"; + FileZip.zipList(path, outfiles); + FileDownload.mfFileDownload(response, path, "系统一期一档-" + now + ".zip"); + } + } + + + /**导出到一期一档 + * @param + * @throws Exception + */ + @RequestMapping(value="/exportExcelSystemLedgerEduArchive3") + public void exportExcelSystemLedgerEduArchive3(HttpServletResponse response) throws Exception{ + PageData pd = this.getPageData(); + + String projectPath = PathUtil.getProjectpath(); + List corpList = corpInfoService.getSelectByCorpInfo(pd); + String now = DateUtil.getSdfTimesSSS(); + ArrayList outfiles = new ArrayList<>(); + for (PageData corp : corpList) { + corp.put("projectPath", projectPath); + ArrayList userOutfiles = new ArrayList<>(); + PageData st = new PageData(); + st.put("CORPINFO_ID", corp.getString2("CORPINFO_ID")); + now = DateUtil.getSdfTimesSSS(); + String corpName = corp.getString("CORP_NAME"); + ArrayList files = new ArrayList<>(); + ArrayList archivesFiles = new ArrayList<>(); + List fileList = archivesFilesService.listAll(st); + String saveDir= projectPath + Const.FILEPATHFILE; + // 安全培训教育制度 + for (PageData filePd : fileList) { + if ("1".equals(filePd.getString2("TYPE"))) { // 1.安全培训教育制度 + now = DateUtil.getSdfTimesSSS(); + String url = Const.HTTPFILEURL + filePd.getString("FILE_PATH"); + String name = filePd.getString2("YEAR")+filePd.getString2("FILE_NAME").substring(0, filePd.getString("FILE_NAME").lastIndexOf(".")) + now + filePd.getString2("FILE_NAME").substring(filePd.getString("FILE_NAME").lastIndexOf(".")); + if ("ok".equals(FileDownload.downloadFile(url, name, saveDir))) { + File file = new File(saveDir + name); + archivesFiles.add(file); + } + } + } + if (archivesFiles.size() > 0) { + String path = projectPath + Const.TEMPZIPFILES + "安全培训教育制度-" + now + ".zip"; + FileZip.zipList(path, archivesFiles); + files.add(new File(path)); + archivesFiles.clear(); + } + // 关于任命安全教育主管部门和人员的文件 + for (PageData filePd : fileList) { + if ("2".equals(filePd.getString2("TYPE"))) { // 关于任命安全教育主管部门和人员的文件 + now = DateUtil.getSdfTimesSSS(); + String url = Const.HTTPFILEURL + filePd.getString("FILE_PATH"); + String name = filePd.getString2("YEAR")+filePd.getString2("FILE_NAME").substring(0, filePd.getString("FILE_NAME").lastIndexOf(".")) + now + filePd.getString2("FILE_NAME").substring(filePd.getString("FILE_NAME").lastIndexOf(".")); + if ("ok".equals(FileDownload.downloadFile(url, name, saveDir))) { + File file = new File(saveDir + name); + archivesFiles.add(file); + } + } + } + if (archivesFiles.size() > 0) { + String path = projectPath + Const.TEMPZIPFILES + "关于任命安全教育主管部门和人员的文件-" + now + ".zip"; + FileZip.zipList(path, archivesFiles); + files.add(new File(path)); + archivesFiles.clear(); + } + // 三岗人员管理台账 + List archivesPostManList = archivesPostManService.listAll(corp); + if (archivesPostManList.size() > 0) { + File archivesPostMan = archivesEduManagerService.exportPdfArchivesPostMant(corp, archivesPostManList); + if (archivesPostMan != null) { + files.add(archivesPostMan); + } + } + // 培训需求调查表 + for (PageData filePd : fileList) { + if ("3".equals(filePd.getString2("TYPE"))) { // 培训需求调查表 + now = DateUtil.getSdfTimesSSS(); + String url = Const.HTTPFILEURL + filePd.getString("FILE_PATH"); + String name = filePd.getString2("YEAR")+filePd.getString2("FILE_NAME").substring(0, filePd.getString("FILE_NAME").lastIndexOf(".")) + now + filePd.getString2("FILE_NAME").substring(filePd.getString("FILE_NAME").lastIndexOf(".")); + if ("ok".equals(FileDownload.downloadFile(url, name, saveDir))) { + File file = new File(saveDir + name); + archivesFiles.add(file); + } + } + } + if (archivesFiles.size() > 0) { + String path = projectPath + Const.TEMPZIPFILES + "培训需求调查表-" + now + ".zip"; + FileZip.zipList(path, archivesFiles); + files.add(new File(path)); + archivesFiles.clear(); + } + // 本单位师资管理台账 + List archivesTeacherList = archivesTeacherService.listAll(corp); + if (archivesTeacherList.size() > 0) { + File archivesTeacher = archivesEduManagerService.exportPdfArchivesTeacher(corp, archivesTeacherList); + if (archivesTeacher != null) { + files.add(archivesTeacher); + } + } + // 安全培训教育计划 + List archivesEduPlanList = archivesEduPlanService.listAll(corp); + if (archivesEduPlanList.size() > 0) { + File archivesEduPlan = archivesEduManagerService.exportPdfArchivesEduPlan(corp, archivesEduPlanList); + if (archivesEduPlan != null) { + files.add(archivesEduPlan); + } + } + // 安全培训教育管理台账 + List archivesEduManagerList = archivesEduManagerService.listAll(corp); + if (archivesEduManagerList.size() > 0) { + File archivesEduManager = archivesEduManagerService.exportPdfArchivesEduManager(corp, archivesEduManagerList); + if (archivesEduManager != null) { + files.add(archivesEduManager); + } + } + // 培训资金提取和使用情况管理台账 + List archivesCapitalList = archivesCapitalService.listAll(corp); + if (archivesCapitalList.size() > 0) { + File archivesCapital = archivesEduManagerService.exportPdfArchivesCapital(corp, archivesCapitalList); + if (archivesCapital != null) { + files.add(archivesCapital); + } + } + // 培训条件证明材料 + for (PageData filePd : fileList) { + if ("4".equals(filePd.getString2("TYPE"))) { // 培训条件证明材料 + now = DateUtil.getSdfTimesSSS(); + String url = Const.HTTPFILEURL + filePd.getString("FILE_PATH"); + String name = filePd.getString2("YEAR")+filePd.getString2("FILE_NAME").substring(0, filePd.getString("FILE_NAME").lastIndexOf(".")) + now + filePd.getString2("FILE_NAME").substring(filePd.getString("FILE_NAME").lastIndexOf(".")); + if ("ok".equals(FileDownload.downloadFile(url, name, saveDir))) { + File file = new File(saveDir + name); + archivesFiles.add(file); + } + } + } + if (archivesFiles.size() > 0) { + String path = projectPath + Const.TEMPZIPFILES + "培训条件证明材料-" + now + ".zip"; + FileZip.zipList(path, archivesFiles); + files.add(new File(path)); + archivesFiles.clear(); + } + + + if (files.size() > 0) { + String path = projectPath + Const.TEMPZIPFILES + corpName + "-一企一档-" + now + ".zip"; + FileZip.zipList(path, files); + for (File filepath : files) { + filepath.delete(); //删除缓存文件 + } + userOutfiles.add(new File(path)); + } + if (userOutfiles.isEmpty()) { + System.out.println("企业【" + corp.getString("CORP_NAME") + "】暂无一企一档档案记录"); + continue; + } + String path = projectPath + Const.TEMPZIPFILES + corp.getString("CORP_NAME") + "【一企一档】-" + now + ".zip"; + FileZip.zipList(path, userOutfiles); + for (File filepath : userOutfiles) { + filepath.delete(); //删除缓存文件 + } + outfiles.add(new File(path)); + } + if (outfiles.isEmpty()) { + System.out.println("系统暂无一企一档档案记录"); + } else { + String path = projectPath + Const.TEMPZIPFILES + "系统一企一档-" + now + ".zip"; + FileZip.zipList(path, outfiles); + FileDownload.mfFileDownload(response, path, "系统一企一档-" + now + ".zip"); + } + } +} diff --git a/src/main/java/com/zcloud/controller/bus/CheckRecordController.java b/src/main/java/com/zcloud/controller/bus/CheckRecordController.java index 18cfe4c..b798f6c 100644 --- a/src/main/java/com/zcloud/controller/bus/CheckRecordController.java +++ b/src/main/java/com/zcloud/controller/bus/CheckRecordController.java @@ -10,6 +10,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.zcloud.util.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.transaction.annotation.Transactional; @@ -24,11 +25,6 @@ import com.alibaba.fastjson.JSONObject; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.zcloud.controller.base.BaseController; import com.zcloud.entity.Page; -import com.zcloud.util.AliSmsUtil; -import com.zcloud.util.DateUtil; -import com.zcloud.util.Jurisdiction; -import com.zcloud.util.ObjectExcelView; -import com.zcloud.util.Tools; import com.zcloud.entity.PageData; import com.zcloud.service.bus.CheckRecordService; import com.zcloud.service.bus.CorpInfoService; @@ -119,5 +115,32 @@ public class CheckRecordController extends BaseController { map.put("pd", pd); map.put("result", errInfo); return map; - } + } + + /**导出到excel + * @param + * @throws Exception + */ + @RequestMapping(value="/exportExcelSystemLedger") + public ModelAndView exportExcelSystemLedger() throws Exception{ + ModelAndView mv = new ModelAndView(); + PageData pd = this.getPageData(); + + Map dataMap = new HashMap<>(); + List titles = new ArrayList<>(); + titles.add("企业名称"); //1 + titles.add("清单名称"); //2 + titles.add("人员"); //3 + titles.add("检查周期"); //4 + titles.add("检查人"); //5 + titles.add("检查时间"); //6 + titles.add("检查状态"); //7 + dataMap.put("titles", titles); + List list = checkrecordService.listExport(pd); + + dataMap.put("varList", list); + ExcelExportCompressImg erv = new ExcelExportCompressImg(); + mv = new ModelAndView(erv,dataMap); + return mv; + } } diff --git a/src/main/java/com/zcloud/controller/bus/HiddenController.java b/src/main/java/com/zcloud/controller/bus/HiddenController.java index b67993c..cb31831 100644 --- a/src/main/java/com/zcloud/controller/bus/HiddenController.java +++ b/src/main/java/com/zcloud/controller/bus/HiddenController.java @@ -1,11 +1,10 @@ package com.zcloud.controller.bus; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import com.zcloud.entity.system.Dictionaries; +import com.zcloud.service.system.*; +import com.zcloud.util.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -15,13 +14,6 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; import com.zcloud.controller.base.BaseController; import com.zcloud.entity.Page; -import com.zcloud.util.Const; -import com.zcloud.util.DateUtil; -import com.zcloud.util.IniFileUtil; -import com.zcloud.util.Jurisdiction; -import com.zcloud.util.ObjectExcelView; -import com.zcloud.util.PathUtil; -import com.zcloud.util.Tools; import net.sf.json.JSONArray; @@ -30,8 +22,6 @@ import com.zcloud.service.bus.HiddenCheckService; import com.zcloud.service.bus.HiddenSchemeService; import com.zcloud.service.bus.HiddenService; import com.zcloud.service.bus.ImgFilesService; -import com.zcloud.service.system.DepartmentService; -import com.zcloud.service.system.UsersService; /** * 说明:隐患表 @@ -51,6 +41,13 @@ public class HiddenController extends BaseController { private HiddenSchemeService hiddenSchemeService; @Autowired private HiddenCheckService hiddenCheckService; + @Autowired + private DictionariesService dictionariesService; + @Autowired + private Users2Service users2Service; + @Autowired + private Department2Service department2Service; + /**新增 * @param * @throws Exception @@ -504,4 +501,364 @@ public class HiddenController extends BaseController { map.put("result", errInfo); return map; } + + /** + * 导出到excel + * + * @param + * @throws Exception + */ + @RequestMapping(value = "/exportExcelSystemLedger") + public ModelAndView exportExcelSystemLedger() throws Exception { + ModelAndView mv = new ModelAndView(); + PageData pd = new PageData(); + pd = this.getPageData(); + + String dicParentId = "5e7cf8620ba54ad89719d0be62133c7a"; + List dicList = dictionariesService.listSubDictByParentId(dicParentId);// 字典 + Map dicMap = new HashMap<>(); + for (Dictionaries pageData : dicList) { + dicMap.put(pageData.getBIANMA(), pageData.getNAME()); + } + + PageData corpIdPd = new PageData(); +// corpIdPd.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());// CORPINFO_ID + Map userMap = new HashMap<>();// 查看企业下的所有用户,根据用户id匹配信息 + List userList = users2Service.listAllUser(corpIdPd); + for (PageData pageData : userList) { + userMap.put(pageData.getString("USER_ID"), pageData.getString("NAME")); + } + Map deparMap = new HashMap<>(); + List deparList = department2Service.listAll(corpIdPd);// 查看企业下的所有部门,根据部门id匹配信息 + for (PageData pageData : deparList) { + deparMap.put(pageData.getString("DEPARTMENT_ID"), pageData.getString("NAME")); + } + + Map sourceMap = new HashMap<>(); + sourceMap.put("1", "隐患快报"); + sourceMap.put("2", "隐患排查"); + sourceMap.put("3", "隐患排查"); + Map stateMap = new HashMap<>(); + stateMap.put("-1", "已过期"); + stateMap.put("0", "未提交"); + stateMap.put("1", "未整改"); + stateMap.put("2", "已整改"); + stateMap.put("3", "待验收"); + stateMap.put("4", "已验收"); + Map rectifType = new HashMap<>(); + rectifType.put("1", "立即整改"); + rectifType.put("2", "限期整改"); + Map haveschemeMap = new HashMap<>(); + haveschemeMap.put("0", "无"); + haveschemeMap.put("1", "有"); + Map ysStatusMap = new HashMap<>(); + ysStatusMap.put("0", "否"); + ysStatusMap.put("1", "是"); + + Map dataMap = new HashMap();// 传给导出页面的数据 +// List imgKeyId = new ArrayList<>();// 需要查询图片的id标识信息 + HashSet imgIds = new HashSet(); +// pd.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID()); // 企业id + // 查看隐患信息 + List varOList = hiddenService.listAll(pd); + for (PageData pageData : varOList) { +// imgKeyId.add(pageData.getString("HIDDEN_ID")); + imgIds.add(pageData.getString("HIDDEN_ID")); + } + + // 查询整改方案 + List schemeList = hiddenSchemeService.listExport(pd); + Map schemeMap = new HashMap<>(); + for (PageData pageData : schemeList) { + schemeMap.put(pageData.getString("HIDDEN_ID"), pageData); +// imgKeyId.add(pageData.getString("HIDDEN_ID")); +// imgKeyId.add(pageData.getString("HIDDENSCHEME_ID")); + + imgIds.add(pageData.getString("HIDDENSCHEME_ID")); + } + // 验收信息 + List checkList = hiddenCheckService.listExport(pd); + Map> checkMap = new HashMap<>(); + Integer checkMaxCount = 1; + for (PageData pageData : checkList) { + Integer checkCount = 1; + List vaList = new ArrayList<>(); + if (checkMap.containsKey(pageData.get("HIDDEN_ID"))) { + vaList = checkMap.get(pageData.get("HIDDEN_ID")); + checkCount = vaList.size(); + if (checkMaxCount < checkCount) { + checkMaxCount = checkCount; + } + } + vaList.add(pageData); + checkMap.put(pageData.get("HIDDEN_ID").toString(), vaList); +// imgKeyId.add(pageData.getString("HIDDENCHECK_ID")); + + imgIds.add(pageData.getString("HIDDENCHECK_ID")); + } + + +// String[] imgId = new String[imgKeyId.size()]; +// for (int i = 0; i < imgKeyId.size(); i++) { +// imgId[i] = imgKeyId.get(i); +// } +// String[] imgId = new String[imgIds.size()]; +// for(String imgid : imgIds) { +// imgId[i] = imgid; +// } +// + List imgIdList = new ArrayList<>(); + for(String imgid:imgIds) { + imgIdList.add(imgid); + } + PageData imgpd2 = new PageData(); + String[] imgId =imgIdList.toArray(new String[imgIdList.size()]); + List imgList = new ArrayList(); + if(imgId != null && imgId.length > 0){ + imgpd2.put("ArrayDATA_IDS", imgId); + imgList = imgFilesService.listAllByIds(imgpd2); + } + + + Map imgCount = new HashMap<>(); + Integer imgTypeMaxCount1 = 1, imgTypeMaxCount2 = 1, imgTypeMaxCount3 = 1, imgTypeMaxCount4 = 1, + imgTypeMaxCount5 = 1, imgTypeMaxCount6 = 1, imgTypeMaxCount7 = 1, imgTypeMaxCount8 = 1; + + Map> imgMap = new HashMap<>(); + for (int i = 0; i < imgList.size(); i++) { + if (Tools.isEmpty(imgList.get(i).get("TYPE"))) { + continue; + } + if (Tools.isEmpty(imgList.get(i).get("FOREIGN_KEY"))) { + continue; + } + List list = new ArrayList<>(); + String key = imgList.get(i).getString("FOREIGN_KEY") + ";" + imgList.get(i).get("TYPE"); + if (imgMap.containsKey(key)) { + list = imgMap.get(key); + } + list.add(imgList.get(i).getString("FILEPATH")); + imgMap.put(key, list); + String imgType = imgList.get(i).get("TYPE").toString(); + Integer count = 1; + if (imgCount.containsKey(key)) { + count = imgCount.get(key) + 1; + } + if ("1".equals(imgType)) { + if (imgTypeMaxCount1 < count) { + imgTypeMaxCount1 = count; + } + } + if ("2".equals(imgType)) { + if (imgTypeMaxCount2 < count) { + imgTypeMaxCount2 = count; + } + } + if ("3".equals(imgType)) { + if (imgTypeMaxCount3 < count) { + imgTypeMaxCount3 = count; + } + } + if ("4".equals(imgType)) { + if (imgTypeMaxCount4 < count) { + imgTypeMaxCount4 = count; + } + } + if ("5".equals(imgType)) { + if (imgTypeMaxCount5 < count) { + imgTypeMaxCount5 = count; + } + } + if ("6".equals(imgType)) { + if (imgTypeMaxCount6 < count) { + imgTypeMaxCount6 = count; + } + } + if ("7".equals(imgType)) { + if (imgTypeMaxCount7 < count) { + imgTypeMaxCount7 = count; + } + } + if ("8".equals(imgType)) { + if (imgTypeMaxCount8 < count) { + imgTypeMaxCount8 = count; + } + } + imgCount.put(key, count); + } + List varList = new ArrayList(); + for (PageData pageData : varOList) { + int count = 0; + PageData vpd = new PageData(); + String hidId = pageData.getString("HIDDEN_ID"); + vpd.put("var" + (1 + count), sourceMap.get(pageData.getString("SOURCE"))); + vpd.put("var" + (2 + count), pageData.getString("RISK_UNIT")); + vpd.put("var" + (3 + count), pageData.getString("IDENTIFICATION")); + vpd.put("var" + (4 + count), pageData.getString("RISK_DESCR")); + vpd.put("var" + (5 + count), pageData.getString("LEVEL")); + vpd.put("var" + (6 + count), pageData.getString("CHECK_CONTENT")); + vpd.put("var" + (7 + count), dicMap.get(pageData.getString("HIDDENLEVEL"))); + vpd.put("var" + (8 + count), stateMap.get(pageData.getString("STATE"))); + vpd.put("var" + (9 + count), pageData.getString("HIDDENDESCR")); + vpd.put("var" + (10 + count), pageData.getString("HIDDENPART")); + vpd.put("var" + (11 + count), deparMap.get(pageData.getString("HIDDENFINDDEPT"))); + vpd.put("var" + (12 + count), userMap.get(pageData.getString("CREATOR"))); + vpd.put("var" + (13 + count), pageData.getString("CREATTIME")); + vpd.put("var" + (14 + count), rectifType.get(pageData.getString("RECTIFICATIONTYPE"))); + vpd.put("var" + (15 + count), pageData.getString("RECTIFICATIONDEADLINE")); + List yhImg = imgMap.get(pageData.getString("HIDDEN_ID") + ";3"); + for (int i = 0; i < imgTypeMaxCount3; i++) { + if (null != yhImg) { + if (i < yhImg.size()) { + vpd.put("img" + (16 + i), yhImg.get(i)); + } else { + vpd.put("img" + (16 + i), ""); + } + } else { + vpd.put("img" + (16 + i), ""); + } + + } + count += imgTypeMaxCount3; + vpd.put("var" + (16 + count), pageData.getString("RECTIFYDESCR"));// 整改描述 + vpd.put("var" + (17 + count), deparMap.get(pageData.getString("RECTIFICATIONDEPT")));// 整改部门 + vpd.put("var" + (18 + count), userMap.get(pageData.getString("RECTIFICATIONOR")));// 整改人 + vpd.put("var" + (19 + count), pageData.getString("RECTIFICATIONTIME"));// 整改时间 + List zgImg = imgMap.get(hidId + ";4");// 整改后图片 + for (int i = 0; i < imgTypeMaxCount4; i++) { + if (null != zgImg) { + if (i < zgImg.size()) { + vpd.put("img" + (20 + count + i), zgImg.get(i)); + } else { + vpd.put("img" + (20 + count + i), ""); + } + } else { + vpd.put("img" + (20 + count + i), ""); + } + + } + count += imgTypeMaxCount4; + vpd.put("var" + (20 + count), haveschemeMap.get(pageData.getString("HAVESCHEME")));// 整改方案 + if (schemeMap.containsKey(hidId)) { + PageData schemePd = schemeMap.get(hidId); + if ("1".equals(pageData.getString("HAVESCHEME"))) { + vpd.put("var" + (21 + count), schemePd.getString("SCREENINGDATE"));// 排查日期 + vpd.put("var" + (22 + count), schemePd.getString("LISTNAME"));// 隐患清单 + vpd.put("var" + (23 + count), schemePd.getString("GOVERNSTANDARDS"));// 治理标准要求 + vpd.put("var" + (24 + count), schemePd.getString("GOVERNMETHOD"));// 治理方法 + vpd.put("var" + (25 + count), schemePd.getString("EXPENDITURE"));// 经费和物资的落实 + vpd.put("var" + (26 + count), schemePd.getString("PRINCIPAL"));// 负责治理人员 + vpd.put("var" + (27 + count), schemePd.getString("PROGRAMMING"));// 工时安排 + vpd.put("var" + (28 + count), schemePd.getString("TIMELIMITFOR"));// 时限要求 + vpd.put("var" + (29 + count), pageData.getString("FILEPATH"));// 应急预案附件 + vpd.put("var" + (30 + count), schemePd.getString("JOBREQUIREMENT"));// 工作要求 + vpd.put("var" + (31 + count), schemePd.getString("OTHERBUSINESS"));// 其他事项 + List ysImg = imgMap.get(schemePd.getString("HIDDENSCHEME_ID") + ";8"); + for (int i = 0; i < imgTypeMaxCount8; i++) { + if (null != ysImg) { + if (i < ysImg.size()) { + vpd.put("img" + (32 + count + i), ysImg.get(i));// 方案图片 + } else { + vpd.put("img" + (32 + count + i), ""); + } + } else { + vpd.put("img" + (32 + count + i), ""); + } + } + + } + count += imgTypeMaxCount8; + if (checkMap.containsKey(hidId)) { + List check = checkMap.get(hidId); + for (PageData pageData2 : check) { + vpd.put("var" + (32 + count), ysStatusMap.get(pageData2.getString("CHECKDESCR")));// 验收描述 + vpd.put("var" + (33 + count), pageData2.getString("STATUS"));// 是否合格 + vpd.put("var" + (34 + count), pageData2.getString("CHECKDEPTNAME"));// 验收部门 + vpd.put("var" + (35 + count), pageData2.getString("CHECKORNAME"));// 验收人 + vpd.put("var" + (36 + count), pageData2.getString("CHECK_TIME"));// 验收时间 +// vpd.put("var"+(37+count),pageData2.getString("HIDDENCHECK_ID"));//验收图片 + List ysImg = imgMap.get(pageData2.getString("HIDDENCHECK_ID") + ";5");// 整改后图片 + for (int i = 0; i < imgTypeMaxCount5; i++) { + if (null != ysImg) { + if (i < ysImg.size()) { + vpd.put("img" + (37 + count + i), ysImg.get(i)); + } else { + vpd.put("img" + (37 + count + i), ""); + } + } else { + vpd.put("img" + (37 + count + i), ""); + } + + } + } + + } + } + + varList.add(vpd); + } + + List titles = new ArrayList(); + + titles.add("隐患来源"); // 1 + titles.add("风险点(单元)"); // 2 + titles.add("辨识部位"); // 3 + titles.add("存在风险"); // 4 + titles.add("风险分级"); // 6 + titles.add("检查内容"); // 7 + titles.add("隐患级别"); // 16 + titles.add("隐患状态"); // 17= + titles.add("隐患描述"); // 8 + titles.add("隐患部位"); // 9 + titles.add("隐患发现部门"); // 9 ```````` + titles.add("发现人"); // 10 + titles.add("发现时间"); // 11 + titles.add("整改类型"); // 10 + titles.add("整改期限"); // 11 + for (int i = 0; i < imgTypeMaxCount3; i++) { + titles.add("隐患图片"); // 11 + } + + titles.add("整改描述"); + titles.add("整改部门"); + titles.add("整改人"); + titles.add("整改时间"); + + for (int i = 0; i < imgTypeMaxCount4; i++) { + titles.add("整改后图片"); // 11 + } + + titles.add("整改方案"); + titles.add("排查日期"); + titles.add("隐患清单"); + titles.add("治理标准要求"); + titles.add("治理方法"); + titles.add("经费和物资的落实"); + titles.add("负责治理人员"); + titles.add("工时安排"); + titles.add("时限要求"); + titles.add("应急预案附件"); + titles.add("工作要求"); + titles.add("其他事项"); + for (int i = 0; i < imgTypeMaxCount8; i++) { + titles.add("方案图片"); // 11 + } + for (int i = 0; i < checkMaxCount; i++) { + titles.add("验收描述"); + titles.add("是否合格"); + titles.add("验收部门"); + titles.add("验收人"); + titles.add("验收时间"); + + for (int j = 0; j < imgTypeMaxCount5; j++) { + titles.add("验收图片"); + } + } + dataMap.put("titles", titles); + dataMap.put("varList", varList); + ExcelExportCompressImg erv2 = new ExcelExportCompressImg(); + mv = new ModelAndView(erv2, dataMap); + return mv; + + } } diff --git a/src/main/java/com/zcloud/controller/bus/ListManagerController.java b/src/main/java/com/zcloud/controller/bus/ListManagerController.java new file mode 100644 index 0000000..437076e --- /dev/null +++ b/src/main/java/com/zcloud/controller/bus/ListManagerController.java @@ -0,0 +1,99 @@ +package com.zcloud.controller.bus; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.zcloud.controller.base.BaseController; +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.service.bus.*; +import com.zcloud.service.system.DepartmentService; +import com.zcloud.util.*; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +import java.util.*; + +/** + * 说明:清单管理 + * 作者:luoxiaobao + * 时间:2020-12-30 + * 官网:www.zcloudchina.com + */ +@Controller +@RequestMapping("/listmanager") +public class ListManagerController extends BaseController { + + @Autowired + private ListManagerService listmanagerService; + + + /**列表 + * @param page + * @throws Exception + */ + @RequestMapping(value="/list") + @ResponseBody + public Object list(Page page) throws Exception{ + Map map = new HashMap(); + String errInfo = "success"; + PageData pd = new PageData(); + pd = this.getPageData(); + pd.put("OPERATOR", Jurisdiction.getUsername()); //修改人 + pd.put("OPERATTIME", DateUtil.date2Str(new Date())); //修改时间 + pd.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID()); +// pd.put("ISMAIN", Jurisdiction.getIS_MAIN()); +// pd.put("ISSUPERVISE", Jurisdiction.getISSUPERVISE()); + pd.put("DEPARTMENT_ID", Jurisdiction.getDEPARTMENT_ID()); + String DEPTIDS = pd.getString("DEPTIDS"); + if(Tools.notEmpty(DEPTIDS)) { + String DEPT_IDS[] = DEPTIDS.split(","); + pd.put("DEPT_IDS", DEPT_IDS); + } + pd.put("HIDFORBIDDEN", "no"); //企业 + String KEYWORDS = pd.getString("KEYWORDS"); //关键词检索条件 + if(Tools.notEmpty(KEYWORDS))pd.put("KEYWORDS", KEYWORDS.trim()); + String USERNAME = pd.getString("USERNAME"); //关键词检索条件 + if(Tools.notEmpty(USERNAME))pd.put("USERNAME", USERNAME.trim()); + page.setPd(pd); + List varList = listmanagerService.list(page); //列出ListManager列表 + map.put("varList", varList); + map.put("page", page); + map.put("result", errInfo); + return map; + } + + /**导出到excel + * @param + * @throws Exception + */ + @RequestMapping(value="/exportExcelSystemLedger") + public ModelAndView exportExcelSystemLedger() throws Exception{ + ModelAndView mv = new ModelAndView(); + PageData pd = this.getPageData(); + + Map dataMap = new HashMap<>(); + List titles = new ArrayList<>(); + titles.add("企业名称"); //1 + titles.add("清单名称"); //2 + titles.add("部门"); //3 + titles.add("岗位"); //4 + titles.add("人员"); //5 + titles.add("排查周期"); //6 + titles.add("清单类型"); //7 + titles.add("排查类型"); //8 + titles.add("状态"); //9 + dataMap.put("titles", titles); + List list = listmanagerService.listExport(pd); + + dataMap.put("varList", list); + ExcelExportCompressImg erv = new ExcelExportCompressImg(); + mv = new ModelAndView(erv,dataMap); + return mv; + } + +} diff --git a/src/main/java/com/zcloud/controller/onlinexxks/StageStudentRelationController.java b/src/main/java/com/zcloud/controller/onlinexxks/StageStudentRelationController.java new file mode 100644 index 0000000..0d0d93b --- /dev/null +++ b/src/main/java/com/zcloud/controller/onlinexxks/StageStudentRelationController.java @@ -0,0 +1,63 @@ +package com.zcloud.controller.onlinexxks; + +import com.zcloud.controller.base.BaseController; +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.service.onlinexxks.StageStudentRelationService; +import com.zcloud.util.*; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +import java.util.*; + +/** + * 说明:阶段考试学员关系表 + * 作者:luoxiaobao + * 时间:2021-10-08 + * 官网:www.zcloudchina.com + */ +@Controller +@RequestMapping("/stagestudentrelation") +public class StageStudentRelationController extends BaseController { + + @Autowired + private StageStudentRelationService stagestudentrelationService; + + + /**导出到excel + * @param + * @throws Exception + */ + @RequestMapping(value="/exportExcelSystemLedger") + public ModelAndView exportExcelSystemLedger() throws Exception{ + ModelAndView mv = new ModelAndView(); + PageData pd = this.getPageData(); + + Map dataMap = new HashMap<>(); + List titles = new ArrayList<>(); + titles.add("企业名称"); //1 + titles.add("学习任务名称"); //2 + titles.add("培训开始时间"); //3 + titles.add("培训结束时间"); //4 + titles.add("姓名"); //5 + titles.add("电话"); //6 + titles.add("部门"); //7 + titles.add("岗位"); //8 + titles.add("任务学时(分钟)"); //9 + titles.add("已学习学时(分钟)"); //10 + titles.add("学习状态"); //11 + titles.add("考试成绩"); //12 + titles.add("考试结果"); //13 + dataMap.put("titles", titles); + List list = stagestudentrelationService.listExport(pd); + + dataMap.put("varList", list); + ExcelExportCompressImg erv = new ExcelExportCompressImg(); + mv = new ModelAndView(erv,dataMap); + return mv; + } +} diff --git a/src/main/java/com/zcloud/controller/onlinexxks/StudyTaskController.java b/src/main/java/com/zcloud/controller/onlinexxks/StudyTaskController.java new file mode 100644 index 0000000..062795c --- /dev/null +++ b/src/main/java/com/zcloud/controller/onlinexxks/StudyTaskController.java @@ -0,0 +1,61 @@ +package com.zcloud.controller.onlinexxks; + +import com.zcloud.controller.base.BaseController; +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.service.onlinexxks.*; +import com.zcloud.util.*; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +import java.util.*; + +/** + * 说明:在线学习考试-任务 + * 作者:luoxiaobao + * 时间:2021-12-20 + * 官网:www.zcloudchina.com + */ +@Controller +@RequestMapping("/studytask") +public class StudyTaskController extends BaseController { + + @Autowired + private StudyTaskService studytaskService; + + /**导出到excel + * @param + * @throws Exception + */ + @RequestMapping(value="/exportExcelSystemLedger") + public ModelAndView exportExcelSystemLedger() throws Exception{ + ModelAndView mv = new ModelAndView(); + PageData pd = this.getPageData(); + + Map dataMap = new HashMap<>(); + List titles = new ArrayList<>(); + titles.add("企业名称"); //1 + titles.add("学习任务名称"); //2 + titles.add("培训行业类型"); //3 + titles.add("岗位培训类型"); //4 + titles.add("培训开始时间"); //5 + titles.add("培训结束时间"); //6 + titles.add("任务课时(分钟)"); //7 + titles.add("应参考人数"); //8 + titles.add("参考人数"); //9 + titles.add("合格人数"); //10 + titles.add("状态"); //11 + dataMap.put("titles", titles); + List list = studytaskService.listExport(pd); + + dataMap.put("varList", list); + ExcelExportCompressImg erv = new ExcelExportCompressImg(); + mv = new ModelAndView(erv,dataMap); + return mv; + } +} diff --git a/src/main/java/com/zcloud/controller/superviseInspect/SuperviseInspectController.java b/src/main/java/com/zcloud/controller/superviseInspect/SuperviseInspectController.java index 6ba7235..1540334 100644 --- a/src/main/java/com/zcloud/controller/superviseInspect/SuperviseInspectController.java +++ b/src/main/java/com/zcloud/controller/superviseInspect/SuperviseInspectController.java @@ -361,4 +361,20 @@ public class SuperviseInspectController extends BaseController { return mv; } + /**导出到excel + * @param + * @throws Exception + */ + @RequestMapping(value="/exportExcelSystemLedger") + public ModelAndView exportExcelSystemLedger() throws Exception{ + ModelAndView mv = new ModelAndView(); + PageData pd = this.getPageData(); + + Map dataMap = superviseinspectService.listExport(pd); + + ExcelExportCompressImg erv = new ExcelExportCompressImg(); + mv = new ModelAndView(erv,dataMap); + return mv; + } + } diff --git a/src/main/java/com/zcloud/controller/superviseInspect/SuperviseInspectHiddenController.java b/src/main/java/com/zcloud/controller/superviseInspect/SuperviseInspectHiddenController.java index 3ff6327..d46df44 100644 --- a/src/main/java/com/zcloud/controller/superviseInspect/SuperviseInspectHiddenController.java +++ b/src/main/java/com/zcloud/controller/superviseInspect/SuperviseInspectHiddenController.java @@ -7,10 +7,7 @@ import com.zcloud.service.superviseInspect.SuperviseInspectFilesService; import com.zcloud.service.superviseInspect.SuperviseInspectHiddenService; import com.zcloud.service.system.DepartmentService; import com.zcloud.service.system.UsersService; -import com.zcloud.util.DateUtil; -import com.zcloud.util.Jurisdiction; -import com.zcloud.util.ObjectExcelView; -import com.zcloud.util.Tools; +import com.zcloud.util.*; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -278,4 +275,20 @@ public class SuperviseInspectHiddenController extends BaseController { return mv; } + /**导出到excel + * @param + * @throws Exception + */ + @RequestMapping(value="/exportExcelSystemLedger") + public ModelAndView exportExcelSystemLedger() throws Exception{ + ModelAndView mv = new ModelAndView(); + PageData pd = this.getPageData(); + + Map dataMap = superviseinspecthiddenService.listExport(pd); + + ExcelExportCompressImg erv = new ExcelExportCompressImg(); + mv = new ModelAndView(erv,dataMap); + return mv; + } + } diff --git a/src/main/java/com/zcloud/controller/system/LoginController.java b/src/main/java/com/zcloud/controller/system/LoginController.java index 48fd805..151be00 100644 --- a/src/main/java/com/zcloud/controller/system/LoginController.java +++ b/src/main/java/com/zcloud/controller/system/LoginController.java @@ -177,13 +177,13 @@ public class LoginController extends BaseController { String errInfo = "success"; // 2023-04-17 新增需求如果当前时间大于10月1号,则不允许登录(房嘉恺) // 2024-11-15 由于商务原因恢复系统登录限制(王鹏) - Date today = new Date(); - Date limit_date = DateUtil.str2Date("2025-01-08 00:00:00"); - if (today.getTime() > limit_date.getTime()){ - errInfo = "error"; - map.put("msg", "系统开小差,请联系管理员"); - return map; - } +// Date today = new Date(); +// Date limit_date = DateUtil.str2Date("2025-01-08 00:00:00"); +// if (today.getTime() > limit_date.getTime()){ +// errInfo = "error"; +// map.put("msg", "系统开小差,请联系管理员"); +// return map; +// } String KEYDATA[] = pd.getString("KEYDATA").replaceAll("qdkjchina", "").split(",qd,"); if(null != KEYDATA && KEYDATA.length == 2){ String USERNAME = KEYDATA[0]; //登录过来的用户名 diff --git a/src/main/java/com/zcloud/controller/system/UsersController.java b/src/main/java/com/zcloud/controller/system/UsersController.java index 60b206c..9fdfe7b 100644 --- a/src/main/java/com/zcloud/controller/system/UsersController.java +++ b/src/main/java/com/zcloud/controller/system/UsersController.java @@ -8,6 +8,8 @@ import java.util.Map; import javax.servlet.http.HttpServletResponse; import com.zcloud.service.bus.ImgFilesService; +import com.zcloud.service.system.*; +import com.zcloud.util.*; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.DisabledAccountException; @@ -33,20 +35,6 @@ import com.zcloud.entity.Page; import com.zcloud.entity.PageData; import com.zcloud.entity.system.Department; import com.zcloud.entity.system.Role; -import com.zcloud.service.system.DepartmentService; -import com.zcloud.service.system.FHlogService; -import com.zcloud.service.system.RoleService; -import com.zcloud.service.system.UeditorService; -import com.zcloud.service.system.UsersService; -import com.zcloud.util.Const; -import com.zcloud.util.FileDownload; -import com.zcloud.util.FileUpload; -import com.zcloud.util.GetPinyin; -import com.zcloud.util.Jurisdiction; -import com.zcloud.util.ObjectExcelRead; -import com.zcloud.util.ObjectExcelView; -import com.zcloud.util.PathUtil; -import com.zcloud.util.Tools; /** * 说明:系统用户处理类 @@ -69,6 +57,8 @@ public class UsersController extends BaseController { private DepartmentService departmentService; @Autowired private ImgFilesService imgFilesService; + @Autowired + private Users2Service corpUsersService; /**用户列表 * @param page * @return @@ -596,6 +586,74 @@ public class UsersController extends BaseController { return map; } + @RequestMapping(value="/goDaochu") + @ResponseBody + public Object goDaochu() throws Exception{ + Map map = new HashMap(); + String errInfo = "success"; + PageData pd = new PageData(); + pd = this.getPageData(); + List> regList = usersService.getDaochuReglatory(pd); //列出CorpInfo列表 + map.put("regList", regList); + List> preList = usersService.getDaochuPrevention(pd); //列出CorpInfo列表 + map.put("preList", preList); + map.put("result", errInfo); + return map; + } + + /**导出到excel + * @param + * @throws Exception + */ + @RequestMapping(value="/exportExcelDaochu") + public ModelAndView exportExcelDaochu() throws Exception{ + ModelAndView mv = new ModelAndView(); + PageData pd = new PageData(); + pd = this.getPageData(); + + Map dataMap = new HashMap(); + String regKeys [] = pd.get("regKeys").toString().split(","); + String regVals [] = pd.get("regVals").toString().split(","); + String preKeys [] = pd.get("preKeys").toString().split(","); + String preVals [] = pd.get("preVals").toString().split(","); + List titles = new ArrayList(); + titles.add("企业名称"); //1 + titles.add("姓名"); //2 + titles.add("登录账号"); //3 + titles.add("部门"); //4 + titles.add("岗位"); //5 + titles.add("手机号"); //6 + titles.add("性别"); //7 + titles.add("职务"); //8 + titles.add("邮箱"); //9 + titles.add("状态"); //10 + titles.add("是否在线学习人员"); //11 + titles.add("身份证号"); //12 + titles.add("民族"); //13 + titles.add("政治面貌"); //14 + titles.add("出生年月"); //15 + titles.add("文化程度"); //16 + titles.add("人员类型"); //17 + titles.add("职称"); //18 + titles.add("工种"); //19 + titles.add("入职日期"); //20 + titles.add("参加工作日期"); //21 + titles.add("在职情况"); //22 + titles.add("学习人员照片"); //23 + titles.add("证书照片"); //24 + dataMap.put("titles", titles); + List list = new ArrayList<>(); + List regUserList = usersService.listExport(pd, regKeys); + list.addAll(regUserList); + List corpUserList = corpUsersService.listExport(pd, preKeys); + list.addAll(corpUserList); + + dataMap.put("varList", list); + ExcelExportCompressImg erv = new ExcelExportCompressImg(); + mv = new ModelAndView(erv,dataMap); + return mv; + } + /**导出用户信息到EXCEL * @return * @throws Exception diff --git a/src/main/java/com/zcloud/entity/PageData.java b/src/main/java/com/zcloud/entity/PageData.java index b456f41..e6dcbcd 100644 --- a/src/main/java/com/zcloud/entity/PageData.java +++ b/src/main/java/com/zcloud/entity/PageData.java @@ -11,6 +11,7 @@ import java.util.Set; import javax.servlet.http.HttpServletRequest; import com.alibaba.druid.proxy.jdbc.ClobProxyImpl; +import com.zcloud.util.Tools; /** * 说明:参数封装Map @@ -72,6 +73,10 @@ public class PageData extends HashMap implements Map listExport(PageData pd); } diff --git a/src/main/java/com/zcloud/mapper/datasource/superviseInspect/SuperviseInspectMapper.java b/src/main/java/com/zcloud/mapper/datasource/superviseInspect/SuperviseInspectMapper.java index e95e494..652f085 100644 --- a/src/main/java/com/zcloud/mapper/datasource/superviseInspect/SuperviseInspectMapper.java +++ b/src/main/java/com/zcloud/mapper/datasource/superviseInspect/SuperviseInspectMapper.java @@ -53,6 +53,7 @@ public interface SuperviseInspectMapper{ * @throws Exception */ void deleteAll(String[] ArrayDATA_IDS); - + + List listExport(PageData pd); } diff --git a/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesCapitalMapper.java b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesCapitalMapper.java new file mode 100644 index 0000000..3cac782 --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesCapitalMapper.java @@ -0,0 +1,24 @@ +package com.zcloud.mapper.dsno2.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:培训资金提取和使用情况管理台账 + * 作者:luoxiaobao + * 时间:2021-12-17 + * 官网:www.zcloudchina.com + */ +public interface ArchivesCapitalMapper { + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd); + +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesEduManagerMapper.java b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesEduManagerMapper.java new file mode 100644 index 0000000..5420491 --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesEduManagerMapper.java @@ -0,0 +1,24 @@ +package com.zcloud.mapper.dsno2.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:年度安全培训教育管理台账 + * 作者:luoxiaobao + * 时间:2021-12-17 + * 官网:www.zcloudchina.com + */ +public interface ArchivesEduManagerMapper { + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd); + +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesEduPlanMapper.java b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesEduPlanMapper.java new file mode 100644 index 0000000..b5ceb80 --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesEduPlanMapper.java @@ -0,0 +1,24 @@ +package com.zcloud.mapper.dsno2.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:年度安全培训教育计划 + * 作者:luoxiaobao + * 时间:2021-12-16 + * 官网:www.zcloudchina.com + */ +public interface ArchivesEduPlanMapper{ + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd); + +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesFilesMapper.java b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesFilesMapper.java new file mode 100644 index 0000000..18c9018 --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesFilesMapper.java @@ -0,0 +1,59 @@ +package com.zcloud.mapper.dsno2.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:档案文件 + * 作者:luoxiaobao + * 时间:2021-12-14 + * 官网:www.zcloudchina.com + */ +public interface ArchivesFilesMapper { + + /**新增 + * @param pd + * @throws Exception + */ + void save(PageData pd); + + /**删除 + * @param pd + * @throws Exception + */ + void delete(PageData pd); + + /**修改 + * @param pd + * @throws Exception + */ + void edit(PageData pd); + + /**列表 + * @param page + * @throws Exception + */ + List datalistPage(Page page); + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd); + + /**通过id获取数据 + * @param pd + * @throws Exception + */ + PageData findById(PageData pd); + + /**批量删除 + * @param ArrayDATA_IDS + * @throws Exception + */ + void deleteAll(String[] ArrayDATA_IDS); + +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesPostManMapper.java b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesPostManMapper.java new file mode 100644 index 0000000..ebba80e --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesPostManMapper.java @@ -0,0 +1,24 @@ +package com.zcloud.mapper.dsno2.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:三岗人员管理台账 + * 作者:luoxiaobao + * 时间:2021-12-15 + * 官网:www.zcloudchina.com + */ +public interface ArchivesPostManMapper{ + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd); + +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesTeacherMapper.java b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesTeacherMapper.java new file mode 100644 index 0000000..6eb9854 --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/archives/ArchivesTeacherMapper.java @@ -0,0 +1,24 @@ +package com.zcloud.mapper.dsno2.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:本单位师资管理台账 + * 作者:luoxiaobao + * 时间:2021-12-16 + * 官网:www.zcloudchina.com + */ +public interface ArchivesTeacherMapper{ + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd); + +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/bus/CheckRecordMapper.java b/src/main/java/com/zcloud/mapper/dsno2/bus/CheckRecordMapper.java index 7f5f3ca..179c6b0 100644 --- a/src/main/java/com/zcloud/mapper/dsno2/bus/CheckRecordMapper.java +++ b/src/main/java/com/zcloud/mapper/dsno2/bus/CheckRecordMapper.java @@ -84,5 +84,7 @@ public interface CheckRecordMapper{ * @return */ List recordByIde(PageData pd); + + List listExport(PageData pd); } diff --git a/src/main/java/com/zcloud/mapper/dsno2/bus/HiddenCheckMapper.java b/src/main/java/com/zcloud/mapper/dsno2/bus/HiddenCheckMapper.java index d71d900..4f08a1c 100644 --- a/src/main/java/com/zcloud/mapper/dsno2/bus/HiddenCheckMapper.java +++ b/src/main/java/com/zcloud/mapper/dsno2/bus/HiddenCheckMapper.java @@ -55,6 +55,7 @@ public interface HiddenCheckMapper{ void deleteAll(String[] ArrayDATA_IDS); PageData findByHidden(PageData pd); - + + List listExport(PageData pd); } diff --git a/src/main/java/com/zcloud/mapper/dsno2/bus/HiddenSchemeMapper.java b/src/main/java/com/zcloud/mapper/dsno2/bus/HiddenSchemeMapper.java index d6bd8d3..506328f 100644 --- a/src/main/java/com/zcloud/mapper/dsno2/bus/HiddenSchemeMapper.java +++ b/src/main/java/com/zcloud/mapper/dsno2/bus/HiddenSchemeMapper.java @@ -65,6 +65,7 @@ public interface HiddenSchemeMapper{ * @throws Exception */ void deleteAll(String[] ArrayDATA_IDS); - + + List listExport(PageData pd); } diff --git a/src/main/java/com/zcloud/mapper/dsno2/bus/ListManagerMapper.java b/src/main/java/com/zcloud/mapper/dsno2/bus/ListManagerMapper.java new file mode 100644 index 0000000..18b758b --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/bus/ListManagerMapper.java @@ -0,0 +1,26 @@ +package com.zcloud.mapper.dsno2.bus; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:清单管理 + * 作者:luoxiaobao + * 时间:2020-12-30 + * 官网:www.zcloudchina.com + */ +public interface ListManagerMapper { + + + + /**列表 + * @param page + * @throws Exception + */ + List datalistPage(Page page); + + List listExport(PageData pd); +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/bus/TrainingScheduleMapper.java b/src/main/java/com/zcloud/mapper/dsno2/bus/TrainingScheduleMapper.java new file mode 100644 index 0000000..006df0b --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/bus/TrainingScheduleMapper.java @@ -0,0 +1,24 @@ +package com.zcloud.mapper.dsno2.bus; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:培训日程安排通知 + * 作者:luoxiaobao + * 时间:2021-12-20 + * 官网:www.zcloudchina.com + */ +public interface TrainingScheduleMapper { + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd); + +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamMapper.java b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamMapper.java new file mode 100644 index 0000000..1405b2f --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamMapper.java @@ -0,0 +1,23 @@ +package com.zcloud.mapper.dsno2.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:阶段考试 + * 作者:luoxiaobao + * 时间:2021-09-15 + * 官网:www.zcloudchina.com + */ +public interface StageExamMapper{ + + /** + * 根据试卷id和用户id获取用户的所答试卷 + * @param pd + * @return + */ + List findByPaperUser(PageData pd); +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamPaperQuestionMapper.java b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamPaperQuestionMapper.java new file mode 100644 index 0000000..16185c9 --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamPaperQuestionMapper.java @@ -0,0 +1,24 @@ +package com.zcloud.mapper.dsno2.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:阶段考试试题中间表 + * 作者:luoxiaobao + * 时间:2021-10-08 + * 官网:www.zcloudchina.com + */ +public interface StageExamPaperQuestionMapper { + + + /**列表(根据试卷ID获取试题数据) + * @param pd + * @throws Exception + */ + List findByExamPaper(PageData pd); + +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamRecordMapper.java b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamRecordMapper.java new file mode 100644 index 0000000..5bb65a9 --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageExamRecordMapper.java @@ -0,0 +1,22 @@ +package com.zcloud.mapper.dsno2.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:阶段考试记录 + * 作者:luoxiaobao + * 时间:2021-09-15 + * 官网:www.zcloudchina.com + */ +public interface StageExamRecordMapper{ + + /**试卷答题展示(获取答题情况) + * @param + * @throws Exception + */ + List findByExam(PageData pd); +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageStudentRelationMapper.java b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageStudentRelationMapper.java new file mode 100644 index 0000000..b605f40 --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageStudentRelationMapper.java @@ -0,0 +1,30 @@ +package com.zcloud.mapper.dsno2.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:阶段考试学员关系表 + * 作者:luoxiaobao + * 时间:2021-10-08 + * 官网:www.zcloudchina.com + */ +public interface StageStudentRelationMapper { + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listStudentTask(PageData pd); + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listExport(PageData pd); +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageexampaperMapper.java b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageexampaperMapper.java new file mode 100644 index 0000000..8b6d3c7 --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StageexampaperMapper.java @@ -0,0 +1,22 @@ +package com.zcloud.mapper.dsno2.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:阶段考试试卷表 + * 作者:luoxiaobao + * 时间:2021-07-04 + * 官网:www.zcloudchina.com + */ +public interface StageexampaperMapper{ + + /**通过id获取数据 + * @param pd + * @throws Exception + */ + PageData findById(PageData pd); +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StudyTaskMapper.java b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StudyTaskMapper.java new file mode 100644 index 0000000..84d33b9 --- /dev/null +++ b/src/main/java/com/zcloud/mapper/dsno2/onlinexxks/StudyTaskMapper.java @@ -0,0 +1,34 @@ +package com.zcloud.mapper.dsno2.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:在线学习考试-任务 + * 作者:luoxiaobao + * 时间:2021-12-20 + * 官网:www.zcloudchina.com + */ +public interface StudyTaskMapper { + + /**通过id获取数据 + * @param pd + * @throws Exception + */ + PageData findById(PageData pd); + + + List getcurriculumAllBystudyTaskId(PageData pd); + + + /**全部视频课件+资料课件 + * @param pd + * @throws Exception + */ + List getAllCourseware(PageData pd); + + List listAll(PageData pd); +} + diff --git a/src/main/java/com/zcloud/mapper/dsno2/system/Users2Mapper.java b/src/main/java/com/zcloud/mapper/dsno2/system/Users2Mapper.java index 5d9d1dc..d427953 100644 --- a/src/main/java/com/zcloud/mapper/dsno2/system/Users2Mapper.java +++ b/src/main/java/com/zcloud/mapper/dsno2/system/Users2Mapper.java @@ -117,4 +117,8 @@ public interface Users2Mapper { * @param pd */ void editPassword(PageData pd); + + List listAllUser(PageData pd); + + List listAllForExport(PageData pd); } diff --git a/src/main/java/com/zcloud/service/archives/ArchivesCapitalService.java b/src/main/java/com/zcloud/service/archives/ArchivesCapitalService.java new file mode 100644 index 0000000..b8f1a2b --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/ArchivesCapitalService.java @@ -0,0 +1,24 @@ +package com.zcloud.service.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:培训资金提取和使用情况管理台账 + * 作者:luoxiaobao + * 时间:2021-12-17 + * 官网:www.zcloudchina.com + */ +public interface ArchivesCapitalService { + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd)throws Exception; + +} + diff --git a/src/main/java/com/zcloud/service/archives/ArchivesEduManagerService.java b/src/main/java/com/zcloud/service/archives/ArchivesEduManagerService.java new file mode 100644 index 0000000..a03cea6 --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/ArchivesEduManagerService.java @@ -0,0 +1,147 @@ +package com.zcloud.service.archives; + +import com.zcloud.entity.PageData; +import com.zcloud.entity.system.Dictionaries; + +import java.io.File; +import java.util.List; + +/** + * 说明:年度安全培训教育管理台账 + * 作者:luoxiaobao + * 时间:2021-12-17 + * 官网:www.zcloudchina.com + */ +public interface ArchivesEduManagerService { + + + List listAll(PageData corp) throws Exception; + + /** + * 人员登记表 + * @param stu + * @return + * @throws Exception + */ + File registertable(PageData stu)throws Exception; + /** + * 一人一档详情首页导出word + * @throws Exception + */ + String homepage(PageData student, PageData pd, String now, PageData paper, PageData classInfo) throws Exception; + /** + * 一人一档详情学时证明导出word + * @throws Exception + */ + String classHour(PageData student, PageData classInfo, List coursewaresList, PageData corpinfo, PageData pd, String now, PageData paper) throws Exception; + + /** + * 学员学习档案导出word + * @throws Exception + */ + String studyInfo(PageData student, PageData classInfo, List curList, List coursewaresList, PageData pd, String now, PageData corpinfo, PageData paper) throws Exception; + + /** + * 一人一档详情课程导出word + * @throws Exception + */ + String curriculumword(PageData student, PageData classInfo, List coursewaresList, PageData corpinfo, String now) throws Exception; + + /** + * 一人一档安全培训考核记录导出word + * + * @throws Exception + */ + String practiceword(PageData student, PageData pd, PageData classInfo, PageData corpinfo, String now, List personnelTypeList) throws Exception; + + /** + * 一人一档安全培训考核记录导出word + * + * @throws Exception + */ + String safelogword(PageData student, PageData classInfo, List coursewaresList, PageData pd, PageData corpinfo, PageData paper, String now, List personnelTypeList) throws Exception; + + /** + * 一人一档详情试卷导出word + * + * @throws Exception + */ + String papermword(PageData student, PageData classInfo, PageData corpinfo, PageData paper, String now) throws Exception; + + File exportPdfTrainingSchedule(PageData pd,List tsList) throws Exception; + + File exportPdfCourseware(PageData task, List coursewaresList) throws Exception; + + File exportPdfStudyTask(PageData task, List coursewaresList, List stuList) throws Exception; + + File exportPdfExamPaper(PageData task, PageData paper, List questionList) throws Exception; + + /** + * 培训考核试卷 + * @param task + * @param coursewaresList + * @param stuList + * @return + * @throws Exception + */ + File exportPdfArchivesStudentScore(PageData task, List coursewaresList, List stuList) throws Exception; + + /** + * 培训综合考评报告 + * @param task + * @param curList + * @param stuList + * @return + * @throws Exception + */ + File exportPdfArchivesReport(PageData task, List curList, List stuList) throws Exception; + + + + /** + * 三岗人员管理台账 + * @param corp + * @param archivesPostManList + * @return + * @throws Exception + */ + File exportPdfArchivesPostMant(PageData corp, List archivesPostManList) throws Exception; + + + /** + * 本单位师资管理台账 + * @param corp + * @param archivesTeacherList + * @return + * @throws Exception + */ + File exportPdfArchivesTeacher(PageData corp, List archivesTeacherList) throws Exception; + + /** + * 安全培训教育计划 + * @param corp + * @param archivesEduPlanList + * @return + * @throws Exception + */ + File exportPdfArchivesEduPlan(PageData corp, List archivesEduPlanList) throws Exception; + + /** + * 安全培训教育管理台账 + * @param corp + * @param archivesEduManagerList + * @return + * @throws Exception + */ + File exportPdfArchivesEduManager(PageData corp, List archivesEduManagerList) throws Exception; + + /** + * 培训资金提取和使用情况管理台账 + * @param corp + * @param archivesCapitalList + * @return + * @throws Exception + */ + File exportPdfArchivesCapital(PageData corp, List archivesCapitalList) throws Exception; +} + diff --git a/src/main/java/com/zcloud/service/archives/ArchivesEduPlanService.java b/src/main/java/com/zcloud/service/archives/ArchivesEduPlanService.java new file mode 100644 index 0000000..27435ca --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/ArchivesEduPlanService.java @@ -0,0 +1,23 @@ +package com.zcloud.service.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:年度安全培训教育计划 + * 作者:luoxiaobao + * 时间:2021-12-16 + * 官网:www.zcloudchina.com + */ +public interface ArchivesEduPlanService{ + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd)throws Exception; + +} + diff --git a/src/main/java/com/zcloud/service/archives/ArchivesFilesService.java b/src/main/java/com/zcloud/service/archives/ArchivesFilesService.java new file mode 100644 index 0000000..c451791 --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/ArchivesFilesService.java @@ -0,0 +1,59 @@ +package com.zcloud.service.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:档案文件 + * 作者:luoxiaobao + * 时间:2021-12-14 + * 官网:www.zcloudchina.com + */ +public interface ArchivesFilesService { + + /**新增 + * @param pd + * @throws Exception + */ + public void save(PageData pd)throws Exception; + + /**删除 + * @param pd + * @throws Exception + */ + public void delete(PageData pd)throws Exception; + + /**修改 + * @param pd + * @throws Exception + */ + public void edit(PageData pd)throws Exception; + + /**列表 + * @param page + * @throws Exception + */ + public List list(Page page)throws Exception; + + /**列表(全部) + * @param pd + * @throws Exception + */ + public List listAll(PageData pd)throws Exception; + + /**通过id获取数据 + * @param pd + * @throws Exception + */ + public PageData findById(PageData pd)throws Exception; + + /**批量删除 + * @param ArrayDATA_IDS + * @throws Exception + */ + public void deleteAll(String[] ArrayDATA_IDS)throws Exception; + +} + diff --git a/src/main/java/com/zcloud/service/archives/ArchivesPostManService.java b/src/main/java/com/zcloud/service/archives/ArchivesPostManService.java new file mode 100644 index 0000000..052c13f --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/ArchivesPostManService.java @@ -0,0 +1,24 @@ +package com.zcloud.service.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:三岗人员管理台账 + * 作者:luoxiaobao + * 时间:2021-12-15 + * 官网:www.zcloudchina.com + */ +public interface ArchivesPostManService{ + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd)throws Exception; + +} + diff --git a/src/main/java/com/zcloud/service/archives/ArchivesTeacherService.java b/src/main/java/com/zcloud/service/archives/ArchivesTeacherService.java new file mode 100644 index 0000000..51a90ea --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/ArchivesTeacherService.java @@ -0,0 +1,24 @@ +package com.zcloud.service.archives; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:本单位师资管理台账 + * 作者:luoxiaobao + * 时间:2021-12-16 + * 官网:www.zcloudchina.com + */ +public interface ArchivesTeacherService{ + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd)throws Exception; + +} + diff --git a/src/main/java/com/zcloud/service/archives/impl/ArchivesCapitalServiceImpl.java b/src/main/java/com/zcloud/service/archives/impl/ArchivesCapitalServiceImpl.java new file mode 100644 index 0000000..cf51c24 --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/impl/ArchivesCapitalServiceImpl.java @@ -0,0 +1,36 @@ +package com.zcloud.service.archives.impl; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.archives.ArchivesCapitalMapper; +import com.zcloud.service.archives.ArchivesCapitalService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 说明:培训资金提取和使用情况管理台账 + * 作者:luoxiaobao + * 时间:2021-12-17 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class ArchivesCapitalServiceImpl implements ArchivesCapitalService{ + + @Autowired + private ArchivesCapitalMapper archivescapitalMapper; + + + /**列表(全部) + * @param pd + * @throws Exception + */ + public List listAll(PageData pd)throws Exception{ + return archivescapitalMapper.listAll(pd); + } + +} + diff --git a/src/main/java/com/zcloud/service/archives/impl/ArchivesEduManagerServiceImpl.java b/src/main/java/com/zcloud/service/archives/impl/ArchivesEduManagerServiceImpl.java new file mode 100644 index 0000000..8133d7c --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/impl/ArchivesEduManagerServiceImpl.java @@ -0,0 +1,1351 @@ +package com.zcloud.service.archives.impl; + +import com.zcloud.entity.PageData; +import com.zcloud.entity.system.Dictionaries; +import com.zcloud.entity.word.TrainingPlanDao; +import com.zcloud.mapper.dsno2.archives.ArchivesEduManagerMapper; +import com.zcloud.service.archives.ArchivesEduManagerService; +import com.zcloud.util.*; +import fr.opensagres.xdocreport.document.IXDocReport; +import fr.opensagres.xdocreport.document.images.ByteArrayImageProvider; +import fr.opensagres.xdocreport.document.registry.XDocReportRegistry; +import fr.opensagres.xdocreport.template.IContext; +import fr.opensagres.xdocreport.template.TemplateEngineKind; +import fr.opensagres.xdocreport.template.formatter.FieldsMetadata; +import fr.opensagres.xdocreport.template.formatter.NullImageBehaviour; +import freemarker.template.Configuration; +import freemarker.template.Template; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.*; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 说明:年度安全培训教育管理台账 + * 作者:luoxiaobao + * 时间:2021-12-17 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class ArchivesEduManagerServiceImpl implements ArchivesEduManagerService{ + + @Autowired + private ArchivesEduManagerMapper archivesEduManagerMapper; + + @Override + public List listAll(PageData pd) throws Exception { + return archivesEduManagerMapper.listAll(pd); + } + + /** + * 人员登记表 + * @param stu + * @return + * @throws Exception + */ + public File registertable(PageData stu)throws Exception { + File pdf = null; + String projectPath = stu.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(projectPath + Const.FILEPATHWORDTEMPLATE + "registerform.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + context.put("value1", stu.getString2("NAME").trim()); // 姓名 + context.put("value2", stu.getString2("SEX_NAME")); // 性别 + context.put("value3", stu.getString2("NATION_NAME")); // 民族 + context.put("value4", stu.getString2("POLITICAL_OUTLOOK_NAME")); // 政治面貌 + context.put("value5", stu.getString2("DEGREE_OF_EDUCATION_NAME")); // 文化程序 + context.put("value6", stu.getString2("HEALTH")); // 健康状况 -缺失 + context.put("value7", stu.getString2("DATE_OF_BIRTH")); // 出生年月 + context.put("value8", stu.getString2("USER_ID_CARD")); // 身份证号 + context.put("value9", stu.getString2("UNIVERSITY")); // 毕业院校及专业 -缺失 + + context.put("value10", stu.getString2("DUTIES_NAME")); // 职务/职称 + context.put("value11", stu.getString2("RESIDENCE")); // 户籍所在地 -缺失 + context.put("value12", stu.getString2("WORKING_DATE")); // 参加工作时间 + context.put("value13", stu.getString2("ENTRY_DATE")); // 进入本单位时间 + + context.put("value14", stu.getString2("DEPARTMENT_NAME")); // 入职部门 + context.put("value15", stu.getString2("POST_NAME")); // 岗位名称 + context.put("value16", stu.getString2("PREVIOUS_POST_DATE")); // 之前从事本岗位时间 -缺失 + context.put("value17", stu.getString2("WORK_EXPERIENCE")); // 主要工作经历 -缺失 + context.put("value18", stu.getString2("CERTIFICATES")); // 有关的岗位证书等情况 -缺失 + context.put("value19", stu.getString2("PUNISH")); // 是否受到刑事处罚 -缺失 + context.put("value20", stu.getString2("CORP_NAME")); // 生产经营单位名 + context.put("value21", stu.getString2("FILE_NUMBER")); // 档案编号 + if (Tools.notEmpty(stu.getString2("USERAVATARPREFIX"))) { + String imageFormat = "jpeg"; + if ("data:image/png;base64,".equals(stu.getString2("USERAVATARPREFIX"))) { + imageFormat = "png"; + } + String base64Image = stu.getString2("USERAVATARURL_CONVERT"); + context.put("pic", getImageFromBase64(base64Image, imageFormat)); + } + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + String name = stu.getString2("NAME").replaceAll(" ","").replaceAll("\t",""); + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + "人员登记表【" + name + stu.getString2("USERNAME") + "】-" + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + "人员登记表【" + name + stu.getString2("USERNAME") + "】-" + now + ".docx", + projectPath + Const.FILEPATHFILE + "人员登记表【" + name + stu.getString2("USERNAME") + "】-" + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + "人员登记表【" + name + stu.getString2("USERNAME") + "】-" + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + "人员登记表【" + name + stu.getString2("USERNAME") + "】-" + now + ".pdf"); + return pdf; + } + + // 辅助方法:将 Base64 字符串转换为 BufferedImage + private ByteArrayImageProvider getImageFromBase64(String base64Image, String imageFormat) throws IOException { + byte[] imageBytes = Base64.getDecoder().decode(base64Image); + BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageBytes)); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ImageIO.write(image, imageFormat, baos); // imageFormat 可以是 "png", "jpeg" 等 + return new ByteArrayImageProvider(baos.toByteArray()); + } + + /** + * 一人一档详情首页导出word + * + * @throws Exception + */ + @Override + public String homepage(PageData student, PageData pd, String now, PageData paper, PageData classInfo) { + try { + Map map = new HashMap(); +// PageData pd = new PageData(); +// pd = this.getPageData(); + File file = new File(student.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "homepage.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + context.put("value1", student.getString2("FILE_NUMBER")); // 档案编号 + context.put("value2", student.getString2("STUDENT_NAME")); // 姓名 + context.put("value3", student.getString2("USER_ID_CARD")); // 身份证号 + String end_time = ""; + //考试已完成状态,是考试结束日期 + if ("3".equals(student.getString2("STAGEEXAMSTATE"))) { + end_time = !Tools.isEmpty(paper.get("EXAMTIMEEND")) ? paper.getString2("EXAMTIMEEND").substring(0, 10) : student.getString2("PEIXUE_END_TIME"); + //不考试班级,是班级考试结束日期,否则是班级结束日期 + } else { + end_time = student.getString2("PEIXUE_END_TIME"); + } +// StringBuilder sb = new StringBuilder(end_time); +// sb.setCharAt(4, '年'); +// sb.setCharAt(7, '月'); +// sb.setCharAt(10, '日'); +// end_time = sb.toString().substring(0, 11); + context.put("value4", end_time); //建档日期 + context.put("value5", pd.getString2("CORP_NAME")); // 单位名称 + //输出到本地目录 + FileOutputStream out = new FileOutputStream(new File(student.getString2("projectPath") + Const.FILEPATHFILE + "一人一档首页-" + now + ".docx")); + + report.process(context, out); + out.close(); + return student.getString2("projectPath") + Const.FILEPATHFILE + "一人一档首页-" + now + ".docx"; + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + /** + * 一人一档详情学时证明导出word + * + * @throws Exception + */ + @Override + public String classHour(PageData student, PageData classInfo, List coursewaresList, PageData corpinfo, PageData pd, String now, PageData paper) { + try { + File file = new File(student.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "classhour-new.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + //创建要替换的文本变量,变量名需对应 + context.put("value1", Tools.notEmpty(student.getString2("FILE_NUMBER")) ? student.getString2("FILE_NUMBER") : ""); //档案编号 + context.put("value2", Tools.notEmpty(student.getString2("STUDENT_NAME")) ? student.getString2("STUDENT_NAME") : ""); //姓名 + context.put("value3", "身份证"); //证件类型 + context.put("value4", Tools.isEmpty(student.get("USER_ID_CARD")) ? "" : student.get("USER_ID_CARD").toString()); //证件编号 + context.put("value5", pd.getString2("CORP_NAME")); //培训单位名称 + context.put("value6", classInfo.getString2("STUDY_NAME")); //任务名称 + String start_time = ""; + String end_time = ""; + //培训已完成状态,培训开始日是学习开始日期 +// if (("0".equals(student.getString2("STAGEEXAMSTATE")) || "3".equals(student.getString2("STAGEEXAMSTATE"))) && +// ("2".equals(student.getString2("STUDYSTATE")) || "3".equals(student.getString2("STUDYSTATE")))) { +// start_time = Tools.notEmpty(student.getString2("STUDENT_CREATTIME")) ? student.getString2("STUDENT_CREATTIME").substring(0, 10) : ""; +// //培训未完成状态,培训开始日是班级开始日期 +// } else { + start_time = student.getString2("PEIXUE_START_TIME"); +// } + //考试班级,培训已完成状态,培训开始日是班级考试结束日期 + if ("3".equals(student.getString2("STAGEEXAMSTATE"))) { + end_time = Tools.notEmpty(paper.getString2("EXAMTIMEEND")) ? paper.getString2("EXAMTIMEEND").substring(0, 10) : student.getString2("PEIXUE_END_TIME"); //培训结束日期 + //不考试班级,培训已完成状态,培训开始日是班级考试结束日期,否则培训开始日是班级结束日期 + }else { + end_time = student.getString2("PEIXUE_END_TIME").substring(0, 10); //培训结束日期 + } + context.put("value7", start_time + "至" + end_time); + context.put("value8", classInfo.getString2("train_type_name")); //培训类型 + Double sum = 0.0; + Double classHourVideo = 0.0, classHourData = 0.0; + int countVideo = 0, countData = 0; + for (int j = 0; j < coursewaresList.size(); j++) { + Double CLASSHOUR = (double) coursewaresList.get(j).get("CLASSHOUR"); + if ("1".equals(coursewaresList.get(j).get("COURSEWARETYPE"))) { + countVideo++; + classHourVideo+=CLASSHOUR; + } else if ("2".equals(coursewaresList.get(j).get("COURSEWARETYPE"))) { + countData++; + classHourData+=CLASSHOUR; + } + } + Double mine = sum / 60; + DecimalFormat df = new DecimalFormat("0.0"); + df.setRoundingMode(RoundingMode.HALF_DOWN); +// Double allClasshour = Double.valueOf(pd.getString2("allClasshour")); + context.put("value9", classHourVideo + "分钟" + "(包含" + countVideo + "个课件"); //分钟数 + context.put("value10", classHourData + "分钟" + "(包含" + countData + "个课件"); //分钟数 + context.put("value11", (classHourVideo + classHourData) + "分钟"); //姓名 + SimpleDateFormat formatdate = new SimpleDateFormat("yyyy年MM月dd日"); + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + if ("3".equals(student.getString2("STAGEEXAMSTATE")) && paper.get("EXAMTIMEEND") != null) { + context.put("value12", paper.getString2("EXAMTIMEEND").substring(0, 10)); //日期 + } else if (student.get("PEIXUE_END_TIME") != null) { + context.put("value12", student.getString2("PEIXUE_END_TIME")); //日期 + } else { + context.put("value12", ""); //日期 + } + +// String path = Const.HTTPFILEURL + corpinfo.getString2("OFFICIAL_SEAL_PATH"); +// URL url = new URL(path); +// HttpURLConnection connection = (HttpURLConnection) new URL(path).openConnection(); +// int state = connection.getResponseCode(); +// if (state == 200) { +// ByteArrayImageProvider byteArrayImageProvider = new ByteArrayImageProvider(url.openStream());//照片 读取网络路径 +// context.put("pic", byteArrayImageProvider); +// } + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //输出到本地目录 + FileOutputStream out = new FileOutputStream(new File(student.getString2("projectPath") + Const.FILEPATHFILE + "学时证明-" + now + ".docx")); + report.process(context, out); + out.close(); + return student.getString2("projectPath") + Const.FILEPATHFILE + "学时证明-" + now + ".docx"; + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + /** + * 学员学习档案导出word + * + * @throws Exception + */ + @Override + public String studyInfo(PageData student, PageData classInfo, List curList, List coursewaresList, PageData pd, String now, PageData corpinfo, PageData paper) { + try { + Map map = new HashMap(); + File file = new File(student.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "studentInfo.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + context.put("value1", student.getString2("STUDENT_NAME")); // 姓名 + context.put("value2", student.getString2("USER_ID_CARD")); // 身份证号 + context.put("value3", student.getString2("PHONE")); // 电话号码 +// context.put("value4", classInfo.getString2("CODE")); // 班级编码 + context.put("value5", classInfo.getString2("STUDY_NAME")); // 任务名称 + String start_time = ""; + String end_time = ""; + //培训已完成状态,培训开始日是学习开始日期 +// if (("0".equals(student.getString2("STAGEEXAMSTATE")) || "3".equals(student.getString2("STAGEEXAMSTATE"))) && +// ("2".equals(student.getString2("STUDYSTATE")) || "3".equals(student.getString2("STUDYSTATE")))) { +// start_time = Tools.notEmpty(student.getString2("STUDENT_CREATTIME")) ? student.getString2("STUDENT_CREATTIME").substring(0, 10) : ""; +// //培训未完成状态,培训开始日是班级开始日期 +// } else { + start_time = student.getString2("PEIXUE_START_TIME").substring(0, 10); +// } + //考试班级,培训已完成状态,培训开始日是班级考试结束日期 + if ("3".equals(student.getString2("STAGEEXAMSTATE"))) { + end_time = Tools.notEmpty(paper.getString2("EXAMTIMEEND")) ? paper.getString2("EXAMTIMEEND").substring(0, 10) : student.getString2("PEIXUE_END_TIME"); //培训结束日期 + //不考试班级,培训已完成状态,培训开始日是班级考试结束日期,否则培训开始日是班级结束日期 + } else { + end_time = student.getString2("PEIXUE_END_TIME"); //培训结束日期 + } + context.put("value6", start_time + "至" + end_time); + context.put("value7", "线上学习"); // 学习方式 + context.put("value8", "录播"); // 课程形式 + Double classhour = 0.00; + for (int j = 0; j < coursewaresList.size(); j++) { + Double CLASSHOUR = (double) coursewaresList.get(j).get("CLASSHOUR"); + classhour += CLASSHOUR; + } + DecimalFormat df = new DecimalFormat("0.0"); + df.setRoundingMode(RoundingMode.HALF_DOWN); + Double allClasshour = Double.valueOf(pd.getString2("allClasshour")); + context.put("value9", (classhour > allClasshour? df.format(allClasshour):df.format(classhour)) + "学时"); //学时 + // 课程名称 + StringBuffer currnames = new StringBuffer(); + for (PageData curname : curList) { + currnames.append(curname.get("CURRICULUMNAME")).append(","); + } + context.put("value10", currnames.substring(0, currnames.length() - 1)); //培训科目 + context.put("value11", corpinfo.getString2("CORP_NAME")); //单位名称 + + if (Tools.notEmpty(student.getString2("USERAVATARPREFIX"))) { + String imageFormat = "jpeg"; + if ("data:image/png;base64,".equals(student.getString2("USERAVATARPREFIX"))) { + imageFormat = "png"; + } + String base64Image = student.getString2("USERAVATARURL_CONVERT"); + context.put("pic", getImageFromBase64(base64Image, imageFormat)); + } + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //输出到本地目录 + FileOutputStream out = new FileOutputStream(new File(student.getString2("projectPath") + Const.FILEPATHFILE + "学员学习档案-" + now + ".docx")); + + report.process(context, out); + out.close(); + return student.getString2("projectPath") + Const.FILEPATHFILE + "学员学习档案-" + now + ".docx"; + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + /** + * 一人一档详情课程导出word + * + * @throws Exception + */ + public String curriculumword(PageData student, PageData classInfo, List coursewaresList, PageData corpinfo, String now) throws Exception { + try { + File file = new File(student.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "curriculum-new.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + context.put("value14", classInfo.getString2("train_type_name")); //培训类型 + context.put("value15", student.getString2("STUDENT_NAME")); //姓名 + context.put("value16", student.getString2("USER_ID_CARD")); //身份证ID + context.put("value17", classInfo.getString2("STUDY_NAME")); //考卷详情班级名称 + + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < coursewaresList.size(); i++) { + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(String.valueOf(i + 1)); //序号 + trainingPlanDao.setValue2(coursewaresList.get(i).getString2("COURSEWARENAME")); //课程名称 + DecimalFormat df = new DecimalFormat("0.0"); //保留一位小数 + Double hour = (Double) coursewaresList.get(i).get("CLASSHOUR"); + trainingPlanDao.setValue3(hour == 0.0 ? "0" : df.format(hour) + "分钟"); //学时 + + trainingPlanDao.setValue4(coursewaresList.get(i).getString2("SPEAKER")); //教师 + + list1.add(trainingPlanDao); + } + context.put("list1", list1); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + //输出到本地目录 + FileOutputStream out = new FileOutputStream(new File(student.getString2("projectPath") + Const.FILEPATHFILE + "课程材料-" + now + ".docx")); + report.process(context, out); + out.close(); + return student.getString2("projectPath") + Const.FILEPATHFILE + "课程材料-" + now + ".docx"; + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + /** + * 一人一档安全培训考核记录导出word + * + * @throws Exception + */ + public String practiceword(PageData student, PageData pd, PageData classInfo, PageData corpinfo, String now, List personnelTypeList) throws Exception { + try { + Configuration configuration = new Configuration(Configuration.getVersion()); + Template template; + configuration.setDirectoryForTemplateLoading(new File(student.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE)); //课程材料导出word新的------------------- + template = configuration.getTemplate("practice-new.ftl"); + Map context = new HashMap(); + context = new HashMap(); + context.put("practicevalue1", pd.getString2("ENTERPRISE_NAME")); //机构名称 + context.put("practicevalue2", student.getString2("FILE_NUMBER")); //档案编号 + context.put("practicevalue3", student.getString2("STUDENT_NAME")); //姓名 + context.put("practicevalue4", student.getString2("SEX_NAME")); //性别 + context.put("practicevalue5", student.getString2("USER_ID_CARD")); //身份证 + context.put("practicevalue6", student.getString2("DEPARTMENT_NAME")); //部门 + context.put("practicevalue7", student.getString2("POST_NAME")); //工种 + context.put("practicevalue8", ""); //职称 + context.put("practicevalue9", ""); //部门 + context.put("practicevalue10", ""); //工种 + context.put("practicevalue11", ""); //行业类别 + + if (Tools.notEmpty(corpinfo.getString2("OFFICIAL_SEAL_PATH"))) { + context.put("pic", FileUtil.encodeBase64File(Const.HTTPFILEURL + corpinfo.getString2("OFFICIAL_SEAL_PATH"))); + } else { + context.put("pic", ""); + } + if (Tools.notEmpty(pd.getString2("RECORDOR_SIGN"))) { + context.put("pic2", FileUtil.encodeBase64File(Const.HTTPFILEURL + pd.getString2("RECORDOR_SIGN"))); + } else { + context.put("pic2", ""); + } + if (Tools.notEmpty(pd.getString2("ASSESSOR_SIGN"))) { + context.put("pic3", FileUtil.encodeBase64File(Const.HTTPFILEURL + pd.getString2("ASSESSOR_SIGN"))); + } else { + context.put("pic3", ""); + + } + if (Tools.notEmpty(pd.getString2("SAFETYDEPTOR_SIGN"))) { + context.put("pic4", FileUtil.encodeBase64File(Const.HTTPFILEURL + pd.getString2("SAFETYDEPTOR_SIGN"))); + } else { + context.put("pic4", ""); + + } + + // 归档日期 + String str = String.valueOf(classInfo.getString2("END_TIME")); +// StringBuilder sb = new StringBuilder(str); +// sb.setCharAt(4, '年'); +// sb.setCharAt(7, '月'); +// sb.setCharAt(10, '日'); +// str = sb.toString().substring(0, 11); + context.put("practicevalue12", str); + + //根据培训类型和培训级别获取不同的人员类型列表 + List personnelList = new ArrayList<>(); + for (Dictionaries item : personnelTypeList) { + if (!"250aa92d499c47649a5f8302e31fd0ee".equals(item.getDICTIONARIES_ID()) && // 安全生产管理人 + !"5937873e164a42dfb1edda48e6c522a0".equals(item.getDICTIONARIES_ID()) && // 主要负责人 + !"ff3c7ef0adf54447945e3ce87321f286".equals(item.getDICTIONARIES_ID())) { // 特种作业人员 + // 三级教育培训 + if ("d302da12d8724faaa24e5008adab8ce8".equals(classInfo.getString2("POSTTYPE"))) { + // 如果是班组级,剔除人员类型:其他管理人员,技术人员 + if ("c698a92dda3848b9a40d4bcee79f23a3".equals(classInfo.getString2("TRAINLEVEL"))) { + if (!"b4c633078811455bb1a7d3e3fc6f382f".equals(item.getDICTIONARIES_ID()) && // 其他管理人员 + !"ade12787e63f465094ebe871cb70bc88".equals(item.getDICTIONARIES_ID()) && // 技术人员 + !"c9a6fe2ecda04fa6878462855bca0dc2".equals(item.getDICTIONARIES_ID())) { // 其他负责人 + personnelList.add(item); + } + // 如果是车间级,剔除人员类型:其他负责人 + } else if ("7063a46ac41947779299ec325dd080d4".equals(classInfo.getString2("TRAINLEVEL"))) { + if (!"c9a6fe2ecda04fa6878462855bca0dc2".equals(item.getDICTIONARIES_ID())) { // 其他负责人 + personnelList.add(item); + } + } else { + personnelList.add(item); + } + } else { + personnelList.add(item); + } + } + } + Boolean findFlag = false; + for (Dictionaries temp : personnelList) { + if (Tools.notEmpty(student.getString2("PERSONNEL_TYPE")) && temp.getDICTIONARIES_ID().equals(student.get("PERSONNEL_TYPE"))) { + findFlag = true; + } + } + // 人员类型在列表中没有,则默认值是其他 + if (!findFlag) { + context.put("PERSONNEL_TYPE", "524ea69b62c942c9a080bcf5cdab1da0"); + } else { + context.put("PERSONNEL_TYPE", student.get("PERSONNEL_TYPE")); + } + context.put("personnelTypeList", personnelList); + + File outFile = new File(student.getString2("projectPath") + Const.FILEPATHFILE + "师傅带徒弟实习教育-" + now + ".docx"); + Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), + "utf-8"), 10240); + template.process(context, out); + out.close(); + return student.getString2("projectPath") + Const.FILEPATHFILE + "师傅带徒弟实习教育-" + now + ".docx"; + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + /** + * 一人一档安全培训考核记录导出word + * + * @throws Exception + */ + @Override + public String safelogword(PageData student, PageData classInfo, List coursewaresList, PageData pd, PageData corpinfo, PageData paper, String now, List personnelTypeList) throws Exception { + try { + File file = new File(student.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "safelog.docx"); + InputStream safelog = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(safelog, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + context.put("value1", classInfo.getString2("train_type_name")); //培训类型 + context.put("value2", classInfo.getString2("post_type_name")); //岗位类型 + context.put("value3", student.getString2("FILE_NUMBER")); //档案名称 + context.put("value4", student.getString2("STUDENT_NAME")); //姓名 + context.put("value5", student.getString2("SEX_NAME")); //性别 + context.put("value6", student.getString2("USER_ID_CARD")); //身份证 + context.put("value7", student.getString2("DEGREE_OF_EDUCATION_NAME")); //学历 + context.put("value8", student.getString2("MAJOR")); //专业 + context.put("value9", student.getString2("DEPARTMENT_NAME")); //部门 + context.put("value10", student.getString2("DUTIES_NAME")); //职称 + context.put("value11", student.getString2("TYPE_OF_WORK_NAME")); //工种 + context.put("value12", classInfo.getString2("INDUSTRY_ALL_NAME")); //行业类别 + context.put("value13", student.getString2("PHONE")); //联系电话 + context.put("value14", student.getString2("PERSONNEL_TYPE_NAME")); // 人员类型 + context.put("value15", student.getString2("STAGEEXAMSCORE")); // 考试成绩 + + List list = new ArrayList<>(); //一共多少航 + for (int i = 0; i < coursewaresList.size(); i++) { //安全培训及考核实施情况 + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(String.valueOf(i + 1)); //序号 + String start_time = classInfo.getString2("PEIXUE_START_TIME"); + String end_time = classInfo.getString2("PEIXUE_END_TIME"); + //考试班级,培训已完成状态,培训开始日是班级考试结束日期 + if ("3".equals(student.getString2("STAGEEXAMSTATE"))) { + end_time = student.getString2("EXAMTIMEEND").substring(0, 10); + } + trainingPlanDao.setValue2(start_time + "至" + end_time); + trainingPlanDao.setValue3("文旅安全平台"); //课时 + trainingPlanDao.setValue4(coursewaresList.get(i).getString2("COURSEWARENAME")); //主要内容 + DecimalFormat df = new DecimalFormat("0.0"); //保留一位小数 + Double hour = (Double) coursewaresList.get(i).get("CLASSHOUR"); + trainingPlanDao.setValue5(hour == 0.0 ? "0" : df.format(hour) + "分钟"); //学时 + trainingPlanDao.setValue6(coursewaresList.get(i).getString2("SPEAKER")); //教师 + list.add(trainingPlanDao); + } + context.put("list", list); + + FieldsMetadata fm = report.createFieldsMetadata(); + //Word模板中的表格数据对应的集合类型 + fm.load("list", TrainingPlanDao.class, true); + FileOutputStream out = new FileOutputStream(new File(student.getString2("projectPath") + Const.FILEPATHFILE + "安全培训考核记录详情-" + now + ".docx")); + report.process(context, out); + out.close(); + return student.getString2("projectPath") + Const.FILEPATHFILE + "安全培训考核记录详情-" + now + ".docx"; + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + /** + * 一人一档详情试卷导出word + * + * @throws Exception + */ + @Override + public String papermword(PageData student, PageData classInfo, PageData corpinfo, PageData paper, String now) throws Exception { + try { + File file = new File(student.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "exam.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + context.put("value17", classInfo.getString2("STUDY_NAME")); //班级名称 + context.put("value18", student.getString2("STUDENT_NAME")); //学生姓名 + + if (paper != null) { + PageData stageexampaperData = (PageData)paper.get("stageexampaperData"); + context.put("value14", classInfo.getString2("STUDY_NAME")); //班级名称 + context.put("value15", stageexampaperData.getString2("EXAMNAME")); //试卷名称 + context.put("value16", stageexampaperData.getString2("EXAMSCORE")); //满分 + if (!Tools.isEmpty(stageexampaperData.get( "CREATTIME"))) { + SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd"); //日期格式 + stageexampaperData.put("CREATTIME", stageexampaperData.getString2("CREATTIME")); + } + context.put("value19", !Tools.isEmpty(paper.get("EXAMTIMEBEGIN")) ? paper.getString2("EXAMTIMEBEGIN") : "未参加考试"); //考试时间 + context.put("value20", paper.getString2("EXAMSCORE")); //考试成绩 + if (paper.get("QUESTIONLIST") != null) { + ArrayList arr = (ArrayList) paper.get("QUESTIONLIST"); + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < arr.size(); i++) { + PageData p = (PageData) arr.get(i); + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + if ("1".equals(p.getString2("QUESTIONTYPE"))) { + trainingPlanDao.setValue1("单选题"); + trainingPlanDao.setValue5("A: " + p.getString2("OPTIONA")); //A选项 + trainingPlanDao.setValue6("B: " + p.getString2("OPTIONB")); //B选项 + trainingPlanDao.setValue7("C: " + p.getString2("OPTIONC")); //C选项 + trainingPlanDao.setValue8("D: " + p.getString2("OPTIOND")); //D选项 + } else if ("2".equals(p.getString2("QUESTIONTYPE"))) { + trainingPlanDao.setValue1("多选题"); + trainingPlanDao.setValue5("A: " + p.getString2("OPTIONA")); //A选项 + trainingPlanDao.setValue6("B: " + p.getString2("OPTIONB")); //B选项 + trainingPlanDao.setValue7("C: " + p.getString2("OPTIONC")); //C选项 + trainingPlanDao.setValue8("D: " + p.getString2("OPTIOND")); //D选项 + } else if ("3".equals(p.getString2("QUESTIONTYPE"))) { + trainingPlanDao.setValue1("判断题"); + trainingPlanDao.setValue5("A: " + p.getString2("OPTIONA")); //A选项 + trainingPlanDao.setValue6("B: " + p.getString2("OPTIONB")); //B选项 + trainingPlanDao.setValue7(""); //C选项 + trainingPlanDao.setValue8(""); // + } else { + trainingPlanDao.setValue1("填空题"); + trainingPlanDao.setValue5(""); //A选项 + trainingPlanDao.setValue6(""); //B选项 + trainingPlanDao.setValue7(""); //C选项 + trainingPlanDao.setValue8(""); //D选项 + } + trainingPlanDao.setValue2(String.valueOf(i + 1)); //序号 + trainingPlanDao.setValue3(p.getString2("QUESTIONDRY")); //题目 + trainingPlanDao.setValue4(p.getString2("QUESTIONSCORE")); //题目分值 + trainingPlanDao.setValue9(Tools.notEmpty(p.getString2("ANSWER")) ? p.getString2("ANSWER") : ""); //学员答案 + trainingPlanDao.setValue10(Tools.notEmpty(p.getString2("ANSWERRIGHT")) ? p.getString2("ANSWERRIGHT") : ""); //参考答案 + trainingPlanDao.setValue11(Tools.isEmpty(p.getString2("DESCR")) ? "" : p.getString2("DESCR")); //答案解析 + + list1.add(trainingPlanDao); + } + context.put("list1", list1); + } + } else { + context.put("value16", ""); //满分 + context.put("value19", ""); //考试时间 + context.put("value20", ""); //考试成绩 + context.put("list1", new ArrayList<>()); + } + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + fm.addFieldAsImage("pic2", "pic2", NullImageBehaviour.RemoveImageTemplate); + fm.addFieldAsImage("pic3", "pic3", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + //输出到本地目录 + FileOutputStream out = new FileOutputStream(new File(student.getString2("projectPath") + Const.FILEPATHFILE + "考卷详情-" + now + ".docx")); + report.process(context, out); + out.close(); + return student.getString2("projectPath") + Const.FILEPATHFILE + "考卷详情-" + now + ".docx"; + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + /** + * 培训日程安排通知(也可称为培训计划) + * @param pd + * @param tsList + * @return + * @throws Exception + */ + @Override + public File exportPdfTrainingSchedule(PageData pd,List tsList) throws Exception { + File pdf = null; + String projectPath = pd.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(projectPath + Const.FILEPATHWORDTEMPLATE + "trainingSchedule.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + context.put("value1", pd.getString2("CORP_NAME").trim()); // 姓名 + + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < tsList.size(); i++) { + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(String.valueOf(i + 1)); //序号 + trainingPlanDao.setValue2(tsList.get(i).getString2("ORGANIZATION_DEPARTMENT")); //培训组织部门 + trainingPlanDao.setValue3(tsList.get(i).getString2("TRAINING_DATE")); //培训日期 + trainingPlanDao.setValue4(tsList.get(i).getString2("TRAINING_TIME")); //培训时间 + trainingPlanDao.setValue5(tsList.get(i).getString2("TRAINING_CONTENT")); //培训内容 + trainingPlanDao.setValue6(tsList.get(i).getString2("TRAINING_METHODS")); //培训方式 + trainingPlanDao.setValue7(tsList.get(i).getString2("TRAINING_OBJECT")); //培训对象 + trainingPlanDao.setValue8(tsList.get(i).getString2("ASSESSMENT_METHOD")); //考核方式 + trainingPlanDao.setValue9(tsList.get(i).getString2("PLACE")); //地点 + trainingPlanDao.setValue10(tsList.get(i).getString2("TRAINING_TEACHER")); //培训教师 + trainingPlanDao.setValue11(tsList.get(i).getString2("FUND_GUARANTEE")); //经费保障 + trainingPlanDao.setValue12(tsList.get(i).getString2("QUALITY_ASSESSMENT")); //质量评估 + list1.add(trainingPlanDao); + } + context.put("list1", list1); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + String name = "培训日程安排通知(也可称为培训计划)"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } + + /** + * 安全培训教材或课程讲义 + * @param pd + * @param list + * @return + * @throws Exception + */ + @Override + public File exportPdfCourseware(PageData pd, List list) throws Exception { + File pdf = null; + String projectPath = pd.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(projectPath + Const.FILEPATHWORDTEMPLATE + "courseware.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + context.put("value1", pd.getString2("CORP_NAME").trim()); // 姓名 + + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < list.size(); i++) { + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(list.get(i).getString2("COURSEWARENAME")); //课件名称 + trainingPlanDao.setValue2(list.get(i).getString2("SPEAKER")); //讲师 + trainingPlanDao.setValue3(list.get(i).getString2("COURSEWAREINTRODUCE")); //课件描述 + list1.add(trainingPlanDao); + } + context.put("list1", list1); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + String name = "安全培训教材或课程讲义"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } + + @Override + public File exportPdfStudyTask(PageData task, List coursewaresList, List stuList) throws Exception { + File pdf = null; + String projectPath = task.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(projectPath + Const.FILEPATHWORDTEMPLATE + "archivesStudyTask.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + Double classHours = 0.0; + String speaker = "",coursewares = ""; + for (int i = 0; i < coursewaresList.size(); i++) { + classHours += (Double) coursewaresList.get(i).get("CLASSHOUR"); + speaker += Tools.isEmpty(coursewaresList.get(i).get("SPEAKER")) ? "" : (coursewaresList.get(i).getString2("SPEAKER")+";"); + coursewares += Tools.isEmpty(coursewaresList.get(i).get("COURSEWARENAME")) ? "" : (coursewaresList.get(i).getString2("COURSEWARENAME")+";"); + } + DecimalFormat df = new DecimalFormat("0.0"); //保留一位小数 + IContext context = report.createContext(); + context.put("value1", task.getString2("CREATTIME")); + context.put("value2", ""); + context.put("value3", stuList.size()+""); + context.put("value4", classHours == 0.0 ? "0" : df.format(classHours) + "分钟"); + context.put("value5", ""); + context.put("value6", speaker.length() == 0 ? speaker : speaker.substring(0, speaker.length()-1)); + context.put("value7", coursewares.length() == 0 ? coursewares : coursewares.substring(0, coursewares.length()-1)); + + List list = new ArrayList<>(); //一共多少航 + for (int i = 0; i < stuList.size(); i++) { + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1((i+1)+""); //课件名称 + trainingPlanDao.setValue2(stuList.get(i).getString2("DEPARTMENT_NAME")); //部门 + trainingPlanDao.setValue3(stuList.get(i).getString2("STUDENT_NAME")); //姓名 + list.add(trainingPlanDao); + } + context.put("list", list); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list", TrainingPlanDao.class, true); + String name = "安全培训教育记录及签字表"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } + + /** + * 培训考核试卷 + * + * @throws Exception + */ + @Override + public File exportPdfExamPaper(PageData task, PageData paper, List questionList) throws Exception { + File pdf = null; + String projectPath = task.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(task.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "archivesExam.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + context.put("value1", task.getString2("CORP_NAME")); //班级名称 + context.put("value2", task.getString2("STUDY_NAME")); //班级名称 + context.put("value3", paper.getString2("EXAMNAME")); //试卷名称 + context.put("value4", Tools.isEmpty(paper.getString2("EXAMSCORE")) ? "0" : paper.getString2("EXAMSCORE")); //满分 + + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < questionList.size(); i++) { + PageData p = questionList.get(i); + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + if ("1".equals(p.getString2("QUESTIONTYPE"))) { + trainingPlanDao.setValue1("单选题"); + trainingPlanDao.setValue5("A: " + p.getString2("OPTIONA")); //A选项 + trainingPlanDao.setValue6("B: " + p.getString2("OPTIONB")); //B选项 + trainingPlanDao.setValue7("C: " + p.getString2("OPTIONC")); //C选项 + trainingPlanDao.setValue8("D: " + p.getString2("OPTIOND")); //D选项 + } else if ("2".equals(p.getString2("QUESTIONTYPE"))) { + trainingPlanDao.setValue1("多选题"); + trainingPlanDao.setValue5("A: " + p.getString2("OPTIONA")); //A选项 + trainingPlanDao.setValue6("B: " + p.getString2("OPTIONB")); //B选项 + trainingPlanDao.setValue7("C: " + p.getString2("OPTIONC")); //C选项 + trainingPlanDao.setValue8("D: " + p.getString2("OPTIOND")); //D选项 + } else if ("3".equals(p.getString2("QUESTIONTYPE"))) { + trainingPlanDao.setValue1("判断题"); + trainingPlanDao.setValue5("A: " + p.getString2("OPTIONA")); //A选项 + trainingPlanDao.setValue6("B: " + p.getString2("OPTIONB")); //B选项 + trainingPlanDao.setValue7(""); //C选项 + trainingPlanDao.setValue8(""); // + } else { + trainingPlanDao.setValue1("填空题"); + trainingPlanDao.setValue5(""); //A选项 + trainingPlanDao.setValue6(""); //B选项 + trainingPlanDao.setValue7(""); //C选项 + trainingPlanDao.setValue8(""); //D选项 + } + trainingPlanDao.setValue2(String.valueOf(i + 1)); //序号 + trainingPlanDao.setValue3(p.getString2("QUESTIONDRY")); //题目 + trainingPlanDao.setValue4(p.getString2("QUESTIONSCORE")); //题目分值 +// trainingPlanDao.setValue9(Tools.notEmpty(p.getString2("ANSWER")) ? p.getString2("ANSWER") : ""); //学员答案 +// trainingPlanDao.setValue10(Tools.notEmpty(p.getString2("ANSWERRIGHT")) ? p.getString2("ANSWERRIGHT") : ""); //参考答案 +// trainingPlanDao.setValue11(Tools.isEmpty(p.getString2("DESCR")) ? "" : p.getString2("DESCR")); //答案解析 + + list1.add(trainingPlanDao); + } + context.put("list1", list1); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + String name = "培训考核试卷"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } + + /** + * 学员考核成绩统计表 + * + * @throws Exception + */ + @Override + public File exportPdfArchivesStudentScore(PageData task, List coursewaresList, List stuList) throws Exception { + File pdf = null; + String projectPath = task.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(task.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "archivesStudentScore.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + SimpleDateFormat formatdate = new SimpleDateFormat("yyyy年MM月dd日"); + context.put("value1", formatdate.format(new Date())); + context.put("value2", task.getString2("CORP_NAME")); + context.put("value3", task.getString2("STUDY_NAME")); + context.put("value4", task.getString2("PEIXUE_START_TIME") + " 至 " + task.getString2("PEIXUE_END_TIME")); + Double sum = 0.0; + Double classHourVideo = 0.0, classHourData = 0.0; + int countVideo = 0, countData = 0; + for (int j = 0; j < coursewaresList.size(); j++) { + Double CLASSHOUR = (double) coursewaresList.get(j).get("CLASSHOUR"); + if ("1".equals(coursewaresList.get(j).get("COURSEWARETYPE"))) { + countVideo++; + classHourVideo+=CLASSHOUR; + } else if ("2".equals(coursewaresList.get(j).get("COURSEWARETYPE"))) { + countData++; + classHourData+=CLASSHOUR; + } + } + + context.put("value5", String.valueOf(classHourVideo + classHourData)); //试卷名称 + List passList = stuList.stream().filter(item -> Double.parseDouble(item.getString2("STAGEEXAMSCORE")) >= Double.parseDouble(item.getString2("PASSSCORE"))).collect(Collectors.toList()); + List failList = stuList.stream().filter(item -> Double.parseDouble(item.getString2("STAGEEXAMSCORE")) < Double.parseDouble(item.getString2("PASSSCORE"))).collect(Collectors.toList()); + context.put("value6", stuList.size()); //合格人数 + context.put("value7", passList.size()); //合格人数 + + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < passList.size(); i++) { + PageData p = passList.get(i); + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(String.valueOf(i + 1)); + trainingPlanDao.setValue2(p.getString2("STUDENT_NAME")); + trainingPlanDao.setValue3(p.getString2("USER_ID_CARD")); + trainingPlanDao.setValue4(p.getString2("PHONE")); + trainingPlanDao.setValue5(p.getString2("SEX_NAME")); + trainingPlanDao.setValue6(p.getString2("COMPLETE_CLASSHOUR")); + trainingPlanDao.setValue7(p.getString2("STAGEEXAMSCORE")); + + list1.add(trainingPlanDao); + } + context.put("list1", list1); + + List list2 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < failList.size(); i++) { + PageData p = failList.get(i); + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(String.valueOf(i + 1)); + trainingPlanDao.setValue2(p.getString2("STUDENT_NAME")); + trainingPlanDao.setValue3(p.getString2("USER_ID_CARD")); + trainingPlanDao.setValue4(p.getString2("PHONE")); + trainingPlanDao.setValue5(p.getString2("SEX_NAME")); + trainingPlanDao.setValue6(p.getString2("COMPLETE_CLASSHOUR")); + trainingPlanDao.setValue7(p.getString2("STAGEEXAMSCORE")); + + list2.add(trainingPlanDao); + } + context.put("list2", list2); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + fm.load("list2", TrainingPlanDao.class, true); + String name = "学员考核成绩统计表"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } + + /** + * 学员考核成绩统计表 + * + * @throws Exception + */ + @Override + public File exportPdfArchivesReport(PageData task, List curList, List stuList) throws Exception { + File pdf = null; + String projectPath = task.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(task.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "archivesReport.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + context.put("value1", task.getString2("STUDY_NAME")); + context.put("value2", task.getString2("STUDY_NAME")); + + context.put("value3", ""); + context.put("value4", task.getString2("PEIXUE_END_TIME")); + context.put("value5", "线上考核"); //培训科目 + StringBuffer currnames = new StringBuffer(); + for (PageData curname : curList) { + currnames.append(curname.get("CURRICULUMNAME")).append(","); + } + context.put("value6", currnames.substring(0, currnames.length() - 1)); //培训科目 + List noneList = stuList.stream().filter(item -> "4".equals(item.getString2("STAGEEXAMSTATE"))).collect(Collectors.toList()); + List passList = stuList.stream().filter(item -> Double.parseDouble(item.getString2("STAGEEXAMSCORE")) >= Double.parseDouble(item.getString2("PASSSCORE"))).collect(Collectors.toList()); + context.put("value7", stuList.size()); + int joinCount = stuList.size()-noneList.size(); + context.put("value8", joinCount); + String joinRate = "0%"; + if (stuList.size() > 0) { + double result = (double) joinCount / stuList.size() * 100; // 2.5 + DecimalFormat df = new DecimalFormat("#.##"); // 保留最多2位小数,自动去掉末尾0 + joinRate = df.format(result) + "%"; + } + context.put("value9", joinRate); + context.put("value10", stuList.size()); + context.put("value11", passList.size()); + String passRate = "0%"; + if (stuList.size() > 0) { + double result = (double) passList.size() / stuList.size() * 100; + DecimalFormat df = new DecimalFormat("#.##"); // 保留最多2位小数,自动去掉末尾0 + passRate = df.format(result) + "%"; + } + context.put("value12", passRate); + context.put("value13", ""); + context.put("value14", ""); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + String name = "培训综合考评报告"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } + + @Override + public File exportPdfArchivesPostMant(PageData corp, List archivesPostManList) throws Exception { + File pdf = null; + String projectPath = corp.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(corp.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "archivesPostMan.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + context.put("value1", corp.getString2("CORP_NAME")); + + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < archivesPostManList.size(); i++) { + PageData p = archivesPostManList.get(i); + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(String.valueOf(i + 1)); + trainingPlanDao.setValue2(p.getString2("NAME")); + trainingPlanDao.setValue3(p.getString2("POST")); + trainingPlanDao.setValue4(p.getString2("PHONE")); + trainingPlanDao.setValue5(p.getString2("CARD_ID")); + trainingPlanDao.setValue6(p.getString2("EFFECTIVE_DATE")); + trainingPlanDao.setValue7(p.getString2("RETRAINING")); + trainingPlanDao.setValue8(p.getString2("YEAR")); + + list1.add(trainingPlanDao); + } + context.put("list1", list1); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + String name = "三岗人员管理台账"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } + + @Override + public File exportPdfArchivesTeacher(PageData corp, List archivesTeacherList) throws Exception { + File pdf = null; + String projectPath = corp.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(corp.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "archivesTeacher.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + context.put("value1", corp.getString2("CORP_NAME")); + + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < archivesTeacherList.size(); i++) { + PageData p = archivesTeacherList.get(i); + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(String.valueOf(i + 1)); + trainingPlanDao.setValue2(p.getString2("NAME")); + trainingPlanDao.setValue3(p.getString2("PHONE")); + trainingPlanDao.setValue4(p.getString2("WORK_YEAR")); + trainingPlanDao.setValue5(p.getString2("OCCUPATION")); + trainingPlanDao.setValue6(p.getString2("CARD_ID")); + trainingPlanDao.setValue7(p.getString2("ASSESSMENT_DEPT")); + trainingPlanDao.setValue8(p.getString2("ASSESSMENT_DATE")); + trainingPlanDao.setValue9(p.getString2("ASSESSMENT_RESULT")); + trainingPlanDao.setValue10(p.getString2("DESCR")); + trainingPlanDao.setValue11(p.getString2("YEAR")); + + list1.add(trainingPlanDao); + } + context.put("list1", list1); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + String name = "本单位师资管理台账"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } + + @Override + public File exportPdfArchivesEduPlan(PageData corp, List archivesEduPlanList) throws Exception { + File pdf = null; + String projectPath = corp.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(corp.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "archivesEduPlan.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + context.put("value1", corp.getString2("CORP_NAME")); + + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < archivesEduPlanList.size(); i++) { + PageData p = archivesEduPlanList.get(i); + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(String.valueOf(i + 1)); + trainingPlanDao.setValue2(p.getString2("START_DATE")); + trainingPlanDao.setValue3(p.getString2("END_DATE")); + trainingPlanDao.setValue4(p.getString2("TRAINING_OBJECT")); + trainingPlanDao.setValue5(p.getString2("TRAINING_MATERIALS")); + trainingPlanDao.setValue6(p.getString2("TRAINING_METHODS")); + trainingPlanDao.setValue7(p.getString2("ASSESSMENT_METHOD")); + trainingPlanDao.setValue8(p.getString2("CLASS_HOURS")); + trainingPlanDao.setValue9(p.getString2("PLACE")); + trainingPlanDao.setValue10(p.getString2("TRAINING_TEACHERS")); + trainingPlanDao.setValue11(p.getString2("FUND_GUARANTEE")); + trainingPlanDao.setValue12(p.getString2("QUALITY_ASSESSMENT")); + trainingPlanDao.setValue13(p.getString2("YEAR")); + + list1.add(trainingPlanDao); + } + context.put("list1", list1); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + String name = "安全培训教育计划"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } + + @Override + public File exportPdfArchivesEduManager(PageData corp, List archivesEduManagerList) throws Exception { + File pdf = null; + String projectPath = corp.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(corp.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "archivesEduManager.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + context.put("value1", corp.getString2("CORP_NAME")); + + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < archivesEduManagerList.size(); i++) { + PageData p = archivesEduManagerList.get(i); + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(String.valueOf(i + 1)); + trainingPlanDao.setValue2(p.getString2("TRAINING_DATE")); + trainingPlanDao.setValue3(p.getString2("TRAINING_OBJECT")); + trainingPlanDao.setValue4(p.getString2("TRAINING_TYPE")); + trainingPlanDao.setValue5(p.getString2("TRAINING_CONTENT")); + trainingPlanDao.setValue6(p.getString2("PERSON_NUMBER")); + trainingPlanDao.setValue7(p.getString2("CLASS_HOURS")); + trainingPlanDao.setValue8(p.getString2("TRAINING_PLACE")); + trainingPlanDao.setValue9(p.getString2("TRAINING_TEACHER")); + trainingPlanDao.setValue10(p.getString2("ASSESSMENT_METHOD")); + trainingPlanDao.setValue11(p.getString2("ASSESSMENT")); + trainingPlanDao.setValue12(p.getString2("YEAR")); + + list1.add(trainingPlanDao); + } + context.put("list1", list1); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + String name = "安全培训教育管理台账"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } + + @Override + public File exportPdfArchivesCapital(PageData corp, List archivesCapitalList) throws Exception { + File pdf = null; + String projectPath = corp.getString2("projectPath"); + String now = DateUtil.getSdfTimesSSS(); + File file = new File(corp.getString2("projectPath") + Const.FILEPATHWORDTEMPLATE + "archivesCapital.docx"); + InputStream mbwj = new FileInputStream(file); + //注册xdocreport实例并加载FreeMarker模板引擎 + IXDocReport report = XDocReportRegistry.getRegistry().loadReport(mbwj, TemplateEngineKind.Freemarker); + //创建xdocreport上下文对象 + IContext context = report.createContext(); + + context.put("value1", corp.getString2("CORP_NAME")); + + List list1 = new ArrayList<>(); //一共多少航 + for (int i = 0; i < archivesCapitalList.size(); i++) { + PageData p = archivesCapitalList.get(i); + TrainingPlanDao trainingPlanDao = new TrainingPlanDao(); //每行的内容实体类 + trainingPlanDao.setValue1(String.valueOf(i + 1)); + trainingPlanDao.setValue2(p.getString2("DATE")); + trainingPlanDao.setValue3(p.getString2("AMOUNT")); + trainingPlanDao.setValue4(p.getString2("MATERIAL_COST")); + trainingPlanDao.setValue5(p.getString2("TEACHER_COST")); + trainingPlanDao.setValue6(p.getString2("PAPER_COST")); + trainingPlanDao.setValue7(p.getString2("OUTSIDE_COST")); + trainingPlanDao.setValue8(p.getString2("EQUIPMENT_COST")); + trainingPlanDao.setValue9(p.getString2("TRAIN_COST")); + trainingPlanDao.setValue10(p.getString2("ENTRUST_COST")); + trainingPlanDao.setValue11(p.getString2("OTHER_COST")); + trainingPlanDao.setValue12(p.getString2("BALANCE")); + trainingPlanDao.setValue13(p.getString2("YEAR")); + + list1.add(trainingPlanDao); + } + context.put("list1", list1); + + FieldsMetadata fm = report.createFieldsMetadata(); + // word模板中图片标签对应关系 pic---word模板中图片标签 item-- word模板中图片列表的遍历项,即模板中«@before-row[#list list2 as item]» 的item item.pic中的pic 为 后台实体类的图片字段名 + fm.addFieldAsImage("pic", "pic", NullImageBehaviour.RemoveImageTemplate); + //Word模板中的表格数据对应的集合类型 + fm.load("list1", TrainingPlanDao.class, true); + String name = "培训资金提取和使用情况管理台账"; + FileOutputStream out = new FileOutputStream( + new File( + projectPath + Const.FILEPATHFILE + name + now + ".docx" + )); + report.process(context, out); + WordToPdfUtil.docToPdf( + projectPath + Const.FILEPATHFILE + name + now + ".docx", + projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + File word = new File(projectPath + Const.FILEPATHFILE + name + now + ".docx"); + word.delete(); + pdf = new File(projectPath + Const.FILEPATHFILE + name + now + ".pdf"); + return pdf; + } +} + diff --git a/src/main/java/com/zcloud/service/archives/impl/ArchivesEduPlanServiceImpl.java b/src/main/java/com/zcloud/service/archives/impl/ArchivesEduPlanServiceImpl.java new file mode 100644 index 0000000..7f22b7c --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/impl/ArchivesEduPlanServiceImpl.java @@ -0,0 +1,36 @@ +package com.zcloud.service.archives.impl; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.archives.ArchivesEduPlanMapper; +import com.zcloud.service.archives.ArchivesEduPlanService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 说明:年度安全培训教育计划 + * 作者:luoxiaobao + * 时间:2021-12-16 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class ArchivesEduPlanServiceImpl implements ArchivesEduPlanService{ + + @Autowired + private ArchivesEduPlanMapper archiveseduplanMapper; + + + /**列表(全部) + * @param pd + * @throws Exception + */ + public List listAll(PageData pd)throws Exception{ + return archiveseduplanMapper.listAll(pd); + } + +} + diff --git a/src/main/java/com/zcloud/service/archives/impl/ArchivesFilesServiceImpl.java b/src/main/java/com/zcloud/service/archives/impl/ArchivesFilesServiceImpl.java new file mode 100644 index 0000000..ed18f5c --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/impl/ArchivesFilesServiceImpl.java @@ -0,0 +1,83 @@ +package com.zcloud.service.archives.impl; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.archives.ArchivesFilesMapper; +import com.zcloud.service.archives.ArchivesFilesService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 说明:档案文件 + * 作者:luoxiaobao + * 时间:2021-12-14 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class ArchivesFilesServiceImpl implements ArchivesFilesService{ + + @Autowired + private ArchivesFilesMapper archivesfilesMapper; + + /**新增 + * @param pd + * @throws Exception + */ + public void save(PageData pd)throws Exception{ + archivesfilesMapper.save(pd); + } + + /**删除 + * @param pd + * @throws Exception + */ + public void delete(PageData pd)throws Exception{ + archivesfilesMapper.delete(pd); + } + + /**修改 + * @param pd + * @throws Exception + */ + public void edit(PageData pd)throws Exception{ + archivesfilesMapper.edit(pd); + } + + /**列表 + * @param page + * @throws Exception + */ + public List list(Page page)throws Exception{ + return archivesfilesMapper.datalistPage(page); + } + + /**列表(全部) + * @param pd + * @throws Exception + */ + public List listAll(PageData pd)throws Exception{ + return archivesfilesMapper.listAll(pd); + } + + /**通过id获取数据 + * @param pd + * @throws Exception + */ + public PageData findById(PageData pd)throws Exception{ + return archivesfilesMapper.findById(pd); + } + + /**批量删除 + * @param ArrayDATA_IDS + * @throws Exception + */ + public void deleteAll(String[] ArrayDATA_IDS)throws Exception{ + archivesfilesMapper.deleteAll(ArrayDATA_IDS); + } + +} + diff --git a/src/main/java/com/zcloud/service/archives/impl/ArchivesPostManServiceImpl.java b/src/main/java/com/zcloud/service/archives/impl/ArchivesPostManServiceImpl.java new file mode 100644 index 0000000..0c55842 --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/impl/ArchivesPostManServiceImpl.java @@ -0,0 +1,35 @@ +package com.zcloud.service.archives.impl; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.archives.ArchivesPostManMapper; +import com.zcloud.service.archives.ArchivesPostManService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 说明:三岗人员管理台账 + * 作者:luoxiaobao + * 时间:2021-12-15 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class ArchivesPostManServiceImpl implements ArchivesPostManService{ + + @Autowired + private ArchivesPostManMapper archivesPostManMapper; + + /**列表(全部) + * @param pd + * @throws Exception + */ + public List listAll(PageData pd)throws Exception{ + return archivesPostManMapper.listAll(pd); + } + +} + diff --git a/src/main/java/com/zcloud/service/archives/impl/ArchivesTeacherServiceImpl.java b/src/main/java/com/zcloud/service/archives/impl/ArchivesTeacherServiceImpl.java new file mode 100644 index 0000000..83b02ba --- /dev/null +++ b/src/main/java/com/zcloud/service/archives/impl/ArchivesTeacherServiceImpl.java @@ -0,0 +1,35 @@ +package com.zcloud.service.archives.impl; + +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.archives.ArchivesTeacherMapper; +import com.zcloud.service.archives.ArchivesTeacherService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 说明:本单位师资管理台账 + * 作者:luoxiaobao + * 时间:2021-12-16 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class ArchivesTeacherServiceImpl implements ArchivesTeacherService{ + + @Autowired + private ArchivesTeacherMapper archivesteacherMapper; + + + /**列表(全部) + * @param pd + * @throws Exception + */ + public List listAll(PageData pd)throws Exception{ + return archivesteacherMapper.listAll(pd); + } + +} + diff --git a/src/main/java/com/zcloud/service/bus/CheckRecordService.java b/src/main/java/com/zcloud/service/bus/CheckRecordService.java index 515dc49..293d5e7 100644 --- a/src/main/java/com/zcloud/service/bus/CheckRecordService.java +++ b/src/main/java/com/zcloud/service/bus/CheckRecordService.java @@ -95,5 +95,7 @@ public interface CheckRecordService{ * @return */ public List recordByIde(PageData pd)throws Exception; + + List listExport(PageData pd)throws Exception; } diff --git a/src/main/java/com/zcloud/service/bus/HiddenCheckService.java b/src/main/java/com/zcloud/service/bus/HiddenCheckService.java index bd4e8df..dd100c8 100644 --- a/src/main/java/com/zcloud/service/bus/HiddenCheckService.java +++ b/src/main/java/com/zcloud/service/bus/HiddenCheckService.java @@ -59,6 +59,13 @@ public interface HiddenCheckService{ * @throws Exception */ public void deleteAll(String[] ArrayDATA_IDS)throws Exception; - + + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listExport(PageData pd)throws Exception; } diff --git a/src/main/java/com/zcloud/service/bus/HiddenSchemeService.java b/src/main/java/com/zcloud/service/bus/HiddenSchemeService.java index 02b6933..8050353 100644 --- a/src/main/java/com/zcloud/service/bus/HiddenSchemeService.java +++ b/src/main/java/com/zcloud/service/bus/HiddenSchemeService.java @@ -66,6 +66,7 @@ public interface HiddenSchemeService{ * @throws Exception */ public void deleteAll(String[] ArrayDATA_IDS)throws Exception; - + + List listExport(PageData pd)throws Exception; } diff --git a/src/main/java/com/zcloud/service/bus/ListManagerService.java b/src/main/java/com/zcloud/service/bus/ListManagerService.java new file mode 100644 index 0000000..f417ca2 --- /dev/null +++ b/src/main/java/com/zcloud/service/bus/ListManagerService.java @@ -0,0 +1,26 @@ +package com.zcloud.service.bus; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:清单管理 + * 作者:luoxiaobao + * 时间:2020-12-30 + * 官网:www.zcloudchina.com + */ +public interface ListManagerService { + + + + /**列表 + * @param page + * @throws Exception + */ + List list(Page page)throws Exception; + + List listExport(PageData pd); +} + diff --git a/src/main/java/com/zcloud/service/bus/TrainingScheduleService.java b/src/main/java/com/zcloud/service/bus/TrainingScheduleService.java new file mode 100644 index 0000000..4d10421 --- /dev/null +++ b/src/main/java/com/zcloud/service/bus/TrainingScheduleService.java @@ -0,0 +1,23 @@ +package com.zcloud.service.bus; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:培训日程安排通知 + * 作者:luoxiaobao + * 时间:2021-12-20 + * 官网:www.zcloudchina.com + */ +public interface TrainingScheduleService { + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listAll(PageData pd)throws Exception; + +} + diff --git a/src/main/java/com/zcloud/service/bus/impl/CheckRecordServiceImpl.java b/src/main/java/com/zcloud/service/bus/impl/CheckRecordServiceImpl.java index 179d6de..945fefc 100644 --- a/src/main/java/com/zcloud/service/bus/impl/CheckRecordServiceImpl.java +++ b/src/main/java/com/zcloud/service/bus/impl/CheckRecordServiceImpl.java @@ -1,6 +1,9 @@ package com.zcloud.service.bus.impl; +import java.util.ArrayList; import java.util.List; + +import com.zcloud.util.Tools; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -163,5 +166,29 @@ public class CheckRecordServiceImpl implements CheckRecordService{ public List recordByIde(PageData pd)throws Exception{ return checkrecordMapper.recordByIde(pd); } + + @Override + public List listExport(PageData pd) { + List explist = new ArrayList<>(); + List varList = checkrecordMapper.listExport(pd); + for (PageData pd2 : varList) { + int count = 0; + PageData vpd = new PageData(); + String id = pd2.getString("CHECKRECORD_ID"); + vpd.put("var" + (1 + count), pd2.getString("CORP_NAME")); + vpd.put("var" + (2 + count), pd2.getString("LIST_NAME")); // 清单名称 + vpd.put("var" + (3 + count), pd2.getString("PRINCIPALNAME")); //人员 + vpd.put("var" + (4 + count), pd2.getString("DATESTART") + " 至 " + pd2.getString("DATEEND")); //检查周期 + vpd.put("var" + (5 + count), pd2.getString("CHECK_USERS")); //检查人 + vpd.put("var" + (6 + count), pd2.getString("CHECK_TIME")); //检查时间 + String status = "已检查"; + if (!Tools.isEmpty(pd2.get("TYPE")) && "2".equals(pd2.getString("TYPE"))) { + status = "超期未检查"; + } + vpd.put("var" + (7 + count), status); // 检查状态 + explist.add(vpd); + } + return explist; + } } diff --git a/src/main/java/com/zcloud/service/bus/impl/HiddenCheckServiceImpl.java b/src/main/java/com/zcloud/service/bus/impl/HiddenCheckServiceImpl.java index 638c34e..953c8f8 100644 --- a/src/main/java/com/zcloud/service/bus/impl/HiddenCheckServiceImpl.java +++ b/src/main/java/com/zcloud/service/bus/impl/HiddenCheckServiceImpl.java @@ -85,6 +85,14 @@ public class HiddenCheckServiceImpl implements HiddenCheckService{ public void deleteAll(String[] ArrayDATA_IDS)throws Exception{ hiddencheckMapper.deleteAll(ArrayDATA_IDS); } + + /**列表(全部) + * @param pd + * @throws Exception + */ + public List listExport(PageData pd)throws Exception{ + return hiddencheckMapper.listExport(pd); + } } diff --git a/src/main/java/com/zcloud/service/bus/impl/HiddenSchemeServiceImpl.java b/src/main/java/com/zcloud/service/bus/impl/HiddenSchemeServiceImpl.java index 8fc2b6f..e3d0a38 100644 --- a/src/main/java/com/zcloud/service/bus/impl/HiddenSchemeServiceImpl.java +++ b/src/main/java/com/zcloud/service/bus/impl/HiddenSchemeServiceImpl.java @@ -93,6 +93,14 @@ public class HiddenSchemeServiceImpl implements HiddenSchemeService{ public void deleteAll(String[] ArrayDATA_IDS)throws Exception{ hiddenschemeMapper.deleteAll(ArrayDATA_IDS); } + + /**列表(全部) + * @param pd + * @throws Exception + */ + public List listExport(PageData pd)throws Exception{ + return hiddenschemeMapper.listExport(pd); + } } diff --git a/src/main/java/com/zcloud/service/bus/impl/ListManagerServiceImpl.java b/src/main/java/com/zcloud/service/bus/impl/ListManagerServiceImpl.java new file mode 100644 index 0000000..e7ca074 --- /dev/null +++ b/src/main/java/com/zcloud/service/bus/impl/ListManagerServiceImpl.java @@ -0,0 +1,70 @@ +package com.zcloud.service.bus.impl; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.bus.ListManagerMapper; +import com.zcloud.service.bus.ListManagerService; +import com.zcloud.util.Tools; +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.Collections; +import java.util.List; + +/** + * 说明:清单管理 + * 作者:luoxiaobao + * 时间:2020-12-30 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class ListManagerServiceImpl implements ListManagerService{ + + @Autowired + private ListManagerMapper listmanagerMapper; + + + + /**列表 + * @param page + * @throws Exception + */ + public List list(Page page)throws Exception{ + return listmanagerMapper.datalistPage(page); + } + + @Override + public List listExport(PageData pd) { + List explist = new ArrayList<>(); + List varList = listmanagerMapper.listExport(pd); + for (PageData pd2 : varList) { + int count = 0; + PageData vpd = new PageData(); + String id = pd2.getString("LISTMANAGER_ID"); + vpd.put("var" + (1 + count), pd2.getString("CORP_NAME")); + vpd.put("var" + (2 + count), pd2.getString("NAME")); // 清单名称 + vpd.put("var" + (3 + count), pd2.getString("DEPARTMENT_NAME_ALL")); //部门 + vpd.put("var" + (4 + count), pd2.getString("POST_NAME")); //岗位 + vpd.put("var" + (5 + count), pd2.getString("USER_NAME")); //人员 + vpd.put("var" + (6 + count), pd2.getString("PERIODNAME")); //排查周期 + vpd.put("var" + (7 + count), pd2.getString("TYPENAME")); //清单类型 + vpd.put("var" + (8 + count), pd2.getString("SCREENTYPENAME")); // 排查类型 + String listStatus = "启用"; + if (Tools.isEmpty(pd2.get("ISDELETE")) || "0".equals(pd2.getString("ISDELETE"))) { + listStatus = "启用"; + } else if ("1".equals(pd2.getString("ISDELETE"))) { + listStatus = "禁用"; + } else if ("2".equals(pd2.getString("ISDELETE"))) { + listStatus = "已删除"; + } + vpd.put("var" + (9 + count), listStatus); // 状态 + explist.add(vpd); + } + return explist; + } +} + + diff --git a/src/main/java/com/zcloud/service/bus/impl/TrainingScheduleServiceImpl.java b/src/main/java/com/zcloud/service/bus/impl/TrainingScheduleServiceImpl.java new file mode 100644 index 0000000..2b3f450 --- /dev/null +++ b/src/main/java/com/zcloud/service/bus/impl/TrainingScheduleServiceImpl.java @@ -0,0 +1,35 @@ +package com.zcloud.service.bus.impl; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.bus.TrainingScheduleMapper; +import com.zcloud.service.bus.TrainingScheduleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 说明:培训日程安排通知 + * 作者:luoxiaobao + * 时间:2021-12-20 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class TrainingScheduleServiceImpl implements TrainingScheduleService{ + + @Autowired + private TrainingScheduleMapper trainingscheduleMapper; + + + /**列表(全部) + * @param pd + * @throws Exception + */ + public List listAll(PageData pd)throws Exception{ + return trainingscheduleMapper.listAll(pd); + } +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/StageExamPaperQuestionService.java b/src/main/java/com/zcloud/service/onlinexxks/StageExamPaperQuestionService.java new file mode 100644 index 0000000..016d0f1 --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/StageExamPaperQuestionService.java @@ -0,0 +1,23 @@ +package com.zcloud.service.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:阶段考试试题中间表 + * 作者:luoxiaobao + * 时间:2021-10-08 + * 官网:www.zcloudchina.com + */ +public interface StageExamPaperQuestionService { + + + /**列表(根据试卷ID获取试题数据) + * @param pd + * @throws Exception + */ + List findByExamPaper(PageData pd) throws Exception; +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/StageExamRecordService.java b/src/main/java/com/zcloud/service/onlinexxks/StageExamRecordService.java new file mode 100644 index 0000000..7b6aa8f --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/StageExamRecordService.java @@ -0,0 +1,22 @@ +package com.zcloud.service.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:阶段考试记录 + * 作者:luoxiaobao + * 时间:2021-09-15 + * 官网:www.zcloudchina.com + */ +public interface StageExamRecordService { + + /**试卷答题展示(获取答题情况) + * @param + * @throws Exception + */ + List findByExam(PageData pd)throws Exception; +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/StageExamService.java b/src/main/java/com/zcloud/service/onlinexxks/StageExamService.java new file mode 100644 index 0000000..f4fe3a2 --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/StageExamService.java @@ -0,0 +1,24 @@ +package com.zcloud.service.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:阶段考试 + * 作者:luoxiaobao + * 时间:2021-09-15 + * 官网:www.zcloudchina.com + */ +public interface StageExamService { + + + /** + * 试卷答题展示 + * @param pd + * @return + */ + PageData findResult(PageData pd)throws Exception; +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/StageStudentRelationService.java b/src/main/java/com/zcloud/service/onlinexxks/StageStudentRelationService.java new file mode 100644 index 0000000..f70dd2f --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/StageStudentRelationService.java @@ -0,0 +1,31 @@ +package com.zcloud.service.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.io.File; +import java.util.List; + +/** + * 说明:阶段考试学员关系表 + * 作者:luoxiaobao + * 时间:2021-10-08 + * 官网:www.zcloudchina.com + */ +public interface StageStudentRelationService { + + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listStudentTask(PageData pd)throws Exception; + + /**列表(全部) + * @param pd + * @throws Exception + */ + List listExport(PageData pd)throws Exception; + +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/StageexampaperService.java b/src/main/java/com/zcloud/service/onlinexxks/StageexampaperService.java new file mode 100644 index 0000000..8919b20 --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/StageexampaperService.java @@ -0,0 +1,22 @@ +package com.zcloud.service.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:阶段考试试卷表 + * 作者:luoxiaobao + * 时间:2021-07-04 + * 官网:www.zcloudchina.com + */ +public interface StageexampaperService { + + /**通过id获取数据 + * @param pd + * @throws Exception + */ + PageData getDataById(PageData pd)throws Exception; +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/StudyTaskService.java b/src/main/java/com/zcloud/service/onlinexxks/StudyTaskService.java new file mode 100644 index 0000000..cd5b513 --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/StudyTaskService.java @@ -0,0 +1,30 @@ +package com.zcloud.service.onlinexxks; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; + +import java.util.List; + +/** + * 说明:在线学习考试-任务 + * 作者:luoxiaobao + * 时间:2021-12-20 + * 官网:www.zcloudchina.com + */ +public interface StudyTaskService { + + /**通过id获取数据 + * @param pd + * @throws Exception + */ + PageData findById(PageData pd)throws Exception; + + List getcurriculumAllBystudyTaskId(PageData pd)throws Exception; + + List getAllCourseware(PageData pd)throws Exception; + + List listAll(PageData pd)throws Exception; + + List listExport(PageData pd)throws Exception; +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/impl/StageExamPaperQuestionServiceImpl.java b/src/main/java/com/zcloud/service/onlinexxks/impl/StageExamPaperQuestionServiceImpl.java new file mode 100644 index 0000000..dceb1a1 --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/impl/StageExamPaperQuestionServiceImpl.java @@ -0,0 +1,37 @@ +package com.zcloud.service.onlinexxks.impl; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.onlinexxks.*; +import com.zcloud.service.onlinexxks.StageExamPaperQuestionService; +import com.zcloud.util.UuidUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 说明:阶段考试试题中间表 + * 作者:luoxiaobao + * 时间:2021-10-08 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class StageExamPaperQuestionServiceImpl implements StageExamPaperQuestionService{ + + @Autowired + private StageExamPaperQuestionMapper stageexampaperquestionMapper; + + + /**列表(根据试卷ID获取试题数据) + * @param pd + * @throws Exception + */ + @Override + public List findByExamPaper(PageData pd) { + return stageexampaperquestionMapper.findByExamPaper(pd); + } +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/impl/StageExamRecordServiceImpl.java b/src/main/java/com/zcloud/service/onlinexxks/impl/StageExamRecordServiceImpl.java new file mode 100644 index 0000000..92a1db0 --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/impl/StageExamRecordServiceImpl.java @@ -0,0 +1,36 @@ +package com.zcloud.service.onlinexxks.impl; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.onlinexxks.StageExamRecordMapper; +import com.zcloud.service.onlinexxks.StageExamRecordService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 说明:阶段考试记录 + * 作者:luoxiaobao + * 时间:2021-09-15 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class StageExamRecordServiceImpl implements StageExamRecordService{ + + @Autowired + private StageExamRecordMapper stageexamrecordMapper; + + /**试卷答题展示(获取答题情况) + * @param + * @throws Exception + */ + @Override + public List findByExam(PageData pd) throws Exception { + return stageexamrecordMapper.findByExam(pd); + } + +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/impl/StageExamServiceImpl.java b/src/main/java/com/zcloud/service/onlinexxks/impl/StageExamServiceImpl.java new file mode 100644 index 0000000..99411ce --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/impl/StageExamServiceImpl.java @@ -0,0 +1,59 @@ +package com.zcloud.service.onlinexxks.impl; + +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.onlinexxks.StageExamMapper; +import com.zcloud.service.onlinexxks.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 说明:阶段考试 + * 作者:luoxiaobao + * 时间:2021-09-15 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class StageExamServiceImpl implements StageExamService{ + + @Autowired + private StageExamMapper stageExamMapper; + @Autowired + private StageExamRecordService stageExamRecordService; + @Autowired + private StageStudentRelationService stageStudentRelationService; + @Autowired + private StudyTaskService studyTaskService; + @Autowired + private StageexampaperService stageExamPaperService; + @Autowired + private StageExamService stageExamService; + + + /**试卷答题展示 + * @param + * @throws Exception + */ + @Override + public PageData findResult(PageData pd) throws Exception { + List dataList = stageExamMapper.findByPaperUser(pd); // 考试成绩 STAGEEXAM_ID + if (dataList.size()>0) { + PageData data = dataList.get(0); + pd.put("STAGEEXAM_ID", data.getString("STAGEEXAM_ID")); + + List questionList = stageExamRecordService.findByExam(pd); // 考试详情 STAGEEXAM_ID + PageData studyTaskData = studyTaskService.findById(data); //任务 + PageData stageexampaperData = stageExamPaperService.getDataById(data); //试卷 + data.put("studyTaskData", studyTaskData); + data.put("stageexampaperData", stageexampaperData); + data.put("QUESTIONLIST", questionList); + return data; + } + return new PageData(); + } + +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/impl/StageStudentRelationServiceImpl.java b/src/main/java/com/zcloud/service/onlinexxks/impl/StageStudentRelationServiceImpl.java new file mode 100644 index 0000000..d777427 --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/impl/StageStudentRelationServiceImpl.java @@ -0,0 +1,88 @@ +package com.zcloud.service.onlinexxks.impl; + +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.onlinexxks.StageStudentRelationMapper; +import com.zcloud.service.onlinexxks.StageStudentRelationService; +import com.zcloud.util.DateUtil; +import com.zcloud.util.Tools; +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.Collections; +import java.util.List; + +/** + * 说明:阶段考试学员关系表 + * 作者:luoxiaobao + * 时间:2021-10-08 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class StageStudentRelationServiceImpl implements StageStudentRelationService{ + + @Autowired + private StageStudentRelationMapper stageStudentRelationMapper; + + @Override + public List listStudentTask(PageData pd) throws Exception { + return stageStudentRelationMapper.listStudentTask(pd); + } + + /**列表(全部) + * @param pd + * @throws Exception + */ + public List listExport(PageData pd)throws Exception{ + List explist = new ArrayList<>(); + List varList = stageStudentRelationMapper.listExport(pd); + for (PageData pd2 : varList) { + int count = 0; + PageData vpd = new PageData(); + String id = pd2.getString("STAGESTUDENTRELATION_ID"); + vpd.put("var" + (1 + count), pd2.getString("CORP_NAME")); + vpd.put("var" + (2 + count), pd2.getString("STUDY_NAME")); // 学习任务名称 + vpd.put("var" + (3 + count), pd2.getString("PEIXUE_START_TIME")); //培训开始时间 + vpd.put("var" + (4 + count), pd2.getString("PEIXUE_END_TIME")); //培训结束时间 + vpd.put("var" + (5 + count), pd2.getString("USER_NAME")); //姓名 + vpd.put("var" + (6 + count), pd2.getString("PHONE")); //电话 + vpd.put("var" + (7 + count), pd2.get("DEPARTMENT_NAME").toString()); //部门 + vpd.put("var" + (8 + count), Tools.isEmpty(pd2.get("POSTNAME")) ? "" : pd2.get("POSTNAME").toString()); // 岗位 + vpd.put("var" + (9 + count), pd2.get("SUM_CLASSHOUR").toString()); // 任务学时(分钟) + vpd.put("var" + (10 + count), pd2.get("COMPLETE_CLASSHOUR").toString()); // 已学习学时(分钟) + Double sum = 0.0; + if (!Tools.isEmpty(pd2.get("SUM_CLASSHOUR"))) { + sum = Double.parseDouble(pd2.get("SUM_CLASSHOUR").toString()); + } + Double complete = 0.0; + if (!Tools.isEmpty(pd2.get("COMPLETE_CLASSHOUR"))) { + complete = Double.parseDouble(pd2.get("COMPLETE_CLASSHOUR").toString()); + } + vpd.put("var" + (11 + count), complete >= sum ? "学习完" : "学习中"); // 学习状态 + vpd.put("var" + (12 + count), "-1".equals(pd2.get("STAGEEXAMSCORE").toString()) ? "-" : pd2.get("STAGEEXAMSCORE").toString()); // 考试成绩 + String status = "已结束"; + Double stageExamScore = 0.0; + if (!Tools.isEmpty(pd2.get("STAGEEXAMSCORE"))) { + stageExamScore = Double.parseDouble(pd2.get("STAGEEXAMSCORE").toString()); + } + Double passScore = 0.0; + if (!Tools.isEmpty(pd2.get("PASSSCORE"))) { + passScore = Double.parseDouble(pd2.get("PASSSCORE").toString()); + } + String now = DateUtil.getDay(); + if ("-1".equals(pd2.get("STAGEEXAMSCORE").toString())) { + status = "未开始"; + } else if (stageExamScore >= passScore) { + status = "已通过"; + } else { + status = "未通过"; + } + vpd.put("var" + (13 + count), status); // 考试结果 + explist.add(vpd); + } + return explist; + } +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/impl/StageexampaperServiceImpl.java b/src/main/java/com/zcloud/service/onlinexxks/impl/StageexampaperServiceImpl.java new file mode 100644 index 0000000..2fe9464 --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/impl/StageexampaperServiceImpl.java @@ -0,0 +1,37 @@ +package com.zcloud.service.onlinexxks.impl; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.onlinexxks.StageexampaperMapper; +import com.zcloud.service.onlinexxks.StageStudentRelationService; +import com.zcloud.service.onlinexxks.StageexampaperService; +import com.zcloud.util.DateUtil; +import com.zcloud.util.Jurisdiction; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + +/** + * 说明:阶段考试试卷表 + * 作者:luoxiaobao + * 时间:2021-07-04 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class StageexampaperServiceImpl implements StageexampaperService{ + + @Autowired + private StageexampaperMapper stageexampaperMapper; + @Autowired + private StageStudentRelationService stageStudentRelationService; + + public PageData getDataById(PageData pd)throws Exception{ + return stageexampaperMapper.findById(pd); + } +} + diff --git a/src/main/java/com/zcloud/service/onlinexxks/impl/StudyTaskServiceImpl.java b/src/main/java/com/zcloud/service/onlinexxks/impl/StudyTaskServiceImpl.java new file mode 100644 index 0000000..dda9fcc --- /dev/null +++ b/src/main/java/com/zcloud/service/onlinexxks/impl/StudyTaskServiceImpl.java @@ -0,0 +1,93 @@ +package com.zcloud.service.onlinexxks.impl; + +import com.zcloud.entity.Page; +import com.zcloud.entity.PageData; +import com.zcloud.mapper.dsno2.onlinexxks.StudyTaskMapper; +import com.zcloud.service.onlinexxks.StudyTaskService; +import com.zcloud.util.DateUtil; +import com.zcloud.util.Tools; +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.Collections; +import java.util.Date; +import java.util.List; + +/** + * 说明:在线学习考试-任务 + * 作者:luoxiaobao + * 时间:2021-12-20 + * 官网:www.zcloudchina.com + */ +@Service +@Transactional //开启事物 +public class StudyTaskServiceImpl implements StudyTaskService { + + @Autowired + private StudyTaskMapper studytaskMapper; + + + /**通过id获取数据 + * @param pd + * @throws Exception + */ + public PageData findById(PageData pd)throws Exception{ + return studytaskMapper.findById(pd); + } + + public List getcurriculumAllBystudyTaskId(PageData pd)throws Exception{ + return studytaskMapper.getcurriculumAllBystudyTaskId(pd); + } + + /**全部视频课件+资料课件 + * @param pd + * @throws Exception + */ + public List getAllCourseware(PageData pd)throws Exception{ + return studytaskMapper.getAllCourseware(pd); + } + + /**列表 + * @param page + * @throws Exception + */ + public List listAll(PageData pd)throws Exception{ + return studytaskMapper.listAll(pd); + } + + @Override + public List listExport(PageData pd) throws Exception { + List explist = new ArrayList<>(); + List varList = studytaskMapper.listAll(pd); + for (PageData pd2 : varList) { + int count = 0; + PageData vpd = new PageData(); + String id = pd2.getString("STUDYTASK_ID"); + vpd.put("var" + (1 + count), pd2.getString("CORP_NAME")); + vpd.put("var" + (2 + count), pd2.getString("STUDY_NAME")); // 学习任务名称 + vpd.put("var" + (3 + count), pd2.getString("train_type_name")); //培训行业类型 + vpd.put("var" + (4 + count), pd2.getString("post_type_name")); //岗位培训类型 + vpd.put("var" + (5 + count), pd2.getString("PEIXUE_START_TIME")); //培训开始时间 + vpd.put("var" + (6 + count), pd2.getString("PEIXUE_END_TIME")); //培训结束时间 + vpd.put("var" + (7 + count), pd2.get("SUM_CLASSHOUR").toString()); //任务课时(分钟) + vpd.put("var" + (8 + count), pd2.get("userCount").toString()); // 应参考人数 + vpd.put("var" + (9 + count), pd2.get("cj").toString()); // 参考人数 + vpd.put("var" + (10 + count), pd2.get("hg").toString()); // 合格人数 + String status = "已结束"; + String now = DateUtil.getDay(); + if (DateUtil.getDaySub(now, pd2.getString("PEIXUE_START_TIME")) > 0) { + status = "未开始"; + } else if (DateUtil.getDaySub(pd2.getString("PEIXUE_END_TIME"), now) > 0) { + status = "已结束"; + } else { + status = "进行中"; + } + vpd.put("var" + (11 + count), status); // 状态 + explist.add(vpd); + } + return explist; + } +} + diff --git a/src/main/java/com/zcloud/service/superviseInspect/SuperviseInspectHiddenService.java b/src/main/java/com/zcloud/service/superviseInspect/SuperviseInspectHiddenService.java index df0af63..b8b9801 100644 --- a/src/main/java/com/zcloud/service/superviseInspect/SuperviseInspectHiddenService.java +++ b/src/main/java/com/zcloud/service/superviseInspect/SuperviseInspectHiddenService.java @@ -1,6 +1,8 @@ package com.zcloud.service.superviseInspect; import java.util.List; +import java.util.Map; + import com.zcloud.entity.Page; import com.zcloud.entity.PageData; @@ -61,5 +63,6 @@ public interface SuperviseInspectHiddenService{ */ public void deleteAll(String[] ArrayDATA_IDS)throws Exception; + Map listExport(PageData pd)throws Exception; } diff --git a/src/main/java/com/zcloud/service/superviseInspect/SuperviseInspectService.java b/src/main/java/com/zcloud/service/superviseInspect/SuperviseInspectService.java index 6ab13b5..39e2690 100644 --- a/src/main/java/com/zcloud/service/superviseInspect/SuperviseInspectService.java +++ b/src/main/java/com/zcloud/service/superviseInspect/SuperviseInspectService.java @@ -1,6 +1,8 @@ package com.zcloud.service.superviseInspect; import java.util.List; +import java.util.Map; + import com.zcloud.entity.Page; import com.zcloud.entity.PageData; @@ -53,6 +55,12 @@ public interface SuperviseInspectService{ * @throws Exception */ public void deleteAll(String[] ArrayDATA_IDS)throws Exception; + + /**列表 + * @param + * @throws Exception + */ + Map listExport(PageData pd)throws Exception; } diff --git a/src/main/java/com/zcloud/service/superviseInspect/impl/SuperviseInspectHiddenServiceImpl.java b/src/main/java/com/zcloud/service/superviseInspect/impl/SuperviseInspectHiddenServiceImpl.java index 8af5511..49a493d 100644 --- a/src/main/java/com/zcloud/service/superviseInspect/impl/SuperviseInspectHiddenServiceImpl.java +++ b/src/main/java/com/zcloud/service/superviseInspect/impl/SuperviseInspectHiddenServiceImpl.java @@ -1,6 +1,12 @@ package com.zcloud.service.superviseInspect.impl; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; + +import com.zcloud.service.superviseInspect.SuperviseInspectFilesService; +import com.zcloud.util.Tools; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -21,6 +27,8 @@ public class SuperviseInspectHiddenServiceImpl implements SuperviseInspectHidden @Autowired private SuperviseInspectHiddenMapper superviseinspecthiddenMapper; + @Autowired + private SuperviseInspectFilesService superviseInspectFilesService; /**新增 * @param pd @@ -86,5 +94,152 @@ public class SuperviseInspectHiddenServiceImpl implements SuperviseInspectHidden superviseinspecthiddenMapper.deleteAll(ArrayDATA_IDS); } + @Override + public Map listExport(PageData pd) throws Exception { + Map dataMap = new HashMap<>(); + List varList = new ArrayList<>(); + List dataList = superviseinspecthiddenMapper.listExport(pd); + PageData f = new PageData(); + f.put("TYPE","3"); + List img3List = superviseInspectFilesService.listAll(f); + f.put("TYPE","4"); + List img4List = superviseInspectFilesService.listAll(f); + + Map imgCount = new HashMap<>(); + Integer imgTypeMaxCount3 = 1,imgTypeMaxCount4 = 1; + Map> imgMap = new HashMap<>(); + for (int i = 0; i < img3List.size(); i++) { + if (Tools.isEmpty(img3List.get(i).get("TYPE"))) { + continue; + } + if (Tools.isEmpty(img3List.get(i).get("FOREIGN_KEY"))) { + continue; + } + List list = new ArrayList<>(); + String key = img3List.get(i).getString("FOREIGN_KEY") + ";" + img3List.get(i).get("TYPE"); + if (imgMap.containsKey(key)) { + list = imgMap.get(key); + } + list.add(img3List.get(i).getString("FILEPATH")); + imgMap.put(key, list); + String imgType = img3List.get(i).get("TYPE").toString(); + Integer count = 1; + if (imgCount.containsKey(key)) { + count = imgCount.get(key) + 1; + } + if ("3".equals(imgType)) { + if (imgTypeMaxCount3 < count) { + imgTypeMaxCount3 = count; + } + } + imgCount.put(key, count); + } + for (int i = 0; i < img4List.size(); i++) { + if (Tools.isEmpty(img4List.get(i).get("TYPE"))) { + continue; + } + if (Tools.isEmpty(img4List.get(i).get("FOREIGN_KEY"))) { + continue; + } + List list = new ArrayList<>(); + String key = img4List.get(i).getString("FOREIGN_KEY") + ";" + img4List.get(i).get("TYPE"); + if (imgMap.containsKey(key)) { + list = imgMap.get(key); + } + list.add(img4List.get(i).getString("FILEPATH")); + imgMap.put(key, list); + String imgType = img4List.get(i).get("TYPE").toString(); + Integer count = 1; + if (imgCount.containsKey(key)) { + count = imgCount.get(key) + 1; + } + if ("4".equals(imgType)) { + if (imgTypeMaxCount4 < count) { + imgTypeMaxCount4 = count; + } + } + imgCount.put(key, count); + } + + for (PageData pd2 : dataList) { + int count = 0; + PageData vpd = new PageData(); + String id = pd2.getString("SUPERVISE_INSPECT_HIDDEN_ID"); + vpd.put("var" + (1 + count), pd2.get("CORP_NAME").toString()); // 被检查企业 + vpd.put("var" + (2 + count), Tools.isEmpty(pd2.get("INSPECT_DEPARTMENT_NAME")) ? "" : pd2.get("INSPECT_DEPARTMENT_NAME").toString()); // 检查部门 + vpd.put("var" + (3 + count), Tools.isEmpty(pd2.get("INSPECT_USER_NAME")) ? "" : pd2.get("INSPECT_USER_NAME").toString()); //检查人 + vpd.put("var" + (4 + count), Tools.isEmpty(pd2.get("INSPECTTIME")) ? "" : pd2.get("INSPECTTIME").toString()); //检查时间 + vpd.put("var" + (5 + count), Tools.isEmpty(pd2.get("HIDDENDESCR")) ? "" : pd2.get("HIDDENDESCR").toString()); //隐患描述 + vpd.put("var" + (6 + count), Tools.isEmpty(pd2.get("HIDDENPART")) ? "" : pd2.get("HIDDENPART").toString()); //隐患部位 + vpd.put("var" + (7 + count), Tools.isEmpty(pd2.get("HIDDENLEVELNAME")) ? "" : pd2.get("HIDDENLEVELNAME").toString()); //隐患级别 + vpd.put("var" + (8 + count), Tools.isEmpty(pd2.get("DISCOVER_TIME")) ? "" : pd2.get("DISCOVER_TIME").toString()); // 发现时间 + vpd.put("var" + (9 + count), Tools.isEmpty(pd2.get("RECTIFY_DEADLINE")) ? "" : pd2.get("RECTIFY_DEADLINE").toString()); // 整改截止时间 + vpd.put("var" + (10 + count), Tools.isEmpty(pd2.get("DISPOSE")) ? "" : pd2.get("DISPOSE").toString()); // 隐患处置 + int state = Tools.isEmpty(pd2.get("STATE")) ? 0 : Integer.parseInt(pd2.get("STATE").toString()); + vpd.put("var" + (11 + count), state == 1 ? "待整改" : (state == 2 ? "待复查" : (state == 3 ? "已复查" : ""))); // 隐患状态 + + List yhImg = imgMap.get(id + ";3"); + for (int i = 0; i < imgTypeMaxCount3; i++) { + if (null != yhImg) { + if (i < yhImg.size()) { + vpd.put("img" + (12 + count + i), yhImg.get(i));// 方案图片 + } else { + vpd.put("img" + (12 + count + i), ""); + } + } else { + vpd.put("img" + (12 + count + i), ""); + } + } + count += imgTypeMaxCount3; + vpd.put("var" + (12 + count), state > 1 ? Tools.isEmpty(pd2.get("RECTIFYER_NAME")) ? "" : pd2.get("RECTIFYER_NAME").toString() : ""); // 整改人 + vpd.put("var" + (13 + count), state > 1 ? Tools.isEmpty(pd2.get("RECTIFY_TIME")) ? "" : pd2.get("RECTIFY_TIME").toString() : ""); // 整改时间 + vpd.put("var" + (14 + count), state > 1 ? Tools.isEmpty(pd2.get("RECTIFY_DESCR")) ? "" : pd2.get("RECTIFY_DESCR").toString() : ""); // 整改描述 + List zgImg = imgMap.get(id + ";4"); + for (int i = 0; i < imgTypeMaxCount4; i++) { + if (null != zgImg) { + if (i < zgImg.size()) { + vpd.put("img" + (15 + count + i), zgImg.get(i));// 方案图片 + } else { + vpd.put("img" + (15 + count + i), ""); + } + } else { + vpd.put("img" + (15 + count + i), ""); + } + } + count += imgTypeMaxCount4; + int qualified = Tools.isEmpty(pd2.get("QUALIFIED")) ? 0 : Integer.parseInt(pd2.get("QUALIFIED").toString()); + vpd.put("var" + (15 + count), state > 2 ? (qualified == 1 ? "合格" : (qualified == 0 ? "不合格" : "")) : ""); // 复查结果 + vpd.put("var" + (16 + count), state > 2 ? Tools.isEmpty(pd2.get("REVIEW_TIME")) ? "" : pd2.get("REVIEW_TIME").toString() : ""); // 复查时间 + varList.add(vpd); + } + + dataMap.put("varList", varList); + List titles = new ArrayList(); + titles.add("被检查企业"); //1 + titles.add("检查部门"); //2 + titles.add("检查人"); //3 + titles.add("检查时间"); //4 + titles.add("隐患描述"); //5 + titles.add("隐患部位"); //6 + titles.add("隐患级别"); //7 + titles.add("发现时间"); //8 + titles.add("整改截止时间"); //9 + titles.add("隐患处置"); + titles.add("隐患状态"); + for (int i = 0; i < imgTypeMaxCount3; i++) { + titles.add("隐患图片"); // 9 + } + titles.add("整改人"); //8 + titles.add("整改时间"); //8 + titles.add("整改描述"); //8 + for (int i = 0; i < imgTypeMaxCount4; i++) { + titles.add("整改图片"); // 9 + } + titles.add("复查结果"); //8 + titles.add("复查时间"); //8 + dataMap.put("titles", titles); + return dataMap; + } + } diff --git a/src/main/java/com/zcloud/service/superviseInspect/impl/SuperviseInspectServiceImpl.java b/src/main/java/com/zcloud/service/superviseInspect/impl/SuperviseInspectServiceImpl.java index 07171be..4fe0975 100644 --- a/src/main/java/com/zcloud/service/superviseInspect/impl/SuperviseInspectServiceImpl.java +++ b/src/main/java/com/zcloud/service/superviseInspect/impl/SuperviseInspectServiceImpl.java @@ -1,6 +1,9 @@ package com.zcloud.service.superviseInspect.impl; -import java.util.List; +import java.util.*; + +import com.zcloud.service.superviseInspect.SuperviseInspectFilesService; +import com.zcloud.util.Tools; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -21,7 +24,9 @@ public class SuperviseInspectServiceImpl implements SuperviseInspectService{ @Autowired private SuperviseInspectMapper superviseinspectMapper; - + @Autowired + private SuperviseInspectFilesService superviseInspectFilesService; + /**新增 * @param pd * @throws Exception @@ -77,6 +82,89 @@ public class SuperviseInspectServiceImpl implements SuperviseInspectService{ public void deleteAll(String[] ArrayDATA_IDS)throws Exception{ superviseinspectMapper.deleteAll(ArrayDATA_IDS); } - + + @Override + public Map listExport(PageData pd) throws Exception { + Map dataMap = new HashMap<>(); + List varList = new ArrayList<>(); + List dataList = superviseinspectMapper.listExport(pd); + PageData f = new PageData(); + f.put("TYPE","2"); + List img2List = superviseInspectFilesService.listAll(f); + + Map imgCount = new HashMap<>(); + Integer imgTypeMaxCount2 = 1; + Map> imgMap = new HashMap<>(); + for (int i = 0; i < img2List.size(); i++) { + if (Tools.isEmpty(img2List.get(i).get("TYPE"))) { + continue; + } + if (Tools.isEmpty(img2List.get(i).get("FOREIGN_KEY"))) { + continue; + } + List list = new ArrayList<>(); + String key = img2List.get(i).getString("FOREIGN_KEY") + ";" + img2List.get(i).get("TYPE"); + if (imgMap.containsKey(key)) { + list = imgMap.get(key); + } + list.add(img2List.get(i).getString("FILEPATH")); + imgMap.put(key, list); + String imgType = img2List.get(i).get("TYPE").toString(); + Integer count = 1; + if (imgCount.containsKey(key)) { + count = imgCount.get(key) + 1; + } + if ("2".equals(imgType)) { + if (imgTypeMaxCount2 < count) { + imgTypeMaxCount2 = count; + } + } + imgCount.put(key, count); + } + + for (PageData pd2 : dataList) { + int count = 0; + PageData vpd = new PageData(); + String id = pd2.getString("SUPERVISE_INSPECT_ID"); + vpd.put("var" + (1 + count), pd2.getString("CORP_NAME")); // 被检查企业 + vpd.put("var" + (2 + count), pd2.getString("INSPECT_DEPARTMENT_NAME")); // 检查部门 + vpd.put("var" + (3 + count), pd2.getString("INSPECTTYPENAME")); //检查类型 + vpd.put("var" + (4 + count), pd2.getString("INSPECTTIME")); //检查时间 + vpd.put("var" + (5 + count), pd2.getString("INSPECT_USER_NAME")); //检查人 + vpd.put("var" + (6 + count), Tools.isEmpty(pd2.get("HASEXPERTS")) ? "" : ("1".equals(pd2.get("HASEXPERTS").toString()) ? "是" : "否")); //是否邀请专家 + vpd.put("var" + (7 + count), pd2.getString("CONTENT")); //检查内容 + vpd.put("var" + (8 + count), pd2.get("HIDDENNUM").toString()); // 隐患数量 + + List ysImg = imgMap.get(pd2.getString("SUPERVISE_INSPECT_ID") + ";2"); + for (int i = 0; i < imgTypeMaxCount2; i++) { + if (null != ysImg) { + if (i < ysImg.size()) { + vpd.put("img" + (9 + count + i), ysImg.get(i));// 方案图片 + } else { + vpd.put("img" + (9 + count + i), ""); + } + } else { + vpd.put("img" + (9 + count + i), ""); + } + } + varList.add(vpd); + } + + dataMap.put("varList", varList); + List titles = new ArrayList(); + titles.add("被检查企业"); //1 + titles.add("检查部门"); //2 + titles.add("检查类型"); //3 + titles.add("检查时间"); //4 + titles.add("检查人"); //5 + titles.add("是否邀请专家"); //6 + titles.add("检查内容"); //7 + titles.add("隐患数量"); //8 + for (int i = 0; i < imgTypeMaxCount2; i++) { + titles.add("现场检查照片"); // 9 + } + dataMap.put("titles", titles); + return dataMap; + } } diff --git a/src/main/java/com/zcloud/service/system/Department2Service.java b/src/main/java/com/zcloud/service/system/Department2Service.java index 723f2fb..d4d261b 100644 --- a/src/main/java/com/zcloud/service/system/Department2Service.java +++ b/src/main/java/com/zcloud/service/system/Department2Service.java @@ -87,7 +87,7 @@ public interface Department2Service{ */ public String getDEPARTMENT_IDS(String DEPARTMENT_ID) throws Exception; - public Object listAll(PageData pd)throws Exception; + public List listAll(PageData pd)throws Exception; // public List listAllMent(PageData pd) throws Exception; // diff --git a/src/main/java/com/zcloud/service/system/Users2Service.java b/src/main/java/com/zcloud/service/system/Users2Service.java index de1817d..b20756d 100644 --- a/src/main/java/com/zcloud/service/system/Users2Service.java +++ b/src/main/java/com/zcloud/service/system/Users2Service.java @@ -178,4 +178,10 @@ public interface Users2Service { * @throws Exception */ public void deleteByCorp(PageData pd)throws Exception; + + List listAllForExport(PageData pd)throws Exception; + + List listExport(PageData pd, String[] regKeys)throws Exception; + + List listAllUser(PageData corpIdPd)throws Exception; } diff --git a/src/main/java/com/zcloud/service/system/UsersService.java b/src/main/java/com/zcloud/service/system/UsersService.java index e746bb6..85384a3 100644 --- a/src/main/java/com/zcloud/service/system/UsersService.java +++ b/src/main/java/com/zcloud/service/system/UsersService.java @@ -1,6 +1,7 @@ package com.zcloud.service.system; import java.util.List; +import java.util.Map; import com.zcloud.entity.Page; import com.zcloud.entity.PageData; @@ -214,4 +215,15 @@ public interface UsersService { * @throws Exception */ void editCorpUser(PageData pd)throws Exception; + + List> getDaochuReglatory (PageData pd)throws Exception; + + List> getDaochuPrevention (PageData pd)throws Exception; + + /**用户列表(全部) + * @param pd + * @return + * @throws Exception + */ + List listExport(PageData pd, String[] regKeys)throws Exception; } diff --git a/src/main/java/com/zcloud/service/system/impl/Department2ServiceImpl.java b/src/main/java/com/zcloud/service/system/impl/Department2ServiceImpl.java index fe65260..8eda607 100644 --- a/src/main/java/com/zcloud/service/system/impl/Department2ServiceImpl.java +++ b/src/main/java/com/zcloud/service/system/impl/Department2ServiceImpl.java @@ -69,11 +69,11 @@ public class Department2ServiceImpl implements Department2Service{ } /**列表 - * @param page + * @param * @throws Exception */ public List listAll(PageData pd)throws Exception{ - return (List)departmentMapper.listAll(pd); + return departmentMapper.listAll(pd); } /**通过id获取数据 * @param pd diff --git a/src/main/java/com/zcloud/service/system/impl/Users2ServiceImpl.java b/src/main/java/com/zcloud/service/system/impl/Users2ServiceImpl.java index 7b94ac6..2e5537a 100644 --- a/src/main/java/com/zcloud/service/system/impl/Users2ServiceImpl.java +++ b/src/main/java/com/zcloud/service/system/impl/Users2ServiceImpl.java @@ -1,18 +1,18 @@ package com.zcloud.service.system.impl; -import java.util.List; +import java.util.*; +import com.zcloud.service.bus.ImgFilesService; +import com.zcloud.util.Tools; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import com.zcloud.entity.Page; import com.zcloud.entity.PageData; -import com.zcloud.entity.system.User; -import com.zcloud.mapper.datasource.system.UsersMapper; import com.zcloud.mapper.dsno2.system.Users2Mapper; import com.zcloud.service.system.Users2Service; -import com.zcloud.service.system.UsersService; /** * 说明:用户服务接口实现类 @@ -23,8 +23,11 @@ import com.zcloud.service.system.UsersService; @Transactional //开启事物 public class Users2ServiceImpl implements Users2Service { + private static final Logger log = LoggerFactory.getLogger(Users2ServiceImpl.class); @Autowired private Users2Mapper usersMapper; + @Autowired + private ImgFilesService imgFilesService; /**通过用户名获取用户信息 * @param pd @@ -239,4 +242,105 @@ public class Users2ServiceImpl implements Users2Service { usersMapper.updateUserRole(pd); } + public List listAllForExport(PageData pd)throws Exception{ + return usersMapper.listAllForExport(pd); + } + + /**用户列表(全部) + * @param pd + * @return + * @throws Exception + */ + public List listAllUser(PageData pd)throws Exception{ + return usersMapper.listAllUser(pd); + } + + @Override + public List listExport(PageData pd, String[] regKeys) throws Exception { + List explist = new ArrayList<>(); + List userList = usersMapper.listAllForExport(pd); + + List userCerList = new ArrayList<>(); + PageData userCerPd = new PageData(); + userCerPd.put("TYPE","18"); + userCerList = imgFilesService.listAll(userCerPd); + + Map imgCount = new HashMap<>(); + Integer imgTypeMaxCount18 = 1; + Map> imgMap = new HashMap<>(); + for (int i = 0; i < userCerList.size(); i++) { + if (Tools.isEmpty(userCerList.get(i).get("TYPE"))) { + continue; + } + if (Tools.isEmpty(userCerList.get(i).get("FOREIGN_KEY"))) { + continue; + } + List list = new ArrayList<>(); + String key = userCerList.get(i).getString("FOREIGN_KEY") + ";" + userCerList.get(i).get("TYPE"); + if (imgMap.containsKey(key)) { + list = imgMap.get(key); + } + list.add(userCerList.get(i).getString("FILEPATH")); + imgMap.put(key, list); + String imgType = userCerList.get(i).get("TYPE").toString(); + Integer count = 1; + if (imgCount.containsKey(key)) { + count = imgCount.get(key) + 1; + } + if ("18".equals(imgType)) { + if (imgTypeMaxCount18 < count) { + imgTypeMaxCount18 = count; + } + } + imgCount.put(key, count); + } + for (PageData user : userList) { + int count = 0; + PageData vpd = new PageData(); + String userId = user.getString("USER_ID"); + vpd.put("var" + (1 + count), user.getString("CORP_NAME")); + vpd.put("var" + (2 + count), user.getString("NAME")); // 姓名 + vpd.put("var" + (3 + count), user.getString("USERNAME")); //登录账号 + vpd.put("var" + (4 + count), user.getString("DEPARTMENT_NAME")); //部门 + vpd.put("var" + (5 + count), user.getString("POST_NAME")); //岗位 + vpd.put("var" + (6 + count), user.getString("USERNAME")); //手机号 + vpd.put("var" + (7 + count), user.getString("SEX_NAME")); //性别 + vpd.put("var" + (8 + count), user.getString("DUTIES_NAME")); // 职务 + vpd.put("var" + (9 + count), user.getString("EMAIL")); // 邮箱 + vpd.put("var" + (10 + count), Tools.isEmpty(user.get("STATUS")) ? "" : ("1".equals(user.getString("STATUS")) ? "禁用" : "启用")); // 状态 + vpd.put("var" + (11 + count), Tools.isEmpty(user.get("ISSTUDENT")) ? "" : ("true".equals(user.getString("ISSTUDENT")) ? "是" : "否")); // 是否在线学习人员 + vpd.put("var" + (12 + count), user.getString("USER_ID_CARD")); // 身份证号 + vpd.put("var" + (13 + count), user.getString("NATION_NAME")); // 民族 + vpd.put("var" + (14 + count), user.getString("POLITICAL_OUTLOOK_NAME")); // 政治面貌 + vpd.put("var" + (15 + count), user.getString("DATE_OF_BIRTH")); // 出生年月 + vpd.put("var" + (16 + count), user.getString("DEGREE_OF_EDUCATION_NAME")); // 文化程度 + vpd.put("var" + (17 + count), user.getString("PERSONNEL_TYPE_NAME")); // 人员类型 + vpd.put("var" + (18 + count), user.getString("TITLE_NAME")); // 职称 + vpd.put("var" + (19 + count), user.getString("TYPE_OF_WORK_NAME")); // 工种 + vpd.put("var" + (20 + count), user.getString("ENTRY_DATE")); // 入职日期 + vpd.put("var" + (21 + count), user.getString("WORKING_DATE")); // 参加工作日期 + vpd.put("var" + (22 + count), user.getString("INCUMBENCY_NAME")); // 在职情况 + if (!Tools.isEmpty(user.get("USERAVATARPREFIX")) && !Tools.isEmpty(user.get("USERAVATARURL_CONVERT"))) { + vpd.put("base64" + (23 + count), user.getString("USERAVATARPREFIX")); + vpd.put("base64" + (23 + count) + "_url", user.getString("USERAVATARURL_CONVERT")); + } else { + vpd.put("base64" + (23 + count), ""); + vpd.put("base64" + (23 + count) + "_url", ""); + } + List userCerImg = imgMap.get(userId + ";18"); + for (int i = 0; i < imgTypeMaxCount18; i++) { + if (null != userCerImg) { + if (i < userCerImg.size()) { + vpd.put("img" + (24 + i), userCerImg.get(i)); + } else { + vpd.put("img" + (24 + i), ""); + } + } else { + vpd.put("img" + (24 + i), ""); + } + } + explist.add(vpd); + } + return explist; + } } diff --git a/src/main/java/com/zcloud/service/system/impl/UsersServiceImpl.java b/src/main/java/com/zcloud/service/system/impl/UsersServiceImpl.java index a250bdd..80cb22a 100644 --- a/src/main/java/com/zcloud/service/system/impl/UsersServiceImpl.java +++ b/src/main/java/com/zcloud/service/system/impl/UsersServiceImpl.java @@ -1,7 +1,8 @@ package com.zcloud.service.system.impl; -import java.util.List; +import java.util.*; +import com.zcloud.util.Tools; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -292,4 +293,84 @@ public class UsersServiceImpl implements UsersService { public void editCorpUser (PageData pd) throws Exception{ usersMapper.editCorpUser(pd); } + + public List> getDaochuReglatory (PageData page)throws Exception{ + List> list = new ArrayList<>(); + Map map = new HashMap<>(); + String vals[] = {"姓名","登录账号","部门","职务级别","手机号","性别","职务","邮箱","状态"}; + + String keys[] = {"NAME","USERNAME","DEPARTMENT_NAME","jobLevenName","PHONE","SEX","JOB","EMAIL","STATUS"}; + for (int i =0 ;i(); +// map.put(keys[i],vals[i]); + map.put("name",vals[i]); + map.put("key",keys[i]); + list.add(map); + } + return list; + } + + public List> getDaochuPrevention (PageData page)throws Exception{ + List> list = new ArrayList<>(); + Map map = new HashMap<>(); + String vals[] = { + "姓名","登录账号","部门","岗位","手机号","性别","职务","邮箱","状态" + ,"是否在线学习人员","身份证号","民族" + ,"政治面貌","出生年月","文化程度","人员类型","职称" + ,"工种","入职日期","参加工作日期","在职情况" + ,"学习人员照片","证书照片" + }; + + String keys[] = { + "NAME","USERNAME","DEPARTMENT_NAME","POST_NAME","USERNAME","SEX_NAME","DUTIES_NAME","EMAIL","STATUS" + ,"ISSTUDENT","USER_ID_CARD","NATION_NAME" + ,"POLITICAL_OUTLOOK_NAME","DATE_OF_BIRTH","DEGREE_OF_EDUCATION_NAME","PERSONNEL_TYPE_NAME","TITLE_NAME" + ,"TYPE_OF_WORK_NAME","ENTRY_DATE","WORKING_DATE","INCUMBENCY_NAME","USERAVATAR","userCerImg" + }; + for (int i =0 ;i(); +// map.put(keys[i],vals[i]); + map.put("name",vals[i]); + map.put("key",keys[i]); + list.add(map); + } + return list; + } + + @Override + public List listExport(PageData pd, String[] regKeys) throws Exception { + List varOList = listAll(pd); + + List varList = new ArrayList(); + for(int i=0;i model, + Workbook workbook, HttpServletRequest request, + HttpServletResponse response) throws Exception { + // TODO Auto-generated method stub + String proPath = PathUtil.getProjectpath(); + String beji = Const.HTTPFILEURL; + //beji =beji.replaceAll("\\\\", "/"); + + Date date = new Date(); + XSSFSheet sheet; + XSSFWorkbook book = (XSSFWorkbook) workbook; + sheet = book.createSheet("sheet1"); + + List titles = (List) model.get("titles"); + int len = titles.size(); + XSSFCellStyle headerStyle = book.createCellStyle(); //标题样式 + headerStyle.setAlignment(HorizontalAlignment.CENTER); + headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); + XSSFFont headerFont = book.createFont(); //标题字体 + headerFont.setBold(true); + headerFont.setFontHeightInPoints((short)11); + headerStyle.setFont(headerFont); + short height=25*20; + XSSFRow row = sheet.createRow(0); + if(len>250) { + len = 250; + } + for(int i=0; i250) { + row.createCell(i).setCellValue(title.substring(0, 250)); + }else { + row.createCell(i).setCellValue(title); + } + } + sheet.getRow(0).setHeight(height); + + XSSFCellStyle contentStyle = book.createCellStyle(); //内容样式 + XSSFDrawing patriarch = sheet.createDrawingPatriarch(); + + contentStyle.setAlignment(HorizontalAlignment.CENTER); + List varList = (List) model.get("varList"); + + + int varCount = varList.size(); + for(int i=0; i drawing = sheet.createDrawingPatriarch(); + XSSFClientAnchor anchor1 = new XSSFClientAnchor(0, 0, 0, 0,(short) (j), (i+1), (short) (j+1), (i+2)); + // 6. 添加图片 + drawing.createPicture(anchor1, pictureIdx); + + } + if(vpd.containsKey(imgKey)) { + String varstr = vpd.getString(imgKey) != null ? vpd.getString("img"+(j+1)) : ""; + if(Tools.isEmpty(varstr)) { + continue; + } + URL url = new URL(beji+varstr); + BufferedImage bufferImg = null; + try { + bufferImg = Thumbnails.of(url).scale(0.3).asBufferedImage(); + } catch (Exception e) { + e.printStackTrace(); + } + ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); + if(bufferImg != null) { + ImageIO.write(bufferImg, "jpg", byteArrayOut); + XSSFClientAnchor anchor1 = new XSSFClientAnchor(0, 0, 0, 0,(short) (j), (i+1), (short) (j+1), (i+2)); + patriarch.createPicture(anchor1, book.addPicture(byteArrayOut + .toByteArray(), XSSFWorkbook.PICTURE_TYPE_JPEG)); + } + + } + + } + + } + + + // 用户 + String filename = DateUtil.date2Str(date, "yyyyMMddHHmmss"); + String filePath = PathUtil.getProjectpath() + Const.FILEPATHFILE; //文件上传路径 + + FileOutputStream fileOutputStream = null; + System.out.println(filePath); + try { + fileOutputStream = new FileOutputStream(filePath + filename + ".xlsx"); + book.write(fileOutputStream); + fileOutputStream.flush(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + if(fileOutputStream != null){ + try { + fileOutputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + File excel = new File(filePath + filename + ".xlsx"); + FileInputStream in = new FileInputStream(excel); + + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ZipOutputStream zos = new ZipOutputStream(bos); + try { + + zos.putNextEntry(new ZipEntry(filename+".xlsx")); + byte[] buf = new byte[1024]; + int length; + while ((length = in.read(buf)) > 0) { + zos.write(buf, 0, length); + } + zos.closeEntry(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + + in.close(); + zos.close(); + } + + + + excel.delete(); + response.setHeader("Content-Disposition", "attachment; filename=\"" + filename+".zip" + "\""); + response.setContentType("application/octet-stream;charset=UTF-8"); + OutputStream os = response.getOutputStream(); + os.write(bos.toByteArray()); + os.close(); + } + + + +} diff --git a/src/main/java/com/zcloud/util/FileDownload.java b/src/main/java/com/zcloud/util/FileDownload.java index 7615698..d5e82dd 100644 --- a/src/main/java/com/zcloud/util/FileDownload.java +++ b/src/main/java/com/zcloud/util/FileDownload.java @@ -1,8 +1,16 @@ package com.zcloud.util; import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; +import java.net.URL; +import java.net.URLConnection; import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; import javax.servlet.http.HttpServletResponse; @@ -59,4 +67,30 @@ public class FileDownload { response.flushBuffer(); } + public static String downloadFile(String fileURL, String fileName, String saveDir) throws IOException { + URL url = new URL(fileURL); + if (isURLExists(fileURL)) { + Path targetPath = Paths.get(saveDir, fileName); + System.out.println("下载附件【 " + fileName + " 】 到 【 " + saveDir + " 】"); + try (InputStream in = url.openStream()) { + Files.copy(in, targetPath, StandardCopyOption.REPLACE_EXISTING); + } + System.out.println("附件【 " + fileName + " 】 下载完成!"); + return "ok"; + } else { + System.out.println("附件【 " + fileName + " 】 已不存在!(路径:" + fileURL + ")"); + return "fail"; + } + } + public static boolean isURLExists(String urlString) { + try { + URL url = new URL(urlString); + URLConnection connection = url.openConnection(); + connection.connect(); + return true; + } catch (IOException e) { + return false; + } + } + } diff --git a/src/main/java/com/zcloud/util/FileUtil.java b/src/main/java/com/zcloud/util/FileUtil.java index fd78a27..7239339 100644 --- a/src/main/java/com/zcloud/util/FileUtil.java +++ b/src/main/java/com/zcloud/util/FileUtil.java @@ -13,11 +13,13 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.RandomAccessFile; +import java.net.HttpURLConnection; import java.net.URL; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.nio.channels.FileChannel.MapMode; +import java.util.Base64; /** * 说明:文件处理 @@ -358,4 +360,44 @@ public class FileUtil { return fileContent.toString(); } + /** + * 网路路径或本地路径转base64 + * + * @throws Exception + */ + public static String encodeBase64File(String url) throws Exception { + ByteArrayOutputStream outPut = new ByteArrayOutputStream(); //网络路径 + byte[] data = new byte[1024]; + try { + // 创建URL + URL path = new URL(url); + // 创建链接 + HttpURLConnection conn = (HttpURLConnection) path.openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(10 * 1000); + + if (conn.getResponseCode() != 200) { + return "fail";//连接失败/链接失效/图片不存在 + } + InputStream inStream = conn.getInputStream(); + int len = -1; + while ((len = inStream.read(data)) != -1) { + outPut.write(data, 0, len); + } + inStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + // 对字节数组Base64编码 + byte[] encode = Base64.getEncoder().encode(outPut.toByteArray()); + String res = new String(encode); + return res; +// File file = new File(url); //本地路径 +// FileInputStream inputFile = new FileInputStream(file); +// byte[] buffer = new byte[(int) file.length()]; +// inputFile.read(buffer); +// inputFile.close(); +// return new BASE64Encoder().encode(buffer); + } + } diff --git a/src/main/java/com/zcloud/util/FileZip.java b/src/main/java/com/zcloud/util/FileZip.java index fcd2d8c..de77165 100644 --- a/src/main/java/com/zcloud/util/FileZip.java +++ b/src/main/java/com/zcloud/util/FileZip.java @@ -1,8 +1,7 @@ package com.zcloud.util; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; +import java.io.*; +import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -48,6 +47,47 @@ public class FileZip { in.close(); } } + + + /** + * @param fileName 生成压缩文件的全路径 + * @param files 文件集 + **/ + public static void zipList(String fileName, List files) { + ZipOutputStream outputStream1 = null; + FileOutputStream dest = null; + try { + byte[] data = new byte[1024]; + dest = new FileOutputStream(fileName); + outputStream1 = new ZipOutputStream(new BufferedOutputStream(dest)); + for (int i = 0; i < files.size(); i++) { + int count; + FileInputStream fis = new FileInputStream(files.get(i)); + BufferedInputStream bfs = new BufferedInputStream(fis); + ZipEntry entry = new ZipEntry(files.get(i).getName()); + outputStream1.putNextEntry(entry); + while ((count = bfs.read(data, 0, 1024)) != -1) { + outputStream1.write(data, 0, count); + } + bfs.close(); + fis.close(); + } + } catch (Exception e) { + System.out.println("压缩文件失败1"); + e.printStackTrace(); + } finally { + try { + outputStream1.close(); + dest.close(); + } catch (IOException e) { + System.out.println("压缩文件失败2"); + e.printStackTrace(); + } + } + for (File file : files) { + file.delete(); + } + } public static void main(String [] temp){ try { diff --git a/src/main/java/com/zcloud/util/PathUtil.java b/src/main/java/com/zcloud/util/PathUtil.java index e46f21a..6d1db1d 100644 --- a/src/main/java/com/zcloud/util/PathUtil.java +++ b/src/main/java/com/zcloud/util/PathUtil.java @@ -20,7 +20,7 @@ public class PathUtil { public static String getProjectpath(){ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String path = request.getServletContext().getRealPath("/").replaceAll("%20", " ").replaceAll("file:/", "").trim(); - return "/" + path; + return path; } /**获取Classpath diff --git a/src/main/java/com/zcloud/util/Smb.java b/src/main/java/com/zcloud/util/Smb.java index aea89c9..807ff7e 100644 --- a/src/main/java/com/zcloud/util/Smb.java +++ b/src/main/java/com/zcloud/util/Smb.java @@ -14,19 +14,19 @@ import org.springframework.web.multipart.MultipartFile; public class Smb { // 正式 - private static String host="192.168.10.69"; - private static Integer port=22; - private static String user="root"; - private static String password="wljt@123456"; - private static String basePath="/mnt/wlaq/file/"; - - // 测试 -// private static String host="36.133.193.8"; +// private static String host="192.168.10.69"; // private static Integer port=22; // private static String user="root"; -// private static String password="Zykj@zcloud88888"; +// private static String password="wljt@123456"; // private static String basePath="/mnt/wlaq/file/"; + // 测试 + private static String host="192.168.20.240"; + private static Integer port=22; + private static String user="root"; + private static String password="Zcloud@zcloud240"; + private static String basePath="/home/proj/wlaq/apache-tomcat-8.5.100-file/webapps/wlaq/"; + public static void sshSftp(MultipartFile file, String fileName,String path) throws Exception { Session session = null; Channel channel = null; diff --git a/src/main/java/com/zcloud/util/WordToPdfUtil.java b/src/main/java/com/zcloud/util/WordToPdfUtil.java new file mode 100644 index 0000000..646c95c --- /dev/null +++ b/src/main/java/com/zcloud/util/WordToPdfUtil.java @@ -0,0 +1,141 @@ +package com.zcloud.util; + +import com.aspose.words.Document; +import com.aspose.words.ImportFormatMode; +import com.aspose.words.License; +import com.aspose.words.SaveFormat; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +/** + * word文档转pdf + * + * @author JHY + * @date 2023/03/08 + */ +public class WordToPdfUtil { + public static void main(String[] args) { + // doc 或 docx文档 都可以 + String filePath = "C:\\Users\\Administrator\\Desktop\\档案详情.doc"; + WordToPdfUtil.docToPdf(filePath, filePath + ".pdf"); + } + + + public static boolean mergePdf(List pathList, String pdfPath) throws Exception { + + // 验证License 若不验证则转化出的pdf文档会有水印产生 + if (!getLicense()) { + return false; + } + if (pathList == null || pathList.size() == 0) { + return false; + } + FileOutputStream os = null; + try { + long old = System.currentTimeMillis(); + // 新建一个空白pdf文档 + File file = new File(pdfPath); + os = new FileOutputStream(file); + Document word = new Document(pathList.get(0)); + for (int i = 1; i < pathList.size(); i++) { + Document wordi = new Document(pathList.get(i)); + word.appendDocument(wordi, ImportFormatMode.KEEP_DIFFERENT_STYLES); + } + // 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,EPUB, XPS, SWF 相互转换 + word.save(os, SaveFormat.PDF); + long now = System.currentTimeMillis(); + // 转化用时 + System.out.println("pdf合并成功,共耗时:" + ((now - old) / 1000.0) + "秒"); + } catch (Exception e) { + e.printStackTrace(); + System.err.println("pdf合并失败:" + e.getMessage()); + return false; + } finally { + if (os != null) { + try { + os.flush(); + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return true; + } + + /** + * 获取aspose证书 + */ + private static boolean getLicense() { + boolean result = false; + InputStream is = null; + try { + Resource resource = new ClassPathResource("license.xml"); + is = resource.getInputStream(); + License aposeLic = new License(); + aposeLic.setLicense(is); + result = true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return result; + } + + /** + * word转pdf静态方法 + * + * @param wordPath word文件全路径含文件名 + * @param pdfPath pdf输出全路径含文件名 + * @return boolean 成功/失败 + */ + public static boolean docToPdf(String wordPath, String pdfPath) { + // 验证License 若不验证则转化出的pdf文档会有水印产生 + if (!getLicense()) { + return false; + } + FileOutputStream os = null; + try { + long old = System.currentTimeMillis(); + // 新建一个空白pdf文档 + File file = new File(pdfPath); + os = new FileOutputStream(file); + // inPath是将要被转化的word文档 + Document doc = new Document(wordPath); + // 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,EPUB, XPS, SWF 相互转换 + doc.save(os, SaveFormat.PDF); + long now = System.currentTimeMillis(); + // 转化用时 + System.out.println("word转换pdf成功,共耗时:" + ((now - old) / 1000.0) + "秒"); + } catch (Exception e) { + System.out.println(wordPath); + System.out.println(pdfPath); + System.err.println("word转pdf失败:" + e.getMessage()); + return false; + } finally { + if (os != null) { + try { + os.flush(); + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return true; + } + +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 98fafc7..1023664 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,5 @@ spring.application.name=qa-regulatory-wlaq -server.port=7061 +server.port=8461 #开发 spring.profiles.active=dev diff --git a/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectFilesMapper.xml b/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectFilesMapper.xml index 83222f5..9d3558c 100644 --- a/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectFilesMapper.xml +++ b/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectFilesMapper.xml @@ -141,7 +141,9 @@ f WHERE f.ISDELETE = '0' - AND f.FOREIGN_KEY = #{FOREIGN_KEY} + + AND f.FOREIGN_KEY = #{FOREIGN_KEY} + AND f.TYPE = #{TYPE} diff --git a/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectHiddenMapper.xml b/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectHiddenMapper.xml index 4d367f0..7d028f1 100644 --- a/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectHiddenMapper.xml +++ b/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectHiddenMapper.xml @@ -264,4 +264,35 @@ + + + diff --git a/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectMapper.xml b/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectMapper.xml index 72a5143..ab15815 100644 --- a/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectMapper.xml +++ b/src/main/resources/mybatis/datasource/superviseInspect/SuperviseInspectMapper.xml @@ -150,4 +150,26 @@ #{item} + + + diff --git a/src/main/resources/mybatis/datasource/system/UsersMapper.xml b/src/main/resources/mybatis/datasource/system/UsersMapper.xml index 6f88bd7..1d524e8 100644 --- a/src/main/resources/mybatis/datasource/system/UsersMapper.xml +++ b/src/main/resources/mybatis/datasource/system/UsersMapper.xml @@ -533,10 +533,37 @@ + select + + from + f + where f.ISDELETE = '0' + + and f.CORPINFO_ID = #{CORPINFO_ID} + + + and f.YEAR = #{YEAR} + + order by f.YEAR DESC,f.CREATTIME desc + + + diff --git a/src/main/resources/mybatis/dsno2/archives/ArchivesEduManagerMapper.xml b/src/main/resources/mybatis/dsno2/archives/ArchivesEduManagerMapper.xml new file mode 100644 index 0000000..9eb8259 --- /dev/null +++ b/src/main/resources/mybatis/dsno2/archives/ArchivesEduManagerMapper.xml @@ -0,0 +1,97 @@ + + + + + + + BUS_ARCHIVESEDUMANAGER + + + + + SYS_DICTIONARIES + + + + + f.TRAINING_DATE, + f.TRAINING_OBJECT, + f.TRAINING_TYPE, + f.TRAINING_CONTENT, + f.PERSON_NUMBER, + f.CLASS_HOURS, + f.TRAINING_PLACE, + f.TRAINING_TEACHER, + f.ASSESSMENT_METHOD, + f.ASSESSMENT, + f.CORPINFO_ID, + f.YEAR, + f.ISDELETE, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ARCHIVESEDUMANAGER_ID + + + + + TRAINING_DATE, + TRAINING_OBJECT, + TRAINING_TYPE, + TRAINING_CONTENT, + PERSON_NUMBER, + CLASS_HOURS, + TRAINING_PLACE, + TRAINING_TEACHER, + ASSESSMENT_METHOD, + ASSESSMENT, + CORPINFO_ID, + YEAR, + ISDELETE, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ARCHIVESEDUMANAGER_ID + + + + + #{TRAINING_DATE}, + #{TRAINING_OBJECT}, + #{TRAINING_TYPE}, + #{TRAINING_CONTENT}, + #{PERSON_NUMBER}, + #{CLASS_HOURS}, + #{TRAINING_PLACE}, + #{TRAINING_TEACHER}, + #{ASSESSMENT_METHOD}, + #{ASSESSMENT}, + #{CORPINFO_ID}, + #{YEAR}, + #{ISDELETE}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ARCHIVESEDUMANAGER_ID} + + + + + + diff --git a/src/main/resources/mybatis/dsno2/archives/ArchivesEduPlanMapper.xml b/src/main/resources/mybatis/dsno2/archives/ArchivesEduPlanMapper.xml new file mode 100644 index 0000000..73276b5 --- /dev/null +++ b/src/main/resources/mybatis/dsno2/archives/ArchivesEduPlanMapper.xml @@ -0,0 +1,100 @@ + + + + + + + BUS_ARCHIVESEDUPLAN + + + + + SYS_DICTIONARIES + + + + + f.START_DATE, + f.END_DATE, + f.TRAINING_OBJECT, + f.TRAINING_MATERIALS, + f.TRAINING_METHODS, + f.ASSESSMENT_METHOD, + f.CLASS_HOURS, + f.PLACE, + f.TRAINING_TEACHERS, + f.FUND_GUARANTEE, + f.QUALITY_ASSESSMENT, + f.CORPINFO_ID, + f.YEAR, + f.ISDELETE, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ARCHIVESEDUPLAN_ID + + + + + START_DATE, + END_DATE, + TRAINING_OBJECT, + TRAINING_MATERIALS, + TRAINING_METHODS, + ASSESSMENT_METHOD, + CLASS_HOURS, + PLACE, + TRAINING_TEACHERS, + FUND_GUARANTEE, + QUALITY_ASSESSMENT, + CORPINFO_ID, + YEAR, + ISDELETE, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ARCHIVESEDUPLAN_ID + + + + + #{START_DATE}, + #{END_DATE}, + #{TRAINING_OBJECT}, + #{ TRAINING_MATERIALS}, + #{TRAINING_METHODS}, + #{ASSESSMENT_METHOD}, + #{CLASS_HOURS}, + #{PLACE}, + #{TRAINING_TEACHERS}, + #{FUND_GUARANTEE}, + #{QUALITY_ASSESSMENT}, + #{CORPINFO_ID}, + #{YEAR}, + #{ISDELETE}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ARCHIVESEDUPLAN_ID} + + + + + + diff --git a/src/main/resources/mybatis/dsno2/archives/ArchivesFilesMapper.xml b/src/main/resources/mybatis/dsno2/archives/ArchivesFilesMapper.xml new file mode 100644 index 0000000..522b82e --- /dev/null +++ b/src/main/resources/mybatis/dsno2/archives/ArchivesFilesMapper.xml @@ -0,0 +1,145 @@ + + + + + + + BUS_ARCHIVESFILES + + + + + SYS_DICTIONARIES + + + + + f.CORPINFO_ID, + f.YEAR, + f.STUDYTASK_ID, + f.FILE_PATH, + f.FILE_NAME, + f.TYPE, + f.ARCHIVESFILES_ID + + + + + CORPINFO_ID, + YEAR, + STUDYTASK_ID, + FILE_PATH, + FILE_NAME, + TYPE, + ARCHIVESFILES_ID + + + + + #{CORPINFO_ID}, + #{YEAR}, + #{STUDYTASK_ID}, + #{FILE_PATH}, + #{FILE_NAME}, + #{TYPE}, + #{ARCHIVESFILES_ID} + + + + + insert into + + ( + + ) values ( + + ) + + + + + delete from + + where + ARCHIVESFILES_ID = #{ARCHIVESFILES_ID} + + + + + update + + set + CORPINFO_ID = #{CORPINFO_ID}, + YEAR = #{YEAR}, + FILE_PATH = #{FILE_PATH}, + FILE_NAME = #{FILE_NAME}, + TYPE = #{TYPE}, + ARCHIVESFILES_ID = ARCHIVESFILES_ID + where + ARCHIVESFILES_ID = #{ARCHIVESFILES_ID} + + + + + + + + + + + + + + update + + set + ISDELETE = '1' + where + ARCHIVESFILES_ID in + + #{item} + + + + diff --git a/src/main/resources/mybatis/dsno2/archives/ArchivesPostManMapper.xml b/src/main/resources/mybatis/dsno2/archives/ArchivesPostManMapper.xml new file mode 100644 index 0000000..67a3648 --- /dev/null +++ b/src/main/resources/mybatis/dsno2/archives/ArchivesPostManMapper.xml @@ -0,0 +1,85 @@ + + + + + + + BUS_ARCHIVES_POSTMAN + + + + + SYS_DICTIONARIES + + + + + f.NAME, + f.POST, + f.PHONE, + f.CARD_ID, + f.EFFECTIVE_DATE, + f.RETRAINING, + f.CORPINFO_ID, + f.YEAR, + f.ISDELETE, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ARCHIVES_POSTMAN_ID + + + + + NAME, + POST, + PHONE, + CARD_ID, + EFFECTIVE_DATE, + RETRAINING, + CORPINFO_ID, + YEAR, + ISDELETE, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ARCHIVES_POSTMAN_ID + + + + + #{NAME}, + #{POST}, + #{PHONE}, + #{CARD_ID}, + #{EFFECTIVE_DATE}, + #{RETRAINING}, + #{CORPINFO_ID}, + #{YEAR}, + #{ISDELETE}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ARCHIVES_POSTMAN_ID} + + + + + + diff --git a/src/main/resources/mybatis/dsno2/archives/ArchivesTeacherMapper.xml b/src/main/resources/mybatis/dsno2/archives/ArchivesTeacherMapper.xml new file mode 100644 index 0000000..176960a --- /dev/null +++ b/src/main/resources/mybatis/dsno2/archives/ArchivesTeacherMapper.xml @@ -0,0 +1,94 @@ + + + + + + + BUS_ARCHIVESTEACHER + + + + + SYS_DICTIONARIES + + + + + f.NAME, + f.PHONE, + f.WORK_YEAR, + f.OCCUPATION, + f.CARD_ID, + f.ASSESSMENT_DEPT, + f.ASSESSMENT_DATE, + f.ASSESSMENT_RESULT, + f.DESCR, + f.CORPINFO_ID, + f.YEAR, + f.ISDELETE, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ARCHIVESTEACHER_ID + + + + + NAME, + PHONE, + WORK_YEAR, + OCCUPATION, + CARD_ID, + ASSESSMENT_DEPT, + ASSESSMENT_DATE, + ASSESSMENT_RESULT, + DESCR, + CORPINFO_ID, + YEAR, + ISDELETE, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ARCHIVESTEACHER_ID + + + + + #{NAME}, + #{PHONE}, + #{WORK_YEAR}, + #{OCCUPATION}, + #{CARD_ID}, + #{ASSESSMENT_DEPT}, + #{ASSESSMENT_DATE}, + #{ASSESSMENT_RESULT}, + #{DESCR}, + #{CORPINFO_ID}, + #{YEAR}, + #{ISDELETE}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ARCHIVESTEACHER_ID} + + + + + + diff --git a/src/main/resources/mybatis/dsno2/bus/CheckRecordMapper.xml b/src/main/resources/mybatis/dsno2/bus/CheckRecordMapper.xml index c007118..920683f 100644 --- a/src/main/resources/mybatis/dsno2/bus/CheckRecordMapper.xml +++ b/src/main/resources/mybatis/dsno2/bus/CheckRecordMapper.xml @@ -752,4 +752,37 @@ ORDER BY f.CHECK_TIME DESC + + + + + diff --git a/src/main/resources/mybatis/dsno2/bus/HiddenCheckMapper.xml b/src/main/resources/mybatis/dsno2/bus/HiddenCheckMapper.xml index 0a3d0b9..fca8b65 100644 --- a/src/main/resources/mybatis/dsno2/bus/HiddenCheckMapper.xml +++ b/src/main/resources/mybatis/dsno2/bus/HiddenCheckMapper.xml @@ -149,4 +149,106 @@ + + diff --git a/src/main/resources/mybatis/dsno2/bus/HiddenMapper.xml b/src/main/resources/mybatis/dsno2/bus/HiddenMapper.xml index 3ed5306..1914e29 100644 --- a/src/main/resources/mybatis/dsno2/bus/HiddenMapper.xml +++ b/src/main/resources/mybatis/dsno2/bus/HiddenMapper.xml @@ -651,7 +651,7 @@ and f.HIDDENLEVEL = #{HIDDENLEVEL} - order by f.CREATTIME desc + order by c.CREATTIME ASC, f.CREATTIME desc diff --git a/src/main/resources/mybatis/dsno2/bus/HiddenSchemeMapper.xml b/src/main/resources/mybatis/dsno2/bus/HiddenSchemeMapper.xml index a8c4d18..f9d93e8 100644 --- a/src/main/resources/mybatis/dsno2/bus/HiddenSchemeMapper.xml +++ b/src/main/resources/mybatis/dsno2/bus/HiddenSchemeMapper.xml @@ -190,4 +190,105 @@ + + diff --git a/src/main/resources/mybatis/dsno2/bus/ListManagerMapper.xml b/src/main/resources/mybatis/dsno2/bus/ListManagerMapper.xml new file mode 100644 index 0000000..e61a0d3 --- /dev/null +++ b/src/main/resources/mybatis/dsno2/bus/ListManagerMapper.xml @@ -0,0 +1,112 @@ + + + + + + + BUS_LISTMANAGER + + + + + SYS_DICTIONARIES + + + + + f.NAME, + f.PERIOD, + f.TYPE, + f.CORPINFO_ID, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ISDELETE, + f.LISTMANAGER_ID, + f.DEPARTMENT_ID, + f.POST_ID, + f.USER_ID, + f.ACOUNT, + f.BCOUNT, + f.CCOUNT, + f.DCOUNT, + f.START_DATE, + f.END_DATE, + f.SCREENTYPE + + + + + NAME, + PERIOD, + TYPE, + CORPINFO_ID, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ISDELETE, + LISTMANAGER_ID, + DEPARTMENT_ID, + POST_ID, + USER_ID, + ACOUNT, + BCOUNT, + CCOUNT, + DCOUNT, + START_DATE, + END_DATE, + SCREENTYPE + + + + + #{NAME}, + #{PERIOD}, + #{TYPE}, + #{CORPINFO_ID}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ISDELETE}, + #{LISTMANAGER_ID}, + #{DEPARTMENT_ID}, + #{POST_ID}, + #{USER_ID}, + #{ACOUNT}, + #{BCOUNT}, + #{CCOUNT}, + #{DCOUNT}, + #{START_DATE}, + #{END_DATE}, + #{SCREENTYPE} + + + + + diff --git a/src/main/resources/mybatis/dsno2/bus/TrainingScheduleMapper.xml b/src/main/resources/mybatis/dsno2/bus/TrainingScheduleMapper.xml new file mode 100644 index 0000000..f2d4556 --- /dev/null +++ b/src/main/resources/mybatis/dsno2/bus/TrainingScheduleMapper.xml @@ -0,0 +1,100 @@ + + + + + + + BUS_TRAININGSCHEDULE + + + + + SYS_DICTIONARIES + + + + + f.ORGANIZATION_DEPARTMENT, + f.TRAINING_DATE, + f.TRAINING_TIME, + f.TRAINING_CONTENT, + f.TRAINING_METHODS, + f.TRAINING_OBJECT, + f.ASSESSMENT_METHOD, + f.PLACE, + f.TRAINING_TEACHER, + f.FUND_GUARANTEE, + f.QUALITY_ASSESSMENT, + f.CORPINFO_ID, + f.STUDYTASK_ID, + f.ISDELETE, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.TRAININGSCHEDULE_ID + + + + + ORGANIZATION_DEPARTMENT, + TRAINING_DATE, + TRAINING_TIME, + TRAINING_CONTENT, + TRAINING_METHODS, + TRAINING_OBJECT, + ASSESSMENT_METHOD, + PLACE, + TRAINING_TEACHER, + FUND_GUARANTEE, + QUALITY_ASSESSMENT, + CORPINFO_ID, + STUDYTASK_ID, + ISDELETE, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + TRAININGSCHEDULE_ID + + + + + #{ORGANIZATION_DEPARTMENT}, + #{TRAINING_DATE}, + #{TRAINING_TIME}, + #{TRAINING_CONTENT}, + #{TRAINING_METHODS}, + #{TRAINING_OBJECT}, + #{ASSESSMENT_METHOD}, + #{PLACE}, + #{TRAINING_TEACHER}, + #{FUND_GUARANTEE}, + #{QUALITY_ASSESSMENT}, + #{CORPINFO_ID}, + #{STUDYTASK_ID}, + #{ISDELETE}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{TRAININGSCHEDULE_ID} + + + + + + diff --git a/src/main/resources/mybatis/dsno2/onlinexxks/StageExamMapper.xml b/src/main/resources/mybatis/dsno2/onlinexxks/StageExamMapper.xml new file mode 100644 index 0000000..4d465cc --- /dev/null +++ b/src/main/resources/mybatis/dsno2/onlinexxks/StageExamMapper.xml @@ -0,0 +1,98 @@ + + + + + + + BUS_STAGEEXAM + + + + + SYS_DICTIONARIES + + + + + f.CURRICULUM_ID, + f.STAGEEXAMPAPER_ID, + f.USER_ID, + f.EXAMTIMEBEGIN, + f.EXAMTIMEEND, + f.EXAMQUESTIONNUM, + f.EXAMQUESTIONRIGHT, + f.EXAMQUESTIONWRONG, + f.EXAMSCORE, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ISDELETE, + f.CORPINFO_ID, + f.STUDYTASK_ID, + f.STAGEEXAM_ID + + + + + CURRICULUM_ID, + STAGEEXAMPAPER_ID, + USER_ID, + EXAMTIMEBEGIN, + EXAMTIMEEND, + EXAMQUESTIONNUM, + EXAMQUESTIONRIGHT, + EXAMQUESTIONWRONG, + EXAMSCORE, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ISDELETE, + CORPINFO_ID, + STUDYTASK_ID, + STAGEEXAM_ID + + + + + #{CURRICULUM_ID}, + #{STAGEEXAMPAPER_ID}, + #{USER_ID}, + #{EXAMTIMEBEGIN}, + #{EXAMTIMEEND}, + #{EXAMQUESTIONNUM}, + #{EXAMQUESTIONRIGHT}, + #{EXAMQUESTIONWRONG}, + #{EXAMSCORE}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ISDELETE}, + #{CORPINFO_ID}, + #{STUDYTASK_ID}, + #{STAGEEXAM_ID} + + + + + + diff --git a/src/main/resources/mybatis/dsno2/onlinexxks/StageExamPaperQuestionMapper.xml b/src/main/resources/mybatis/dsno2/onlinexxks/StageExamPaperQuestionMapper.xml new file mode 100644 index 0000000..c259df2 --- /dev/null +++ b/src/main/resources/mybatis/dsno2/onlinexxks/StageExamPaperQuestionMapper.xml @@ -0,0 +1,90 @@ + + + + + + + BUS_STAGEEXAMPAPERQUESTION + + + + + SYS_DICTIONARIES + + + + + f.STAGEEXAMPAPER_ID, + f.CURRICULUM_ID, + f.COURSEWARE_ID, + f.COURSEWARETYPE, + f.QUESTION_ID, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ISDELETE, + f.CORPINFO_ID, + f.QUESTIONSCORE, + f.STAGEEXAMPAPERQUESTION_ID + + + + + STAGEEXAMPAPER_ID, + CURRICULUM_ID, + COURSEWARE_ID, + COURSEWARETYPE, + QUESTION_ID, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ISDELETE, + CORPINFO_ID, + QUESTIONSCORE, + STAGEEXAMPAPERQUESTION_ID + + + + + #{STAGEEXAMPAPER_ID}, + #{CURRICULUM_ID}, + #{COURSEWARE_ID}, + #{COURSEWARETYPE}, + #{QUESTION_ID}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ISDELETE}, + #{CORPINFO_ID}, + #{QUESTIONSCORE}, + #{STAGEEXAMPAPERQUESTION_ID} + + + + + + diff --git a/src/main/resources/mybatis/dsno2/onlinexxks/StageExamRecordMapper.xml b/src/main/resources/mybatis/dsno2/onlinexxks/StageExamRecordMapper.xml new file mode 100644 index 0000000..0582f03 --- /dev/null +++ b/src/main/resources/mybatis/dsno2/onlinexxks/StageExamRecordMapper.xml @@ -0,0 +1,104 @@ + + + + + + + BUS_STAGEEXAMRECORD + + + + + SYS_DICTIONARIES + + + + + f.STAGEEXAMPAPER_ID, + f.CURRICULUM_ID, + f.COURSEWARE_ID, + f.COURSEWARETYPE, + f.QUESTION_ID, + f.ANSWER, + f.USER_ID, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ISDELETE, + f.CORPINFO_ID, + f.STAGEEXAM_ID, + f.ANSWERRIGHT, + f.STUDYTASK_ID, + f.STAGEEXAMRECORD_ID + + + + + STAGEEXAMPAPER_ID, + CURRICULUM_ID, + COURSEWARE_ID, + COURSEWARETYPE, + QUESTION_ID, + ANSWER, + USER_ID, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ISDELETE, + CORPINFO_ID, + STAGEEXAM_ID, + ANSWERRIGHT, + STUDYTASK_ID, + STAGEEXAMRECORD_ID + + + + + #{STAGEEXAMPAPER_ID}, + #{CURRICULUM_ID}, + #{COURSEWARE_ID}, + #{COURSEWARETYPE}, + #{QUESTION_ID}, + #{ANSWER}, + #{USER_ID}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ISDELETE}, + #{CORPINFO_ID}, + #{STAGEEXAM_ID}, + #{ANSWERRIGHT}, + #{STUDYTASK_ID}, + #{STAGEEXAMRECORD_ID} + + + + + + diff --git a/src/main/resources/mybatis/dsno2/onlinexxks/StageStudentRelationMapper.xml b/src/main/resources/mybatis/dsno2/onlinexxks/StageStudentRelationMapper.xml new file mode 100644 index 0000000..2bf6900 --- /dev/null +++ b/src/main/resources/mybatis/dsno2/onlinexxks/StageStudentRelationMapper.xml @@ -0,0 +1,138 @@ + + + + + + + BUS_STAGESTUDENTRELATION + + + + + SYS_DICTIONARIES + + + + + f.STAGEEXAMPAPER_ID, + f.USER_ID, + f.STAGEEXAMSTATE, + f.STAGEEXAMSCORE, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ISDELETE, + f.CORPINFO_ID, + f.STUDYTASK_ID, + f.COMPLETE_COURSEWARE, + f.COMPLETE_CLASSHOUR, + f.STAGESTUDENTRELATION_ID + + + + + STAGEEXAMPAPER_ID, + USER_ID, + STAGEEXAMSTATE, + STAGEEXAMSCORE, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ISDELETE, + CORPINFO_ID, + STUDYTASK_ID, + COMPLETE_COURSEWARE, + COMPLETE_CLASSHOUR, + STAGESTUDENTRELATION_ID + + + + + #{STAGEEXAMPAPER_ID}, + #{USER_ID}, + #{STAGEEXAMSTATE}, + #{STAGEEXAMSCORE}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ISDELETE}, + #{CORPINFO_ID}, + #{STUDYTASK_ID}, + #{COMPLETE_COURSEWARE}, + #{COMPLETE_CLASSHOUR}, + #{STAGESTUDENTRELATION_ID} + + + + + + + + + diff --git a/src/main/resources/mybatis/dsno2/onlinexxks/StageexampaperMapper.xml b/src/main/resources/mybatis/dsno2/onlinexxks/StageexampaperMapper.xml new file mode 100644 index 0000000..af5fbd0 --- /dev/null +++ b/src/main/resources/mybatis/dsno2/onlinexxks/StageexampaperMapper.xml @@ -0,0 +1,86 @@ + + + + + + + BUS_STAGEEXAMPAPER + + + + + SYS_DICTIONARIES + + + + + f.EXAMNAME, + f.EXAMTIME, + f.ANSWERSHEETTIME, + f.EXAMSCORE, + f.QUESTIONNUM, + f.EXAMSTATE, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ISDELETE, + f.CORPINFO_ID, + f.CURRICULUM_ID, + f.STUDYTASK_ID, + f.PASSSCORE, + f.INPUT_ID, + f.STAGEEXAMPAPER_ID + + + + + EXAMNAME, + EXAMTIME, + ANSWERSHEETTIME, + EXAMSCORE, + QUESTIONNUM, + EXAMSTATE, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ISDELETE, + CORPINFO_ID, + STUDYTASK_ID, + PASSSCORE, + INPUT_ID, + STAGEEXAMPAPER_ID + + + + + #{EXAMNAME}, + #{EXAMTIME}, + #{ANSWERSHEETTIME}, + #{EXAMSCORE}, + #{QUESTIONNUM}, + #{EXAMSTATE}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ISDELETE}, + #{CORPINFO_ID}, + #{STUDYTASK_ID}, + #{PASSSCORE}, + #{INPUT_ID}, + #{STAGEEXAMPAPER_ID} + + + + + + diff --git a/src/main/resources/mybatis/dsno2/onlinexxks/StudyTaskMapper.xml b/src/main/resources/mybatis/dsno2/onlinexxks/StudyTaskMapper.xml new file mode 100644 index 0000000..1106d96 --- /dev/null +++ b/src/main/resources/mybatis/dsno2/onlinexxks/StudyTaskMapper.xml @@ -0,0 +1,184 @@ + + + + + + + BUS_STUDYTASK + + + + + SYS_DICTIONARIES + + + + + f.STUDY_NAME, + f.TRAINTYPE, + f.POSTTYPE, + f.PEIXUE_START_TIME, + f.PEIXUE_END_TIME, + f.KJ_STATE, + f.GJ_STATE, + f.STAGEEXAMPAPER_ID, + f.STUDY_USER_ID, + f.STUDY_CURRICULUM_ID, + f.CREATOR, + f.CREATTIME, + f.OPERATOR, + f.OPERATTIME, + f.ISDELETE, + f.CORPINFO_ID, + f.STATE, + f.COURSEWARE_COUNT, + f.SUM_CLASSHOUR, + f.STUDYTASK_ID + + + + + STUDY_NAME, + TRAINTYPE, + POSTTYPE, + PEIXUE_START_TIME, + PEIXUE_END_TIME, + KJ_STATE, + GJ_STATE, + STAGEEXAMPAPER_ID, + STUDY_USER_ID, + STUDY_CURRICULUM_ID, + CREATOR, + CREATTIME, + OPERATOR, + OPERATTIME, + ISDELETE, + CORPINFO_ID, + STATE, + COURSEWARE_COUNT, + SUM_CLASSHOUR, + STUDYTASK_ID + + + + + #{STUDY_NAME}, + #{TRAINTYPE}, + #{POSTTYPE}, + #{PEIXUE_START_TIME}, + #{PEIXUE_END_TIME}, + #{KJ_STATE}, + #{GJ_STATE}, + #{STAGEEXAMPAPER_ID}, + #{STUDY_USER_ID}, + #{STUDY_CURRICULUM_ID}, + #{CREATOR}, + #{CREATTIME}, + #{OPERATOR}, + #{OPERATTIME}, + #{ISDELETE}, + #{CORPINFO_ID}, + #{STATE}, + #{COURSEWARE_COUNT}, + #{SUM_CLASSHOUR}, + #{STUDYTASK_ID} + + + + + + + + + + + + + + diff --git a/src/main/resources/mybatis/dsno2/system/Department2Mapper.xml b/src/main/resources/mybatis/dsno2/system/Department2Mapper.xml index f2517b8..fd979e3 100644 --- a/src/main/resources/mybatis/dsno2/system/Department2Mapper.xml +++ b/src/main/resources/mybatis/dsno2/system/Department2Mapper.xml @@ -186,14 +186,18 @@ from where 1=1 - - and PARENT_ID = #{parentId} + + and PARENT_ID = #{parameter} AND - CORPINFO_ID = #{CORPINFO_ID} + CORPINFO_ID = #{CORPINFO_ID} - order by NAME + + AND + PARENT_ID = #{PARENT_ID} + + order by DEP_ORDER asc ,NAME diff --git a/src/main/resources/mybatis/dsno2/system/UsersMapper.xml b/src/main/resources/mybatis/dsno2/system/UsersMapper.xml index 7046dd6..6a6a868 100644 --- a/src/main/resources/mybatis/dsno2/system/UsersMapper.xml +++ b/src/main/resources/mybatis/dsno2/system/UsersMapper.xml @@ -265,62 +265,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by u.LAST_LOGIN desc - - - + select + u.USER_ID, + u.USERNAME, + u.PASSWORD, + u.LAST_LOGIN, + u.NAME, + u.IP, + u.EMAIL, + u.NUMBER, + u.PHONE, + r.ROLE_ID, + r.ROLE_NAME + from u, r + where u.ROLE_ID = r.ROLE_ID + and u.USERNAME != 'admin' + + + and + ( + u.USERNAME LIKE CONCAT(CONCAT('%', #{KEYWORDS}),'%') + or + u.EMAIL LIKE CONCAT(CONCAT('%', #{KEYWORDS}),'%') + or + u.NUMBER LIKE CONCAT(CONCAT('%', #{KEYWORDS}),'%') + or + u.NAME LIKE CONCAT(CONCAT('%', #{KEYWORDS}),'%') + or + u.PHONE LIKE CONCAT(CONCAT('%', #{KEYWORDS}),'%') + ) + + + and u.ROLE_ID=#{ROLE_ID} + + + and u.LAST_LOGIN >= #{STRARTTIME} + + + and u.LAST_LOGIN <= #{ENDTIME} + + + AND + u.CORPINFO_ID = #{CORPINFO_ID} + + + AND + u.DEPARTMENT_ID = #{DEPARTMENT_ID} + + + AND + u.POST_ID = #{POST_ID} + + + AND + u.USER_ID != #{LOGINUSERID} + + + AND + u.ISMAIN != '1' + + + AND + u.ISMAIN =#{ISMAIN} + + order by u.DEPARTMENT_ID asc, u.SORT asc,u.LAST_LOGIN desc + + + diff --git a/src/main/webapp/uploadFiles/wordTemplate/archivesCapital.docx b/src/main/webapp/uploadFiles/wordTemplate/archivesCapital.docx new file mode 100644 index 0000000000000000000000000000000000000000..4b48bf5cc6b85f17b611dd0bf888872e12aeb1d1 GIT binary patch literal 14480 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/uploadFiles/wordTemplate/archivesEduManager.docx b/src/main/webapp/uploadFiles/wordTemplate/archivesEduManager.docx new file mode 100644 index 0000000000000000000000000000000000000000..43b21e07a17bdf07e68ac5934110659f73613949 GIT binary patch literal 13565 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 He}VoFLPldS literal 0 HcmV?d00001 diff --git a/src/main/webapp/uploadFiles/wordTemplate/archivesEduPlan.docx b/src/main/webapp/uploadFiles/wordTemplate/archivesEduPlan.docx new file mode 100644 index 0000000000000000000000000000000000000000..21ac8a18512bc00b208690552dd1cf1c81b99c64 GIT binary patch literal 13357 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/uploadFiles/wordTemplate/archivesExam.docx b/src/main/webapp/uploadFiles/wordTemplate/archivesExam.docx new file mode 100644 index 0000000000000000000000000000000000000000..513739e9625d091b251f19836ce99b3a44f9480b GIT binary patch literal 13996 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

2X}vB_CUH>S!LS8S_;pe+ruP&X)(VF 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 XtSAHd$6JT|R$eyw_B{17{{sCNQ>RM+ literal 0 HcmV?d00001 diff --git a/src/main/webapp/uploadFiles/wordTemplate/archivesPostMan.docx b/src/main/webapp/uploadFiles/wordTemplate/archivesPostMan.docx new file mode 100644 index 0000000000000000000000000000000000000000..471c24cd0da85e1e8704fe7a41a99e73c551391f GIT binary patch literal 12737 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/uploadFiles/wordTemplate/archivesReport.docx b/src/main/webapp/uploadFiles/wordTemplate/archivesReport.docx new file mode 100644 index 0000000000000000000000000000000000000000..35ce7860780977f6b5dcfc31e8a058451bdd22af GIT binary patch literal 13749 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/uploadFiles/wordTemplate/archivesStudentScore.docx b/src/main/webapp/uploadFiles/wordTemplate/archivesStudentScore.docx new file mode 100644 index 0000000000000000000000000000000000000000..041bb1de1233cd2a7f458daae731c0070c7130bf GIT binary patch literal 14883 zcmb8W19WD~wl*9)9ou%&v2EM7Z6_V8W4mM9w$Eu4dkUuIQev83)ti>Au z0sy!H0RX`Nr5K0y#UN}1#XtC>haDQDgbg$s z`ESk_<&=O#Z8#aP+}aJBpU|InaJ;8~jw{AqGx6tHl})&0@i4nCx~Bz_OH+AT+GU-6 z&R3ngM4;|)KFAx4i3x(du8)|}W#C^A1(qP_$o|>4H-+;oz)}kX)fiukDv9-qb!%?EO<(0fKWlJO`Zv@T7%gw{iXxnG(#|767*lb)9kXX4e<^p>8{uX(&sk)f1uAUhof1ikN3VU)jAcI%MH<)eH} z7@qOQrvqV6s&m$VDsJzhZ8~r$oH-#g%Ay%sJM5;O%;+=eE>Gtto$1%Ao$GPUaW?2J zMR0mIZFdX#Pk%&^Ee7g+_`~zV9|-^H4?|lA<6jQ(j^qF35aD~V6@n|Cn)sN~+BhYk zA1H}2R1n;j)ctx^mq##vPpcv{w14thq)kiHysbHI0OZk_9BKO5c<#bHVjIE{V zS-e2wQoGp`kkAs7##?aF1_un)F*eT zY0K|Q>7o*67c&KPlO2G&o|6*pa_-hE{3=waMt0C075b-KuE3b@q9SE*mV*h#S z{`Jhd>)Fh@&xSKD4ujKiRudVYw&~IFa4%(Ry%%2gZtwk?gh%|vjEM{~O1m>6-b<8k zt#Q7Zb}2g{M0+;(q%?b-rVJ^$JvKFkpAHgXGbSn>t7COh~u|S|BN1d z9{+?Fa}HvN4~dWuBvt5?r;eIN*`fp?wFP1rn3?ai93Jk{oH zlITKOk<)(X&+f-Z;Ch(&d z+>;_bOh431R*e*lvQk;$D#=&@XF0QHEN&0v`lVlt1{P#fb-U;kF&xk4wdJ@KNG?boP#5LRg5(kVsmH~%9$KPg8ekHPh6#>!9U^);0& z*JiJKPu);jp{6Q&>NVWhu!8f0o9NLesSz1$*gUCtL`J$nO57Cs(upH)A>wVLlRKOv z?wakF#H%>#K9ygufs4|erW)BA8$%|H{awxCaoZ*&t!(WLR(VO2ci_7{?=CX(>0dEd zQ`t3K%Z5m_rynK1M1SrX^9fFpTz^+x7U_bjir{z!{pG~}9tuG}oak!nVDv{A%<1lh z(fmM|nE?R6{aeJ*$=%A>@wbn)#~iksQC5p6-@CUc)fcWTPs~-zik7OHsTzkc78xx= z1F5CrL4f0uR=Z-1--vu;x<+0^X}d$r!-Sxd+o?1Y+$IOSv4QaUd|nPozP6iIG7!X< zbal1udvZYzy)bX3f&+-VV1g_9 zrtTje8pVN1;?`NI7IOL1p(zYdheRKlBQoALh`9n`6j7r&B80s-J5)Eho~V9yI6|Xj zufTUPKp;;Y5w4VFPmBnHaJwzy5wz~p%yK6PAlwtTK_?3r)eDfSEfA~2q#69ikCeZ)Yb5% zw@r{v56+SMt&N*8MM9Kx(U^>~SE6?$BNOrf=uSQ11kM>qZpz^nE-uI_<-}ee%9HVsncv(EM;I6mj zS|aOmO5X+(CStPuqw;ckzGUGz+1CI=ayc`6-IwjrA9Fvd;J8R75w6ygxZKCxAR4q@ z?FJ3)X?kOhpDMp{`?RPEP!@NVyl)CRUxtL0gc39Gw3B3>xXLr%Zd?J=

7H9va-4#7FJ7E7Gh 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 X5IITE-?I+>gVj0xaX)dh`~v+y#dYOi literal 0 HcmV?d00001 diff --git a/src/main/webapp/uploadFiles/wordTemplate/archivesStudyTask.docx b/src/main/webapp/uploadFiles/wordTemplate/archivesStudyTask.docx new file mode 100644 index 0000000000000000000000000000000000000000..72594caeae28a2949dced67fa44402b717b1f571 GIT binary patch literal 13838 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/uploadFiles/wordTemplate/classhour-new.docx b/src/main/webapp/uploadFiles/wordTemplate/classhour-new.docx new file mode 100644 index 0000000000000000000000000000000000000000..a5c9d43694beb0b8dca34a850fbeb4a633dc31a5 GIT binary patch literal 21435 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/uploadFiles/wordTemplate/courseware.docx b/src/main/webapp/uploadFiles/wordTemplate/courseware.docx new file mode 100644 index 0000000000000000000000000000000000000000..8c17ec37b007e23dd0ae476dca28e4f2a949009b GIT binary patch literal 12803 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