瀏覽代碼

导入excel考勤信息

cuidi 1 年之前
父節點
當前提交
5cfaf50584

+ 4 - 0
common/src/main/java/com/koobietech/eas/common/utils/FileManager.java

@@ -2,6 +2,8 @@ package com.koobietech.eas.common.utils;
 
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 
 import java.io.*;
@@ -13,6 +15,7 @@ import java.util.Objects;
 @Component
 public class FileManager {
 
+    private static final Logger logger = LoggerFactory.getLogger(FileManager.class);
     String separator = File.separator ;
 
     /**********************************
@@ -390,6 +393,7 @@ public class FileManager {
             fileOutputStream = new FileOutputStream(savePath);
             workbook.write(fileOutputStream);
         } catch (IOException e) {
+            logger.error(e.getMessage());
             result = false;
         } finally {
             if (Objects.nonNull(fileOutputStream)) {

+ 6 - 0
dao/pom.xml

@@ -16,6 +16,12 @@
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>knife4j-openapi3-spring-boot-starter</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.koobietech.eas</groupId>
+            <artifactId>mbg</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <parent>

+ 31 - 6
dao/src/main/java/com/koobietech/eas/dao/Pojo/EasArcTlsAttendancePojo.java

@@ -1,6 +1,7 @@
 package com.koobietech.eas.dao.Pojo;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
+import cn.afterturn.easypoi.excel.annotation.ExcelIgnore;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -15,32 +16,56 @@ import java.util.Date;
 @Data
 public class EasArcTlsAttendancePojo implements Serializable {
 
-    @Excel(name = "签到日期")
+    @Excel(name = "签到日期" , exportFormat="yyyy年MM月dd日")
     private Date checkinDate;
 
     @Excel(name = "学员档案号")
     private String studentNumber;
 
+    @Excel(name = "学员ID号")
+    private String studentId;
+
+    @Excel(name = "排课ID")
+    private int scheduleId;
+
     //a表示正常出勤, b表示迟到、早退, c表示旷课, d表示请假, e表示无效
-    @Excel(name = "上午出勤状态")
+    @Excel(name = "上午出勤状态", replace = { "正常出勤_a", "迟到、早退_b" }, width = 10)
     private String morning;
 
     //a表示正常出勤,   b表示迟到、早退, c 表示旷课, d 表示请假, e表示无效"
-    @Excel(name = "下午出勤状态")
+    @Excel(name = "下午出勤状态", replace = { "正常出勤_a", "迟到、早退_b" }, width = 10)
     private String afternoon;
 
     @Excel(name = "学员姓名")
     private String studentName;
 
     @Excel(name = "类别" )
-    private Integer category;
+    private String category;
 
     @Excel(name = "科目" )
-    private Integer subject;
+    private String subject;
 
-    @Excel(name = "创建时间" )
+    @Excel(name = "创建时间" , exportFormat="yyyy年MM月dd日HH时mm分ss秒")
     private Date createTime;
 
+    private Long id;
+
+    @Schema(description = "月份")
+    private Integer month;
+
+    @Schema(description = "创建用户")
+    private Integer createUid;
+
+    @Schema(description = "修改时间")
+    private Date modifyTime;
+
+    @Excel(name = "起始时间" , exportFormat="yyyy年MM月dd日HH时mm分ss秒")
+    private Date startTime;
+
+    @Excel(name = "结束时间" , exportFormat="yyyy年MM月dd日HH时mm分ss秒")
+    private Date endTime;
+
+
     private static final long serialVersionUID = 1L;
 
 }

+ 20 - 0
dao/src/main/java/com/koobietech/eas/dao/mapper/AttendanceQueryMapper.java

@@ -0,0 +1,20 @@
+package com.koobietech.eas.dao.mapper;
+
+
+import com.koobietech.eas.dao.Pojo.EasArcTlsAttendancePojo;
+import com.koobietech.eas.mbg.model.EasArcTlsAttendance;
+import com.koobietech.eas.mbg.model.EasArcTlsAttendanceExample;
+
+import java.util.List;
+
+public interface AttendanceQueryMapper {
+
+    //根据模板查询
+    List<EasArcTlsAttendance> selectByExample(EasArcTlsAttendanceExample example);
+
+    //查询执行条数
+    long countByExample(EasArcTlsAttendanceExample example);
+
+    //导入Excel
+    EasArcTlsAttendancePojo importExcel(String studentNumber);
+}

+ 103 - 0
dao/src/main/resources/com/koobietech/eas/dao/mapper/AttendanceQueryMapper.xml

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.koobietech.eas.dao.mapper.AttendanceQueryMapper">
+    <resultMap id="BaseSelectMap" type="com.koobietech.eas.dao.Pojo.EasArcTlsAttendancePojo">
+        <id column="id" jdbcType="BIGINT" property="id" />
+        <result column="checkin_date" jdbcType="DATE" property="checkinDate" />
+        <result column="schedule_id" jdbcType="INTEGER" property="scheduleId" />
+        <result column="month" jdbcType="INTEGER" property="month" />
+        <result column="morning" jdbcType="CHAR" property="morning" />
+        <result column="afternoon" jdbcType="CHAR" property="afternoon" />
+        <result column="student_name" jdbcType="VARCHAR" property="studentName" />
+        <result column="student_number" jdbcType="VARCHAR" property="studentNumber" />
+        <result column="create_uid" jdbcType="INTEGER" property="createUid" />
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="modify_time" jdbcType="TIMESTAMP" property="modifyTime" />
+    </resultMap>
+
+    <resultMap id="execlDetail" type="com.koobietech.eas.dao.Pojo.EasArcTlsAttendancePojo">
+        <result column="studentId" property="studentId" />
+        <result column="category" property="category" />
+        <result column="subject" property="subject" />
+        <result column="startTime" property="startTime" />
+        <result column="endTime" property="endTime" />
+    </resultMap>
+
+
+    <sql id="Example_Where_Clause">
+        <where>
+            <foreach collection="oredCriteria" item="criteria" separator="or">
+                <if test="criteria.valid">
+                    <trim prefix="(" prefixOverrides="and" suffix=")">
+                        <foreach collection="criteria.criteria" item="criterion">
+                            <choose>
+                                <when test="criterion.noValue">
+                                    and ${criterion.condition}
+                                </when>
+                                <when test="criterion.singleValue">
+                                    and ${criterion.condition} #{criterion.value}
+                                </when>
+                                <when test="criterion.betweenValue">
+                                    and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                                </when>
+                                <when test="criterion.listValue">
+                                    and ${criterion.condition}
+                                    <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                                        #{listItem}
+                                    </foreach>
+                                </when>
+                            </choose>
+                        </foreach>
+                    </trim>
+                </if>
+            </foreach>
+        </where>
+    </sql>
+
+    <sql id="Base_Column_List">
+        id, checkin_date, schedule_id, month, morning, afternoon, student_name, student_number,
+    create_uid, create_time, modify_time
+    </sql>
+
+    <select id="selectByExample" parameterType="com.koobietech.eas.mbg.model.EasArcTlsAttendanceExample" resultMap="BaseSelectMap">
+        select
+        <if test="distinct">
+            distinct
+        </if>
+        <include refid="Base_Column_List" />
+        from eas_arc_tls_attendance
+        <if test="_parameter != null">
+            <include refid="Example_Where_Clause" />
+        </if>
+        <if test="orderByClause != null">
+            order by ${orderByClause}
+        </if>
+    </select>
+
+    <select id="countByExample" parameterType="com.koobietech.eas.mbg.model.EasArcTlsAttendanceExample" resultType="java.lang.Long">
+        select count(*) from eas_arc_tls_attendance
+        <if test="_parameter != null">
+            <include refid="Example_Where_Clause" />
+        </if>
+    </select>
+
+
+    //导入excel
+    <select id="importExcel" resultMap="execlDetail">
+        SELECT
+            IFNULL(su.`name`,"") AS `subject`,
+            IFNULL(c.`name`,"") AS category,
+            IFNULL(sc.start_time, '1970-01-01 00:00:00') AS startTime,
+            IFNULL(sc.end_time, '1970-01-01 00:00:00') AS endTime,
+            IFNULL(s.id,0) AS studentId
+        FROM
+            eas_arc_tls_attendance AS a
+                LEFT JOIN eas_sys_student AS s ON a.student_number = s.student_number
+                LEFT JOIN eas_edu_schedule AS sc ON a.schedule_id = sc.id
+                LEFT JOIN eas_edu_subjects AS su ON sc.subjects_id = su.id
+                LEFT JOIN eas_edu_category AS c ON sc.category_id = c.id
+        WHERE
+            a.student_number = #{studentNumber}
+    </select>
+
+</mapper>

+ 36 - 9
service/src/main/java/com/koobietech/eas/service/impl/EasArcTlsAttendanceServiceImpl.java

@@ -12,6 +12,7 @@ import com.koobietech.eas.common.utils.SecurityUtils;
 import com.koobietech.eas.dao.Pojo.EasArcTlsAttendancePojo;
 import com.koobietech.eas.dao.Pojo.EasArcTlsScoresPojo;
 import com.koobietech.eas.dao.dto.ArchivesDto;
+import com.koobietech.eas.dao.mapper.AttendanceQueryMapper;
 import com.koobietech.eas.mbg.mapper.*;
 import com.koobietech.eas.mbg.model.*;
 import com.koobietech.eas.service.EasArcTlsAttendanceService;
@@ -52,6 +53,9 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
     @Resource
     EasArcArchivesMapper arcArchivesMapper;
 
+    @Resource
+    AttendanceQueryMapper attendanceQueryMapper;
+
     @Override
     public PageData query(EasArcTlsAttendance attendance) {
         EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
@@ -91,8 +95,8 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
         }
 
         List<EasArcTlsAttendance> easArcTlsAttendances =
-                easArcTlsAttendanceMapper.selectByExample(easArcTlsAttendanceExample);
-        long l = easArcTlsAttendanceMapper.countByExample(easArcTlsAttendanceExample);
+                attendanceQueryMapper.selectByExample(easArcTlsAttendanceExample);
+        long l = attendanceQueryMapper.countByExample(easArcTlsAttendanceExample);
         PageData ret = new PageData();
         ret.setData(easArcTlsAttendances);
         ret.setTotal(l);
@@ -186,20 +190,34 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
     @Override
     public Boolean importExcelAttendance(InputStream inputStream) {
         ImportParams importParams = new ImportParams();
+        //设置标题行数
         importParams.setTitleRows(1);
+        //设置标头行数
         importParams.setHeadRows(1);
         try {
+            //调用工具类导入excel
             List<EasArcTlsAttendancePojo> attendance = ExcelImportUtil.importExcel(inputStream,
                     EasArcTlsAttendancePojo.class, importParams);
+            EasArcTlsAttendance easArcTlsAttendance = null;
+            //遍历存储考勤信息
             for (EasArcTlsAttendancePojo attendancePojo : attendance) {
-                attendancePojo.setCreateTime(new Date());
-                EasArcTlsAttendance easArcTlsAttendance = new EasArcTlsAttendance();
+                if ( !StringUtils.hasText(attendancePojo.getStudentNumber()) ) {
+                    continue;
+                }
+                easArcTlsAttendance = new EasArcTlsAttendance();
+                //拷贝考勤信息
                 BeanUtil.copyProperties(attendancePojo, easArcTlsAttendance);
+                easArcTlsAttendance.setCreateUid( SecurityUtils.getLoginUid().intValue() );
+                easArcTlsAttendance.setModifyTime(new Date());
+                easArcTlsAttendance.setCreateTime(new Date());
+                easArcTlsAttendance.setMonth(attendancePojo.getCheckinDate().getMonth());
+                //将excel信息存入数据库
                 easArcTlsAttendanceMapper.insert(easArcTlsAttendance);
+            }
+            if ( Objects.nonNull (easArcTlsAttendance) ) {
+                //考勤信息不为空,存入学生档案
                 saveStudentAttendanceArchive(easArcTlsAttendance);
             }
-        } catch (FileNotFoundException e) {
-            throw new EasException(e.getMessage());
         } catch (Exception e) {
             throw new EasException(e.getMessage());
         } finally {
@@ -217,7 +235,6 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
         EasArcTlsAttendanceExample easArcTlsAttendanceExample = new EasArcTlsAttendanceExample();
         EasArcTlsAttendanceExample.Criteria criteria = easArcTlsAttendanceExample.createCriteria();
         criteria.andStudentNumberEqualTo(attendance.getStudentNumber());
-        //criteria.andScheduleIdEqualTo(attendance.getScheduleId());
         List<EasArcTlsAttendance> easArcTlsAttendances = easArcTlsAttendanceMapper.selectByExample(easArcTlsAttendanceExample);
         ArchivesDto archivesDto = saveEasArcTlsAttendanceToExcel(easArcTlsAttendances, attendance.getStudentNumber());
         EasArcArchives easArcArchives = new EasArcArchives();
@@ -235,16 +252,26 @@ public class EasArcTlsAttendanceServiceImpl implements EasArcTlsAttendanceServic
         return insert == 1;
     }
 
-    private ArchivesDto saveEasArcTlsAttendanceToExcel(List<EasArcTlsAttendance> easArcTlsAttendances, String studentNumber) {
+    private ArchivesDto saveEasArcTlsAttendanceToExcel
+            (List<EasArcTlsAttendance> easArcTlsAttendances, String studentNumber) {
         List<EasArcTlsAttendancePojo> arcTlsAttendanceList = new ArrayList<>();
         for (EasArcTlsAttendance tlsAttendance : easArcTlsAttendances) {
             EasArcTlsAttendancePojo easArcTlsAttendancePojo = new EasArcTlsAttendancePojo();
             BeanUtil.copyProperties(tlsAttendance, easArcTlsAttendancePojo);
+            EasArcTlsAttendancePojo tlsAttendancePojo = attendanceQueryMapper.importExcel(studentNumber);
+            if ( Objects.nonNull(tlsAttendancePojo) ) {
+                easArcTlsAttendancePojo.setCategory(tlsAttendancePojo.getCategory());
+                easArcTlsAttendancePojo.setSubject(tlsAttendancePojo.getSubject());
+                easArcTlsAttendancePojo.setStudentId(tlsAttendancePojo.getStudentId());
+                easArcTlsAttendancePojo.setStartTime(tlsAttendancePojo.getStartTime());
+                easArcTlsAttendancePojo.setEndTime(tlsAttendancePojo.getEndTime());
+            }
             arcTlsAttendanceList.add(easArcTlsAttendancePojo);
         }
+        System.out.println(  arcTlsAttendanceList  );
         ExportParams params = new ExportParams("学员签到表", "签到");
         Workbook workbook = ExcelExportUtil.exportExcel(params,
-                EasArcTlsScoresPojo.class, arcTlsAttendanceList);
+                EasArcTlsAttendancePojo.class, arcTlsAttendanceList);
         ArchivesDto archivesDto = easArchivesFilesService.saveArchiveFile(studentNumber, workbook);
         return archivesDto;
     }

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

@@ -115,14 +115,14 @@ public class EasArchivesFilesServiceImpl implements EasArchivesFilesService {
     }
 
     private ArchivesDto saveArchiveDocumentFile(String studentNumber, XWPFDocument document, String type) {
-        String archiveCode = StudentArchiveGenerator.generateArchiveCode(studentNumber, FileType.valueOf(type).getSuffix());
+        String archiveCode = StudentArchiveGenerator.generateArchiveCode(studentNumber, String.valueOf(FileType.valueOf(type).getValue()));
         String path = getArchivePath(studentNumber, archiveCode, FileType.valueOf(type).getSuffix());
         boolean status = fileManager.saveDocument(document, path);
         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 archiveCode = StudentArchiveGenerator.generateArchiveCode(studentNumber, String.valueOf(FileType.valueOf(type).getValue()));
         String path = getArchivePath(studentNumber, archiveCode, FileType.valueOf(type).getSuffix());
         boolean status = fileManager.saveWorkbook(workbook, path);
         return new ArchivesDto(path, status, archiveCode, type);