通过AI比对原操作文档,生成系统功能完善方案,根据方案进行增补,完善从学期新增到最终的排课功能
This commit is contained in:
@@ -1,18 +1,21 @@
|
||||
package com.roomroot.jwgl.utils;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
/**
|
||||
* 学期代号工具。
|
||||
*
|
||||
* <p>系统内学期统一用 6 位学期代号表示,形如 {@code 202601}:前 4 位为年份,后 2 位为学期第次。
|
||||
*
|
||||
* <p>但「学员队年度学期基本信息表」的 {@code 年度} 列在历史上出现过两种口径:
|
||||
* <p>「年度」列的口径约定(按表区分):
|
||||
* <ul>
|
||||
* <li>4 位年份 + 学期第次,例如 年度=2026、学期第次=1 → 2026 * 100 + 1 = 202601</li>
|
||||
* <li>直接存 6 位学期代号,例如 年度=202503</li>
|
||||
* <li>课程/任务/实施类表(学员队任务表、实施_课程、实施_课程表、课程表):存 <b>6 位学期代号</b>;</li>
|
||||
* <li>学员队年度学期基本信息表(班次学期):存 <b>4 位年份</b> + 学期第次列。</li>
|
||||
* </ul>
|
||||
* 班次学期表的历史数据里「年度」出现过直接存 6 位代号的情况(如 202503),
|
||||
* 把 6 位值再套 {@code nd * 100 + xqdc} 会溢出(202503 * 100 + 1 = 20250301),
|
||||
* 所以各处都需要先判别口径。本工具把两种口径统一解析为 6 位学期代号,
|
||||
* 同时提供「写库时统一为 4 位年份」的规范化方法,避免新增数据继续产生双口径。
|
||||
* 同时提供「写库时统一为 4 位年份」的规范化方法。
|
||||
*/
|
||||
public final class SemesterCodeUtil {
|
||||
|
||||
@@ -22,6 +25,30 @@ public final class SemesterCodeUtil {
|
||||
private SemesterCodeUtil() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 按日期推断「学年内学期类别」:2-5 月春季(1)、6-8 月夏季(2)、9 月-次年 1 月秋季(3)。
|
||||
*
|
||||
* <p>学期第次在全系统的契约是 1/2/3(见 {@code ClassSemesterServiceImpl.assertXqdc} 与
|
||||
* 前端批量建班接口「xqdc 传 春季学期/夏季学期/秋季学期」),它与「专业总第几学期」
|
||||
* (人培/专业教学计划表的口径,1..学期数)是两套不同的编号,不能混用。</p>
|
||||
*
|
||||
* @param date 用于判断学年内位置的日期(优先开学日期,其次入学日期)
|
||||
* @return 1 春季 / 2 夏季 / 3 秋季;日期为空时返回 1
|
||||
*/
|
||||
public static Integer periodOf(LocalDate date) {
|
||||
if (date == null) {
|
||||
return 1;
|
||||
}
|
||||
int month = date.getMonthValue();
|
||||
if (month >= 2 && month <= 5) {
|
||||
return 1;
|
||||
}
|
||||
if (month >= 6 && month <= 8) {
|
||||
return 2;
|
||||
}
|
||||
return 3;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析为 6 位学期代号,兼容 4 位年份与 6 位学期代号两种历史口径。
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user