spokenServer/out/production/pcserver/sqlmap/UnivAssignDetail.xml

284 lines
12 KiB
XML
Raw Normal View History

2026-03-10 14:30:24 +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="UnivAssignDetail">
<insert id="insertUnivAssignDetail" parameterType="UnivAssignDetail">
INSERT INTO UnivAssignDetail ( assignDetailId, assignmentId, assignType,
unitId, lessonId, title , areaid )
Values ( #{assignDetailId}, #{assignmentId}, #{assignType},
#{unitId}, #{lessonId}, #{title} , #{areaid} )
</insert>
<update id="updateUnivAssignDetail" parameterType="UnivAssignDetail">
UPDATE UnivAssignDetail
SET assignDetailId = #{assignDetailId}, assignmentId = #{assignmentId},
assignType = #{assignType}, unitId = #{unitId},
lessonId = #{lessonId}, title = #{title} , areaid = #{areaid}
WHERE assignDetailId = #{assignDetailId}
</update>
<select id="getUnivAssignDetailByKey" parameterType="java.util.Map" resultType="UnivAssignDetail">
SELECT assignDetailId , assignmentId , assignType , unitId , lessonId ,
title , areaid
FROM UnivAssignDetail
WHERE assignDetailId = #{assignDetailId}
</select>
<select id="getSeqUnivAssignDetail" resultType="Integer" useCache="false" flushCache="true">
SELECT nextval('seq_UnivassignDetailId') ;
</select>
<insert id="insertUnivAssignDetailBatch" parameterType="java.util.List">
INSERT INTO UnivAssignDetail ( assignDetailId, assignmentId, assignType,
unitId, lessonId, title , areaid )
Values
<foreach collection="list" index="index" item="item" separator=",">
( #{item.assignDetailId}, #{item.assignmentId},
#{item.assignType}, #{item.unitId},
#{item.lessonId}, #{item.title} ,
#{item.areaid} )
</foreach>
</insert>
<select id="getUnivAssignDetailsByAssignmentId" parameterType="java.lang.Integer" resultType="UnivAssignDetail">
SELECT assignDetailId , assignmentId , assignType , unitId , lessonId ,
title , areaid
FROM UnivAssignDetail
WHERE assignmentId=#{assignmentId}
</select>
<select id="getUnivAssignLessonIdsByAssignmentId" parameterType="java.lang.Integer" resultType="java.lang.Integer">
SELECT lessonId
FROM UnivAssignDetail
WHERE assignmentId=#{assignmentId}
</select>
<select id="getUnivAssignDetailsByStudentId" parameterType="java.util.Map" resultType="java.util.HashMap">
SELECT a.assignDetailId , a.assignmentId , a.assignType , a.unitId ,
a.lessonId , a.title , a.areaid , count(ac.objectId) as finishCount
FROM UnivAssignDetail a
inner join UnivAssignment s
on a.assignmentId = s.assignmentId and s.endTime &gt; now() and s.startTime&lt; now()
and s.status= 1 and s.assignType='L'
inner join UnivAssignToClass t
on t.assignmentid = s.assignmentid
inner join UnivClasses c
on c.classesid = t.classesid and c.status = 1
inner join UnivStudentOwnClass so
on so.classesid = c.classesid and so.status = 1
and so.studentid = #{studentId}
inner join Lesson l
on ((l.lessonid = a.unitid) or (l.lessonId = a.lessonId))
and l.parentid = #{lessonId}
left join UnivAchivement ac
on ac.uid = so.studentId and ac.objectid = a.lessonId
and ac.created &lt;= s.endTime and ac.created &gt; s.startTime
group by a.assignDetailId , a.assignmentId , a.assignType ,
a.unitId , a.lessonId , a.title , a.areaid
</select>
<select id="getUnivAssignDetailsByTeacherId" parameterType="java.util.Map" resultType="java.util.HashMap">
SELECT a.assignDetailId , a.assignmentId , a.assignType , a.unitId ,
a.lessonId , a.title , a.areaid , count(ac.objectId) as finishCount
FROM UnivAssignDetail a
inner join UnivAssignment s
on a.assignmentId = s.assignmentId and s.endTime &gt; now() and s.startTime&lt; now() and s.assignType='L'
and s.teacherId =#{teacherId} and s.status= 1
inner join Lesson l
on ((l.lessonid = a.unitid) or (l.lessonId = a.lessonId))
and l.parentid = #{lessonId}
left join UnivAchivement ac
on ac.uid = s.teacherId and ac.objectid = a.lessonId
and ac.created &lt;= s.endTime and ac.created &gt; s.startTime
group by a.assignDetailId , a.assignmentId , a.assignType ,
a.unitId , a.lessonId , a.title , a.areaid
</select>
<select id="getUnivAssignDetailsOfBookByAssignmentId" parameterType="java.lang.Integer" resultType="java.util.HashMap">
<!--select assigndetailid "assigndetailId", l.lessonname "unitName",l.lessonid "unitId",
a.title "lessonName",a.lessonid "lessonId",l2.lessonname "bookName",l2.lessonid "bookId"
from Univassigndetail a
inner join
lesson l on a.unitid = l.lessonid and assignmentid=#{assigndetailid}
inner join
lesson l2 on l2.lessonid = l.parentid
order by assigndetailid -->
with temp as (select assigndetailid,unitid,lessonid ,title from Univassigndetail where assignmentid = #{assigndetailid})
select assigndetailid "assigndetailId", l.lessonname "unitName",l.lessonid "unitId",a.title "lessonName",a.lessonid "lessonId",l2.lessonname "bookName",l2.lessonid "bookId" from temp as a inner join lesson l on a.unitid = l.lessonid inner join lesson l2 on l2.lessonid = l.parentid order by assigndetailid
</select>
<select id="getUnivFinishAssignStat" parameterType="java.util.Map" resultType="java.util.HashMap">
SELECT a.assignmentId ,count(DISTINCT a.lessonId) as "lessonCount",max(ac.score) "maxScore",
avg(ac.score) "avgScore",max(ac.created) created,
count(ac.objectId) as howmuch,count( distinct ac.objectId) as "completecount"
FROM UnivAssignDetail a
inner join UnivAssignment s
on a.assignmentId = s.assignmentId
and s.status= 1 and a.assignmentId = #{assignmentId}
left join UnivAchivement ac
on ac.uid = #{userId} and ac.objectid = a.lessonId
and ac.created &lt;= s.endTime and ac.created &gt; s.startTime
group by a.assignmentId
</select>
<select id="getUnivFinishAssignStatWord" parameterType="java.util.Map" resultType="java.util.HashMap">
with temp as(select a.assignmentId,count(distinct(w.wordsId )) lessonCount
from words w inner join univassigndetail a on a.unitid=w.lessonid and assignmentid=#{assignmentId}
group by a.assignmentId )
SELECT a.assignmentId ,count(distinct(w.wordsId )) as "lessonCount",max(ac.score) "maxScore",
avg(ac.score) "avgScore",max(ac.created) created,
count(ac.wordsid) as howmuch,count( distinct ac.wordsid) as "completecount"
FROM UnivAssignDetail a
inner join UnivAssignment s
on a.assignmentId = s.assignmentId
and s.status= 1 and a.assignmentId = #{assignmentId}
inner join words w
on a.unitid=w.lessonid
left join univwordachive ac
on ac.uid = #{userId} and ac.wordsid = w.wordsid
and ac.created &lt;= s.endTime and ac.created &gt; s.startTime
group by a.assignmentId
</select>
<select id="getUnivAssignDetailsByStudentIdOfWord" parameterType="java.util.Map" resultType="java.util.HashMap">
with base as (
select w.lessonid,w.wordsid
from lesson l
inner join words w
on l.parentid=#{lessonId} and w.lessonid=l.lessonid ),
temp as (
select b.lessonid ,a.wordsid ,created
from base b
left join univwordachive a
on uid=#{studentId} and b.wordsid=a.wordsid ) ,
temp2 as (
select s.assignmentId , s.startTime , s.endtime
from univStudentOwnClass so
inner join univClasses c
on so.studentid =#{studentId} and so.classesid = c.classesid
and so.status = 1 and c.status = 1
inner join univAssignToClass t
on c.classesid = t.classesid
inner join univAssignment s
on t.assignmentid = s.assignmentid
and s.startTime &lt; now() and s.endTime &gt; now()
and s.status= 1 and s.assignType='W' )
SELECT a.assignDetailId , a.assignmentId , a.assignType , a.unitId ,
a.lessonId , a.title , a.areaid ,
case when count(distinct b.wordsid )=count(distinct ac.wordsid ) then 1
else 0 end as finishCount,
count(distinct ac.wordsid )||'/'||count(distinct b.wordsid ) as finishWords
FROM temp2 t
inner join univAssignDetail a on t.assignmentId = a.assignmentId
inner join base b
on a.unitid = b.lessonid
left join temp ac
on ac.created &lt;= t.endTime and ac.created &gt; t.startTime and a.unitid=ac.lessonid
group by a.assignDetailId , a.assignmentId , a.assignType , a.unitId , a.lessonId , a.title , a.areaid
order by a.assignmentId,a.assignDetailId
</select>
<select id="getUnivAssignDetailsByTeacherIdOfWord" parameterType="java.util.Map" resultType="java.util.HashMap">
with base as(
select w.lessonid,wordsid from words w inner join lesson l on l.parentid=#{lessonId} and w.lessonid=l.lessonid
group by w.lessonid,wordsid ),
temp as(
select b.lessonid ,a.wordsid ,created from base b
left join univwordachive a
on b.wordsid=a.wordsid and uid=#{teacherId})
SELECT a.assignDetailId , a.assignmentId , a.assignType , a.unitId ,
a.lessonId , a.title , a.areaid ,case when count(distinct(b.wordsid))=count(distinct(ac.wordsid)) then 1 else 0 end as finishCount,
count(distinct(ac.wordsid))||'/'||count(distinct(b.wordsid)) as finishWords
FROM univAssignDetail a
inner join univAssignment s
on a.assignmentId = s.assignmentId and s.startTime &lt; now() and s.endTime &gt; now() and s.status= 1 and s.assignType='W'
and s.teacherId=#{teacherId}
inner join base b
on b.lessonid=a.unitid
left join temp ac
on ac.created &lt;= s.endTime and ac.created &gt; s.startTime and a.unitid=ac.lessonid
group by a.assignDetailId , a.assignmentId , a.assignType , a.unitId , a.lessonId , a.title , a.areaid
order by a.assignmentId,a.assignDetailId
</select>
<select id="getUnivFinishWordsByStudentId" parameterType="java.util.Map" resultType="java.util.HashMap">
with base as (
select w.lessonid,w.wordsid
from lesson l
inner join words w
on l.parentid=#{lessonId} and w.lessonid=l.lessonid ),
temp as (
select b.lessonid ,a.wordsid ,created
from base b
left join univwordachive a
on uid=#{studentId} and b.wordsid=a.wordsid ) ,
temp2 as (
select assignmentId , startTime , endtime
from univAssignment
where assignmentid = #{assignmentId}
and status= 1 and assignType='W' )
SELECT b.wordsid
FROM temp2 t
inner join univAssignDetail a on t.assignmentId = a.assignmentId
inner join base b
on a.unitid = b.lessonid
left join temp ac
on ac.created &lt;= t.endTime and ac.created &gt; t.startTime and ac.wordsId=b.wordsid
group by b.wordsid having count(ac.wordsid)=0
order by b.wordsid
</select>
<select id="getUnivFinishWordsByTeacherId" parameterType="java.util.Map" resultType="java.util.HashMap">
with base as(
select w.lessonid,wordsid from words w inner join lesson l on l.parentid=#{lessonId} and w.lessonid=l.lessonid
group by w.lessonid,wordsid ),
temp as( select b.lessonid ,a.wordsid ,created from base b
inner join univwordachive a
on b.wordsid=a.wordsid and uid=#{teacherId}),
temp2 as(select assignmentId,startTime,endTime from assignment where assignmentId=#{assignmentId}
and status= 1 and assignType='W')
SELECT b.wordsId
FROM univAssignDetail a
inner join temp2 s
on a.assignmentId = s.assignmentId
inner join base b
on b.lessonid=a.unitid
left join temp ac
on ac.created &lt;= s.endTime and ac.created &gt; s.startTime and ac.wordsid=b.wordsid
group by b.wordsid having count(ac.wordsid)=0
order by b.wordsid
</select>
</mapper>