276 lines
11 KiB
XML
Raw Permalink Normal View History

2026-03-10 16:40:19 +08:00
<?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.univ3e.dao.UnivClassesDao">
<select id= "getNextSeqClassmessage" resultType="int">
SELECT NEXTVAL('seq_univclassmessageid')
</select>
<select id="findClassesByID" parameterType="long" resultType="com.univ3e.entity.UnivClasses">
SELECT * FROM UnivClasses WHERE classesid = #{classesid}
</select>
<select id="findClassesByNameAndTeacher" parameterType="map" resultType="com.univ3e.entity.UnivClasses" >
SELECT * FROM UnivClasses WHERE classname = #{className} and teacherid = #{teacherId} and status = 1
</select>
<insert id="doSave" parameterType="com.univ3e.entity.UnivClasses">
INSERT INTO univclasses(classesid,classlevel,classname,description,schoolyear,classorder,schoolid,areaid,teacherid,classtype,status,source)
VALUES (
<if test="classesid == 0">
(SELECT NEXTVAL('seq_univclassesid')),
</if>
<if test="classesid != 0">
#{classesid},
</if>
#{classlevel},#{classname},#{description},#{schoolyear},#{classorder},
#{schoolid},#{areaid},#{teacherid},#{classtype},#{status},#{source})
</insert>
<update id="doUpdateSave" parameterType="com.univ3e.entity.UnivClasses">
Update univclasses
<set>
<if test="classlevel != null">classlevel = #{classlevel},</if>
<if test="classname != null">classname = #{classname},</if>
<if test="description != null">description = #{description},</if>
<if test="schoolyear != null">schoolyear = #{schoolyear},</if>
<if test="classorder != null">classorder = #{classorder},</if>
<if test="schoolid != null">schoolid = #{schoolid},</if>
<if test="areaid != null">areaid = #{areaid},</if>
<if test="teacherid != null">teacherid = #{teacherid},</if>
<if test="classtype != null">classtype = #{classtype},</if>
<if test="status != null">status = #{status},</if>
<if test="source != null">source = #{source}</if>
</set>
WHERE classesid = #{classesid}
</update>
<select id="findSchoolByClassid" parameterType="long" resultType="com.univ3e.entity.UnivErsity">
SELECT *
FROM UnivErsity
WHERE schoolid = (select schoolid from univclasses where classesid = #{classesid})
</select>
<select id="findStudentsByClassid" parameterType="long" resultType="com.univ3e.entity.UnivStudent">
SELECT * FROM univstudent
WHERE studentid in (
SELECT b.studentid
from univstudentownclass b
where b.classesid = #{classesid} and b.status = 1) and status=1
ORDER BY trueName
</select>
<select id="findStudesByClassid" parameterType="map" resultType="com._3e.dto.ClassStudentDto" >
SELECT s.*,c.isdelegate
FROM UnivStudent s
inner join UnivStudentOwnClass c on
s.studentid = c.studentId and s.status=1
where classesId = #{classesId} and c.status= 1
<if test="orderby != null">
order by ${orderby}
</if>
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="findClassByTeacherid" parameterType="long" resultType="com.univ3e.entity.UnivClasses">
SELECT * FROM UnivClasses
WHERE teacherid = #{teacherid} and status = 1
ORDER BY classType
</select>
<select id="findClassesByTeacherid" parameterType="long" resultType="com.univ3e.entity.UnivClasses" >
SELECT * FROM UnivClasses
WHERE teacherid = #{teacherid} and status = 1
AND classType = 1
</select>
<select id="findAllClassByTeacherid" parameterType="long" resultType="com.univ3e.entity.UnivClasses" >
SELECT * FROM UnivClasses
WHERE teacherid = #{teacherid}
</select>
<select id="findTeamByTeacherid" parameterType="long" resultType="com.univ3e.entity.UnivClasses">
SELECT * FROM UnivClasses
WHERE teacherid = #{teacherid} and classtype = 2 and status = 1
</select>
<select id="findStudesByTeacherid" parameterType="long" resultType="com.univ3e.entity.UnivStudent" >
select a.*
from Univstudent a,Univstudentownclass b,univclasses c
where a.studentid = b.studentid and b.classesid = c.classesid and c.classtype = 1 and a.status=1 and b.status=1
and c.teacherid = #{teacherid}
</select>
<select id="findMessageByTeacherid" parameterType="map" resultType="com.univ3e.entity.UnivClassmessage">
SELECT * FROM UnivClassmessage
WHERE teacherid = #{teacherId} and status = 1 and source = 1
ORDER BY created desc
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<insert id="doPublishClassNotice" parameterType="com.univ3e.entity.UnivClassmessage">
INSERT INTO univclassmessage(classmessageid,content,teacherid,created,starttime,endtime,status,areaid)
VALUES (
<if test="classmessageid == 0">
(SELECT NEXTVAL('seq_univclassmessageid')),
</if>
<if test="classmessageid != 0">
#{classmessageid},
</if>
#{content},#{teacherid},#{created},#{starttime},#{endtime},#{status},#{areaid})
</insert>
<insert id="doClassMessageLink" parameterType="com.univ3e.entity.UnivClassOwnMessage">
INSERT INTO univclassownmessage(classesid,classmessageid,areaid)
VALUES (#{classesid},#{classmessageid},#{areaid})
</insert>
<update id="doDelClassNotice" parameterType="int">
update Univclassmessage set status = 0 where classmessageid = #{classmessageid}
</update>
<select id="findClassdelegate" parameterType="long" resultType="com.univ3e.entity.UnivStudentOwnClass">
select * from Univstudentownclass where isdelegate = 1 and classesid = #{classesid}
</select>
<update id="doDelClassesDelegate" parameterType="long">
update Univstudentownclass set isdelegate = 0 where classesid = #{classesid}
</update>
<update id="doAssignDelegate" parameterType="map">
update Univstudentownclass set isdelegate = 1 where classesid = #{classesId} and studentid = #{studentId}
</update>
<select id="findClassAchivement" parameterType="map" resultType="com._3e.dto.ClassAchivement">
with temp as( select a.assignmentid,a.starttime,a.endtime,c.unitid,c.lessonid,a.assigntype from univassignment a
inner join univassigntoclass b
on a.assignmentid=b.assignmentid and b.classesid=#{classesId}
and a.created&gt; #{startTime} and a.created &lt;=#{endTime}
inner join univassigndetail c on a.assignmentid=c.assignmentid ),
temp1 as(
select assignmentid,count(lessonid) lessoncount from temp where assigntype='L' group by assignmentid),
temp2 as(
select studentid ,c.assignmentid,count(distinct b.objectid) completecount from univstudentownclass a inner join univachivement b on a.studentid=b.uid inner join
temp c on b.objectid=c.lessonid and c.assigntype='L' and b.created&gt;c.starttime and b.created&lt;c.endtime
group by studentid,c.assignmentid),
temp3 as(select b.studentid ,count(case when a.lessoncount=b.completecount then 1 else null end ) finishcount from temp1 a inner join temp2 b on a.assignmentid=b.assignmentid
group by b.studentid),
temp4 as(select a.assignmentid,a.starttime,a.endtime,b.wordsid from temp a inner join words b on a.unitid=b.lessonid and a.assigntype='W'),
temp5 as(select assignmentid,count(wordsid) lessoncount from temp4 group by assignmentid),
temp6 as(select studentid ,c.assignmentid,count(distinct b.wordsid) completecount from univstudentownclass a inner join univwordachive b on a.studentid=b.uid inner join
temp4 c on b.wordsid=c.wordsid and b.created&gt;c.starttime and b.created&lt;c.endtime
group by studentid,c.assignmentid ),
temp7 as (select b.studentid ,count(case when a.lessoncount=b.completecount then 1 else null end ) finishcount from temp5 a inner join temp6 b on a.assignmentid=b.assignmentid
group by b.studentid)
select b.studentId as uid , b.recognizeCode , b.trueName , b.nickname ,
c.totalTime , c.totalNum , d.avgScore , d.totalLesson,e.totalAssign
from UnivStudentOwnClass a
inner join UnivStudent b
on a.classesId = #{classesId} and a.studentId = b.studentId and a.status = 1 and b.status=1
left join (select m.studentId , sum( timeLength ) as totalTime , count(*) as totalNum
from UnivStudentOwnClass m
inner join UnivConnectLog n
on m.classesId = #{classesId} and m.studentId = n.uid
where n.created &gt; #{startTime} and n.endTime &lt;= #{endTime}
group by m.studentId ) c
on a.studentId = c.studentId
left join (select p.studentId , avg( q.score ) as avgScore ,
count( objectId ) as totalLesson
from UnivStudentOwnClass p
inner join UnivAchivement q
on p.classesId = #{classesId} and p.studentId = q.uid
and q.pointCaseType in (3, 5 , 6 , 7 , 8 )
and q.achiveType in ( 'L' , 'W' )
where q.created &gt; #{startTime} and q.created &lt;= #{endTime}
group by p.studentId ) d
on a.studentId = d.studentId
left join (select studentid,sum(finishcount ) totalAssign from (select * from temp3 union all select * from temp7 ) as a group by studentid) e
on a.studentId = e.studentId
order by a.studentId
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="findClassByTeacheridV3" parameterType="long" resultType="com._3e.dto.ClassesDto" >
select a.*,b.truename as teachername
from univClasses a
left join univteacher b on a.teacherid = b.teacherid
where a.teacherid = #{teacherid} and a.classtype = 1 and a.status = 1
</select>
<select id="findTeamByTeacheridV3" parameterType="long" resultType="com._3e.dto.ClassesDto" >
select a.*,b.truename as teachername
from univClasses a
left join univteacher b on a.teacherid = b.teacherid
where a.teacherid = #{teacherid} and a.classtype = 2 and a.status = 1
</select>
<select id="findTeamsByLookLike" parameterType="map" resultType="com._3e.dto.ClassesDto" >
SELECT c.classesid,c.classlevel,c.classname,c.description,c.schoolyear,
c.classorder,c.schoolid,c.areaid,c.teacherid,c.classtype,c.status,
t.truename AS teachername, COALESCE(a.source , 0) AS source
FROM univclasses c
INNER JOIN univteacher t ON t.teacherid = c.teacherid
LEFT JOIN (SELECT count(s.studentid) AS source ,s.classesid
FROM univstudentownclass s
WHERE s.status = 1
GROUP BY s.classesid) a
ON a.classesid = c.classesid
WHERE c.classType = 2 AND c.status = 1
<if test="title != null and title != ''.toString()">
AND c.classname like '%'||#{title}||'%'
</if>
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="findTeamByIsdelegate" parameterType="long" resultType="com._3e.dto.ClassesDto" >
SELECT c.*
FROM univstudentownclass s
INNER JOIN univclasses c ON c.classesid = s.classesid
WHERE s.studentid = #{studentid} AND c.status = 1 AND s.isdelegate = 1
</select>
<select id= "findMyTeams" parameterType="map" resultType="com._3e.dto.ClassesDto" >
SELECT c.classesid,c.classlevel,c.classname,c.description,c.schoolyear,
c.classorder,c.schoolid,c.areaid,c.teacherid,c.classtype,
t.truename AS teachername, COALESCE(a.source , 0) AS source,
CASE o.status WHEN 0 THEN 1
WHEN 1 THEN 2
END AS status
FROM univclasses c
INNER JOIN univteacher t ON t.teacherid = c.teacherid
LEFT JOIN univstudentownclass o ON c.classesid = o.classesid
LEFT JOIN (SELECT count(s.studentid) AS source ,s.classesid
FROM univstudentownclass s
WHERE s.status = 1
GROUP BY s.classesid) a
ON a.classesid = c.classesid
WHERE o.studentid = #{studentId} AND c.classType = 2 AND c.status = 1
ORDER BY source DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<delete id= "doDelTeamMember" parameterType="map">
DELETE FROM univstudentOwnClass
WHERE classesId = #{classesId}
AND studentId IN (${studentIds})
</delete>
</mapper>