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

453 lines
25 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.EssayDao">
<!-- 定义resultMap -->
<resultMap id="essayBaseResultMap" type="com._3e.http.essay.dto.ResEssayBase_1">
<!-- 其他字段的映射 -->
<result property="essayBaseId" column="essayBaseId"/>
<result property="wordCount" column="wordCount"/>
<result property="essayType" column="essayType"/>
<result property="essayTypeName" column="essayTypeName"/>
<result property="style" column="style"/>
<result property="styleName" column="styleName"/>
<result property="theme" column="theme" typeHandler="com._3e.http.wrongbook.typehandler.IntegerListArrayTypeHandler"/>
<result property="themeName" column="themeName" typeHandler="com._3e.http.wrongbook.typehandler.ArrayStringHandlerForMP"/>
<result property="goodsId" column="goodsId" typeHandler="com._3e.http.wrongbook.typehandler.IntegerListArrayTypeHandler"/>
<result property="goodsIdName" column="goodsIdName" typeHandler="com._3e.http.wrongbook.typehandler.ArrayStringHandlerForMP"/>
<result property="source" column="source"/>
<result property="useNode" column="useNode" typeHandler="com._3e.http.wrongbook.typehandler.IntegerListArrayTypeHandler"/>
<result property="useNodeName" column="useNodeName" typeHandler="com._3e.http.wrongbook.typehandler.ArrayStringHandlerForMP"/>
<result property="properties" column="properties"/>
<result property="classLevel" column="classLevel"/>
<result property="lessonId" column="lessonId" typeHandler="com._3e.http.wrongbook.typehandler.IntegerListArrayTypeHandler"/>
<result property="lessonIdName" column="lessonIdName" typeHandler="com._3e.http.wrongbook.typehandler.ArrayStringHandlerForMP"/>
<result property="essayYear" column="essayYear"/>
<result property="grade" column="grade"/>
<result property="created" column="created"/>
<result property="demand" column="demand"/>
<result property="difficulty" column="difficulty"/>
<result property="enTitle" column="enTitle"/>
<result property="cnTitle" column="cnTitle"/>
<result property="description" column="description"/>
<result property="demandPic" column="demandPic"/>
<result property="picDesc" column="picDesc"/>
<result property="cnContent" column="cnContent"/>
<result property="setScore" column="setScore"/>
<result property="essayAnswerId" column="essayAnswerId"/>
<result property="userScore" column="userScore"/>
<collection property="essayBaseModels" column="essayBaseId" select="selectEssayBaseModelByEssayBaseId"/>
</resultMap>
<select id="selectEssayBaseModelByEssayBaseId" resultType="com._3e.entity.EssayBaseModel">
select * from essaybasemodel where essaybaseId = #{essayBaseId} and status = 1
</select>
<select id="getEssayYear" resultType="com._3e.http.essay.dto.ResPara">
select essayyear AS paraId,TO_CHAR(essayyear, '9999') AS valueStr from essaybase where status = 1 group by essayyear order by essayyear desc
</select>
<select id="getEssayBaseByGradeIdAndVersionIdAndTitle" resultType="com._3e.http.essay.dto.ResEssayBase">
with temp As(
select p.paraid,l2.lessonId AS lessonId1,l1.lessonName unitName,l1.orderId,eb.* from essaybase eb
JOIN LATERAL unnest(eb.lessonid) WITH ORDINALITY AS u(lessonid, ord) ON true
JOIN lesson l1 ON l1.lessonid = u.lessonid AND l1.status = 1 and l1.lessontype = 'U'
JOIN lesson l2 ON l2.lessonid = l1.parentId AND l2.status = 1 and l2.lessontype = 'B'
JOIN lesson l3 ON l3.lessonid = l2.parentid AND l3.status = 1 and l3.lessontype = 'C'
INNER JOIN goods g on l3.lessonid = g.lessonid
INNER JOIN parameter p on p.valuelong = g.goodsId and p.paratype = 38 and p.paraint = 4 and p.status = 1 and p.paraId = #{versionId}
where eb.status = 1 and eb.classLevel in
<foreach item="classLevel" index="index" collection="classLevels" open="(" separator="," close=")">
#{classLevel}
</foreach>
and eb.grade = #{gradeId} and EXISTS ( SELECT 1 FROM unnest(eb.goodsId) AS goods_id WHERE goods_id = #{versionId})
order by p.paraid,l2.lessonId,l1.orderid ),
temp1 AS (
SELECT ea.*,
ROW_NUMBER() OVER (PARTITION BY ea.essaybaseid ORDER BY ea.created DESC) as rn
FROM essayanswer ea
WHERE ea.uid = #{uid}
)
select p_essayType.valueStr AS essayTypeName,
p_style.valueStr AS styleName ,
p_grade.valueStr AS gradeName,
(SELECT STRING_AGG(p_theme.valueStr, ', ') FROM unnest(t.theme) AS theme_id JOIN parameter p_theme ON p_theme.paraId = theme_id AND p_theme.paraType = 38 AND p_theme.paraInt = 3 AND p_theme.status = 1) AS themeName,
t.*,t1.essayAnswerId AS essayAnswerId,t1.score AS userScore
from temp t
LEFT JOIN parameter p_style ON p_style.paraId = t.style AND p_style.paraType = 38 AND p_style.paraInt = 2 and p_style.status = 1
LEFT JOIN parameter p_essayType ON p_essayType.paraId = t.essayType AND p_essayType.paraType = 38 AND p_essayType.paraInt = 1 and p_essayType.status = 1
LEFT JOIN parameter p_grade ON p_grade.paraId = t.grade AND p_grade.paraType = 38 AND p_grade.paraInt = 9 and p_grade.status = 1
LEFT JOIN temp1 t1 ON t1.essaybaseid = t.essaybaseid AND t1.rn = 1
where t.status = 1
<if test="keyWord != null">
and (lower(t.enTitle) like lower(#{keyWord}) or lower(t.cnTitle) like lower(#{keyWord})or lower(t.source) like lower(#{keyWord}))
</if>
ORDER BY t.paraid,t.lessonId1,t.orderid
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getEssayBaseByGradeIdAndVersionIdAndTitle_2" resultType="com._3e.http.essay.dto.ResEssayBase">
with temp As(
select p.paraid,l2.lessonId AS lessonId1,l1.lessonName unitName,l1.orderId,eb.* from essaybase eb
JOIN LATERAL unnest(eb.lessonid) WITH ORDINALITY AS u(lessonid, ord) ON true
JOIN lesson l1 ON l1.lessonid = u.lessonid AND l1.status = 1 and l1.lessontype = 'U'
JOIN lesson l2 ON l2.lessonid = l1.parentId AND l2.status = 1 and l2.lessontype = 'B'
JOIN lesson l3 ON l3.lessonid = l2.parentid AND l3.status = 1 and l3.lessontype = 'C'
INNER JOIN goods g on l3.lessonid = g.lessonid
INNER JOIN parameter p on p.valuelong = g.goodsId and p.paratype = 38 and p.paraint = 4 and p.status = 1 and p.paraId = #{versionId}
where eb.status = 1
and eb.grade = #{gradeId} and EXISTS ( SELECT 1 FROM unnest(eb.goodsId) AS goods_id WHERE goods_id = #{versionId})
order by p.paraid,l2.lessonId,l1.orderid )
select p_essayType.valueStr AS essayTypeName,
p_style.valueStr AS styleName ,
p_grade.valueStr AS gradeName,
(SELECT STRING_AGG(p_theme.valueStr, ', ') FROM unnest(t.theme) AS theme_id JOIN parameter p_theme ON p_theme.paraId = theme_id AND p_theme.paraType = 38 AND p_theme.paraInt = 3 AND p_theme.status = 1) AS themeName,
t.*,t1.essayAnswerId AS essayAnswerId,t1.score AS userScore,t1.created AS userCreated
from temp t
inner JOIN essayanswer t1 ON t1.essaybaseid = t.essaybaseid and t1.uid = #{uid}
LEFT JOIN parameter p_style ON p_style.paraId = t.style AND p_style.paraType = 38 AND p_style.paraInt = 2 and p_style.status = 1
LEFT JOIN parameter p_essayType ON p_essayType.paraId = t.essayType AND p_essayType.paraType = 38 AND p_essayType.paraInt = 1 and p_essayType.status = 1
LEFT JOIN parameter p_grade ON p_grade.paraId = t.grade AND p_grade.paraType = 38 AND p_grade.paraInt = 9 and p_grade.status = 1
where t.status = 1
<if test="keyWord != null">
and (lower(t.enTitle) like lower(#{keyWord}) or lower(t.cnTitle) like lower(#{keyWord})or lower(t.source) like lower(#{keyWord}))
</if>
ORDER BY t1.created DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getEssayBaseByGradeIdAndVersionIdAndTitle_1" resultType="com._3e.http.essay.dto.ResEssayBase">
with temp As(
select p.paraid,l2.lessonId AS lessonId1,l1.lessonName unitName,l1.orderId,eb.* from essaybase eb
JOIN LATERAL unnest(eb.lessonid) WITH ORDINALITY AS u(lessonid, ord) ON true
JOIN lesson l1 ON l1.lessonid = u.lessonid AND l1.status = 1 and l1.lessontype = 'U'
JOIN lesson l2 ON l2.lessonid = l1.parentId AND l2.status = 1 and l2.lessontype = 'B'
JOIN lesson l3 ON l3.lessonid = l2.parentid AND l3.status = 1 and l3.lessontype = 'C'
INNER JOIN goods g on l3.lessonid = g.lessonid
INNER JOIN parameter p on p.valuelong = g.goodsId and p.paratype = 38 and p.paraint = 4 and p.status = 1 and p.paraId = #{versionId}
where eb.status = 1 and eb.classLevel in
<foreach item="classLevel" index="index" collection="classLevels" open="(" separator="," close=")">
#{classLevel}
</foreach>
and eb.grade = #{gradeId} and EXISTS ( SELECT 1 FROM unnest(eb.goodsId) AS goods_id WHERE goods_id = #{versionId})
order by p.paraid,l2.lessonId,l1.orderid )
select p_essayType.valueStr AS essayTypeName,
p_style.valueStr AS styleName ,
p_grade.valueStr AS gradeName,
(SELECT STRING_AGG(p_theme.valueStr, ', ') FROM unnest(t.theme) AS theme_id JOIN parameter p_theme ON p_theme.paraId = theme_id AND p_theme.paraType = 38 AND p_theme.paraInt = 3 AND p_theme.status = 1) AS themeName,
t.*
from temp t
LEFT JOIN parameter p_style ON p_style.paraId = t.style AND p_style.paraType = 38 AND p_style.paraInt = 2 and p_style.status = 1
LEFT JOIN parameter p_essayType ON p_essayType.paraId = t.essayType AND p_essayType.paraType = 38 AND p_essayType.paraInt = 1 and p_essayType.status = 1
LEFT JOIN parameter p_grade ON p_grade.paraId = t.grade AND p_grade.paraType = 38 AND p_grade.paraInt = 9 and p_grade.status = 1
where t.status = 1
<if test="keyWord != null">
and (lower(t.enTitle) like lower(#{keyWord}) or lower(t.cnTitle) like lower(#{keyWord})or lower(t.source) like lower(#{keyWord}))
</if>
ORDER BY t.paraid,t.lessonId1,t.orderid
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getEssayBaseByThemeIdAndTitle" resultType="com._3e.http.essay.dto.ResEssayBase">
with temp As(
select DISTINCT ON (eb.essaybaseid) eb.* from essaybase eb
JOIN LATERAL unnest(eb.theme) WITH ORDINALITY AS u(themeId, ord) ON true
JOIN parameter p_theme on p_theme.paraId = u.themeId and p_theme.paratype = 38 and p_theme.paraInt = 3 and p_theme.status = 1 and p_theme.valueInt != 0
JOIN parameter p_theme1 on p_theme.valueInt = p_theme1.paraId and p_theme1.paratype = 38 and p_theme1.paraInt = 3 and p_theme1.status = 1
and p_theme1.valueInt = 0
<if test="themeId != 0">
and p_theme1.paraId = #{themeId}
</if>
where eb.status = 1 and eb.classLevel in
<foreach item="classLevel" index="index" collection="classLevels" open="(" separator="," close=")">
#{classLevel}
</foreach>
order by eb.essaybaseid ),
temp1 AS (
SELECT ea.*,
ROW_NUMBER() OVER (PARTITION BY ea.essaybaseid ORDER BY ea.created DESC) as rn
FROM essayanswer ea
WHERE ea.uid = #{uid}
)
select p_essayType.valueStr AS essayTypeName,
p_style.valueStr AS styleName ,
p_grade.valueStr AS gradeName,
(SELECT STRING_AGG(p_theme.valueStr, ', ') FROM unnest(t.theme) AS theme_id
JOIN parameter p_theme ON p_theme.paraId = theme_id
AND p_theme.paraType = 38
AND p_theme.paraInt = 3
AND p_theme.status = 1
) AS themeName,t.*,t1.essayAnswerId AS essayAnswerId,t1.score AS userScore
from temp t
LEFT JOIN parameter p_style ON p_style.paraId = t.style AND p_style.paraType = 38 AND p_style.paraInt = 2 and p_style.status = 1
LEFT JOIN parameter p_essayType ON p_essayType.paraId = t.essayType AND p_essayType.paraType = 38 AND p_essayType.paraInt = 1 and p_essayType.status = 1
LEFT JOIN parameter p_grade ON p_grade.paraId = t.grade AND p_grade.paraType = 38 AND p_grade.paraInt = 9 and p_grade.status = 1
LEFT JOIN temp1 t1 ON t1.essaybaseid = t.essaybaseid AND t1.rn = 1
where t.status = 1
<if test="keyWord != null">
and (lower(t.enTitle) like lower(#{keyWord}) or lower(t.cnTitle) like lower(#{keyWord})or lower(t.source) like lower(#{keyWord}))
</if>
ORDER BY t.created DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getEssayBaseByThemeIdAndTitle_2" resultType="com._3e.http.essay.dto.ResEssayBase">
with temp As(
select DISTINCT ON (eb.essaybaseid) eb.* from essaybase eb
JOIN LATERAL unnest(eb.theme) WITH ORDINALITY AS u(themeId, ord) ON true
JOIN parameter p_theme on p_theme.paraId = u.themeId and p_theme.paratype = 38 and p_theme.paraInt = 3 and p_theme.status = 1 and p_theme. valueInt != 0
JOIN parameter p_theme1 on p_theme.valueInt = p_theme1.paraId and p_theme1.paratype = 38 and p_theme1.paraInt = 3 and p_theme1.status = 1
and p_theme1.valueInt = 0
<if test="themeId != 0">
and p_theme1.paraId = #{themeId}
</if>
where eb.status = 1
order by eb.essaybaseid )
select p_essayType.valueStr AS essayTypeName,
p_style.valueStr AS styleName ,
p_grade.valueStr AS gradeName,
(SELECT STRING_AGG(p_theme.valueStr, ', ') FROM unnest(t.theme) AS theme_id
JOIN parameter p_theme ON p_theme.paraId = theme_id
AND p_theme.paraType = 38
AND p_theme.paraInt = 3
AND p_theme.status = 1
) AS themeName,t.*,t1.essayAnswerId AS essayAnswerId,t1.score AS userScore,t1.created AS userCreated
from temp t
inner JOIN essayanswer t1 ON t1.essaybaseid = t.essaybaseid and t1.uid = #{uid}
LEFT JOIN parameter p_style ON p_style.paraId = t.style AND p_style.paraType = 38 AND p_style.paraInt = 2 and p_style.status = 1
LEFT JOIN parameter p_essayType ON p_essayType.paraId = t.essayType AND p_essayType.paraType = 38 AND p_essayType.paraInt = 1 and p_essayType.status = 1
LEFT JOIN parameter p_grade ON p_grade.paraId = t.grade AND p_grade.paraType = 38 AND p_grade.paraInt = 9 and p_grade.status = 1
where t.status = 1
<if test="keyWord != null">
and (lower(t.enTitle) like lower(#{keyWord}) or lower(t.cnTitle) like lower(#{keyWord})or lower(t.source) like lower(#{keyWord}))
</if>
ORDER BY t1.created DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getEssayBaseByThemeIdAndTitle_1" resultType="com._3e.http.essay.dto.ResEssayBase">
with temp As(
select DISTINCT ON (eb.essaybaseid) eb.* from essaybase eb
JOIN LATERAL unnest(eb.theme) WITH ORDINALITY AS u(themeId, ord) ON true
JOIN parameter p_theme on p_theme.paraId = u.themeId and p_theme.paratype = 38 and p_theme.paraInt = 3 and p_theme.status = 1 and p_theme. valueInt != 0
JOIN parameter p_theme1 on p_theme.valueInt = p_theme1.paraId and p_theme1.paratype = 38 and p_theme1.paraInt = 3 and p_theme1.status = 1
and p_theme1.valueInt = 0
<if test="themeId != 0">
and p_theme1.paraId = #{themeId}
</if>
where eb.status = 1 and eb.classLevel in
<foreach item="classLevel" index="index" collection="classLevels" open="(" separator="," close=")">
#{classLevel}
</foreach>
order by eb.essaybaseid )
select p_essayType.valueStr AS essayTypeName,
p_style.valueStr AS styleName ,
p_grade.valueStr AS gradeName,
(SELECT STRING_AGG(p_theme.valueStr, ', ') FROM unnest(t.theme) AS theme_id
JOIN parameter p_theme ON p_theme.paraId = theme_id
AND p_theme.paraType = 38
AND p_theme.paraInt = 3
AND p_theme.status = 1
) AS themeName,t.*
from temp t
LEFT JOIN parameter p_style ON p_style.paraId = t.style AND p_style.paraType = 38 AND p_style.paraInt = 2 and p_style.status = 1
LEFT JOIN parameter p_essayType ON p_essayType.paraId = t.essayType AND p_essayType.paraType = 38 AND p_essayType.paraInt = 1 and p_essayType.status = 1
LEFT JOIN parameter p_grade ON p_grade.paraId = t.grade AND p_grade.paraType = 38 AND p_grade.paraInt = 9 and p_grade.status = 1
where t.status = 1
<if test="keyWord != null">
and (lower(t.enTitle) like lower(#{keyWord}) or lower(t.cnTitle) like lower(#{keyWord})or lower(t.source) like lower(#{keyWord}))
</if>
ORDER BY t.created DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getEssayBaseByYearAndTitle" resultType="com._3e.http.essay.dto.ResEssayBase">
with temp1 AS (
SELECT ea.*,
ROW_NUMBER() OVER (PARTITION BY ea.essaybaseid ORDER BY ea.created DESC) as rn
FROM essayanswer ea
WHERE ea.uid = #{uid}
)
select p_essayType.valueStr AS essayTypeName,
p_style.valueStr AS styleName ,
p_grade.valueStr AS gradeName,
(
SELECT STRING_AGG(p_theme.valueStr, ', ')
FROM unnest(t.theme) AS theme_id
JOIN parameter p_theme ON p_theme.paraId = theme_id
AND p_theme.paraType = 38
AND p_theme.paraInt = 3
AND p_theme.status = 1
) AS themeName,t.*,t1.essayAnswerId AS essayAnswerId,t1.score AS userScore
from essaybase t
LEFT JOIN parameter p_style ON p_style.paraId = t.style AND p_style.paraType = 38 AND p_style.paraInt = 2 and p_style.status = 1
LEFT JOIN parameter p_essayType ON p_essayType.paraId = t.essayType AND p_essayType.paraType = 38 AND p_essayType.paraInt = 1 and p_essayType.status = 1
LEFT JOIN parameter p_grade ON p_grade.paraId = t.grade AND p_grade.paraType = 38 AND p_grade.paraInt = 9 and p_grade.status = 1
LEFT JOIN temp1 t1 ON t1.essaybaseid = t.essaybaseid AND t1.rn = 1
where t.status = 1 and t.classLevel in
<foreach item="classLevel" index="index" collection="classLevels" open="(" separator="," close=")">
#{classLevel}
</foreach>
and #{paraId} = any(t.useNode)
<if test="year != 0">
and t.essayyear = #{year}
</if>
<if test="keyWord != null">
and (lower(t.enTitle) like lower(#{keyWord}) or lower(t.cnTitle) like lower(#{keyWord})or lower(t.source) like lower(#{keyWord}))
</if>
ORDER BY t.essayyear desc,t.created DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getEssayBaseByYearAndTitle_2" resultType="com._3e.http.essay.dto.ResEssayBase">
select p_essayType.valueStr AS essayTypeName,
p_style.valueStr AS styleName ,
p_grade.valueStr AS gradeName,
(
SELECT STRING_AGG(p_theme.valueStr, ', ')
FROM unnest(t.theme) AS theme_id
JOIN parameter p_theme ON p_theme.paraId = theme_id
AND p_theme.paraType = 38
AND p_theme.paraInt = 3
AND p_theme.status = 1
) AS themeName,t.*,t1.essayAnswerId AS essayAnswerId,t1.score AS userScore,t1.created AS userCreated
from essaybase t
inner JOIN essayanswer t1 ON t1.essaybaseid = t.essaybaseid and t1.uid = #{uid}
LEFT JOIN parameter p_style ON p_style.paraId = t.style AND p_style.paraType = 38 AND p_style.paraInt = 2 and p_style.status = 1
LEFT JOIN parameter p_essayType ON p_essayType.paraId = t.essayType AND p_essayType.paraType = 38 AND p_essayType.paraInt = 1 and p_essayType.status = 1
LEFT JOIN parameter p_grade ON p_grade.paraId = t.grade AND p_grade.paraType = 38 AND p_grade.paraInt = 9 and p_grade.status = 1
where t.status = 1
and #{paraId} = any(t.useNode)
<if test="year != 0">
and t.essayyear = #{year}
</if>
<if test="keyWord != null">
and (lower(t.enTitle) like lower(#{keyWord}) or lower(t.cnTitle) like lower(#{keyWord})or lower(t.source) like lower(#{keyWord}))
</if>
ORDER BY t1.created DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getEssayBaseByYearAndTitle_1" resultType="com._3e.http.essay.dto.ResEssayBase">
select p_essayType.valueStr AS essayTypeName,
p_style.valueStr AS styleName ,
p_grade.valueStr AS gradeName,
(
SELECT STRING_AGG(p_theme.valueStr, ', ')
FROM unnest(t.theme) AS theme_id
JOIN parameter p_theme ON p_theme.paraId = theme_id
AND p_theme.paraType = 38
AND p_theme.paraInt = 3
AND p_theme.status = 1
) AS themeName,t.*
from essaybase t
LEFT JOIN parameter p_style ON p_style.paraId = t.style AND p_style.paraType = 38 AND p_style.paraInt = 2 and p_style.status = 1
LEFT JOIN parameter p_essayType ON p_essayType.paraId = t.essayType AND p_essayType.paraType = 38 AND p_essayType.paraInt = 1 and p_essayType.status = 1
LEFT JOIN parameter p_grade ON p_grade.paraId = t.grade AND p_grade.paraType = 38 AND p_grade.paraInt = 9 and p_grade.status = 1
where t.status = 1 and t.classLevel in
<foreach item="classLevel" index="index" collection="classLevels" open="(" separator="," close=")">
#{classLevel}
</foreach>
and #{paraId} = any(t.useNode)
<if test="year != 0">
and t.essayyear = #{year}
</if>
<if test="keyWord != null">
and (lower(t.enTitle) like lower(#{keyWord}) or lower(t.cnTitle) like lower(#{keyWord})or lower(t.source) like lower(#{keyWord}))
</if>
ORDER BY t.essayyear desc, t.created DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getEssayBaseById" resultMap="essayBaseResultMap">
SELECT e.*,
0 As essayAnswerId,
0 AS userScore,
(SELECT json_agg(DISTINCT valueStr) FROM parameter WHERE paraId = ANY(e.theme) AND paraType = 38 AND paraInt = 3) AS themeName,
(SELECT json_agg(DISTINCT valueStr) FROM parameter WHERE paraId = ANY(e.goodsId) AND paraType = 38 AND paraInt = 4) AS goodsIdName,
(SELECT json_agg(DISTINCT valueStr) FROM parameter WHERE paraId = ANY(e.useNode) AND paraType = 38 AND paraInt = 7) AS useNodeName,
(SELECT json_agg(DISTINCT lessonName)FROM lesson WHERE lessonId = ANY(e.lessonId)) AS lessonIdName,
(SELECT valueStr FROM parameter WHERE paraId = e.essayType AND paraType = 38 AND paraInt = 1) AS essayTypeName,
(SELECT valueStr FROM parameter WHERE paraId = e.style AND paraType = 38 AND paraInt = 2) AS styleName,
(SELECT valueStr FROM parameter WHERE paraId = e.grade AND paraType = 38 AND paraInt = 9) AS gradeName
FROM
essaybase e
WHERE
e.essayBaseId = #{essayBaseId}
AND (e.theme IS NOT NULL OR e.goodsId IS NOT NULL OR e.useNode IS NOT NULL OR e.lessonId IS NOT NULL)
ORDER BY e.created DESC;
</select>
<select id="getEssayBaseByIdAndUid" resultMap="essayBaseResultMap">
WITH latest_user_answer AS (
SELECT essaybaseid,essayAnswerId,score
FROM (SELECT essaybaseid,essayAnswerId,score,ROW_NUMBER() OVER (PARTITION BY essaybaseid ORDER BY created DESC) as rn FROM essayanswer WHERE uid = #{uid}) ranked_answers
WHERE rn = 1
)
SELECT e.*,
lua.essayAnswerId,
lua.score AS userScore,
(SELECT json_agg(DISTINCT valueStr) FROM parameter WHERE paraId = ANY(e.theme) AND paraType = 38 AND paraInt = 3) AS themeName,
(SELECT json_agg(DISTINCT valueStr) FROM parameter WHERE paraId = ANY(e.goodsId) AND paraType = 38 AND paraInt = 4) AS goodsIdName,
(SELECT json_agg(DISTINCT valueStr) FROM parameter WHERE paraId = ANY(e.useNode) AND paraType = 38 AND paraInt = 7) AS useNodeName,
(SELECT json_agg(DISTINCT lessonName)FROM lesson WHERE lessonId = ANY(e.lessonId)) AS lessonIdName,
(SELECT valueStr FROM parameter WHERE paraId = e.essayType AND paraType = 38 AND paraInt = 1) AS essayTypeName,
(SELECT valueStr FROM parameter WHERE paraId = e.style AND paraType = 38 AND paraInt = 2) AS styleName,
(SELECT valueStr FROM parameter WHERE paraId = e.grade AND paraType = 38 AND paraInt = 9) AS gradeName
FROM
essaybase e LEFT JOIN latest_user_answer lua ON lua.essaybaseid = e.essaybaseid
WHERE
e.essayBaseId = #{essayBaseId}
AND (e.theme IS NOT NULL OR e.goodsId IS NOT NULL OR e.useNode IS NOT NULL OR e.lessonId IS NOT NULL)
ORDER BY e.created DESC;
</select>
<select id="getMyEssayGrades" resultType="com._3e.http.essay.dto.ResMyEssayGrade">
select * from essayanswer where uid = #{uid} and raceid = 0
ORDER BY created DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getAllLevelWordsV1" resultType="com._3e.http.essay.dto.LevelWordDto">
select classLevel AS level,content from levelwords
</select>
<select id="findMyMAXEssayAnswerHistoryV1" resultType="com._3e.http.essay.dto.ResMyEssayGrade">
SELECT a.*
FROM (
SELECT * , rank() over (partition by essayAnswerId order by score desc , created desc ) as mm
FROM essayanswer
WHERE created &gt; '${begintime} 00:00:00' AND created &lt; '${endTime} 23:59:59'
and areaid = #{areaid}
AND uid = #{userId}
) a
WHERE a.mm = 1
ORDER BY score DESC, created DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="findMyEssayAnswerHistoryV1" resultType="com._3e.http.essay.dto.ResMyEssayGrade">
SELECT *
FROM essayanswer
WHERE created &gt; '${begintime} 00:00:00' AND created &lt; '${endTime} 23:59:59'
and areaid = #{areaid}
AND uid = #{userId} and raceid = 0
ORDER BY created DESC
<if test="page != null">
LIMIT #{page.limit} OFFSET #{page.offset}
</if>
</select>
<select id="getEssayBaseByEssayBaseId" resultType="com._3e.entity.EssayBase">
select * from essaybase where essaybaseid = #{essayBaseId}
</select>
</mapper>