2026-03-10 16:40:19 +08:00

220 lines
9.7 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="com._3e.dao.FinishAssignStatDao">
<select id= "findFinishAssignStatByUidAndAssignId" parameterType="map" resultType="com._3e.entity.FinishAssignStat" >
SELECT uid , assignmentid , content , lessoncount , completecount , created ,
howmuch , maxscore , avgscore ,areaid , uuid, isSign
FROM FinishAssignStat
WHERE uid=#{uid}
AND assignmentid=#{assignmentid}
</select>
<select id="getFinishAssignStatWordByUid" parameterType="java.util.Map" resultType="com._3e.entity.FinishAssignStat">
with temp as(select count( distinct wordsId) wordsCount, assignmentid
from assigndetail a inner join words w on
a.unitid=w.lessonid and w.status =1 and assignmentid=#{assignmentid}
group by assignmentid
)
select t.wordsCount lessoncount,case when completecount is null then 0 else completecount end as completecount,t.assignmentid ,
case when f.lessoncount is null then 0 else f.lessoncount end as lessoncountstat,
case when howmuch is null then 0 else howmuch end as howmuch,case when avgscore is null then 0 else avgscore end as avgscore,
case when maxscore is null then 0 else maxscore end as maxscore,created
from temp t left join finishassignstat f on
t.assignmentid=f.assignmentid
and f.areaid = #{areaid}
and f.uid=#{uid}
</select>
<select id="getFinishAssignStatWordByUidV2" parameterType="java.util.Map" resultType="com._3e.http.myhome.dto.FinishAssignStatVO">
with temp as(select count( distinct wordsId) wordsCount, assignmentid
from assigndetail a inner join words w on
a.unitid=w.lessonid and w.status =1 and assignmentid=#{assignmentid}
group by assignmentid
)
select t.wordsCount lessoncount,case when completecount is null then 0 else completecount end as completecount,t.assignmentid ,
case when f.lessoncount is null then 0 else f.lessoncount end as lessoncountstat,
case when howmuch is null then 0 else howmuch end as howmuch,case when avgscore is null then 0 else avgscore end as avgscore,
case when maxscore is null then 0 else maxscore end as maxscore,created,f.jContent
from temp t left join finishassignstat f on
t.assignmentid=f.assignmentid
and f.areaid = #{areaid}
and f.uid=#{uid}
</select>
<select id="getFinishAssignStatLessonByUid" parameterType="java.util.Map" resultType="com._3e.entity.FinishAssignStat">
with temp as(select count( distinct a.assigndetailid) lessonCount, assignmentid
from assigndetail a INNER JOIN lesson ls on a.lessonid = ls.lessonid and ls.status=1
where assignmentid=#{assignmentid}
group by assignmentid
)
select t.lessoncount,case when completecount is null then 0 else completecount end as completecount,t.assignmentid ,
case when f.lessoncount is null then 0 else f.lessoncount end as lessoncountstat,
case when howmuch is null then 0 else howmuch end as howmuch,case when avgscore is null then 0 else avgscore end as avgscore,
case when maxscore is null then 0 else maxscore end as maxscore,created
from temp t left join
finishassignstat f on t.assignmentid=f.assignmentid
and f.areaid = #{areaid}
and f.uid=#{uid}
</select>
<select id="getFinishAssignStatLessonByUidV2" parameterType="java.util.Map" resultType="com._3e.http.myhome.dto.FinishAssignStatVO">
with temp as(select count( distinct a.assigndetailid) lessonCount, assignmentid
from assigndetail a INNER JOIN lesson ls on a.lessonid = ls.lessonid and ls.status=1
where assignmentid=#{assignmentid}
group by assignmentid
)
select t.lessoncount,case when completecount is null then 0 else completecount end as completecount,t.assignmentid ,
case when f.lessoncount is null then 0 else f.lessoncount end as lessoncountstat,
case when howmuch is null then 0 else howmuch end as howmuch,case when avgscore is null then 0 else avgscore end as avgscore,
case when maxscore is null then 0 else maxscore end as maxscore,created,f.jContent
from temp t left join
finishassignstat f on t.assignmentid=f.assignmentid
and f.areaid = #{areaid}
and f.uid=#{uid}
</select>
<select id="getAssignWordsIdByAssignmentId" parameterType="map" resultType="java.lang.Integer">
select distinct w.wordsid from words w inner join assigndetail ad
on w.lessonid=ad.unitid
and ad.assignmentid=#{assignmentId}
</select>
<select id="getAssignLessonIdByAssignmentId" parameterType="map" resultType="java.lang.Integer">
select distinct lessonid from assigndetail
where assignmentid=#{assignmentId}
</select>
<select id="getFinishAssignStatByWordsIds" parameterType="java.util.Map" resultType="com._3e.entity.FinishAssignStat">
select w.uid , count( distinct w.wordsid ) as completeCount ,
count(w.wordsid) as howmuch , max( score ) as maxScore , avg( score ) as avgScore , w.areaid,max( w.created ) as created
from Wordachive w
where w.uid=#{uid}
and wordsId in
<foreach collection="wordsIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
<if test="areaid!=null">
and w.areaid=#{areaid}
</if>
<![CDATA[
and w.created <= #{endTime} and w.created >= #{startTime}
]]>
group by w.uid , w.areaid
</select>
<select id="getFinishAssignStatByLessonIds" parameterType="java.util.Map" resultType="com._3e.entity.FinishAssignStat">
select a.uid , count( distinct a.objectId ) as completeCount ,
count(a.objectId) as howmuch , max( score ) as maxScore , avg( score ) as avgScore , a.areaid , max(a.created) created
from Achivement a
where a.achiveType = 'L' and a.pointCaseType in
<foreach collection="pointCaseTypes" item="pointCaseType" open="(" close=")" index="index" separator=",">
#{pointCaseType}
</foreach>
and objectId in
<foreach collection="lessonIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
and a.uid=#{uid}
and a.areaid=#{areaid}
<![CDATA[
and a.created <= #{endTime} and a.created >= #{startTime}
]]>
group by a.uid , a.areaid
</select>
<select id="getFinishAssignCompleteCount" parameterType="java.util.Map" resultType="com._3e.entity.FinishAssignStat">
select count( distinct a.objectId ) as completeCount ,
max(a.created) created
from Achivement a
where a.achiveType = 'L' and a.pointCaseType in ( 4,5, 6 ,7 , 8 )
and objectId in
<foreach collection="lessonIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
and a.uid=#{uid}
and a.areaid=#{areaid}
<![CDATA[
and a.created <= #{endTime} and a.created >= #{startTime}
]]>
and a.score >= 60
group by a.uid , a.areaid
</select>
<select id="getFinishAssignStatsUUIDByLessonIds" parameterType="java.util.Map" resultType="java.lang.String">
select uuid from achivement where uid=#{uid} and areaId=#{areaid}
and objectId in
<foreach collection="lessonIds" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
and pointCaseType in
<foreach collection="pointCaseTypes" item="pointCaseType" open="(" close=")" index="index" separator=",">
#{pointCaseType}
</foreach>
<![CDATA[
and achiveType='L' and length( trim( uuid ))>0
and created <= #{endTime} and created >= #{startTime}
]]>
order by score desc,created desc
limit 1
</select>
<select id="getFinishAssignStatLessonNumAndScore"
resultType="com._3e.http.teachercenter.dto.achivement.LessonCountVO">
WITH ranked_data AS (
SELECT ad.lessonId,ad.number,a.achivementId,
a.score,a.uuid,a.created,
-- 每个课程的尝试次数
COUNT(*) OVER(PARTITION BY ad.lessonid) AS attempt_count,
-- 按分数降序、时间降序排名(分数相同取最新的)
ROW_NUMBER() OVER(PARTITION BY ad.lessonid ORDER BY a.score DESC, a.created DESC) AS rank_by_score
FROM assigndetail ad INNER JOIN achivement a ON ad.lessonid = a.objectid
AND a.achiveType = 'L'
AND a.pointCaseType IN
<foreach collection="pointCaseTypes" item="pointCaseType" open="(" close=")" separator=",">
#{pointCaseType}
</foreach>
AND a.uid = #{uid}
<if test="areaId!=null">
AND a.areaId = #{areaId}
</if>
AND a.created &lt;= #{endTime} AND a.created >= #{startTime}
WHERE ad.assignmentId = #{assignmentId}
)
SELECT lessonId,number,MAX(attempt_count) AS studentNum,
MAX(score) AS studentScore,
MAX(CASE WHEN rank_by_score = 1 THEN achivementId END) AS achivementId,
MAX(CASE WHEN rank_by_score = 1 THEN uuid END) AS audioUrl
FROM ranked_data WHERE rank_by_score = 1
GROUP BY lessonid, number
</select>
<select id="getFinishAssignStatByAssignId" resultType="com._3e.http.myhome.dto.FinishAssignStatVO">
WITH temp as (
select soc.studentId from StudentOwnClass soc
inner join student s on soc.studentid=s.studentid and s.areaid = #{areaId} and s.status = 1
where soc.classesId =#{classesId} and soc.areaid = #{areaId} and soc.status=1
)
select f.* from finishassignstat f inner join temp t on f.uid=t.studentId where f.assignmentid=#{assignmentId}
</select>
<insert id="insertFinishAssignStat" parameterType="com._3e.entity.FinishAssignStat">
INSERT INTO FinishAssignStat ( uid, assignmentId, content, lessonCount,
completeCount, created , howmuch, maxScore, avgScore , areaid,uuid,isSign)
Values ( #{uid}, #{assignmentid}, #{content}, #{lessoncount},
#{completecount},#{created} , #{howmuch}, #{maxscore}, #{avgscore} , #{areaid}, #{uuid}, #{issign})
on conflict(assignmentid,uid,areaid) do update
set created=excluded.created,completeCount=excluded.completecount,howmuch=excluded.howmuch,maxScore=excluded.maxscore,avgScore=excluded.avgscore,
uuid=excluded.uuid
</insert>
</mapper>