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

267 lines
10 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.univ3e.dao.UnivRaceDao">
<select id= "getNextSeq" resultType="int">
SELECT NEXTVAL('seq_univracescoreid')
</select>
<insert id="doSaveRaceScore" parameterType="com.univ3e.entity.UnivRaceScore">
INSERT INTO univracescore(racescoreid,uid,raceid,score,ismax,accuracy,fluent,
integrity,content,created,areaid,uuid)
VALUES (
<if test="racescoreid == 0">
(SELECT NEXTVAL('seq_univracescoreid')),
</if>
<if test="racescoreid != 0">
#{racescoreid},
</if>
#{uid},#{raceid},#{score},#{ismax},#{accuracy},#{fluent},
#{integrity},#{content},#{created},#{areaid},#{uuid})
</insert>
<insert id="doSaveMaxScore" parameterType="com.univ3e.entity.UnivRaceMaxScore">
INSERT INTO UnivRaceMaxScore(raceid,uid,maxscore,created,racescoreid)
VALUES (#{raceid},#{uid},#{maxscore},#{created},#{racescoreid})
</insert>
<update id="doRecordRaceVoice" parameterType="map">
update univracescore set uuid = #{uuid} where racescoreid = #{racescoreid}
</update>
<update id="doUpdateMaxScore" parameterType="com.univ3e.entity.UnivRaceMaxScore">
Update univracemaxscore
<set>
<if test="maxscore != null">maxscore = #{maxscore},</if>
<if test="created != null">created = #{created},</if>
<if test="racescoreid != null">racescoreid = #{racescoreid}</if>
</set>
WHERE raceid = #{raceid} and uid = #{uid}
</update>
<select id="findMyAllRacescore" parameterType="map" resultType="com.univ3e.entity.UnivRaceScore">
SELECT * FROM UnivRaceScore
WHERE uid = #{uid} and to_char(created, 'yyyy-MM-dd') &gt;= #{begintime}
and to_char(created, 'yyyy-MM-dd') &lt;= #{endtime}
ORDER BY score desc,raceScoreId desc
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="findRaceByRaceid" parameterType="int" resultType="com.univ3e.entity.UnivRace">
SELECT * FROM UnivRace
WHERE raceid = #{raceid}
</select>
<select id="findStudentClassRaceGoodVoice" parameterType="long" resultType="com.univ3e.entity.UnivRaceScore" >
SELECT * FROM univracescore
WHERE EXISTS (
SELECT * FROM (
SELECT b.* FROM Univstudentownclass b
WHERE EXISTS (
SELECT C.*
FROM Univstudentownclass C
WHERE b.classesid = C.classesid AND C.studentid = #{uid}
)
) d
WHERE uid = d.studentid
)
and uuid <![CDATA[<>]]> ''
</select>
<select id="findTeacherClassRaceGoodVoice" parameterType="long" resultType="com.univ3e.entity.UnivRaceScore" >
SELECT * FROM univracescore
WHERE EXISTS (
SELECT *
FROM (
SELECT b.*
FROM Univteacher b
WHERE EXISTS (
SELECT C.*
FROM Univclasses C
WHERE C .teacherid = b.teacherid AND C.teacherid = #{uid}
)
) d
WHERE uid = d.teacherid
)
and uuid <![CDATA[<>]]> ''
</select>
<select id="findMyRaceGoodVoice" parameterType="map" resultType="com.univ3e.entity.UnivRaceScore" >
SELECT * FROM UnivRacescore
WHERE uid = #{uid} and uuid <![CDATA[<>]]> ''
and to_char(created, 'yyyy-MM-dd') &gt;= #{begintime}
and to_char(created, 'yyyy-MM-dd') &lt;= #{endtime}
ORDER BY score desc, racescoreid desc
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="findRaceRank" parameterType="map" resultType="int" >
SELECT count(1)
FROM univracescore
WHERE score &gt;= #{score} AND raceid = #{raceid}
</select>
<select id="findRaceSchool" parameterType="int" resultType="com.univ3e.entity.UnivErsity" >
SELECT * FROM university
WHERE schoolid IN(SELECT schoolid FROM univownrace WHERE raceid = #{raceid}) AND STATUS =1
</select>
<select id="findMyOngoingRace" parameterType="long" resultType="com.univ3e.entity.UnivRace" >
SELECT b.*
FROM ( SELECT distinct a.raceId
FROM univracescore a
WHERE a.uid = #{uid})a
INNER JOIN univrace b
ON a.raceId = b.raceId
and b.endTime &gt; current_timestamp
ORDER BY raceId DESC
</select>
<select id="findOverRace" parameterType="com.mobile.common.page.Page" resultType="com._3e.http.race.dto._3EResRaceOver" >
WITH temp as (
select raceId ,raceName , startTime , endTime
from univRace
where (status = 0 or current_timestamp &gt; endTime)
order by endTime desc ,raceId desc
limit #{limit} offset #{offset}
)
SELECT a.raceId , a.raceName , a.startTime , a.endTime ,
case when c.joinTotal is null then 0 else c.joinTotal end as joinTotal ,
case when b.uid is null then 0 else b.uid end as uid ,
case when b.score is null then 0 else b.score end as score ,
case when d.truename is null then '' else d.truename end as truename
FROM temp AS a
left join
( select raceid , uid , maxscore as score ,
rank() over (partition by raceId order by maxscore desc , created desc ) as mm
from univRacemaxScore
where raceId in ( select raceId from temp ) ) b
on a.raceId = b.raceId and b.mm = 1
left join
( SELECT raceId , count(*) joinTotal
FROM univraceScore
WHERE raceId in ( select raceId from temp )
GROUP BY raceId ) c
ON a.raceId = c.raceId
left JOIN V_Univbaseuser d
on b.uid = d.studentId and b.mm = 1
ORDER BY a.endTime desc , raceId desc
</select>
<select id="findOngoingRaceList" parameterType="int" resultType="com.univ3e.entity.UnivRace" >
SELECT raceId , raceName , holder , raceType , description ,
startTime , endTime , joinRace , credential , badge , reward ,
timeLength , content , status , created , raceAreaId , banner,title
FROM univRace
WHERE status = 1
<if test="_parameter != 0">
and raceType = #{racetype}
</if>
and current_timestamp &lt; endTime
ORDER BY endTime, raceId
</select>
<select id="findJoinRacePhbByRaceID" parameterType="map" resultType="com._3e.http.race.dto._3EResRacePhb" >
SELECT ROW_NUMBER() OVER(ORDER BY m.maxScore DESC,m.avgscore DESC,m.created DESC) AS rowindex,
m.raceId , m.uid , m.maxScore , m.created , m.raceScoreId , r.uuid, m.avgscore
FROM UnivRaceMaxScore m
INNER JOIN Univracescore r
ON m.raceId = #{raceId} AND m.racescoreid = r.racescoreid
ORDER BY m.maxscore desc ,m.avgscore DESC, m.created DESC
<if test="page != null">
LIMIT 20 OFFSET #{page.offset}
</if>
</select>
<select id="findMyFrontJoinRacePhbByRaceID" parameterType="map" resultType="int" >
select count(*) as rankid from UnivRaceMaxscore m inner join univstudent s on
m.uid=s.studentid and raceid =#{raceId} and maxScore >#{score}
</select>
<select id="findMyJoinRacePhbByRaceID" parameterType="map" resultType="com._3e.http.race.dto._3EResRacePhb" >
SELECT ROW_NUMBER() OVER(ORDER BY m.maxscore DESC,m.avgscore DESC,m.created DESC) AS rowindex,
m.raceid,m.uid,m.maxscore,m.created,m.racescoreid,m.avgscore,r.uuid
FROM UnivRaceMaxScore m
INNER JOIN Univracescore r
ON m.racescoreid = r.racescoreid AND m.raceid = #{raceId} AND m.uid = #{uid}
ORDER BY m.maxscore DESC,m.avgscore DESC,m.created DESC
</select>
<select id="getJoinRaceCountByRaceID" parameterType="int" resultType="int" >
select count(m.uid) from univRaceMaxScore m inner join univstudent s
on m.uid = s.studentid and s.status = 1 and m.raceId = #{raceId}
</select>
<select id="findRaceMaxScore" parameterType="map" resultType="com.univ3e.entity.UnivRaceMaxScore">
SELECT * FROM UnivRaceMaxScore
WHERE uid = #{uid} and raceid = #{raceId}
</select>
<select id="findMyRaceAvgScore" parameterType="map" resultType="double">
SELECT round(AVG(score),2) AS avgScore
FROM Univracescore
WHERE raceId =#{raceId}
and uid=#{uid}
GROUP BY uid
</select>
<update id="doSaveAvgScore" parameterType="map">
update univracemaxscore
<set>
<if test="myAvgSoce != null">avgscore = #{myAvgSoce}</if>
</set>
WHERE raceid = #{raceId} and uid = #{uid}
</update>
<select id="findMyJoinMaxScore" parameterType="map" resultType="com._3e.http.race.dto._3EResIsPromotion">
select maxscore,avgscore from univracemaxscore where uid = #{uid} and raceid = #{raceid}
</select>
<select id="findMyJoinJoinNum" parameterType="map" resultType="com._3e.http.race.dto._3EResIsPromotion">
select count(1) as joinNum from univracescore where uid = #{uid} and raceid = #{raceid}
</select>
<select id="findTwoRaceScore" parameterType="map" resultType="com._3e.http.race.dto._3EResIsPromotion">
select rms.uid,rms.avgscore,rms.maxscore,rs.count joinnum from univracemaxscore rms INNER JOIN (select uid,count(1) from univracescore
where raceid = #{primaryRaceId} and areaid = #{areaid} and created between #{primaryStartTime} and #{primaryEndTime} group by uid) rs
on rms.uid = rs.uid and rms.raceid = #{primaryRaceId}
INNER JOIN univstudent s on rms.uid = s.studentid and s.areaid = #{areaid}
and s.schoolid = #{schoolid} and rms.uid = #{uid}
UNION all
select rms.uid,rms.avgscore,rms.maxscore,rs.count from univracemaxscore rms INNER JOIN (select uid,count(1) from univracescore
where raceid = #{midleRaceId} and areaid = #{areaid} and created between #{midleStartTime} and #{midleEndTime} group by uid) rs
on rms.uid = rs.uid and rms.raceid = #{midleRaceId}
INNER JOIN univstudent s on rms.uid = s.studentid and s.areaid = #{areaid}
and s.schoolid = #{schoolid} and rms.uid = #{uid}
</select>
<select id="findSchoolJoinNum" parameterType="map" resultType="com._3e.http.race.dto._3EResIsPromotion">
select uid,round(avg(avgscore),2) avgscore,sum(count) joinnum from (
select rms.uid,rms.avgscore,rs.count from univracemaxscore rms INNER JOIN (select uid,count(1) from univracescore
where raceid = #{primaryRaceId} and areaid = #{areaid} and created between #{primaryStartTime} and #{primaryEndTime} group by uid) rs
on rms.uid = rs.uid and rms.raceid = #{primaryRaceId}
INNER JOIN univstudent s on rms.uid = s.studentid and s.areaid = #{areaid}
and s.schoolid = #{schoolid}
UNION all
select rms.uid,rms.avgscore,rs.count from univracemaxscore rms INNER JOIN (select uid,count(1) from univracescore
where raceid = #{midleRaceId} and areaid = #{areaid} and created between #{midleStartTime} and #{midleEndTime} group by uid) rs
on rms.uid = rs.uid and rms.raceid = #{midleRaceId}
INNER JOIN univstudent s on rms.uid = s.studentid and s.areaid = #{areaid}
and s.schoolid = #{schoolid}
) su where uid not in
<foreach collection="studentids" open="(" close=")" index="index" item="studentid" separator=",">
#{studentid}
</foreach>
GROUP BY uid HAVING avg(avgscore)>60 ORDER BY joinnum desc,avgscore desc limit 5
</select>
</mapper>