后端代码

This commit is contained in:
liumengyu
2026-08-24 17:48:55 +08:00
parent e0485f7366
commit aa4145fd33
419 changed files with 3684 additions and 53031 deletions
@@ -0,0 +1,37 @@
package com.roomroot.jwgl.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.roomroot.jwgl.dto.jys.ElectiveCourseQuery;
import com.roomroot.jwgl.vo.jys.ElectiveCourseStudentVO;
import com.roomroot.jwgl.vo.jys.ElectiveCourseVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
/**
* 选修课管理自定义查询(学员队任务表 + 学员队表 + 课表)。
*/
@Mapper
public interface ElectiveCourseMapper {
Page<ElectiveCourseVO> selectElectiveCoursePage(Page<ElectiveCourseVO> page,
@Param("cond") ElectiveCourseQuery cond);
List<ElectiveCourseVO> selectElectiveCourseList(@Param("cond") ElectiveCourseQuery cond);
List<ElectiveCourseStudentVO> selectElectiveStudents(@Param("xydbh") String xydbh);
List<String> selectOriginalClassNames(@Param("xydbh") String xydbh);
Integer countPinban(@Param("xydbh") String xydbh);
int insertPinban(@Param("xydbh") String xydbh, @Param("zt") String zt,
@Param("jhkssj") LocalDateTime jhkssj, @Param("jhjssj") LocalDateTime jhjssj,
@Param("yqsm") String yqsm, @Param("bmdtj") String bmdtj, @Param("bz") String bz);
int updatePinban(@Param("xydbh") String xydbh, @Param("zt") String zt,
@Param("jhkssj") LocalDateTime jhkssj, @Param("jhjssj") LocalDateTime jhjssj,
@Param("yqsm") String yqsm, @Param("bmdtj") String bmdtj);
}
@@ -0,0 +1,201 @@
<?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.roomroot.jwgl.mapper.ElectiveCourseMapper">
<resultMap id="ElectiveCourseResultMap" type="com.roomroot.jwgl.vo.jys.ElectiveCourseVO">
<result column="bh" property="bh"/>
<result column="nd" property="nd"/>
<result column="xydbh" property="xydbh"/>
<result column="kbh" property="kbh"/>
<result column="jybh" property="jybh"/>
<result column="jsbh" property="jsbh"/>
<result column="kmc" property="kmc"/>
<result column="jcmc" property="jcmc"/>
<result column="jyxm" property="jyxm"/>
<result column="jsmc" property="jsmc"/>
<result column="kxdlbc" property="kxdlbc"/>
<result column="jhxs" property="jhxs"/>
<result column="yxxs" property="yxxs"/>
<result column="xf" property="xf"/>
<result column="jhyxxsxf" property="jhyxxsxf"/>
<result column="kkjkrq" property="kkjkrq"/>
<result column="bmrq" property="bmrq"/>
<result column="jhrs" property="jhrs"/>
<result column="yqsm" property="yqsm"/>
<result column="xxbmc" property="xxbmc"/>
<result column="xkzt" property="xkzt"/>
<result column="pxcc" property="pxcc"/>
</resultMap>
<resultMap id="ElectiveStudentResultMap" type="com.roomroot.jwgl.vo.jys.ElectiveCourseStudentVO">
<result column="xxbmc" property="xxbmc"/>
<result column="kmc" property="kmc"/>
<result column="xh_no" property="xhNo"/>
<result column="xm" property="xm"/>
<result column="xb" property="xb"/>
<result column="lxdh" property="lxdh"/>
</resultMap>
<sql id="ElectiveCourseColumns">
t."编号" AS bh,
t."年度" AS nd,
t."学员队编号" AS xydbh,
t."课编号" AS kbh,
t."教员编号" AS jybh,
t."教室编号" AS jsbh,
k."课名称" AS kmc,
(SELECT WM_CONCAT(DISTINCT jc."名称")
FROM "课程教材" kj
LEFT JOIN "教材信息" jc ON jc."编号" = kj."教材编号"
WHERE kj."课编号" = t."课编号") AS jcmc,
jy."教员姓名" AS jyxm,
(SELECT MAX(js."教室名称") FROM "教室表" js WHERE js."教室编号" = t."教室编号") AS jsmc,
COALESCE(pb."白名单条件", xyd."学员队名称") AS kxdlbc,
COALESCE(sskc.jhxs, t."学时", k."学时") AS jhxs,
sskc.yxxs AS yxxs,
COALESCE(sskc.xf, t."学分", k."学分") AS xf,
(NVL(TO_CHAR(COALESCE(sskc.jhxs, t."学时", k."学时")), '-')
|| ' / ' || NVL(TO_CHAR(sskc.yxxs), '-')
|| ' / ' || NVL(TO_CHAR(COALESCE(sskc.xf, t."学分", k."学分")), '-')) AS jhyxxsxf,
CASE
WHEN COALESCE(xq.kxrq, xyd."入学日期") IS NULL THEN NULL
ELSE TO_CHAR(COALESCE(xq.kxrq, xyd."入学日期"), 'YYYY-MM-DD')
|| ' ~ '
|| NVL(TO_CHAR(COALESCE(xq.jsrq, xyd."毕业日期"), 'YYYY-MM-DD'), '-')
END AS kkjkrq,
CASE
WHEN COALESCE(pb."计划开始时间", q."入学日期") IS NULL THEN NULL
ELSE TO_CHAR(COALESCE(pb."计划开始时间", q."入学日期"), 'YYYY-MM-DD')
|| ' ~ '
|| NVL(TO_CHAR(COALESCE(pb."计划结束时间", q."结束注册时间"), 'YYYY-MM-DD'), '-')
END AS bmrq,
COALESCE(t."人数", xyd."学员队人数") AS jhrs,
pb."要求说明" AS yqsm,
xyd."学员队名称" AS xxbmc,
COALESCE(pb."状态",
CASE t."选择" WHEN 1 THEN '开放报名' WHEN 2 THEN '停止报名' ELSE '拟制' END) AS xkzt,
k."培训层次" AS pxcc
</sql>
<sql id="ElectiveCourseFromWhere">
FROM "学员队任务表" t
INNER JOIN "学员队表" xyd ON t."学员队编号" = xyd."学员队编号"
INNER JOIN "课表" k ON t."课编号" = k."课编号"
LEFT JOIN "教员表" jy ON t."教员编号" = jy."教员编号"
LEFT JOIN "学员队拼班信息" pb ON pb."学员队编号" = t."学员队编号"
LEFT JOIN "学员队期表" q ON q."学员队编号" = t."学员队编号"
LEFT JOIN (
SELECT "学员队编号", "年度", "学期第次",
MIN("开学日期") AS kxrq, MAX("结束日期") AS jsrq
FROM "学员队年度学期基本信息表"
GROUP BY "学员队编号", "年度", "学期第次"
) xq ON xq."学员队编号" = t."学员队编号"
AND xq."年度" = t."年度"
AND xq."学期第次" = t."学期第次"
LEFT JOIN (
SELECT "科目编号", "教员编号", "年度",
MAX("学时") AS jhxs, MAX("运行学时") AS yxxs, MAX("学分") AS xf
FROM "实施_课程"
GROUP BY "科目编号", "教员编号", "年度"
) sskc ON sskc."科目编号" = t."课编号"
AND (sskc."教员编号" = t."教员编号" OR t."教员编号" IS NULL)
AND (sskc."年度" = t."年度" OR t."年度" IS NULL)
<where>
t."课类型" LIKE '%选修%'
AND (t.DEL_FLAG = 0 OR t.DEL_FLAG IS NULL)
<if test="cond != null and cond.jyxm != null and cond.jyxm != ''">
AND jy."教员姓名" LIKE CONCAT('%', #{cond.jyxm}, '%')
</if>
<if test="cond != null and cond.kmc != null and cond.kmc != ''">
AND k."课名称" LIKE CONCAT('%', #{cond.kmc}, '%')
</if>
<if test="cond != null and cond.kxbcnj != null and cond.kxbcnj != ''">
AND (xyd."年级" LIKE CONCAT('%', #{cond.kxbcnj}, '%')
OR pb."白名单条件" LIKE CONCAT('%', #{cond.kxbcnj}, '%')
OR xyd."学员队名称" LIKE CONCAT('%', #{cond.kxbcnj}, '%'))
</if>
<if test="cond != null and cond.xxbmc != null and cond.xxbmc != ''">
AND xyd."学员队名称" LIKE CONCAT('%', #{cond.xxbmc}, '%')
</if>
<if test="cond != null and cond.xkzt != null and cond.xkzt != ''">
AND COALESCE(pb."状态",
CASE t."选择" WHEN 1 THEN '开放报名' WHEN 2 THEN '停止报名' ELSE '拟制' END) = #{cond.xkzt}
</if>
<if test="cond != null and cond.pxcc != null and cond.pxcc != ''">
AND k."培训层次" = #{cond.pxcc}
</if>
<if test="cond != null and cond.bhList != null and cond.bhList.size() &gt; 0">
AND t."编号" IN
<foreach collection="cond.bhList" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
</where>
</sql>
<select id="selectElectiveCoursePage" resultMap="ElectiveCourseResultMap">
SELECT
<include refid="ElectiveCourseColumns"/>
<include refid="ElectiveCourseFromWhere"/>
ORDER BY t."年度" DESC, t."编号"
</select>
<select id="selectElectiveCourseList" resultMap="ElectiveCourseResultMap">
SELECT
<include refid="ElectiveCourseColumns"/>
<include refid="ElectiveCourseFromWhere"/>
ORDER BY t."年度" DESC, t."编号"
</select>
<select id="selectElectiveStudents" resultMap="ElectiveStudentResultMap">
SELECT
xyd."学员队名称" AS xxbmc,
NULL AS kmc,
s."学号" AS xh_no,
s."姓名" AS xm,
s."性别" AS xb,
s."联系电话" AS lxdh
FROM "学员信息表" s
LEFT JOIN "学员队期表" q ON q."编号" = s."学员队期编号"
LEFT JOIN "学员队表" xyd ON xyd."学员队编号" = #{xydbh}
WHERE s."当前班次编号" = #{xydbh}
OR q."学员队编号" = #{xydbh}
ORDER BY s."学号"
</select>
<select id="selectOriginalClassNames" resultType="java.lang.String">
SELECT DISTINCT COALESCE(orig."学员队名称", prev."学员队名称")
FROM "学员信息表" s
LEFT JOIN "学员队期表" q ON q."编号" = s."学员队期编号"
LEFT JOIN "学员队表" orig
ON orig."学员队编号" = q."学员队编号"
AND orig."学员队编号" != #{xydbh}
LEFT JOIN "学员队表" prev ON prev."学员队编号" = s."上一个部别编号"
WHERE (s."当前班次编号" = #{xydbh} OR q."学员队编号" = #{xydbh})
AND COALESCE(orig."学员队名称", prev."学员队名称") IS NOT NULL
</select>
<select id="countPinban" resultType="java.lang.Integer">
SELECT COUNT(1) FROM "学员队拼班信息" WHERE "学员队编号" = #{xydbh}
</select>
<insert id="insertPinban">
INSERT INTO "学员队拼班信息"(
"学员队编号", "状态", "计划开始时间", "计划结束时间", "要求说明", "白名单条件", "备注"
) VALUES (
#{xydbh}, #{zt}, #{jhkssj}, #{jhjssj}, #{yqsm}, #{bmdtj}, #{bz}
)
</insert>
<update id="updatePinban">
UPDATE "学员队拼班信息"
<set>
<if test="zt != null">"状态" = #{zt},</if>
<if test="jhkssj != null">"计划开始时间" = #{jhkssj},</if>
<if test="jhjssj != null">"计划结束时间" = #{jhjssj},</if>
<if test="yqsm != null">"要求说明" = #{yqsm},</if>
<if test="bmdtj != null">"白名单条件" = #{bmdtj},</if>
</set>
WHERE "学员队编号" = #{xydbh}
</update>
</mapper>
@@ -6,6 +6,7 @@ import com.roomroot.jwgl.entity.JYB;
import com.roomroot.jwgl.vo.faculty.TeacherListVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* 教员表 Mapper
@@ -27,4 +28,9 @@ public interface JYBMapper extends BaseMapper<JYB> {
/** 教员列表双表联查分页 */
Page<TeacherListVO> selectTeacherPageList(Page<TeacherListVO> page, @Param("jyb") JYB cond);
@Select("SELECT TRIM(b.\"教员编号\") FROM \"教员登录表\" b "
+ "JOIN \"登录信息表\" a ON TRIM(a.\"编号\") = TRIM(b.\"登录信息编号\") "
+ "WHERE TRIM(a.\"账号\") = #{username}")
String selectTeacherIdByAccount(@Param("username") String username);
}
@@ -0,0 +1,28 @@
package com.roomroot.jwgl.mapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.roomroot.jwgl.dto.kcb.TimetableQuery;
import com.roomroot.jwgl.vo.kcb.ClassTimetableVO;
import com.roomroot.jwgl.vo.kcb.DailyWeeklyTimetableVO;
import com.roomroot.jwgl.vo.kcb.SemesterGradeExportVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 今日 / 本周 / 班次课表查询。
*/
@Mapper
public interface KcbTimetableMapper {
List<DailyWeeklyTimetableVO> selectLessonTimetable(@Param("cond") TimetableQuery cond,
@Param("startDate") String startDate, @Param("endDate") String endDate);
Page<ClassTimetableVO> selectClassTimetable(Page<ClassTimetableVO> page,
@Param("cond") TimetableQuery cond);
List<ClassTimetableVO> selectClassTimetableList(@Param("cond") TimetableQuery cond);
List<SemesterGradeExportVO> selectSemesterGrades(@Param("cond") TimetableQuery cond);
}
@@ -0,0 +1,170 @@
<?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.roomroot.jwgl.mapper.KcbTimetableMapper">
<sql id="LessonTeamFilter">
<if test="cond != null and cond.xydbh != null and cond.xydbh != ''">
AND EXISTS (
SELECT 1 FROM "实施_课程表_学员队" txf
WHERE txf."实施_课程表编号" = s."编号"
AND txf."学员队编号" = #{cond.xydbh}
)
</if>
<if test="cond != null and cond.xydmc != null and cond.xydmc != ''">
AND EXISTS (
SELECT 1 FROM "实施_课程表_学员队" txf
INNER JOIN "学员队表" xydf ON xydf."学员队编号" = txf."学员队编号"
WHERE txf."实施_课程表编号" = s."编号"
AND xydf."学员队名称" LIKE CONCAT('%', #{cond.xydmc}, '%')
)
</if>
<if test="cond != null and cond.xqdc != null">
AND EXISTS (
SELECT 1 FROM "实施_课程学员队" cxf
WHERE cxf."实施_课程编号" = c."编号"
AND cxf."学期第次" = #{cond.xqdc}
)
</if>
</sql>
<select id="selectLessonTimetable" resultType="com.roomroot.jwgl.vo.kcb.DailyWeeklyTimetableVO">
SELECT
s."编号" AS bh,
TO_CHAR(s."日期", 'YYYY-MM-DD') || ' 第' || CAST(s."节次" AS VARCHAR) || '节' AS sksj,
MAX(k."课名称") AS kc,
MAX(jys."教研室名称") AS zrdw,
WM_CONCAT(DISTINCT xyd."学员队名称") AS bc,
COALESCE(WM_CONCAT(DISTINCT jyf."教员姓名"), MAX(jy."教员姓名")) AS jy,
COALESCE(WM_CONCAT(DISTINCT js."教室名称"), MAX(js2."教室名称")) AS cd,
TRIM(NVL(MAX(s."教学内容"), '')
|| CASE
WHEN MAX(s."教学方法") IS NOT NULL AND MAX(s."教学方法") != ''
THEN ' / ' || MAX(s."教学方法")
ELSE ''
END) AS jxnrxff,
COALESCE(MAX(s."教务备注"), MAX(s."教员备注"), MAX(
(SELECT MAX(kcb."备注") FROM "课程表" kcb
WHERE kcb."年度" = s."年度"
AND kcb."教员编号" = c."教员编号"
AND kcb."课次序号" = c."教员课次序号")
)) AS bz
FROM "实施_课程表" s
LEFT JOIN "实施_课程" c ON CAST(c."编号" AS CHAR(36)) = TRIM(s."实施_课程编号")
LEFT JOIN "课表" k ON (k."课编号" = c."科目编号" OR k."科目代码" = c."科目编号")
LEFT JOIN "教研室表" jys ON jys."教研室代号" = k."教研室代号"
LEFT JOIN "教员表" jy ON jy."教员编号" = c."教员编号"
LEFT JOIN "实施_课程表_学员队" tx ON tx."实施_课程表编号" = s."编号"
LEFT JOIN "学员队表" xyd ON xyd."学员队编号" = tx."学员队编号"
LEFT JOIN "实施_课程表_教室" jsx ON jsx."实施_课程表编号" = s."编号"
LEFT JOIN "教室表" js ON js."教室编号" = jsx."教室编号"
LEFT JOIN "教室表" js2 ON js2."教室编号" = c."教室编号"
LEFT JOIN "实施_课程表_辅助教员" fz ON fz."实施_课程表编号" = s."编号"
LEFT JOIN "教员表" jyf ON jyf."教员编号" = fz."辅助教员编号"
WHERE COALESCE(s."删除状态", 0) = 0
<if test="cond != null and cond.nd != null">
AND s."年度" = #{cond.nd}
</if>
<if test="startDate != null and startDate != ''">
AND TO_CHAR(s."日期", 'YYYY-MM-DD') &gt;= #{startDate}
</if>
<if test="endDate != null and endDate != ''">
AND TO_CHAR(s."日期", 'YYYY-MM-DD') &lt;= #{endDate}
</if>
<include refid="LessonTeamFilter"/>
GROUP BY s."编号", s."日期", s."节次", s."年度", c."教员编号", c."教员课次序号"
ORDER BY s."日期", s."节次", s."编号"
</select>
<sql id="ClassTimetableWhere">
WHERE 1 = 1
<if test="cond != null and cond.nd != null">
AND COALESCE(cx."年度", c."年度") = #{cond.nd}
</if>
<if test="cond != null and cond.xqdc != null">
AND cx."学期第次" = #{cond.xqdc}
</if>
<if test="cond != null and cond.xydbh != null and cond.xydbh != ''">
AND cx."学员队编号" = #{cond.xydbh}
</if>
<if test="cond != null and cond.xydmc != null and cond.xydmc != ''">
AND xyd."学员队名称" LIKE CONCAT('%', #{cond.xydmc}, '%')
</if>
</sql>
<sql id="ClassTimetableSelect">
SELECT
c."编号" AS sskcbh,
(NVL(k."课名称", c."科目编号")
|| ' / '
|| NVL(TO_CHAR(c."课程课时系数"), '-')) AS kcmcksxs,
(NVL(zjy."教员姓名", '-')
|| ' / '
|| NVL(TO_CHAR(c."教员课次序号"),
TO_CHAR((SELECT COUNT(1) FROM "实施_课程表" t
WHERE CAST(c."编号" AS CHAR(36)) = TRIM(t."实施_课程编号")
AND COALESCE(t."删除状态", 0) = 0)))) AS zrjykc,
c."学时" AS jhxs,
c."运行学时" AS yxxs,
COALESCE(k."考核方式", c."成绩分制") AS khlxfs,
sjy."教员姓名" AS ssjy,
(NVL(TO_CHAR(cx."人数"), NVL(TO_CHAR(xyd."学员队人数"), '-'))
|| ' / '
|| NVL((SELECT WM_CONCAT(DISTINCT js."教室名称")
FROM "实施_课程表" t
LEFT JOIN "实施_课程表_教室" jsx ON jsx."实施_课程表编号" = t."编号"
LEFT JOIN "教室表" js ON js."教室编号" = jsx."教室编号"
WHERE CAST(c."编号" AS CHAR(36)) = TRIM(t."实施_课程编号")
AND COALESCE(t."删除状态", 0) = 0),
NVL(js0."教室名称", '-'))) AS rscd,
(SELECT WM_CONCAT(DISTINCT sq."事由")
FROM "实施_调课申请" sq
INNER JOIN "实施_课程表" t ON t."编号" = sq."实施_课程表编号"
WHERE CAST(c."编号" AS CHAR(36)) = TRIM(t."实施_课程编号")) AS ssjhbg
FROM "实施_课程" c
INNER JOIN "实施_课程学员队" cx ON cx."实施_课程编号" = c."编号"
LEFT JOIN "学员队表" xyd ON xyd."学员队编号" = cx."学员队编号"
LEFT JOIN "课表" k ON (k."课编号" = c."科目编号" OR k."科目代码" = c."科目编号")
LEFT JOIN "教员表" zjy ON zjy."教员编号" = c."责任教员编号"
LEFT JOIN "教员表" sjy ON sjy."教员编号" = c."教员编号"
LEFT JOIN "教室表" js0 ON js0."教室编号" = c."教室编号"
</sql>
<select id="selectClassTimetable" resultType="com.roomroot.jwgl.vo.kcb.ClassTimetableVO">
<include refid="ClassTimetableSelect"/>
<include refid="ClassTimetableWhere"/>
ORDER BY k."课名称", c."编号"
</select>
<select id="selectClassTimetableList" resultType="com.roomroot.jwgl.vo.kcb.ClassTimetableVO">
<include refid="ClassTimetableSelect"/>
<include refid="ClassTimetableWhere"/>
ORDER BY k."课名称", c."编号"
</select>
<select id="selectSemesterGrades" resultType="com.roomroot.jwgl.vo.kcb.SemesterGradeExportVO">
SELECT
s."学号" AS xh,
s."姓名" AS xm,
COALESCE(k."课名称", g."科目编号") AS kcmc,
g."平时成绩" AS pscj,
g."考试成绩" AS kscj,
g."最终成绩" AS zzcj,
g."考试情况" AS ksqk,
g."年度" AS nd
FROM "学员课程成绩" g
LEFT JOIN "学员信息表" s ON s."编号" = g."学员编号"
LEFT JOIN "课表" k ON (k."课编号" = g."科目编号" OR k."科目代码" = g."科目编号")
LEFT JOIN "学员队表" xyd ON xyd."学员队编号" = g."学员队编号"
WHERE 1 = 1
<if test="cond != null and cond.nd != null">
AND g."年度" = #{cond.nd}
</if>
<if test="cond != null and cond.xydbh != null and cond.xydbh != ''">
AND g."学员队编号" = #{cond.xydbh}
</if>
<if test="cond != null and cond.xydmc != null and cond.xydmc != ''">
AND xyd."学员队名称" LIKE CONCAT('%', #{cond.xydmc}, '%')
</if>
ORDER BY s."学号", k."课名称"
</select>
</mapper>
@@ -3,58 +3,45 @@ package com.roomroot.jwgl.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.roomroot.jwgl.entity.SSDKSQ;
import com.roomroot.jwgl.vo.courserunning.AdjustableLessonVO;
import com.roomroot.jwgl.vo.courserunning.ScheduleAdjustApplyVO;
import com.roomroot.jwgl.vo.courserunning.ScheduleAdjustDetailVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 实施_调课申请 Mapper。
* <p>
* 提供调课申请数据的CRUD操作及调课管理相关的自定义查询。
* </p>
*/
@Mapper
public interface SSDKSQMapper extends BaseMapper<SSDKSQ> {
/**
* 分页查询调课申请列表。
* <p>
* 支持按实施_课程表编号、申请教员编号、年度、教研室审批状态、
* 教研室查收状态、删除状态和申请日期范围筛选。
* 关联课程表获取课程名称,关联教员表获取申请教员姓名。
* </p>
*
* @param page MyBatis-Plus 分页对象
* @param sskcbbh 实施_课程表编号
* @param sqjybh 申请教员编号
* @param nd 年度
* @param jyspzzt 教研室审批状态
* @param jyscszt 教研室查收状态
* @param sczt 删除状态
* @param cjsjStart 申请日期范围开始
* @param cjsjEnd 申请日期范围结束
* @return 分页调课申请列表
*/
Page<ScheduleAdjustApplyVO> selectPageList(
Page<ScheduleAdjustApplyVO> page,
@Param("sskcbbh") String sskcbbh,
@Param("xydrwbh") String xydrwbh,
@Param("kbh") String kbh,
@Param("sqjybh") String sqjybh,
@Param("jysdh") String jysdh,
@Param("nd") Integer nd,
@Param("jyspzzt") Integer jyspzzt,
@Param("jyscszt") Integer jyscszt,
@Param("jgspzt") Integer jgspzt,
@Param("sczt") Integer sczt,
@Param("cjsjStart") String cjsjStart,
@Param("cjsjEnd") String cjsjEnd);
/**
* 根据调课申请编号查询调课申请详情。
* <p>
* 关联课程表获取课程名称,关联教员表获取申请教员姓名。
* </p>
*
* @param ssdksqbh 调课申请编号
* @return 调课申请详情
* 根据调课申请编号查询详情。
*/
ScheduleAdjustDetailVO selectDetailById(@Param("ssdksqbh") String ssdksqbh);
/**
* 查询可供调课的课次(学员队任务表 + 课表 + 课程表)。
*/
List<AdjustableLessonVO> selectAdjustableLessons(@Param("jybh") String jybh, @Param("nd") Integer nd);
}
@@ -2,11 +2,17 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.roomroot.jwgl.mapper.SSDKSQMapper">
<!-- 调课申请列表结果映射 -->
<resultMap id="ScheduleAdjustApplyMap" type="com.roomroot.jwgl.vo.courserunning.ScheduleAdjustApplyVO">
<result column="调课申请编号" property="ssdksqbh"/>
<result column="实施_课程表编号" property="sskcbbh"/>
<result column="学员队任务编号" property="xydrwbh"/>
<result column="课编号" property="kbh"/>
<result column="课程表编号" property="kcbbh"/>
<result column="课程名称" property="kcmc"/>
<result column="学员队名称" property="xydmc"/>
<result column="教研室代号" property="jysdh"/>
<result column="原教室编号" property="yjsbh"/>
<result column="新教室编号" property="xjsbh"/>
<result column="申请教员编号" property="sqjybh"/>
<result column="申请教员姓名" property="sqjyxm"/>
<result column="事由" property="sy"/>
@@ -16,15 +22,22 @@
<result column="创建时间" property="cjsj"/>
<result column="教研室批准状态" property="jyspzzt"/>
<result column="教研室查收状态" property="jyscszt"/>
<result column="机关审批状态" property="jgspzt"/>
<result column="发回意见" property="fhyj"/>
<result column="删除状态" property="sczt"/>
</resultMap>
<!-- 调课申请详情结果映射 -->
<resultMap id="ScheduleAdjustDetailMap" type="com.roomroot.jwgl.vo.courserunning.ScheduleAdjustDetailVO">
<result column="调课申请编号" property="ssdksqbh"/>
<result column="实施_课程表编号" property="sskcbbh"/>
<result column="学员队任务编号" property="xydrwbh"/>
<result column="课编号" property="kbh"/>
<result column="课程表编号" property="kcbbh"/>
<result column="课程名称" property="kcmc"/>
<result column="学员队名称" property="xydmc"/>
<result column="教研室代号" property="jysdh"/>
<result column="原教室编号" property="yjsbh"/>
<result column="新教室编号" property="xjsbh"/>
<result column="申请教员编号" property="sqjybh"/>
<result column="申请教员姓名" property="sqjyxm"/>
<result column="事由" property="sy"/>
@@ -46,14 +59,43 @@
<result column="教研室查收人编号" property="jyscsrbh"/>
</resultMap>
<!-- 分页查询调课申请列表 -->
<resultMap id="AdjustableLessonMap" type="com.roomroot.jwgl.vo.courserunning.AdjustableLessonVO">
<result column="实施_课程表编号" property="sskcbbh"/>
<result column="上课日期" property="rq"/>
<result column="节次" property="jc"/>
<result column="学员队任务编号" property="xydrwbh"/>
<result column="课编号" property="kbh"/>
<result column="课程名称" property="kcmc"/>
<result column="学员队编号" property="xydbh"/>
<result column="学员队名称" property="xydmc"/>
<result column="教员编号" property="jybh"/>
<result column="课次序号" property="kcxh"/>
<result column="教室编号" property="jsbh"/>
<result column="年度" property="nd"/>
<result column="教研室代号" property="jysdh"/>
<result column="课程表编号" property="kcbbh"/>
</resultMap>
<!-- 以实施_调课申请为主表,经实施_课程表关联课表、课程表、学员队任务表 -->
<select id="selectPageList" resultMap="ScheduleAdjustApplyMap">
SELECT
a.编号 AS 调课申请编号,
a.实施_课程表编号,
c.课名称 AS 课程名称,
a.学员队任务编号,
COALESCE(a.课编号, e.科目编号) AS 课编号,
a.课程表编号,
kb.课名称 AS 课程名称,
(
SELECT MAX(xd.学员队名称)
FROM "实施_课程表_学员队" xyd
LEFT JOIN "学员队表" xd ON xd.学员队编号 = xyd.学员队编号
WHERE xyd.实施_课程表编号 = b.编号
) AS 学员队名称,
COALESCE(a.教研室代号, j.教研室代号) AS 教研室代号,
a.原教室编号,
a.新教室编号,
a.申请教员编号,
j.姓名 AS 申请教员姓名,
j.教员姓名 AS 申请教员姓名,
a.事由,
a.日期 AS 新日期,
a.节次 AS 新节次,
@@ -61,20 +103,36 @@
a.创建时间,
a.教研室批准状态,
a.教研室查收状态,
(
SELECT MAX(sp.审批状态)
FROM "实施_调课申请审批" sp
WHERE sp.实施_调课申请编号 = a.编号
AND sp.审批状态 IS NOT NULL
) AS 机关审批状态,
a.发回意见,
a.删除状态
FROM "实施_调课申请" a
LEFT JOIN "实施_课程表" b ON a.实施_课程表编号 = b.编号
LEFT JOIN "实施_课程" e ON b.实施_课程编号 = e.编号
LEFT JOIN "课程表" c ON e.课编号 = c.课编号
LEFT JOIN "教员表" j ON a.申请教员编号 = j.编号
LEFT JOIN "实施_课程表" b ON TRIM(b.编号) = TRIM(a.实施_课程表编号)
LEFT JOIN "实施_课程" e ON CAST(e.编号 AS CHAR(36)) = TRIM(b.实施_课程编号)
LEFT JOIN "课表" kb ON kb.课编号 = COALESCE(NULLIF(TRIM(a.课编号), ''), e.科目编号)
LEFT JOIN "教员表" j ON TRIM(j.教员编号) = TRIM(a.申请教员编号)
LEFT JOIN "课程表" kcb ON TRIM(kcb.编号) = TRIM(a.课程表编号)
WHERE 1=1
<if test="sskcbbh != null and sskcbbh != ''">
AND a.实施_课程表编号 = #{sskcbbh}
</if>
<if test="xydrwbh != null and xydrwbh != ''">
AND a.学员队任务编号 = #{xydrwbh}
</if>
<if test="kbh != null and kbh != ''">
AND COALESCE(a.课编号, e.科目编号) = #{kbh}
</if>
<if test="sqjybh != null and sqjybh != ''">
AND a.申请教员编号 = #{sqjybh}
</if>
<if test="jysdh != null and jysdh != ''">
AND COALESCE(a.教研室代号, j.教研室代号) = #{jysdh}
</if>
<if test="nd != null">
AND a.年度 = #{nd}
</if>
@@ -84,6 +142,14 @@
<if test="jyscszt != null">
AND a.教研室查收状态 = #{jyscszt}
</if>
<if test="jgspzt != null">
AND (
SELECT MAX(sp.审批状态)
FROM "实施_调课申请审批" sp
WHERE sp.实施_调课申请编号 = a.编号
AND sp.审批状态 IS NOT NULL
) = #{jgspzt}
</if>
<if test="sczt != null">
AND a.删除状态 = #{sczt}
</if>
@@ -96,14 +162,25 @@
ORDER BY a.创建时间 DESC
</select>
<!-- 根据调课申请编号查询详情 -->
<select id="selectDetailById" resultMap="ScheduleAdjustDetailMap">
SELECT
a.编号 AS 调课申请编号,
a.实施_课程表编号,
c.课名称 AS 课程名称,
a.学员队任务编号,
COALESCE(a.课编号, e.科目编号) AS 课编号,
a.课程表编号,
kb.课名称 AS 课程名称,
(
SELECT MAX(xd.学员队名称)
FROM "实施_课程表_学员队" xyd
LEFT JOIN "学员队表" xd ON xd.学员队编号 = xyd.学员队编号
WHERE xyd.实施_课程表编号 = b.编号
) AS 学员队名称,
COALESCE(a.教研室代号, j.教研室代号) AS 教研室代号,
a.原教室编号,
a.新教室编号,
a.申请教员编号,
j.姓名 AS 申请教员姓名,
j.教员姓名 AS 申请教员姓名,
a.事由,
a.日期 AS 新日期,
a.节次 AS 新节次,
@@ -122,11 +199,70 @@
a.教研室查收时间,
a.教研室查收人编号
FROM "实施_调课申请" a
LEFT JOIN "实施_课程表" b ON a.实施_课程表编号 = b.编号
LEFT JOIN "实施_课程" e ON b.实施_课程编号 = e.编号
LEFT JOIN "课程表" c ON e.课编号 = c.课编号
LEFT JOIN "教员表" j ON a.申请教员编号 = j.编号
LEFT JOIN "实施_课程表" b ON TRIM(b.编号) = TRIM(a.实施_课程表编号)
LEFT JOIN "实施_课程" e ON CAST(e.编号 AS CHAR(36)) = TRIM(b.实施_课程编号)
LEFT JOIN "课表" kb ON kb.课编号 = COALESCE(NULLIF(TRIM(a.课编号), ''), e.科目编号)
LEFT JOIN "教员表" j ON TRIM(j.教员编号) = TRIM(a.申请教员编号)
WHERE a.编号 = #{ssdksqbh}
</select>
<!-- 教员可选课次:实施_课程表 + 课表 + 课程表 + 学员队任务表 -->
<select id="selectAdjustableLessons" resultMap="AdjustableLessonMap">
SELECT
b.编号 AS 实施_课程表编号,
b.日期 AS 上课日期,
b.节次,
(
SELECT MAX(rw.编号)
FROM "学员队任务表" rw
WHERE rw.课编号 = e.科目编号
AND rw.教员编号 = e.教员编号
AND rw.年度 = b.年度
AND COALESCE(rw.DEL_FLAG, 0) = 0
) AS 学员队任务编号,
e.科目编号 AS 课编号,
COALESCE(kb.课名称, (
SELECT MAX(k2.课名称) FROM "课表" k2 WHERE k2.科目代码 = e.科目编号
)) AS 课程名称,
(
SELECT MAX(xyd.学员队编号)
FROM "实施_课程表_学员队" xyd
WHERE xyd.实施_课程表编号 = b.编号
) AS 学员队编号,
(
SELECT MAX(xd.学员队名称)
FROM "实施_课程表_学员队" xyd
LEFT JOIN "学员队表" xd ON xd.学员队编号 = xyd.学员队编号
WHERE xyd.实施_课程表编号 = b.编号
) AS 学员队名称,
e.教员编号,
e.教员课次序号 AS 课次序号,
COALESCE(e.教室编号, (
SELECT MAX(js.教室编号)
FROM "实施_课程表_教室" js
WHERE js.实施_课程表编号 = b.编号
)) AS 教室编号,
b.年度,
jy.教研室代号,
(
SELECT MAX(kcb.编号)
FROM "课程表" kcb
WHERE kcb.教员编号 = e.教员编号
AND kcb.课次序号 = e.教员课次序号
AND kcb.年度 = e.年度
) AS 课程表编号
FROM "实施_课程表" b
JOIN "实施_课程" e ON CAST(e.编号 AS CHAR(36)) = TRIM(b.实施_课程编号)
LEFT JOIN "课表" kb ON kb.课编号 = e.科目编号
LEFT JOIN "教员表" jy ON TRIM(jy.教员编号) = TRIM(e.教员编号)
WHERE COALESCE(b.删除状态, 0) = 0
<if test="jybh != null and jybh != ''">
AND e.教员编号 = #{jybh}
</if>
<if test="nd != null">
AND b.年度 = #{nd}
</if>
ORDER BY b.年度 DESC, b.日期 DESC, b.节次 ASC
</select>
</mapper>
@@ -2,10 +2,17 @@ package com.roomroot.jwgl.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.roomroot.jwgl.dto.jys.TeachingTaskQuery;
import com.roomroot.jwgl.entity.JXRW;
import com.roomroot.jwgl.vo.jys.TeachingOfficeBookCourseVO;
import com.roomroot.jwgl.vo.jys.TeachingOfficeBookVO;
import com.roomroot.jwgl.vo.jys.TeachingTaskSquadVO;
import com.roomroot.jwgl.vo.jys.TeachingTaskVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 教学任务 Mapper
*/
@@ -20,4 +27,31 @@ public interface TeachingTaskMapper extends BaseMapper<JXRW> {
* @return 分页结果
*/
Page<JXRW> selectPageList(Page<JXRW> page, @Param("jxrw") JXRW jxrw);
}
/**
* 教学任务管理分页(含教研室数、学员队数、合班前后课程任务/学时)。
*/
Page<TeachingTaskVO> selectManagePage(Page<TeachingTaskVO> page, @Param("cond") TeachingTaskQuery cond);
/**
* 教研室任务书列表(含课程任务数、完成指定数)。
*/
List<TeachingOfficeBookVO> selectOfficeBooks(@Param("jxrwbh") String jxrwbh);
/**
* 教学任务已关联学员队。
*/
List<TeachingTaskSquadVO> selectBoundSquads(@Param("jxrwbh") String jxrwbh);
/**
* 某学期可选学员队(未占用或占用当前任务)。
*/
List<TeachingTaskSquadVO> selectAvailableSquads(@Param("nd") Integer nd,
@Param("xqdc") Integer xqdc, @Param("jxrwbh") String jxrwbh);
/**
* 教研室任务书课程明细。
*/
List<TeachingOfficeBookCourseVO> selectOfficeBookCourses(@Param("jxrwbh") String jxrwbh,
@Param("jysdh") String jysdh);
}
@@ -38,4 +38,194 @@
ORDER BY 编号
</select>
<sql id="CourseTaskJoin">
FROM "学员队任务表" r
INNER JOIN "学员队年度学期基本信息表" s ON s."编号" = r."学员队学期编号"
WHERE s."教学任务编号" = t."编号"
AND NVL(r.DEL_FLAG, 0) = 0
AND NVL(s.DEL_FLAG, 0) = 0
</sql>
<select id="selectManagePage" resultType="com.roomroot.jwgl.vo.jys.TeachingTaskVO">
SELECT
t."编号" AS bh,
t."任务名称" AS rwmc,
t."年度" AS nd,
(SELECT MAX(s0."学期第次")
FROM "学员队年度学期基本信息表" s0
WHERE s0."教学任务编号" = t."编号"
AND NVL(s0.DEL_FLAG, 0) = 0) AS xqdc,
t."状态" AS zt,
t."发布时间" AS fbsj,
t."创建时间" AS cjsj,
t."结束时间" AS jssj,
(SELECT COUNT(1)
FROM "教研室任务书" b
WHERE b."教学任务编号" = t."编号"
AND NVL(b.DEL_FLAG, 0) = 0) AS jyss,
(SELECT COUNT(1)
FROM "学员队年度学期基本信息表" s
WHERE s."教学任务编号" = t."编号"
AND NVL(s.DEL_FLAG, 0) = 0) AS xyds,
(SELECT COUNT(1)
FROM "学员队任务表" r
INNER JOIN "学员队年度学期基本信息表" s ON s."编号" = r."学员队学期编号"
WHERE s."教学任务编号" = t."编号"
AND NVL(r.DEL_FLAG, 0) = 0
AND NVL(s.DEL_FLAG, 0) = 0) AS hbqkcrws,
(SELECT NVL(SUM(r."学时"), 0)
FROM "学员队任务表" r
INNER JOIN "学员队年度学期基本信息表" s ON s."编号" = r."学员队学期编号"
WHERE s."教学任务编号" = t."编号"
AND NVL(r.DEL_FLAG, 0) = 0
AND NVL(s.DEL_FLAG, 0) = 0) AS hbqzxs,
(SELECT COUNT(1) FROM (
SELECT CASE
WHEN r."课次序号" IS NULL THEN r."编号"
ELSE TO_CHAR(r."课次序号")
END AS gid
FROM "学员队任务表" r
INNER JOIN "学员队年度学期基本信息表" s ON s."编号" = r."学员队学期编号"
WHERE s."教学任务编号" = t."编号"
AND NVL(r.DEL_FLAG, 0) = 0
AND NVL(s.DEL_FLAG, 0) = 0
GROUP BY CASE
WHEN r."课次序号" IS NULL THEN r."编号"
ELSE TO_CHAR(r."课次序号")
END
) g) AS hbhkcrws,
(SELECT NVL(SUM(g.mx), 0) FROM (
SELECT MAX(r."学时") AS mx
FROM "学员队任务表" r
INNER JOIN "学员队年度学期基本信息表" s ON s."编号" = r."学员队学期编号"
WHERE s."教学任务编号" = t."编号"
AND NVL(r.DEL_FLAG, 0) = 0
AND NVL(s.DEL_FLAG, 0) = 0
GROUP BY CASE
WHEN r."课次序号" IS NULL THEN r."编号"
ELSE TO_CHAR(r."课次序号")
END
) g) AS hbhzxs
FROM "教学任务" t
<where>
AND NVL(t.DEL_FLAG, 0) = 0
<if test="cond != null and cond.rwmc != null and cond.rwmc != ''">
AND t."任务名称" LIKE CONCAT('%', #{cond.rwmc}, '%')
</if>
<if test="cond != null and cond.nd != null">
AND t."年度" = #{cond.nd}
</if>
<if test="cond != null and cond.zt != null and cond.zt != ''">
AND t."状态" = #{cond.zt}
</if>
<if test="cond != null and cond.xqdc != null">
AND EXISTS (
SELECT 1 FROM "学员队年度学期基本信息表" sx
WHERE sx."教学任务编号" = t."编号"
AND sx."学期第次" = #{cond.xqdc}
AND NVL(sx.DEL_FLAG, 0) = 0
)
</if>
</where>
ORDER BY t."创建时间" DESC, t."编号" DESC
</select>
<select id="selectOfficeBooks" resultType="com.roomroot.jwgl.vo.jys.TeachingOfficeBookVO">
SELECT
b."编号" AS bh,
b."教学任务编号" AS jxrwbh,
b."教研室代号" AS jysdh,
j."教研室名称" AS jysmc,
b."状态" AS zt,
b."上报时间" AS sbsj,
(SELECT COUNT(1)
FROM "学员队任务表" r
INNER JOIN "学员队年度学期基本信息表" s ON s."编号" = r."学员队学期编号"
WHERE s."教学任务编号" = b."教学任务编号"
AND r."教研室代号" = b."教研室代号"
AND NVL(r.DEL_FLAG, 0) = 0
AND NVL(s.DEL_FLAG, 0) = 0) AS xydkcrws,
(SELECT COUNT(1)
FROM "学员队任务表" r
INNER JOIN "学员队年度学期基本信息表" s ON s."编号" = r."学员队学期编号"
WHERE s."教学任务编号" = b."教学任务编号"
AND r."教研室代号" = b."教研室代号"
AND r."教研室计划教员编号" IS NOT NULL
AND r."教研室计划教员编号" != ''
AND NVL(r.DEL_FLAG, 0) = 0
AND NVL(s.DEL_FLAG, 0) = 0) AS wczds
FROM "教研室任务书" b
LEFT JOIN "教研室表" j ON j."教研室代号" = b."教研室代号"
WHERE b."教学任务编号" = #{jxrwbh}
AND NVL(b.DEL_FLAG, 0) = 0
ORDER BY b."教研室代号"
</select>
<sql id="SquadSelect">
SELECT
s."编号" AS xydxqbh,
s."学员队编号" AS xydbh,
d."学员队名称" AS xydmc,
d."年级" AS nj,
d."专业代号" AS zydh,
z."专业名称" AS zymc,
d."学员队人数" AS xydrs,
s."年度" AS nd,
s."学期第次" AS xqdc,
s."开学日期" AS kxrq,
s."结束日期" AS jsrq,
CASE
WHEN s."教学任务编号" IS NOT NULL
AND s."教学任务编号" != ''
AND (#{jxrwbh} IS NULL OR s."教学任务编号" != #{jxrwbh})
THEN 1 ELSE 0
END AS occupied
FROM "学员队年度学期基本信息表" s
LEFT JOIN "学员队表" d ON d."学员队编号" = s."学员队编号"
LEFT JOIN "专业表" z ON z."专业代号" = d."专业代号"
</sql>
<select id="selectBoundSquads" resultType="com.roomroot.jwgl.vo.jys.TeachingTaskSquadVO">
<include refid="SquadSelect"/>
WHERE s."教学任务编号" = #{jxrwbh}
AND NVL(s.DEL_FLAG, 0) = 0
ORDER BY d."年级", d."学员队名称"
</select>
<select id="selectAvailableSquads" resultType="com.roomroot.jwgl.vo.jys.TeachingTaskSquadVO">
<include refid="SquadSelect"/>
WHERE NVL(s.DEL_FLAG, 0) = 0
AND s."年度" = #{nd}
AND s."学期第次" = #{xqdc}
AND (
s."教学任务编号" IS NULL
OR s."教学任务编号" = ''
OR (#{jxrwbh} IS NOT NULL AND s."教学任务编号" = #{jxrwbh})
)
ORDER BY d."年级", d."学员队名称"
</select>
<select id="selectOfficeBookCourses" resultType="com.roomroot.jwgl.vo.jys.TeachingOfficeBookCourseVO">
SELECT
r."编号" AS rwbh,
r."课编号" AS kbh,
k."课名称" AS kmc,
r."课类型" AS klx,
r."学时" AS xs,
r."学员队编号" AS xydbh,
d."学员队名称" AS xydmc,
r."教研室计划教员编号" AS jysjhjybh,
jy."教员姓名" AS jysjhjyxm
FROM "学员队任务表" r
INNER JOIN "学员队年度学期基本信息表" s ON s."编号" = r."学员队学期编号"
LEFT JOIN "课表" k ON k."课编号" = r."课编号"
LEFT JOIN "学员队表" d ON d."学员队编号" = r."学员队编号"
LEFT JOIN "教员表" jy ON jy."教员编号" = r."教研室计划教员编号"
WHERE s."教学任务编号" = #{jxrwbh}
AND r."教研室代号" = #{jysdh}
AND NVL(r.DEL_FLAG, 0) = 0
AND NVL(s.DEL_FLAG, 0) = 0
ORDER BY d."学员队名称", k."课名称"
</select>
</mapper>
@@ -0,0 +1,18 @@
package com.roomroot.jwgl.mapper;
import com.roomroot.jwgl.vo.jwtest.PkLessonVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* 排课测试全查。
*/
@Mapper
public interface TestPkMapper {
/**
* 查询全部排课记录,无筛选条件。
*/
List<PkLessonVO> selectAll();
}
@@ -0,0 +1,67 @@
<?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.roomroot.jwgl.mapper.TestPkMapper">
<!--
排课全查:实施_课程表为课次主表,关联课表、教员表、学员队表、教室表。
开始/结束时间取节次时间表;学年学期、周次按学期开学日期推算;应到人数优先课次绑定人数。
不做业务筛选。
-->
<select id="selectAll" resultType="com.roomroot.jwgl.vo.jwtest.PkLessonVO">
SELECT
COALESCE(NULLIF(TRIM(MAX(s."教学内容")), ''), MAX(k."课名称")) AS ktmc,
MAX(k."课名称") AS kcmc,
MAX(jy."教员姓名") AS jymc,
WM_CONCAT(DISTINCT xyd."学员队名称") AS bjmc,
MAX(js."教室名称") AS jsmc,MAX(jxlb.教学楼名称) AS jxlmc,
TO_CHAR(s."日期", 'YYYY-MM-DD') AS skrq,
MAX(jc."开始时间") AS kssj,
MAX(jc."结束时间") AS jssj,
CASE
WHEN EXTRACT(MONTH FROM MAX(xq."开学日期")) >= 8
THEN EXTRACT(YEAR FROM MAX(xq."开学日期")) || '-' || (EXTRACT(YEAR FROM MAX(xq."开学日期")) + 1)
ELSE (EXTRACT(YEAR FROM MAX(xq."开学日期")) - 1) || '-' || EXTRACT(YEAR FROM MAX(xq."开学日期"))
END
|| '学年第'
|| TRIM(LEADING '0' FROM SUBSTR(CAST(MAX(xq."年度") AS VARCHAR), 5, 2))
|| '学期' AS xnxq,
CAST(
FLOOR((TRUNC(s."日期") - TRUNC(MAX(xq."开学日期"))) / 7) + 1
AS INT
) AS zc,
(
SELECT SUM(t2."人数")
FROM "实施_课程表_学员队" t2
WHERE TRIM(t2."实施_课程表编号") = TRIM(s."编号")
) AS ydrs,
MAX(NVL(TO_CHAR(kcb."备注"), NVL(s."教务备注", s."教员备注"))) AS bz
FROM "实施_课程表_学员队" tx
INNER JOIN "实施_课程表" s
ON TRIM(s."编号") = TRIM(tx."实施_课程表编号")
LEFT JOIN "实施_课程" c
ON REPLACE(LOWER(TRIM(CAST(c."编号" AS CHAR(36)))), '-', '')
= REPLACE(LOWER(TRIM(s."实施_课程编号")), '-', '')
LEFT JOIN "课表" k
ON k."课编号" = c."科目编号"
LEFT JOIN "课程表" kcb
ON kcb."年度" = s."年度"
AND kcb."安排时间" = s."计划时间安排"
AND TRIM(kcb."教员编号") = TRIM(c."教员编号")
LEFT JOIN "教员表" jy
ON TRIM(jy."教员编号") = TRIM(NVL(kcb."授课教员编号", c."教员编号"))
LEFT JOIN "学员队表" xyd
ON xyd."学员队编号" = tx."学员队编号"
LEFT JOIN "教室表" js
ON js."教室编号" = NVL(kcb."教室编号", c."教室编号")
LEFT JOIN "节次时间表" jc
ON TRIM(jc."节次索引") = TRIM(CAST(s."节次" AS VARCHAR))
LEFT JOIN "学期" xq
ON CAST(xq."年度" AS VARCHAR) = CAST(s."年度" AS VARCHAR)
AND TRUNC(s."日期") &gt;= TRUNC(xq."开学日期")
AND TRUNC(s."日期") &lt;= TRUNC(xq."结束日期")
LEFT JOIN "教学楼表" jxlb on jxlb.教学楼代号=js.教学楼代号
WHERE NVL(s."删除状态", 0) = 0
GROUP BY s."编号", s."日期", s."节次", s."年度"
</select>
</mapper>