2026-03-10 14:30:24 +08:00

364 lines
15 KiB
XML

<?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="AssignDetail">
<resultMap id="BaseResultMap" type="java.util.Map">
<result column="assignDetailId" property="assigndetailid"/>
<result column="assignmentId" property="assignmentid"/>
<result column="assignType" property="assigntype"/>
<result column="unitId" property="unitid"/>
<result column="lessonId" property="lessonid"/>
<result column="title" property="title"/>
<result column="areaid" property="areaid"/>
<result column="teacherId" property="teacherid"/>
<result column="endTime" property="endtime"/>
<result column="startTime" property="starttime"/>
<result property="pointcasetypes" column="pointcasetypes" jdbcType="ARRAY"
typeHandler="com.spoken.api.handlers.ArrayTypeHandlerPg"/>
</resultMap>
<resultMap id="BaseResultMapstudent" type="java.util.Map">
<result column="assignDetailId" property="assigndetailid"/>
<result column="assignmentId" property="assignmentid"/>
<result column="assignType" property="assigntype"/>
<result column="unitId" property="unitid"/>
<result column="lessonId" property="lessonid"/>
<result column="title" property="title"/>
<result column="areaId" property="areaid"/>
<result column="number" property="number"/>
<result column="endTime" property="endtime"/>
<result column="startTime" property="starttime"/>
<result property="pointcasetypes" column="pointcasetypes" jdbcType="ARRAY"
typeHandler="com.spoken.api.handlers.ArrayTypeHandlerPg"/>
</resultMap>
<resultMap id="AssignDetailBookMap" type="BookDTO">
<id column="bookId" property="bookId"/>
<result column="bookName" property="bookName"/>
<collection property="units" ofType="UnitDTO" resultMap="AssignDetailUnitMap"/>
</resultMap>
<resultMap id="AssignDetailUnitMap" type="UnitDTO">
<id column="unitId" property="unitId"/>
<result column="unitName" property="unitName"/>
<result column="unitOrderId" property="unitOrderId"/>
<collection property="lessons" ofType="WechatLessonDTO" resultMap="AssignDetailLessonMap"/>
</resultMap>
<resultMap id="AssignDetailLessonMap" type="WechatLessonDTO">
<id column="assignDetailId" property="assignDetailId"/>
<result column="assignmentId" property="assignmentId"/>
<result column="assignType" property="assignType"/>
<result column="areaId" property="areaId"/>
<result column="lessonId" property="lessonId"/>
<result column="lessonName" property="lessonName"/>
<result column="lessonOrderId" property="lessonOrderId"/>
<result column="number" property="number"/>
</resultMap>
<insert id="insertAssignDetail" parameterType="AssignDetail">
INSERT INTO AssignDetail ( assignDetailId, assignmentId, assignType, unitId, lessonId, title , areaid ) Values
( #{assignDetailId}, #{assignmentId}, #{assignType}, #{unitId}, #{lessonId}, #{title} , #{areaid} )
</insert>
<update id="updateAssignDetail" parameterType="AssignDetail">
UPDATE AssignDetail SET
assignDetailId = #{assignDetailId}, assignmentId = #{assignmentId}, assignType = #{assignType}, unitId = #{unitId}, lessonId = #{lessonId}, title = #{title} , areaid = #{areaid}
where assignDetailId = #{assignDetailId}
</update>
<select id="getAssignDetailByKey" parameterType="java.util.Map" resultType="AssignDetail">
SELECT assignDetailId , assignmentId , assignType , unitId , lessonId , title , areaid
FROM AssignDetail WHERE assignDetailId = #{assignDetailId}
</select>
<select id="getSeqAssignDetail" resultType="Integer" useCache="false" flushCache="true">
SELECT nextval('seq_assignDetailId') ;
</select>
<insert id="insertAssignDetailBatch" parameterType="java.util.List">
INSERT INTO AssignDetail ( 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="getAssignDetailsByAssignmentId" parameterType="java.lang.Integer" resultType="AssignDetail">
SELECT assignDetailId , assignmentId , assignType , unitId , lessonId , title , areaid
FROM AssignDetail
WHERE assignmentId=#{assignmentId} order by unitId ,lessonId
</select>
<select id="getAssignLessonIdsByAssignmentId" parameterType="java.lang.Integer" resultType="java.lang.Integer">
SELECT a.lessonId
FROM AssignDetail as a inner join lesson ls on a.lessonid = ls.lessonid and ls.status = 1
WHERE assignmentId=#{assignmentId}
</select>
<select id="getAssignLessonIdsAndNumberByAssignmentId" parameterType="java.lang.Integer" resultType="java.util.Map">
SELECT a.lessonId,a.number
FROM AssignDetail as a inner join lesson ls on a.lessonid = ls.lessonid and ls.status = 1
WHERE assignmentId=#{assignmentId}
</select>
<select id="getAllBookUnitlessonByAssignmentId" parameterType="java.lang.Integer" resultMap="AssignDetailBookMap">
SELECT ad.assignDetailId,ad.assignmentId,ad.assignType,ad.areaId,ad.number,
b.lessonid bookId,b.lessonName bookName,
u.lessonid unitId,u.lessonName unitName,u.orderId unitOrderId,
l.lessonid lessonId,l.lessonName lessonName,l.orderId lessonOrderId
FROM assigndetail ad inner join lesson l on ad.lessonid = l.lessonid and l.status=1
inner join lesson u on ad.unitid = u.lessonid
inner join lesson b on u.parentid = b.lessonid
WHERE assignmentid = #{assignmentId} and assigntype='L'
ORDER BY u.orderid ASC,l.orderid ASC
</select>
<select id="getAssignUnitIdsByAssignmentId" parameterType="java.lang.Integer" resultType="java.lang.Integer">
SELECT unitId
FROM AssignDetail
WHERE assignmentId=#{assignmentId}
</select>
<select id="getAssignDetailsByStudentId" parameterType="java.util.Map" resultMap="BaseResultMapstudent">
<!-- with temp as ( select objectId , created
from Achivement
where uid = #{studentId} and areaId=#{areaId}
and score &gt; 30
and pointcasetype in ( 4,3 , 5 , 6 , 7,8) )-->
SELECT a.assignDetailId , a.assignmentId , a.assignType , a.unitId ,
a.lessonId , a.title , a.areaId , s.endTime,s.startTime,s.pointcasetypes,a.number
FROM AssignDetail a
inner join Assignment s
on a.assignmentId = s.assignmentId and s.startTime &lt; now() and s.assignType='L'
and s.endTime &gt; now() and s.status= 1
inner join AssignToClass t
on t.assignmentid = s.assignmentid
inner join Classes c
on c.classesid = t.classesid and c.status = 1 and c.areaId=#{areaId}
inner join StudentOwnClass so
on so.classesid = c.classesid and so.status = 1 and so.areaId=#{areaId}
and so.studentid = #{studentId}
inner join Lesson l
on ((l.lessonid = a.unitid) or (l.lessonId = a.lessonId))
and l.parentid = #{lessonId}
<!-- left join temp ac
on 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, s.endTime,s.startTime,s.pointcasetypes
</select>
<select id="getCountAssignDetailsForAchivementToStudent" parameterType="java.util.Map" resultType="java.lang.Integer">
SELECT count(ac.achivementid)
FROM Achivement ac
<!-- where ac.uid = #{studentId} and ac.objectid = #{lessonid} and ac.created &lt;= #{endtime} and ac.score &gt; 30-->
where ac.uid = #{studentId} and ac.objectid = #{lessonid} and ac.created &lt;= #{endtime}
and ac.created &gt; #{starttime} and ac.areaId=#{areaid} and pointcasetype in
<foreach collection="pointcasetypes" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
<select id="getAssignDetailsByTeacherId" parameterType="java.util.Map" resultMap="BaseResultMap">
SELECT a.assignDetailId , a.assignmentId , a.assignType , a.unitId , a.lessonId , a.title , a.areaid ,s.teacherId,s.endTime,s.startTime,
s.pointcasetypes
FROM AssignDetail a
inner join Assignment 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 Achivement ac
on ac.uid = s.teacherId and ac.objectid = a.lessonId and ac.created &lt;= s.endTime
and ac.created &gt; s.startTime and ac.areaId=#{areaId}-->
group by a.assignDetailId , a.assignmentId , a.assignType , a.unitId , a.lessonId , a.title , a.areaid,s.teacherId,s.endTime,s.startTime,s.pointcasetypes
</select>
<select id="getCountAssignDetailsForAchivement" parameterType="java.util.Map" resultType="java.lang.Integer">
SELECT count(ac.achivementid)
FROM Achivement ac
where ac.uid = #{teacherId} and ac.objectid = #{lessonId} and ac.created &lt;= #{endTime}
and ac.created &gt; #{startTime} and ac.areaId=#{areaId} and pointcasetype in
<foreach collection="pointcasetypes" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
<select id="getAssignDetailsByStudentIdOfWord" 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 and w.status =1 and l.status =1 ),
temp as (
select b.lessonid ,a.wordsid ,created
from base b
left join wordachive a
on uid=#{studentId} and a.areaId=#{areaId} and b.wordsid=a.wordsid ) ,
temp2 as (
select s.assignmentId , s.startTime , s.endtime
from StudentOwnClass so
inner join Classes c
on so.studentid =#{studentId} and so.classesid = c.classesid and so.areaId=#{areaId}
and so.status = 1 and c.status = 1
inner join AssignToClass t
on c.classesid = t.classesid
inner join Assignment 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 AssignDetail 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="getAssignDetailsByTeacherIdOfWord" 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 wordachive a
on b.wordsid=a.wordsid and uid=#{teacherId} and a.areaId=#{areaId})
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 AssignDetail a
inner join Assignment 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="getFinishWordsByStudentId" 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 wordachive a
on uid=#{studentId} and a.areaId=#{areaId} and b.wordsid=a.wordsid ) ,
temp2 as (
select assignmentId , startTime , endtime
from Assignment
where assignmentid = #{assignmentId}
and status= 1 and assignType='W' )
SELECT b.wordsid
FROM temp2 t
inner join AssignDetail 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="getFinishWordsByTeacherId" 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 wordachive a
on b.wordsid=a.wordsid and uid=#{teacherId} and a.areaId=#{areaId}) ,
temp2 as(select assignmentId,startTime,endTime from assignment where assignmentId=#{assignmentId}
and status= 1 and assignType='W')
SELECT b.wordsId
FROM AssignDetail 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>
<select id="getAssignDetailsByAssignmentIdTwo" 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",a.number as "number"
from assigndetail a
inner join
lesson l on a.unitid = l.lessonid and assignmentid=#{assigndetailid} and l.status != 0
inner join
lesson l2 on l2.lessonid = l.parentid and l2.status !=0
order by assigndetailid
</select>
</mapper>