xgl-case/src/main/resources/mapper/activity/ContentMapper.xml
2021-12-07 18:52:18 +08:00

473 lines
14 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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.nbclass.activity.mapper.ContentMapper">
<resultMap id="BaseResultMap" type="com.nbclass.activity.model.Content">
<id column="id" jdbcType="BIGINT" property="id" />
<collection property="tagList" column="id" ofType="ContentTags" select="getContentTags"/>
<collection property="imgList" column="id" ofType="ContentImages" select="getContentImages"/>
</resultMap>
<resultMap id="BaseResultMap2" type="com.nbclass.activity.model.Content">
<id column="id" property="id"/>
<result column="createtime" property="createtime"/>
<result column="updatetime" property="updatetime"/>
<result column="type" property="type"/>
<result column="isvalid" property="isvalid"/>
<result column="fromid" property="fromid"/>
<result column="title" property="title"/>
<result column="desct" property="desct"/>
<result column="viewno" property="viewno"/>
<result column="praiseno" property="praiseno"/>
<result column="collection_number" property="collectionNumber"/>
<result column="listicon" property="listicon"/>
<result column="qrcode" property="qrcode"/>
<result column="sort" property="sort"/>
<result column="url" property="url"/>
<result column="content" property="content"/>
<result column="content_text" property="content_text"/>
<result column="attachment" property="attachment"/>
<result column="label_feedback" property="labelFeedback"/>
<result column="online_time" property="onlineTime"/>
<result column="visibility" property="visibility"/>
<result column="comments" property="comments"/>
<result column="name" property="userName"/>
<result column="position" property="position"/>
<result column="release" property="release"/>
<result column="status" property="status"/>
<result column="checkStatus" property="checkStatus"/>
<result column="applicationId" property="applicationId"/>
<!-- <association property="application" javaType="com.nbclass.activity.model.Application" column="id" select="getApplicationStatus">-->
<!-- <id column="id" property="id"/>-->
<!-- <result column="status" property="status"/>-->
<!-- </association>-->
<collection property="tagList" ofType="com.nbclass.activity.model.ContentTags" column="id" select="getTagList">
<id column="id" property="id"/>
<result column="tagName" property="tagName"/>
</collection>
</resultMap>
<select id="getContentTags" resultType="com.nbclass.activity.model.ContentTags" parameterType="java.lang.Long">
select t.*, data_dict_item.name tagName,data_dict.id as dictId
from content_tags t
left join data_dict_item on t.tid = data_dict_item.id
left join data_dict on data_dict.id = data_dict_item.dictid
WHERE t.cid = #{id}
</select>
<select id="getContentImages" resultType="com.nbclass.activity.model.ContentImages" parameterType="java.lang.Long">
select t.* from content_images t WHERE t.cid = #{id} order by `sort`
</select>
<select id="findById" resultMap="BaseResultMap" parameterType="java.lang.Long">
SELECT content.*, data_dict_item.name as fromName
FROM content
LEFT JOIN data_dict_item ON content.fromid = data_dict_item.id
WHERE content.id = #{id}
</select>
<delete id="deleteByIds" parameterType="java.util.List">
delete from content where id in
<foreach item="item" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</delete>
<select id="getList" resultType="com.nbclass.activity.model.Content" parameterType="com.nbclass.activity.model.Content">
select content.*, data_dict_item.name as fromName
from content
left join data_dict_item on content.fromid = data_dict_item.id
where 1=1
<if test="type != null and type != ''">
AND content.type = #{type}
</if>
<if test="isvalid != null and isvalid >= 0">
AND content.isvalid = #{isvalid}
</if>
<if test="title != null and title != ''">
AND (content.title like CONCAT('%',#{title},'%') or content.desct like CONCAT('%',#{title},'%') )
</if>
order by content.id desc
</select>
<select id="getList2" resultMap="BaseResultMap2">
SELECT DISTINCT
c.id as cid,
c.*,
u.user_id as name,
u2.position,
IF(a.status=2,c.`release`,IFNULL(a.status,5)) as status,
IFNULL(a.id,null) as applicationId
FROM
content c
LEFT JOIN application a on c.id = a.content_id
LEFT JOIN `user` u ON c.user_id = u.id
LEFT JOIN wx_user u2 ON u2.userid = u.username
INNER JOIN content_tags tags ON tags.cid = c.id
INNER JOIN data_dict_item item ON tags.tid = item.id
INNER JOIN data_dict dict ON dict.id = item.dictid
<where>
<if test="userId!=null and roleId == 3">
c.user_id = #{userId}
</if>
<if test="id!=null">
and c.id = #{id}
</if>
<if test="title!=null and title!=''">
and c.title like concat(concat('%',#{title},'%'))
</if>
<if test="status!=null">
and a.status = #{status}
</if>
<if test="quantity!=null and quantity == 0">
and c.label_feedback = 0
</if>
<if test="quantity!=null and quantity == 1">
and c.label_feedback > 0
</if>
<if test="tagLists!=null and tagLists!=''">
and item.id in
<foreach collection="tagLists" open="(" separator="," item="id" close=")">
#{id}
</foreach>
GROUP BY c.id,name,u2.position,status,applicationId
<if test="count!=null and count==1">
HAVING
count(c.id) > 0
</if>
<if test="count!=null and count>1">
HAVING
count(c.id) = #{count}
</if>
</if>
</where>
order by c.id desc
</select>
<select id="getTagList" resultType="com.nbclass.activity.model.ContentTags">
SELECT
dict.id,
item.`name` as tagName
FROM
content_tags tags
LEFT JOIN data_dict_item item ON tags.tid = item.id
LEFT JOIN data_dict dict ON dict.id = item.dictid
WHERE
tags.cid = #{id}
</select>
<select id="getListByFront" resultMap="BaseResultMap" parameterType="com.nbclass.activity.model.Content">
select content.*, data_dict_item.name as fromName
from content
left join data_dict_item on content.fromid = data_dict_item.id
where 1=1
<if test="type != null and type != ''">
AND content.type = #{type}
</if>
<if test="isvalid != null and isvalid >= 0">
AND content.isvalid = #{isvalid}
</if>
<if test="title != null and title != ''"><!-- ES搜索service中通过title字段提交keyWord -->
AND (content.title like CONCAT('%',#{title},'%') or content.desct like CONCAT('%',#{title},'%') )
</if>
<if test="fromids != null and fromids != ''">
AND content.fromid IN (${fromids})
</if>
<if test="tags != null and tags != ''">
AND content.id IN (SELECT DISTINCT cid FROM content_tags WHERE tid IN (${tags}))
</if>
order by content.sort desc, content.id desc
</select>
<delete id="deleteTags" parameterType="java.lang.Long">
delete from content_tags WHERE cid = #{cid}
</delete>
<insert id="insertContentTags" parameterType="java.util.List">
INSERT IGNORE INTO content_tags (cid, tid)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.cid}, #{item.tid} )
</foreach>
</insert>
<delete id="deleteImages" parameterType="java.lang.Long">
delete from content_images WHERE cid = #{cid}
</delete>
<insert id="insertContentImages" parameterType="java.util.List">
INSERT IGNORE INTO content_images (cid, imgurl, sort, ori_name)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.cid}, #{item.imgurl}, #{item.sort}, #{item.ori_name} )
</foreach>
</insert>
<update id="updateContentNum" parameterType="java.lang.String">
UPDATE content
<set>
<if test="type != null and type == 'view'.toString()">
viewno = IF(viewno IS NULL, 1, viewno+1)
</if>
<if test="type != null and type == 'like'.toString()">
praiseno = IF(praiseno IS NULL, 1, praiseno+1)
</if>
</set>
WHERE id = #{id}
</update>
<select id="getCaseTitle" resultType="com.nbclass.activity.model.Content">
select id,title,praiseno from content
</select>
<insert id="addContentTags">
insert ignore into content_tags
(
createtime,
cid,
tid
)
values
(
now(),
#{cid},
#{tid}
)
</insert>
<select id="getOtherLabels" resultType="com.nbclass.activity.model.DataDictItem">
select id,name from data_dict_item where dictid = 25
</select>
<delete id="deleteContentTags">
delete from content_tags where cid in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<update id="updateComments">
update content set
<if test="contentId!=null">
comments = comments + 1
</if>
where id = #{contentId}
</update>
<insert id="saveScore">
insert into scoring_table
(
content_id,
score,
user_id,
create_time
)
values
(
#{contentId},
#{score},
#{userId},
now()
)
</insert>
<select id="getScore" resultType="int">
select count(*) from scoring_table where user_id = #{userId} and content_id = #{contentId}
</select>
<select id="getEditContent" resultMap="BaseResultMap2">
select
c.*,
a.id as applicationId,
IF(a.status=2,c.`release`,IFNULL(a.status,5)) as status
from content c left join application a on c.id = a.content_id where c.id = #{contentId}
</select>
<insert id="saveApplication" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into application
(
content_id,
user_id,
type,
create_time
)
values
(
#{contentId},
#{userId},
#{type},
now()
)
</insert>
<insert id="saveCheck" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into `check`
(
application_id,
check_id,
create_time
)
values
(
#{applicationId},
#{checkId},
now()
)
</insert>
<select id="getApplicationCount" resultType="int">
select count(*) from application where content_id = #{contentId}
</select>
<delete id="deleteApplication">
delete from application where id = #{applicationId}
</delete>
<delete id="deleteCheck">
delete from `check` where application_id = #{applicationId}
</delete>
<update id="updateApplicationStatus">
update application set
<if test="applicationId!=null">
status = 1
</if>
where id = #{applicationId}
</update>
<update id="updateCheckStatus">
update `check` set
<if test="applicationId!=null">
status = 1
</if>
where application_id = #{applicationId}
</update>
<select id="getContentApplication" resultMap="BaseResultMap2">
SELECT DISTINCT
c.id as cid,
c.*,
u.user_id as name,
u2.position,
IF(a.status=2,c.`release`,IFNULL(a.status,5)) as status,
IFNULL(a.id,null) as applicationId
FROM
content c
LEFT JOIN application a on c.id = a.content_id
LEFT JOIN `user` u ON c.user_id = u.id
LEFT JOIN wx_user u2 ON u2.userid = u.username
LEFT JOIN `check` ck on ck.application_id = a.id
INNER JOIN content_tags tags ON tags.cid = c.id
INNER JOIN data_dict_item item ON tags.tid = item.id
INNER JOIN data_dict dict ON dict.id = item.dictid
WHERE
ck.check_id = #{userId}
<if test="id!=null">
and c.id = #{id}
</if>
<if test="title!=null and title!=''">
and c.title like concat(concat('%',#{title},'%'))
</if>
<if test="status!=null">
and a.status = #{status}
</if>
<if test="quantity!=null and quantity == 0">
and c.label_feedback = 0
</if>
<if test="quantity!=null and quantity == 1">
and c.label_feedback > 0
</if>
<if test="tagLists!=null and tagLists!=''">
and item.id in
<foreach collection="tagLists" open="(" separator="," item="id" close=")">
#{id}
</foreach>
GROUP BY c.id,name,u2.position,status,applicationId
<if test="count!=null and count==1">
HAVING
count(c.id) > 0
</if>
<if test="count!=null and count>1">
HAVING
count(c.id) = #{count}
</if>
</if>
order by c.id desc
</select>
<select id="getApplicationStatus" resultType="com.nbclass.activity.model.Application">
select id,status from application where content_id = #{id}
</select>
<update id="updateCheck">
update `check` set
<if test="applicationId!=null and checkId!=null">
status = #{status}
</if>
where application_id = #{applicationId} and check_id = #{checkId}
</update>
<select id="getContentId" resultType="java.lang.Long">
select content_id from application where id = #{applicationId}
</select>
<update id="updateContentRelease">
update content set
<if test="release!=null and release == 1">
online_time = null,
</if>
<if test="release!=null and release == 2">
online_time = now(),
</if>
<if test="contentId!=null and release!=null and visibility!=null">
`release` = #{release},visibility = #{visibility}
</if>
where id = #{contentId}
</update>
<update id="updateApplication">
update application set
<if test="id!=null and status!=null">
status = #{status}
</if>
where id = #{id}
</update>
<select id="getApplication" resultType="com.nbclass.activity.model.Application">
select * from application where content_id = #{contentId}
</select>
<select id="getCensus" resultType="com.nbclass.activity.model.Census">
SELECT
DISTINCT item.id,
count(c.id) AS count
FROM
data_dict_item item
LEFT JOIN content_tags tags ON item.id = tags.tid
LEFT JOIN content c ON c.id = tags.cid
WHERE
item.dictid = 26
GROUP BY
item.id,c.id
<if test="type!=null and type==1">
and YEARWEEK( date_format(c.online_time, '%Y-%m-%d' ), 1 ) = YEARWEEK(now())
</if>
<if test="type!=null and type==2">
AND DATE_FORMAT( c.online_time, '%Y%m' ) = DATE_FORMAT( CURDATE( ), '%Y%m' )
</if>
<if test="type!=null and type==3">
AND QUARTER(c.online_time)=QUARTER(now())
</if>
<if test="type!=null and type==4">
AND YEAR(c.online_time)=YEAR(NOW())
</if>
</select>
</mapper>