Jelajahi Sumber

分数存储为 Execl格式

wuheng 1 tahun lalu
induk
melakukan
d15196b5a9

+ 9 - 0
common/pom.xml

@@ -38,6 +38,15 @@
             <groupId>name.remal.tools.test</groupId>
             <artifactId>junit4</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.koobietech.eas</groupId>
+            <artifactId>dao</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-core</artifactId>
+        </dependency>
     </dependencies>
 
     <repositories>

+ 34 - 2
common/src/main/java/com/koobietech/eas/common/utils/FileManager.java

@@ -1,5 +1,6 @@
 package com.koobietech.eas.common.utils;
 
+import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.springframework.stereotype.Component;
 
@@ -195,10 +196,12 @@ public class FileManager {
             ret = false;
         } finally {
             try {
-                if (Objects.nonNull(fileOutputStream))
+                if (Objects.nonNull(fileOutputStream)) {
                     fileOutputStream.close();
-                if (Objects.nonNull(document))
+                }
+                if (Objects.nonNull(document)) {
                     document.close();
+                }
             } catch (IOException e) {}
         }
         return ret;
@@ -373,4 +376,33 @@ public class FileManager {
         } catch (FileNotFoundException e) {}
         return fileOutputStream;
     }
+
+    /**
+     * 保存表格文件为档案
+     * @param workbook
+     * @param savePath
+     * @return
+     */
+    public boolean saveWorkbook(Workbook workbook, String savePath) {
+        FileOutputStream fileOutputStream = null;
+        boolean result = true;
+        try {
+            fileOutputStream = new FileOutputStream(savePath);
+            workbook.write(fileOutputStream);
+        } catch (IOException e) {
+            result = false;
+        } finally {
+            if (Objects.nonNull(fileOutputStream)) {
+                try {
+                    fileOutputStream.close();
+                } catch (IOException e) { result = false; }
+            }
+            if (Objects.nonNull(workbook)) {
+                try {
+                    workbook.close();
+                } catch (IOException e) {result = false; }
+            }
+        }
+        return result;
+    }
 }

+ 1 - 1
security/src/main/java/com/koobietech/eas/security/utils/SecurityUtils.java → common/src/main/java/com/koobietech/eas/common/utils/SecurityUtils.java

@@ -1,4 +1,4 @@
-package com.koobietech.eas.security.utils;
+package com.koobietech.eas.common.utils;
 
 import com.koobietech.eas.dao.adminLoginPojo.UserDetail;
 import org.springframework.security.core.context.SecurityContextHolder;

+ 2 - 2
common/src/main/java/com/koobietech/eas/common/utils/StudentArchiveGenerator.java

@@ -138,8 +138,8 @@ public class StudentArchiveGenerator {
      */
     private static int getStudentAge(String studentCardId) {
         LocalDate currentDate = LocalDate.now();
-        LocalDate birthDateirthDate = extractBirthDate(studentCardId);
-        Period period = Period.between(birthDateirthDate, currentDate);
+        LocalDate birthDateWithDate = extractBirthDate(studentCardId);
+        Period period = Period.between(birthDateWithDate, currentDate);
         return period.getYears();
     }
 

+ 6 - 0
pom.xml

@@ -38,9 +38,15 @@
         <maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
         <captcha.version>1.3.0</captcha.version>
         <xerces.version>2.9.1</xerces.version>
+        <security.version>5.7.5</security.version>
     </properties>
     <dependencyManagement>
         <dependencies>
+            <dependency>
+                <groupId>org.springframework.security</groupId>
+                <artifactId>spring-security-core</artifactId>
+                <version>${security.version}</version>
+            </dependency>
             <dependency>
                 <groupId>xerces</groupId>
                 <artifactId>xercesImpl</artifactId>

+ 24 - 0
service/src/main/java/com/koobietech/eas/service/EasArcTlsScoresService.java

@@ -9,14 +9,38 @@ import java.util.List;
 
 public interface EasArcTlsScoresService {
 
+    /**
+     * 添加学员分数
+     * @param easArcTlsScores
+     * @return
+     */
     int addStudentScore(EasArcTlsScores easArcTlsScores);
 
+    /**
+     * 修改学员分数
+     * @param easArcTlsScores
+     * @return
+     */
     int updateStudentScore(EasArcTlsScores easArcTlsScores);
 
+    /**
+     * 查询学员分数
+     * @return
+     */
     List<EasArcTlsScores> selectAllStudentScores();
 
+    /**
+     * 主键查询
+     * @param easArcTlsScores
+     * @return
+     */
     PageData selectScoreByExample(EasArcTlsScores easArcTlsScores);
 
+    /**
+     * 导入学员分数
+     * @param inputStream
+     * @return
+     */
     Boolean importExcelScores(InputStream inputStream);
 
 }

+ 9 - 0
service/src/main/java/com/koobietech/eas/service/EasArchivesFilesService.java

@@ -2,6 +2,7 @@ package com.koobietech.eas.service;
 
 import com.koobietech.eas.dao.dto.ArchivesDto;
 import com.koobietech.eas.mbg.model.EasArcTlsStudents;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 
 import java.io.FileInputStream;
@@ -51,6 +52,14 @@ public interface EasArchivesFilesService {
      */
     ArchivesDto saveArchiveFile(String studentNumber, InputStream stream, String type);
 
+    /**
+     * 保存 Excel
+     * @param studentNumber
+     * @param workbook
+     * @return
+     */
+    ArchivesDto saveArchiveFile(String studentNumber, Workbook workbook);
+
     /**
      * 获取文件
      * @param filePath

+ 89 - 22
service/src/main/java/com/koobietech/eas/service/impl/EasArcTlsScoresServiceImpl.java

@@ -1,36 +1,80 @@
 package com.koobietech.eas.service.impl;
 
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
 import cn.afterturn.easypoi.excel.ExcelImportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
+import cn.afterturn.easypoi.handler.inter.IExcelExportServer;
 import cn.hutool.core.bean.BeanUtil;
+import com.koobietech.eas.common.constant.FileType;
+import com.koobietech.eas.common.exception.EasException;
 import com.koobietech.eas.common.result.PageData;
+import com.koobietech.eas.common.utils.FileManager;
+import com.koobietech.eas.common.utils.SecurityUtils;
+import com.koobietech.eas.common.utils.StudentArchiveGenerator;
 import com.koobietech.eas.dao.Pojo.EasArcTlsScoresPojo;
+import com.koobietech.eas.dao.dto.ArchivesDto;
+import com.koobietech.eas.mbg.mapper.EasArcArchivesMapper;
 import com.koobietech.eas.mbg.mapper.EasArcTlsScoresMapper;
+import com.koobietech.eas.mbg.model.EasArcArchives;
 import com.koobietech.eas.mbg.model.EasArcTlsScores;
 import com.koobietech.eas.mbg.model.EasArcTlsScoresExample;
 import com.koobietech.eas.service.EasArcTlsScoresService;
+import com.koobietech.eas.service.EasArchivesFilesService;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import java.io.FileNotFoundException;
 import java.io.InputStream;
+import java.time.LocalDate;
+import java.time.ZoneOffset;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
+/**
+ * @author lc
+ */
 @Service
 public class EasArcTlsScoresServiceImpl implements EasArcTlsScoresService {
 
     @Resource
     EasArcTlsScoresMapper easArcTlsScoresMapper;
 
+    @Resource
+    EasArchivesFilesService easArchivesFilesService;
+
+    @Resource
+    EasArcArchivesMapper arcArchivesMapper;
 
     @Override
     public int addStudentScore(EasArcTlsScores easArcTlsScores) {
         easArcTlsScores.setCreateTime(new Date());
         easArcTlsScores.setModifyTime(new Date());
-        return easArcTlsScoresMapper.insert(easArcTlsScores);
+        easArcTlsScoresMapper.insert(easArcTlsScores);
+        return saveStudentScoreArchive(easArcTlsScores) ? 1: 0;
+    }
+
+    private boolean saveStudentScoreArchive(EasArcTlsScores easArcTlsScores){
+        EasArcTlsScoresExample easArcTlsScoresExample = new EasArcTlsScoresExample();
+        List<EasArcTlsScores> easArcTlsScoresList = easArcTlsScoresMapper.selectByExample(easArcTlsScoresExample);
+        ArchivesDto archivesDto = saveEasArcTlsScoresToExcel(easArcTlsScoresList, easArcTlsScores.getStudentNumber());
+        EasArcArchives easArcArchives = new EasArcArchives();
+        easArcArchives.setStudentNumber(easArcTlsScores.getStudentNumber());
+        easArcArchives.setArchiveNumber(archivesDto.getArchiveCode());
+        easArcArchives.setFilePath(archivesDto.getPath());
+        easArcArchives.setCreateTime(new Date());
+        easArcArchives.setCreateUid( SecurityUtils.getLoginUid().intValue() );
+        easArcArchives.setModifyTime(new Date());
+        easArcArchives.setArctype(FileType.XLSX.name());
+        easArcArchives.setManagerId( SecurityUtils.getLoginUid().intValue() );
+        easArcArchives.setValidityTime( new Date(LocalDate.now().plusMonths(20)
+                .atStartOfDay().toInstant(ZoneOffset.UTC).toEpochMilli()) );
+        int insert = arcArchivesMapper.insert(easArcArchives);
+        return insert == 1;
     }
 
     @Override
@@ -84,30 +128,53 @@ public class EasArcTlsScoresServiceImpl implements EasArcTlsScoresService {
         return PageData.init(easArcTlsScores1,l);
     }
 
-        @Override
+    @Override
     public Boolean importExcelScores(InputStream inputStream) {
-            ImportParams params = new ImportParams();
-            params.setTitleRows(1);
-            params.setHeadRows(1);
-            try {
-                List<EasArcTlsScoresPojo> score = ExcelImportUtil.importExcel(
-                        inputStream, EasArcTlsScoresPojo.class, params);
-                for ( EasArcTlsScoresPojo easArcTlsScoresPojo : score) {
-                    if ( easArcTlsScoresPojo.getScore() == null
-                            || easArcTlsScoresPojo.getScore().equals("") ) {
-                        continue;
-                    }
-                    easArcTlsScoresPojo.setCreateTime(new Date());
-                    EasArcTlsScores easArcTlsScores = new EasArcTlsScores();
-                    BeanUtil.copyProperties(easArcTlsScoresPojo, easArcTlsScores);
-                    easArcTlsScoresMapper.insert(easArcTlsScores);
+        ImportParams params = new ImportParams();
+        params.setTitleRows(1);
+        params.setHeadRows(1);
+        try {
+            List<EasArcTlsScoresPojo> score = ExcelImportUtil.importExcel(
+                    inputStream, EasArcTlsScoresPojo.class, params);
+            for ( EasArcTlsScoresPojo easArcTlsScoresPojo : score) {
+                if ( easArcTlsScoresPojo.getScore() == null
+                        || easArcTlsScoresPojo.getScore().equals("") ) {
+                    continue;
                 }
-            } catch (FileNotFoundException e) {
-                e.printStackTrace();
-            } catch (Exception e) {
-                throw new RuntimeException(e);
+                easArcTlsScoresPojo.setCreateTime(new Date());
+                EasArcTlsScores easArcTlsScores = new EasArcTlsScores();
+                BeanUtil.copyProperties(easArcTlsScoresPojo, easArcTlsScores);
+                easArcTlsScoresMapper.insert(easArcTlsScores);
             }
-            return true;
+        } catch (FileNotFoundException e) {
+            throw new EasException(e.getMessage());
+        } catch (Exception e) {
+            throw new EasException(e.getMessage());
+        } finally {
+            try {
+                if (inputStream != null) {
+                    inputStream.close();
+                }
+            } catch (Exception e) {}
+        }
+        return true;
     }
 
+    /**
+     * 将学员考试分数保存为Execl文件
+     */
+    public ArchivesDto saveEasArcTlsScoresToExcel(List<EasArcTlsScores> easArcTlsScoresList,
+                                              String studentNumber) {
+        List<EasArcTlsScoresPojo> easArcTlsScoresPojoList = new ArrayList<>();
+        for (EasArcTlsScores easArcTlsScores: easArcTlsScoresList) {
+            EasArcTlsScoresPojo easArcTlsScoresPojo = new EasArcTlsScoresPojo();
+            BeanUtil.copyProperties(easArcTlsScores, easArcTlsScoresPojo);
+            easArcTlsScoresPojoList.add(easArcTlsScoresPojo);
+        }
+        ExportParams params   = new ExportParams("考试成绩表", "考试成绩");
+        Workbook workbook = ExcelExportUtil.exportExcel(params,
+                EasArcTlsScoresPojo.class, easArcTlsScoresPojoList);
+        ArchivesDto archivesDto = easArchivesFilesService.saveArchiveFile(studentNumber, workbook);
+        return archivesDto;
+    }
 }

+ 16 - 3
service/src/main/java/com/koobietech/eas/service/impl/EasArchivesFilesServiceImpl.java

@@ -8,6 +8,7 @@ import com.koobietech.eas.mbg.mapper.EasArcTlsStudentsMapper;
 import com.koobietech.eas.mbg.model.EasArcTlsStudents;
 import com.koobietech.eas.mbg.model.EasArcTlsStudentsExample;
 import com.koobietech.eas.service.EasArchivesFilesService;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -37,17 +38,22 @@ public class EasArchivesFilesServiceImpl implements EasArchivesFilesService {
 
     @Override
     public ArchivesDto saveArchiveAttendanceFile(String studentNumber, XWPFDocument document) {
-        return saveArchiveDocumentFile(studentNumber, document, "XLSX");
+        return saveArchiveDocumentFile(studentNumber, document, FileType.XLSX.name());
     }
 
     @Override
     public ArchivesDto saveArchiveScoresFile(String studentNumber, XWPFDocument document) {
-        return saveArchiveDocumentFile(studentNumber, document, "XLSX");
+        return saveArchiveDocumentFile(studentNumber, document, FileType.XLSX.name());
     }
 
     @Override
     public ArchivesDto saveArchiveStudentsFile(String studentNumber, XWPFDocument document) {
-        return saveArchiveDocumentFile(studentNumber, document, "DOCX");
+        return saveArchiveDocumentFile(studentNumber, document, FileType.DOCX.name());
+    }
+
+    @Override
+    public ArchivesDto saveArchiveFile(String studentNumber, Workbook workbook) {
+        return saveArchiveWorkbookFile(studentNumber, workbook, FileType.XLSX.name());
     }
 
     @Override
@@ -115,6 +121,13 @@ public class EasArchivesFilesServiceImpl implements EasArchivesFilesService {
         return new ArchivesDto(path, status, archiveCode, type);
     }
 
+    private ArchivesDto saveArchiveWorkbookFile(String studentNumber, Workbook workbook, String type) {
+        String archiveCode = StudentArchiveGenerator.generateArchiveCode(studentNumber, FileType.valueOf(type).getSuffix());
+        String path = getArchivePath(studentNumber, archiveCode, FileType.valueOf(type).getSuffix());
+        boolean status = fileManager.saveWorkbook(workbook, path);
+        return new ArchivesDto(path, status, archiveCode, type);
+    }
+
     private String getArchiveCode(String studentNumber, String fileCode) {
         return StudentArchiveGenerator.generateArchiveCode(studentNumber, fileCode);
     }