220 lines
9.7 KiB
XML
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 <= #{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>
|