superb 1 year ago
parent
commit
c150d9c3c3

+ 12 - 0
common/src/main/java/com/koobietech/eas/common/utils/DateUtils.java

@@ -0,0 +1,12 @@
+package com.koobietech.eas.common.utils;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+public class DateUtils {
+    public static String convertToYearMonthDay(Date date) {
+        SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");
+        return outputFormat.format(date);
+    }
+}

BIN
controller/src/main/resources/temp/StuRegistTemp.docx


BIN
controller/src/main/resources/temp/~$uRegistTemp.docx


+ 17 - 0
mbg/src/main/java/com/koobietech/eas/mbg/model/EasArcTlsStudents.java

@@ -171,6 +171,14 @@ public class EasArcTlsStudents implements Serializable {
     @Schema(description = "创建用户ID")
     private Integer createUid;
 
+    /**
+     * 学生身份证号
+     *
+     * @mbg.generated
+     */
+    @Schema(description = "学生身份证号")
+    private String studentIdnumber;
+
     private static final long serialVersionUID = 1L;
 
     public Integer getId() {
@@ -333,6 +341,14 @@ public class EasArcTlsStudents implements Serializable {
         this.createUid = createUid;
     }
 
+    public String getStudentIdnumber() {
+        return studentIdnumber;
+    }
+
+    public void setStudentIdnumber(String studentIdnumber) {
+        this.studentIdnumber = studentIdnumber == null ? null : studentIdnumber.trim();
+    }
+
     @Override
     public String toString() {
         StringBuilder sb = new StringBuilder();
@@ -359,6 +375,7 @@ public class EasArcTlsStudents implements Serializable {
         sb.append(", admissionsId=").append(admissionsId);
         sb.append(", managerId=").append(managerId);
         sb.append(", createUid=").append(createUid);
+        sb.append(", studentIdnumber=").append(studentIdnumber);
         sb.append(", serialVersionUID=").append(serialVersionUID);
         sb.append("]");
         return sb.toString();

+ 70 - 0
mbg/src/main/java/com/koobietech/eas/mbg/model/EasArcTlsStudentsExample.java

@@ -1431,6 +1431,76 @@ public class EasArcTlsStudentsExample {
             addCriterion("create_uid not between", value1, value2, "createUid");
             return (Criteria) this;
         }
+
+        public Criteria andStudentIdnumberIsNull() {
+            addCriterion("student_idnumber is null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberIsNotNull() {
+            addCriterion("student_idnumber is not null");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberEqualTo(String value) {
+            addCriterion("student_idnumber =", value, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberNotEqualTo(String value) {
+            addCriterion("student_idnumber <>", value, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberGreaterThan(String value) {
+            addCriterion("student_idnumber >", value, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberGreaterThanOrEqualTo(String value) {
+            addCriterion("student_idnumber >=", value, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberLessThan(String value) {
+            addCriterion("student_idnumber <", value, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberLessThanOrEqualTo(String value) {
+            addCriterion("student_idnumber <=", value, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberLike(String value) {
+            addCriterion("student_idnumber like", value, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberNotLike(String value) {
+            addCriterion("student_idnumber not like", value, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberIn(List<String> values) {
+            addCriterion("student_idnumber in", values, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberNotIn(List<String> values) {
+            addCriterion("student_idnumber not in", values, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberBetween(String value1, String value2) {
+            addCriterion("student_idnumber between", value1, value2, "studentIdnumber");
+            return (Criteria) this;
+        }
+
+        public Criteria andStudentIdnumberNotBetween(String value1, String value2) {
+            addCriterion("student_idnumber not between", value1, value2, "studentIdnumber");
+            return (Criteria) this;
+        }
     }
 
     public static class Criteria extends GeneratedCriteria {

+ 20 - 5
mbg/src/main/resources/com/koobietech/eas/mbg/mapper/EasArcTlsStudentsMapper.xml

@@ -22,6 +22,7 @@
     <result column="admissions_id" jdbcType="INTEGER" property="admissionsId" />
     <result column="manager_id" jdbcType="INTEGER" property="managerId" />
     <result column="create_uid" jdbcType="INTEGER" property="createUid" />
+    <result column="student_idnumber" jdbcType="VARCHAR" property="studentIdnumber" />
   </resultMap>
   <sql id="Example_Where_Clause">
     <where>
@@ -84,7 +85,7 @@
   <sql id="Base_Column_List">
     id, archive_number, student_number, student_name, gender, birthdate, address, phone, 
     email, enrollment_date, graduation_date, grade, major, minor, university, create_time, 
-    modify_time, admissions_id, manager_id, create_uid
+    modify_time, admissions_id, manager_id, create_uid, student_idnumber
   </sql>
   <select id="selectByExample" parameterType="com.koobietech.eas.mbg.model.EasArcTlsStudentsExample" resultMap="BaseResultMap">
     select
@@ -126,14 +127,14 @@
       graduation_date, grade, major, 
       minor, university, create_time, 
       modify_time, admissions_id, manager_id, 
-      create_uid)
+      create_uid, student_idnumber)
     values (#{archiveNumber,jdbcType=VARCHAR}, #{studentNumber,jdbcType=VARCHAR}, #{studentName,jdbcType=VARCHAR}, 
       #{gender,jdbcType=CHAR}, #{birthdate,jdbcType=DATE}, #{address,jdbcType=VARCHAR}, 
       #{phone,jdbcType=VARCHAR}, #{email,jdbcType=VARCHAR}, #{enrollmentDate,jdbcType=DATE}, 
       #{graduationDate,jdbcType=DATE}, #{grade,jdbcType=INTEGER}, #{major,jdbcType=VARCHAR}, 
       #{minor,jdbcType=VARCHAR}, #{university,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
       #{modifyTime,jdbcType=TIMESTAMP}, #{admissionsId,jdbcType=INTEGER}, #{managerId,jdbcType=INTEGER}, 
-      #{createUid,jdbcType=INTEGER})
+      #{createUid,jdbcType=INTEGER}, #{studentIdnumber,jdbcType=VARCHAR})
   </insert>
   <insert id="insertSelective" parameterType="com.koobietech.eas.mbg.model.EasArcTlsStudents">
     <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
@@ -198,6 +199,9 @@
       <if test="createUid != null">
         create_uid,
       </if>
+      <if test="studentIdnumber != null">
+        student_idnumber,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
       <if test="archiveNumber != null">
@@ -257,6 +261,9 @@
       <if test="createUid != null">
         #{createUid,jdbcType=INTEGER},
       </if>
+      <if test="studentIdnumber != null">
+        #{studentIdnumber,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <select id="countByExample" parameterType="com.koobietech.eas.mbg.model.EasArcTlsStudentsExample" resultType="java.lang.Long">
@@ -328,6 +335,9 @@
       <if test="record.createUid != null">
         create_uid = #{record.createUid,jdbcType=INTEGER},
       </if>
+      <if test="record.studentIdnumber != null">
+        student_idnumber = #{record.studentIdnumber,jdbcType=VARCHAR},
+      </if>
     </set>
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
@@ -354,7 +364,8 @@
       modify_time = #{record.modifyTime,jdbcType=TIMESTAMP},
       admissions_id = #{record.admissionsId,jdbcType=INTEGER},
       manager_id = #{record.managerId,jdbcType=INTEGER},
-      create_uid = #{record.createUid,jdbcType=INTEGER}
+      create_uid = #{record.createUid,jdbcType=INTEGER},
+      student_idnumber = #{record.studentIdnumber,jdbcType=VARCHAR}
     <if test="_parameter != null">
       <include refid="Update_By_Example_Where_Clause" />
     </if>
@@ -419,6 +430,9 @@
       <if test="createUid != null">
         create_uid = #{createUid,jdbcType=INTEGER},
       </if>
+      <if test="studentIdnumber != null">
+        student_idnumber = #{studentIdnumber,jdbcType=VARCHAR},
+      </if>
     </set>
     where id = #{id,jdbcType=INTEGER}
   </update>
@@ -442,7 +456,8 @@
       modify_time = #{modifyTime,jdbcType=TIMESTAMP},
       admissions_id = #{admissionsId,jdbcType=INTEGER},
       manager_id = #{managerId,jdbcType=INTEGER},
-      create_uid = #{createUid,jdbcType=INTEGER}
+      create_uid = #{createUid,jdbcType=INTEGER},
+      student_idnumber = #{studentIdnumber,jdbcType=VARCHAR}
     where id = #{id,jdbcType=INTEGER}
   </update>
 </mapper>

+ 53 - 55
service/src/main/java/com/koobietech/eas/service/impl/EasStuProfileServiceImpl.java

@@ -1,20 +1,23 @@
 package com.koobietech.eas.service.impl;
 
 import com.koobietech.eas.common.result.JsonResult;
+import com.koobietech.eas.common.utils.DateUtils;
 import com.koobietech.eas.common.utils.StudentArchiveGenerator;
 import com.koobietech.eas.mbg.model.EasArcTlsStudents;
 import com.koobietech.eas.service.EasStuProfileService;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
+import org.apache.poi.util.Units;
 import org.apache.poi.xwpf.usermodel.XWPFDocument;
 import org.apache.poi.xwpf.usermodel.XWPFTable;
 import org.apache.poi.xwpf.usermodel.XWPFTableCell;
 import org.apache.poi.xwpf.usermodel.XWPFTableRow;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.apache.poi.util.Units;
 import org.springframework.stereotype.Service;
 
-import java.io.*;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
 import java.util.*;
 
 @Service
@@ -31,48 +34,31 @@ public class EasStuProfileServiceImpl implements EasStuProfileService {
 
         try (InputStream wordStream = getClass().getClassLoader().getResourceAsStream(TEMPLATE_PATH)) {
             assert wordStream != null;
-            XWPFDocument doc = new XWPFDocument(wordStream);
-
-            Map<String, Object> map = new HashMap<>();
-            map.put("student_name", easArcTlsStudents.getStudentName());
-            map.put("gender", easArcTlsStudents.getGender());
-            map.put("major", easArcTlsStudents.getMajor());
-            map.put("grade", easArcTlsStudents.getGrade());
-            map.put("enrollment_date", easArcTlsStudents.getEnrollmentDate());
-            map.put("phone", easArcTlsStudents.getPhone());
-            map.put("university", easArcTlsStudents.getUniversity());
-
-            InputStream photo = getClass().getClassLoader().getResourceAsStream(PHOTO_PATH);
-            System.out.println( photo );
-            map.put("avatar", photo);
-
-            /**
-             public static String generateStudentCode(String studentNumber, String studentId, String schoolName, String enrollmentDate) {
-             LocalDate localDateEnrollmentDate = LocalDate.of(Integer.parseInt(enrollmentDate), 1, 1);
-             String studentAge = String.valueOf(getStudentAge(studentId));
-             String studentNum = getStudentNum(studentNumber);
-             String studentGender = getStudentGender(studentId).substring(0, 1); // 取性别代码的首字母
-             String graduationDate = String.valueOf(getStudentGraduationDate(localDateEnrollmentDate).getYear());
-
-             String studentCode = STUDENT_CODE_PEREFIX + studentNum + studentAge +
-             studentGender + graduationDate + schoolName;
-
-             // 如果生成的档案编码长度不足,用UUID填充
-             if (studentCode.length() < STUDENT_CODE_LENGTH) {
-             studentCode += UUID.randomUUID().toString()
-             .substring(0, STUDENT_CODE_LENGTH - studentCode.length());
-             }
-             return studentCode;
-             }
-             */
-            //使用工具类生成学员档案号
-            String student_number = StudentArchiveGenerator.generateStudentCode(
-                    "", "232126199003194781", "11273", "2023");
-
-
-            replacePlaceholders(doc, map);
-
-            saveDocument(doc);
+            try (XWPFDocument doc = new XWPFDocument(wordStream)) {
+
+                Map<String, Object> map = new HashMap<>();
+                map.put("student_name", easArcTlsStudents.getStudentName());
+
+                //调用内部类方法 把MF转换成 男女
+                map.put("gender", convertToGender(easArcTlsStudents.getGender()));
+
+                map.put("major", easArcTlsStudents.getMajor());
+                map.put("grade", easArcTlsStudents.getGrade());
+
+                //调用自定义的时间格式转换器 把前端传过来的带时分秒时间转换成 2019年12月12日
+                map.put("enrollment_date", DateUtils.convertToYearMonthDay(easArcTlsStudents.getEnrollmentDate()));
+
+                map.put("phone", easArcTlsStudents.getPhone());
+                map.put("university", easArcTlsStudents.getUniversity());
+                map.put("student_idnumber", easArcTlsStudents.getStudentIdnumber());
+                map.put("avatar", getClass().getClassLoader().getResourceAsStream(PHOTO_PATH));
+
+                //调用内部类方法 生成学号
+                map.put("student_number", generateStudentNumber(easArcTlsStudents));
+
+                replacePlaceholders(doc, map);
+                saveDocument(doc);
+            }
         } catch (IOException e) {
             LOGGER.error("学员档案导出失败:{}", e.getMessage(), e);
             return JsonResult.fail("学员档案导出失败!");
@@ -82,16 +68,29 @@ public class EasStuProfileServiceImpl implements EasStuProfileService {
         return JsonResult.ok("学员档案导出成功!");
     }
 
+    private String generateStudentNumber(EasArcTlsStudents easArcTlsStudents) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(easArcTlsStudents.getEnrollmentDate());
+        String year = String.valueOf(calendar.get(Calendar.YEAR));
+
+        return StudentArchiveGenerator.generateStudentCode(
+                "", easArcTlsStudents.getStudentIdnumber(), easArcTlsStudents.getUniversity(), year);
+    }
+
+    private String convertToGender(String gender) {
+        if (gender.equals("M")) {
+            return "男";
+        } else if (gender.equals("F")) {
+            return "女";
+        } else {
+            return "未知";
+        }
+    }
+
     private void replacePlaceholders(XWPFDocument document, Map<String, Object> map) {
-        Iterator<XWPFTable> it = document.getTablesIterator();
-
-        while (it.hasNext()) {
-            XWPFTable table = it.next();
-            int rcount = table.getNumberOfRows();
-            for (int n = 0; n < rcount; n++) {
-                XWPFTableRow wrow = table.getRow(n);
-                List<XWPFTableCell> cells = wrow.getTableCells();
-                for (XWPFTableCell cell : cells) {
+        for (XWPFTable table : document.getTables()) {
+            for (XWPFTableRow row : table.getRows()) {
+                for (XWPFTableCell cell : row.getTableCells()) {
                     String cellText = cell.getText();
                     if (!cellText.contains("${")) {
                         continue;
@@ -102,7 +101,6 @@ public class EasStuProfileServiceImpl implements EasStuProfileService {
                             try {
                                 cell.removeParagraph(0);
                                 if (value instanceof InputStream) {
-                                    //如果是放置图片的单元格,在这里添加一个计算图片合适大小的方法,按比例
                                     cell.addParagraph().createRun().addPicture((InputStream) value,
                                             XWPFDocument.PICTURE_TYPE_JPEG, "avatar.jpg",
                                             Units.pixelToEMU(110), Units.pixelToEMU(140));
@@ -124,6 +122,6 @@ public class EasStuProfileServiceImpl implements EasStuProfileService {
             document.write(outputStream);
         }
     }
+}
 
 
-}