|
@@ -1,11 +1,19 @@
|
|
|
package com.koobietech.eas.common.utils;
|
|
|
|
|
|
+import com.koobietech.eas.common.constant.UniversityCodeUtils;
|
|
|
+import com.koobietech.eas.common.pojo.ArchiveNumberInfo;
|
|
|
+import com.koobietech.eas.common.pojo.StudentNumberInfo;
|
|
|
+
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.Period;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.Locale;
|
|
|
import java.util.UUID;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author lc
|
|
|
+ */
|
|
|
public class StudentArchiveGenerator {
|
|
|
|
|
|
private static final String ARCHIVE_CODE_PREFIX = "SA";
|
|
@@ -15,8 +23,14 @@ public class StudentArchiveGenerator {
|
|
|
private static final int STUDENT_CODE_LENGTH = 25;
|
|
|
private static final int STUDENT_NUM_LENGTH = 8;
|
|
|
|
|
|
- public static String generateArchiveCode(String generateStudentCode, String fileTypeCode) {
|
|
|
- String studentNum = generateStudentCode.substring(2, STUDENT_NUM_LENGTH + 3).replace("X", "");
|
|
|
+ /**
|
|
|
+ * 生成文件档案编号
|
|
|
+ * @param generateStudentCode
|
|
|
+ * @param fileTypeCode
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String generateArchiveCode(String generateStudentCode, String fileTypeCode) {
|
|
|
+ String studentNum = generateStudentCode.substring(2, STUDENT_NUM_LENGTH + 2);
|
|
|
String nowDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHhmmss", Locale.CHINA));
|
|
|
String archiveCode = ARCHIVE_CODE_PREFIX + studentNum + nowDate + fileTypeCode;
|
|
|
if (archiveCode.length() < ARCHIVE_CODE_LENGTH) {
|
|
@@ -26,11 +40,40 @@ public class StudentArchiveGenerator {
|
|
|
return archiveCode;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ *解析档案编号信息
|
|
|
+ *
|
|
|
+ * @param archiveNumber
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static ArchiveNumberInfo parseArchiveNumber(String archiveNumber) {
|
|
|
+ ArchiveNumberInfo archiveInfo = new ArchiveNumberInfo();
|
|
|
+ String studentCode = archiveNumber.substring(2, STUDENT_NUM_LENGTH);
|
|
|
+ String studentId = studentCode.split("X")[0];
|
|
|
+ String createTime = archiveNumber.substring(STUDENT_NUM_LENGTH + 2, 13);
|
|
|
+ String fileTypeCode = archiveNumber.substring(ARCHIVE_CODE_LENGTH - 2);
|
|
|
+ archiveInfo.setStudentId(Integer.parseInt(studentId));
|
|
|
+ archiveInfo.setCreateTime(Long.parseLong(createTime));
|
|
|
+ archiveInfo.setFileTypeCode(Integer.parseInt(fileTypeCode));
|
|
|
+ return archiveInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成学生档案编码
|
|
|
+ * @param studentNumber
|
|
|
+ * @param studentId
|
|
|
+ * @param schoolName
|
|
|
+ * @param enrollmentDate
|
|
|
+ * @return
|
|
|
+ */
|
|
|
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 studentGender = getStudentGender(studentId).substring(0, 1);
|
|
|
String graduationDate = String.valueOf(getStudentGraduationDate(localDateEnrollmentDate).getYear());
|
|
|
|
|
|
String studentCode = STUDENT_CODE_PEREFIX + studentNum + studentAge +
|
|
@@ -44,14 +87,52 @@ public class StudentArchiveGenerator {
|
|
|
return studentCode;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 解析学生档案编号信息
|
|
|
+ *
|
|
|
+ * @param studentNumber 学生档案编号
|
|
|
+ * @return 学生档案编号信息
|
|
|
+ */
|
|
|
+ public static StudentNumberInfo parseStudentNumber(String studentNumber) {
|
|
|
+ if (studentNumber == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ String studentNum = studentNumber.substring(2, STUDENT_CODE_LENGTH);
|
|
|
+ String studentId = studentNum.split("X")[0];
|
|
|
+ String studentAge = studentNumber.substring(STUDENT_CODE_LENGTH + 2, 2);
|
|
|
+ String studentGender = studentNumber.substring(STUDENT_CODE_LENGTH + 4, 1);
|
|
|
+ String graduationDate = studentNumber.substring(STUDENT_CODE_LENGTH + 5, 4);
|
|
|
+ String schoolCode = studentNumber.substring(STUDENT_CODE_LENGTH + 9);
|
|
|
+ StudentNumberInfo info = new StudentNumberInfo();
|
|
|
+ info.setStudentNum(studentNum);
|
|
|
+ info.setStudentId(Long.valueOf(studentId));
|
|
|
+ info.setStudentAge(Integer.parseInt(studentAge));
|
|
|
+ info.setStudentGender(studentGender);
|
|
|
+ info.setGraduationDate(graduationDate);
|
|
|
+ info.setSchoolName(UniversityCodeUtils.getName(Integer.parseInt(schoolCode)));
|
|
|
+ info.setSchoolCode(Integer.parseInt(schoolCode));
|
|
|
+ return info;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取学生编号,自动补齐
|
|
|
+ * @param studentNumber
|
|
|
+ * @return
|
|
|
+ */
|
|
|
private static String getStudentNum(String studentNumber) {
|
|
|
if (studentNumber.length() < STUDENT_NUM_LENGTH) {
|
|
|
- studentNumber = studentNumber + "X" + UUID.randomUUID().toString()
|
|
|
+ studentNumber = studentNumber + "X" +
|
|
|
+ (UUID.randomUUID().toString().replace("-", "").replace("X", ""))
|
|
|
.toUpperCase(Locale.ROOT).substring(0, STUDENT_NUM_LENGTH - studentNumber.length());
|
|
|
}
|
|
|
return studentNumber;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取学生年龄
|
|
|
+ * @param studentId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
private static int getStudentAge(String studentId) {
|
|
|
LocalDate currentDate = LocalDate.now();
|
|
|
LocalDate birthDateirthDate = extractBirthDate(studentId);
|
|
@@ -59,19 +140,34 @@ public class StudentArchiveGenerator {
|
|
|
return period.getYears();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取学生性别
|
|
|
+ * @param studentId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
private static String getStudentGender(String studentId) {
|
|
|
// 根据身份证号获取性别,这里只取身份证号的倒数第二位判断性别,假设性别代码为奇数表示男性,偶数表示女性
|
|
|
int genderCode = Integer.parseInt(studentId.substring(16, 17));
|
|
|
return genderCode % 2 == 0 ? "F" : "M";
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取学生毕业日期
|
|
|
+ * @param enrollmentDate
|
|
|
+ * @return
|
|
|
+ */
|
|
|
private static LocalDate getStudentGraduationDate(LocalDate enrollmentDate) {
|
|
|
// 假设毕业时间为入学时间的四年后
|
|
|
- LocalDate graduationDate = enrollmentDate.plusYears(4);
|
|
|
- return graduationDate;
|
|
|
+ return enrollmentDate.plusYears(4);
|
|
|
}
|
|
|
- // 提取身份证号码中的出生日期部分
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 提取身份证号码的出生日期部分
|
|
|
+ * @param idCard
|
|
|
+ * @return
|
|
|
+ */
|
|
|
private static LocalDate extractBirthDate(String idCard) {
|
|
|
+ // 提取身份证号码中的出生日期部分
|
|
|
String birthdate = idCard.substring(6, 14);
|
|
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
|
|
|
return LocalDate.parse(birthdate, formatter);
|