340 lines
12 KiB
XML
340 lines
12 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="HearAnswer">
|
|
|
|
<insert id="insertHearAnswer" parameterType="HearAnswer">
|
|
INSERT INTO HearAnswer ( examAnswerId, userId, examId, examType,
|
|
hearPaperId, score, answerDetail, created, areaId , origiScore , trueScore )
|
|
Values ( #{examAnswerId}, #{userId}, #{examId}, #{examType},
|
|
#{hearPaperId}, #{score}, #{answerDetail},current_timestamp,
|
|
#{areaId} , #{origiScore} , #{trueScore} )
|
|
</insert>
|
|
|
|
<update id="updateHearAnswer" parameterType="HearAnswer">
|
|
UPDATE HearAnswer
|
|
SET examAnswerId = #{examAnswerId}, userId = #{userId},
|
|
examId = #{examId}, examType = #{examType},
|
|
hearPaperId = #{hearPaperId}, score = #{score},
|
|
answerDetail = #{answerDetail}, created = #{created},
|
|
areaId = #{areaId} , origiScore = #{origiScore}
|
|
WHERE examAnswerId=#{examAnswerId}
|
|
</update>
|
|
|
|
<select id="getHearAnswerByKey" parameterType="java.lang.Integer" resultType="HearAnswer">
|
|
SELECT examAnswerId , userId , examId , examType , hearPaperId ,
|
|
score , answerDetail , created , areaId , origiScore
|
|
FROM HearAnswer
|
|
WHERE examAnswerId=#{examAnswerId}
|
|
</select>
|
|
|
|
<select id="getSeqHearAnswer" resultType="Long" useCache="false" flushCache="true">
|
|
SELECT nextval('seq_hearAnswerId')
|
|
</select>
|
|
|
|
|
|
<select id="getHearAnswersCountByUserId" parameterType="java.lang.Long" resultType="Integer">
|
|
SELECT count(*) as howmuch
|
|
FROM HearAnswer
|
|
WHERE userId=#{userId}
|
|
</select>
|
|
|
|
<select id="getHearAnswersByUserId" parameterType="java.util.Map" resultType="HearAnswer">
|
|
|
|
SELECT examAnswerId , userId , examId , examType , hearPaperId ,
|
|
score , answerDetail , created , areaId , origiScore
|
|
FROM HearAnswer
|
|
WHERE userId=#{userId}
|
|
AND created > #{startTime} and created <= #{endTime}
|
|
ORDER BY examAnswerId desc
|
|
<if test="pageSize!=null">
|
|
limit #{pageSize}
|
|
</if>
|
|
|
|
<if test="offset!=null">
|
|
offset #{offset}
|
|
</if>
|
|
|
|
</select>
|
|
|
|
<select id="getMaxHearAnswersCountByClassesId" parameterType="java.util.Map" resultType="Integer">
|
|
<!-- SELECT count(*) from StudentOwnClass where classesId = #{classesId} and status=1 -->
|
|
|
|
select count(soc.studentId ) from studentownclass soc
|
|
inner join student s on soc.studentid=s.studentid and s.status=1 and soc.areaid=#{areaid} and s.areaid=#{areaid}
|
|
where soc.classesId=#{classesId} and soc.status=1
|
|
<!-- FROM ( SELECT userId , max( score ) as maxScore
|
|
FROM StudentOwnClass m
|
|
INNER JOIN hearAnswer n
|
|
ON m.classesId = #{classesId} AND m.studentId = n.userId
|
|
AND examId = #{examId}
|
|
GROUP BY userId ) as a -->
|
|
</select>
|
|
|
|
<select id="getMaxHearAnswersByClassesId" parameterType="java.util.Map" resultType="ExamAchive">
|
|
with stu as(select soc.studentId userId from studentownclass soc
|
|
inner join student s on soc.studentid=s.studentid and s.status=1
|
|
where soc.classesId=#{classesId} and soc.status=1)
|
|
SELECT stu.userId , b.examAnswerId , b.examId , b.examType ,
|
|
b.hearPaperId as examPaperId , b.score , b.created ,
|
|
|
|
case when b.score >= 85 then 'A'
|
|
when b.score >= 80 then 'B'
|
|
when b.score >= 70 then 'C'
|
|
when b.score >= 60 then 'D'
|
|
else 'E' end as level
|
|
, e.title,b.trueScore
|
|
FROM ( SELECT userId , examId ,
|
|
last_value( examAnswerId ) OVER (PARTITION BY userId order by score desc ) as tempId ,
|
|
row_number() OVER (PARTITION BY userId order by score desc ) as rn
|
|
FROM StudentOwnClass m
|
|
INNER JOIN HearAnswer n
|
|
ON m.classesId = #{classesId} AND m.studentId = n.userId AND examId = #{examId}
|
|
) a
|
|
INNER JOIN HearAnswer b
|
|
ON a.tempId = b.examAnswerId and a.rn = 1 and b.areaid = #{areaid}
|
|
inner join HearExam e on e.examId = b.examId
|
|
right join stu on stu.userId=b.userId
|
|
ORDER BY b.score desc nulls last,b.created asc nulls last ,stu.userId
|
|
<if test="pageSize!=null">
|
|
limit #{pageSize}
|
|
</if>
|
|
|
|
<if test="offset!=null">
|
|
offset #{offset}
|
|
</if>
|
|
|
|
</select>
|
|
|
|
<select id="getHearAnswersCountByClassesId" parameterType="java.util.Map" resultType="Integer">
|
|
SELECT count(*)
|
|
FROM StudentOwnClass a
|
|
INNER JOIN hearAnswer b
|
|
ON a.classesId = #{classesId} AND a.studentId = b.userId
|
|
AND b.examId = #{examId} and b.areaid = #{areaid}
|
|
</select>
|
|
|
|
<select id="getHearAnswersByClassesId" parameterType="java.util.Map" resultType="ExamAchive">
|
|
|
|
SELECT b.userId , b.examAnswerId , b.examId , b.examType ,
|
|
b.hearPaperId as examPaperId , b.score , b.created ,
|
|
|
|
case when b.score >= 85 then 'A'
|
|
when b.score >= 80 then 'B'
|
|
when b.score >= 70 then 'C'
|
|
when b.score >= 60 then 'D'
|
|
else 'E' end as level
|
|
, e.title,b.trueScore
|
|
FROM StudentOwnClass a
|
|
|
|
INNER JOIN hearAnswer b
|
|
ON a.classesId = #{classesId} AND a.studentId = b.userId
|
|
AND b.examId = #{examId} and b.areaId=#{areaid}
|
|
inner join hearExam e on e.examId = b.examId
|
|
ORDER BY b.examAnswerId desc
|
|
<if test="pageSize!=null">
|
|
limit #{pageSize}
|
|
</if>
|
|
|
|
<if test="offset!=null">
|
|
offset #{offset}
|
|
</if>
|
|
|
|
</select>
|
|
|
|
<select id="getMaxHearAchivesCountByUserId" parameterType="java.util.Map" resultType="Integer">
|
|
<!-- <![CDATA[
|
|
SELECT count(*)
|
|
FROM ( SELECT examId , max( score ) as maxScore
|
|
FROM hearAnswer n
|
|
WHERE n.userId = #{userId}
|
|
GROUP BY examId , ) a
|
|
INNER JOIN hearAnswer b
|
|
ON b.userId = #{userId} and a.examId = b.examId
|
|
and a.maxScore = b.score and b.areaid = #{areaid}
|
|
AND b.created > #{startTime} and b.created <= #{endTime}
|
|
]]> -->
|
|
|
|
SELECT count( distinct examid )
|
|
FROM hearAnswer
|
|
WHERE userId = #{userId}
|
|
and areaid=#{areaid}
|
|
AND created > #{startTime} and created <= #{endTime}
|
|
|
|
</select>
|
|
|
|
<select id="getMaxHearAchivesByUserId" parameterType="java.util.Map" resultType="ExamAchive">
|
|
|
|
SELECT b.userId , b.examAnswerId , b.examId , b.examType ,
|
|
b.hearPaperId as examPaperId , b.score , b.created ,
|
|
|
|
case when b.score >= 85 then 'A'
|
|
when b.score >= 80 then 'B'
|
|
when b.score >= 70 then 'C'
|
|
when b.score >= 60 then 'D'
|
|
else 'E' end as level
|
|
, e.title
|
|
FROM ( SELECT userId , examAnswerId , examId , examType ,
|
|
hearPaperId , score , created ,
|
|
rank() over (partition by examId order by score desc , created desc ) as mm
|
|
FROM hearANSWER
|
|
WHERE userId = #{userId}
|
|
and areaId=#{areaid}
|
|
AND created > #{startTime} and created <= #{endTime}
|
|
|
|
) b
|
|
INNER JOIN HearExam e
|
|
on b.examId = e.examId
|
|
WHERE b.mm = 1
|
|
ORDER BY b.examId desc
|
|
<if test="pageSize!=null">
|
|
limit #{pageSize}
|
|
</if>
|
|
|
|
<if test="offset!=null">
|
|
offset #{offset}
|
|
</if>
|
|
|
|
<!-- SELECT b.userId , b.examAnswerId , b.examId , b.examType ,
|
|
b.hearPaperId as examPaperId , b.score , b.created ,
|
|
<![CDATA[
|
|
case when b.score >= 85 then 'A'
|
|
when b.score >= 73 then 'B'
|
|
when b.score >= 60 then 'C'
|
|
when b.score >= 45 then 'D'
|
|
else 'E' end as level
|
|
]]> , e.title
|
|
FROM ( SELECT examId , max( score ) as maxScore
|
|
FROM hearAnswer n
|
|
WHERE n.userId = #{userId}
|
|
GROUP BY examId ) a
|
|
INNER JOIN hearAnswer b
|
|
ON b.userId = #{userId} and a.examId = b.examId
|
|
and a.maxScore = b.score and b.areaid = #{areaid}
|
|
inner join HearExam e on e.examId = b.examId
|
|
<![CDATA[
|
|
AND b.created > #{startTime} and b.created <= #{endTime}
|
|
]]>
|
|
|
|
ORDER BY a.examId desc
|
|
<dynamic>
|
|
<isNotEmpty prepend=" LIMIT " property="pageSize">
|
|
#{pageSize}
|
|
</isNotEmpty>
|
|
|
|
<isNotEmpty prepend=" OFFSET " property="offset">
|
|
#{offset}
|
|
</isNotEmpty>
|
|
</dynamic> -->
|
|
|
|
</select>
|
|
|
|
<select id="getHearAchivesCountByUserId" parameterType="java.util.Map" resultType="Integer">
|
|
|
|
SELECT count(*)
|
|
FROM hearAnswer b
|
|
WHERE b.userId = #{userId} and b.areaid = #{areaid}
|
|
AND b.created > #{startTime} and b.created <= #{endTime}
|
|
|
|
</select>
|
|
|
|
<select id="getHearAchivesByUserId" parameterType="java.util.Map" resultType="ExamAchive">
|
|
|
|
SELECT b.userId , b.examAnswerId , b.examId , b.examType ,
|
|
b.hearPaperId as examPaperId , b.score , b.created ,
|
|
|
|
case when b.score >= 85 then 'A'
|
|
when b.score >= 80 then 'B'
|
|
when b.score >= 70 then 'C'
|
|
when b.score >= 60 then 'D'
|
|
else 'E' end as level
|
|
, e.title
|
|
FROM hearAnswer b inner join hearExam e on e.examId = b.examId
|
|
WHERE b.userId = #{userId} and b.areaid = #{areaid}
|
|
|
|
AND b.created > #{startTime} and b.created <= #{endTime}
|
|
|
|
ORDER BY b.examAnswerId desc
|
|
<if test="pageSize!=null">
|
|
limit #{pageSize}
|
|
</if>
|
|
|
|
<if test="offset!=null">
|
|
offset #{offset}
|
|
</if>
|
|
|
|
</select>
|
|
|
|
|
|
<select id="getHearCountByExamIdByUserId" parameterType="java.util.Map" resultType="Integer">
|
|
|
|
select count(*)
|
|
from hearanswer
|
|
where examid = #{examId} and userid = #{userId}
|
|
and areaId=#{areaId}
|
|
</select>
|
|
|
|
|
|
|
|
<select id="getMaxHearAnswersCountByClassesIdFilter" parameterType="java.util.Map" resultType="Integer">
|
|
with temp as(SELECT userId , score,
|
|
row_number() OVER (PARTITION BY userId order by score desc , created asc ) as rn
|
|
FROM StudentOwnClass m
|
|
INNER JOIN HEARANSWER n
|
|
ON m.classesId = #{classesId}
|
|
AND m.studentId = n.userId AND examId = #{examId}
|
|
and m.areaId=#{areaid} and n.areaId=#{areaid} )
|
|
|
|
select count(userId) from temp where rn=1
|
|
<if test="upperScore!=null">
|
|
and score<#{upperScore}
|
|
</if>
|
|
<if test="lowerScore!=null">
|
|
and score>#{lowerScore}
|
|
</if>
|
|
|
|
</select>
|
|
|
|
<select id="getMaxHearAnswersByClassesIdFilter" parameterType="java.util.Map" resultType="ExamAchive">
|
|
|
|
with stu as(select soc.studentId userId from studentownclass soc
|
|
inner join student s on soc.studentid=s.studentid and s.status=1
|
|
where soc.classesId=#{classesId} and s.areaid=#{areaid} and soc.areaid=#{areaid} and soc.status=1 ) ,
|
|
SELECT stu.userId , b.examAnswerId , b.examId , b.examType ,
|
|
b.examPaperId , b.score , b.created ,
|
|
|
|
case when b.score >= 85 then 'A'
|
|
when b.score >= 80 then 'B'
|
|
when b.score >= 70 then 'C'
|
|
when b.score >= 60 then 'D'
|
|
else 'E' end as level
|
|
, e.title , b.trueScore , b.machineScore , b.humanScore,
|
|
b.origiScore
|
|
FROM ( SELECT userId , examId ,
|
|
examAnswerId as tempId ,
|
|
row_number() OVER (PARTITION BY userId order by score desc , created asc ) as rn
|
|
FROM StudentOwnClass m
|
|
INNER JOIN EXAMANSWER n
|
|
ON m.classesId = #{classesId} AND m.studentId = n.userId AND examId = #{examId} and m.areaId=#{areaid} and n.areaId=#{areaid}
|
|
) a
|
|
INNER JOIN hearAnswer b
|
|
ON a.tempId = b.examAnswerId and a.rn = 1 and b.areaid = #{areaid}
|
|
<if test="upperScore!=null">
|
|
and b.score<#{upperScore}
|
|
</if>
|
|
<if test="lowerScore!=null">
|
|
and b.score>#{lowerScore}
|
|
</if>
|
|
inner join Exam e on e.examId = b.examId
|
|
inner join stu on stu.userId = b.userId
|
|
ORDER BY b.score desc nulls last, b.created asc nulls last,stu.userId
|
|
<if test="pageSize!=null">
|
|
limit #{pageSize}
|
|
</if>
|
|
<if test="offset!=null">
|
|
offset #{offset}
|
|
</if>
|
|
|
|
</select>
|
|
|
|
</mapper> |