115 lines
4.6 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="Achivement">
<insert id="insertAchivement" parameterType="Achivement">
INSERT INTO Achivement ( achivementId, uid, achiveType,
pointCaseType, objectId, score, accuracy, fluent, integrity,
content, created, uuid ,areaid
<if test="jcontent != null and jcontent != ''">
,jcontent
</if> )
Values ( #{achivementId}, #{uid}, #{achiveType}, #{pointCaseType},
#{objectId}, #{score}, #{accuracy}, #{fluent}, #{integrity},
#{content},#{created}, #{uuid} ,#{areaid}
<if test="jcontent != null and jcontent != ''">
,#{jcontent,typeHandler=com.spoken.api.handlers.JSONTypeHandlerPg1}
</if>
)
</insert>
<update id="updateAchivement" parameterType="Achivement">
UPDATE Achivement
SET achivementId = #{achivementId}, uid = #{uid},
achiveType = #{achiveType}, pointCaseType = #{pointCaseType},
objectId = #{objectId}, score = #{score}, accuracy = #{accuracy},
fluent = #{fluent}, integrity = #{integrity},
content = #{content}, created = #{created}, uuid = #{uuid} ,
areaid = #{areaid}
where achivementId=#{achivementId}
</update>
<select id="getAchivementByKey" parameterType="java.lang.Integer" resultType="Achivement">
SELECT achivementId , uid , achiveType , pointCaseType , objectId ,
score , accuracy , fluent , integrity , content , created ,
uuid , areaid,jcontent
FROM Achivement
WHERE achivementId=#{achivementId}
</select>
<select id="getSeqAchivement" resultType="Long" useCache="false" flushCache="true">
SELECT nextval('seq_achivementId') ;
</select>
<select id="getAchivementsCountByUid" parameterType="java.util.Map" resultType="Integer">
SELECT count(*) as howmuch
from Achivement
WHERE uid=#{uid} and areaid = #{areaid}
</select>
<select id="getAchivementsByUid" parameterType="java.util.Map" resultType="Achivement">
SELECT achivementId , uid , achiveType , pointCaseType , objectId ,
score , accuracy , fluent , integrity , content , created ,
uuid , areaid
FROM Achivement
WHERE uid=#{uid} and areaid = #{areaid}
ORDER BY achivementId desc
LIMIT #{pageSize} OFFSET #{offset}
</select>
<update id="updateUUID" parameterType="java.util.Map">
update Achivement
set uuid = #{uuid}
where achivementId= #{achivementId} and areaId=#{areaId} and uid=#{uid} ;
</update>
<select id="getAchivementByUidAndAssignmentIdV2" parameterType="java.util.Map" resultType="AssignmentCompleteParam">
select uid ,number,lessonid as lessonId,score as studentScore ,uuid as audioUrl,studentNum as studentNum from ( select uid,a.number , a.lessonid ,b.score ,b.uuid ,ROW_NUMBER() over ( PARTITION BY b.uid,b.objectid order by b.score desc ) AS rn ,count(1) over ( PARTITION BY b.uid,b.objectid ) as studentNum from assigndetail as a left join achivement as b on a.lessonid = b.objectid and b.areaId = #{areaId} and b.achivetype = 'L' where a.assignmentid = #{assignmentId} ) as c where c.rn =1
</select>
<!-- 查询七天前的引擎分析结果准备在定时任务写到OSS -->
<select id="getAchiveEngineResult" resultType="java.util.HashMap">
SELECT uid , achivementId , content
FROM Achivement
WHERE length( content ) &gt; 100
AND created &lt; current_date - interval '7 days'
ORDER BY achivementId asc
LIMIT 100
</select>
<!-- 统计学习的总分数,次数 -->
<select id="statReadAloudByUid" parameterType="java.util.Map" resultType="TempStudyStatDto">
SELECT uid , count(achivementid) as howmuch ,
sum( CASE WHEN score isnull THEN 0
ELSE score
END ) as totalscore
FROM Achivement
WHERE uid=#{uid} and areaId = #{areaid}
AND achiveType in ( 'L' , 'W' )
AND pointCaseType in ( 3, 5, 6 , 7 , 8 )
GROUP BY uid
LIMIT 1
</select>
<select id="maxAssignmentAchive" parameterType="java.util.HashMap" resultType="java.lang.Double">
SELECT n.score
FROM
( SELECT distinct a.lessonId , b.startTime , b.endTime
FROM AssignDetail a
INNER JOIN Assignment b
on a.assignmentId = #{assignmentId} and a.lessonId = #{lessonId}
and a.assignmentId = b.assignmentId ) m
INNER JOIN Achivement n
on n.uid = #{uid} and m.lessonId = n.objectId and n.areaId=#{areaId}
and n.achivetype = 'L' and pointcasetype in (4, 5 , 6 , 7 , 8 )
and n.created &gt; #{startTime} and n.created &lt; #{endTime}
order by n.score desc , n.created asc
limit 1
</select>
</mapper>