smart-bid-service/bonus-template/src/main/resources/mapper/AnalysisLabelItemMapper.xml

187 lines
8.3 KiB
XML
Raw Normal View History

<?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.bonus.template.mapper.IMDAnalysisLabelItemMapper">
<!-- 结果集映射返回分析标签项VO与数据库字段精准映射 -->
<resultMap type="com.bonus.common.domain.template.vo.AnalysisLabelItemVo" id="analysisLabelItemResult">
<id property="analysisLabelItemId" column="analysis_label_item_id" />
<result property="analysisId" column="analysis_label_id" />
<result property="analysisName" column="analysis_name" />
<result property="analysisCode" column="analysis_code" />
<result property="parentId" column="parent_id" />
<result property="analysisLevel" column="analysis_level" />
<result property="analysisSort" column="analysis_sort" />
<result property="createTime" column="create_time" />
<result property="updateTime" column="update_time" />
<result property="delFlag" column="del_flag" />
<!-- 关联字段:父节点名称(通过子查询获取) -->
<result property="parentName" column="parent_name" />
<!-- 关联字段:标签组名称(通过子查询获取) -->
<result property="analysisGroupName" column="analysis_group_name" />
</resultMap>
<!-- 基础查询SQL片段筛选未删除数据统一复用 -->
<sql id="selectAnalysisLabelItem">
select
tb.analysis_label_item_id, tb.analysis_label_id, tb.analysis_name, tb.analysis_code,
tb.parent_id, tb.analysis_level, tb.analysis_sort, tb.create_time,
tb.update_time, tb.del_flag
from tb_analysis_label_item tb
where tb.del_flag = '0'
</sql>
<!-- 1. 列表查询 -->
<select id="selectAnalysisLabelItemList" parameterType="com.bonus.common.domain.template.dto.AnalysisLabelItemDto" resultMap="analysisLabelItemResult">
<include refid="selectAnalysisLabelItem"/>
<!-- 标签组ID筛选 -->
<if test="analysisId != null and analysisId != 0">
AND analysis_label_id = #{analysisId}
</if>
<if test="nodeIds != null and nodeIds != ''">
AND analysis_label_item_id IN
<foreach collection="nodeIds.split(',')" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</if>
<!-- 父节点筛选 -->
<if test="parentId != null and parentId != ''">
AND parent_id = #{parentId}
</if>
<!-- 层级筛选 -->
<if test="analysisLevel != null and analysisLevel != 0">
AND analysis_level = #{analysisLevel}
</if>
<!-- 名称模糊查询 -->
<if test="analysisName != null and analysisName != ''">
AND analysis_name like concat('%', #{analysisName}, '%')
</if>
<!-- 编码精确查询 -->
<if test="analysisCode != null and analysisCode != ''">
AND analysis_code = #{analysisCode}
</if>
<!-- 排序:按层级升序,排序号升序 -->
order by analysis_level asc, analysis_sort asc, create_time desc
</select>
<!-- 2. 详情查询根据配置ID -->
<select id="selectAnalysisLabelItemById" parameterType="String" resultMap="analysisLabelItemResult">
<include refid="selectAnalysisLabelItem"/>
AND analysis_label_item_id = #{analysisLabelItemId}
</select>
<!-- 3. 校验编码唯一性(同一标签组下) -->
<select id="checkCodeUnique" parameterType="com.bonus.common.domain.template.dto.AnalysisLabelItemDto" resultType="Integer">
select count(1)
from tb_analysis_label_item
where del_flag = '0'
and analysis_code = #{analysisCode}
and analysis_label_id = #{analysisId} <!-- 核心约束:同一标签组下编码唯一 -->
<!-- 编辑时排除自身 -->
<if test="analysisLabelItemId != null and analysisLabelItemId != ''">
AND analysis_label_item_id != #{analysisLabelItemId}
</if>
</select>
<!-- 4. 统计子节点数量 -->
<select id="countChildNodes" parameterType="String" resultType="Integer">
select count(1)
from tb_analysis_label_item
where del_flag = '0'
and parent_id = #{analysisLabelItemId}
</select>
<!-- 5. 新增分析标签项 -->
<insert id="insertAnalysisLabelItem" parameterType="com.bonus.common.domain.template.dto.AnalysisLabelItemDto">
insert into tb_analysis_label_item(
analysis_label_item_id, analysis_label_id, analysis_name, analysis_code,
parent_id, analysis_level, analysis_sort, create_time
)values(
#{analysisLabelItemId}, #{analysisId}, #{analysisName}, #{analysisCode},
#{parentId}, #{analysisLevel}, #{analysisSort}, sysdate()
)
</insert>
<!-- 6. 编辑分析标签项 -->
<update id="updateAnalysisLabelItem" parameterType="com.bonus.common.domain.template.dto.AnalysisLabelItemDto">
update tb_analysis_label_item
<set>
<!-- 标签组ID允许调整归属 -->
<if test="analysisId != null and analysisId != 0">analysis_label_id = #{analysisId},</if>
<!-- 名称 -->
<if test="analysisName != null and analysisName != ''">analysis_name = #{analysisName},</if>
<!-- 编码(需先通过唯一性校验) -->
<if test="analysisCode != null and analysisCode != ''">analysis_code = #{analysisCode},</if>
<!-- 父节点 -->
<if test="parentId != null">parent_id = #{parentId},</if>
<!-- 层级 -->
<if test="analysisLevel != null">analysis_level = #{analysisLevel},</if>
<!-- 排序 -->
<if test="analysisSort != null">analysis_sort = #{analysisSort},</if>
<!-- 修改时间 -->
update_time = sysdate()
</set>
where analysis_label_item_id = #{analysisLabelItemId}
</update>
<!-- 7. 逻辑删除分析标签项 -->
<delete id="deleteAnalysisLabelItem" parameterType="com.bonus.common.domain.template.dto.AnalysisLabelItemDto">
update tb_analysis_label_item
set
del_flag = '1',
update_time = sysdate()
where analysis_label_item_id = #{analysisLabelItemId}
or parent_id = #{analysisLabelItemId}
<if test="analysisId != null and analysisId != 0">
AND analysis_label_id = #{analysisId} <!-- 二次校验:确保归属当前标签组 -->
</if>
</delete>
<!-- 8. 校验名称唯一性 -->
<select id="checkNameUnique" parameterType="com.bonus.common.domain.template.dto.AnalysisLabelItemDto" resultType="Integer">
select count(1)
from tb_analysis_label_item
where del_flag = '0'
and analysis_name = #{analysisName}
and analysis_label_id = #{analysisId} <!-- 核心约束:同一标签组下名称唯一 -->
<!-- 编辑时排除自身 -->
<if test="analysisLabelItemId != null and analysisLabelItemId != ''">
AND analysis_label_item_id != #{analysisLabelItemId}
</if>
</select>
<select id="selectDirectChildIds" parameterType="String" resultType="String">
select analysis_label_item_id
from tb_analysis_label_item
where parent_id = #{parentId} <!-- 父节点ID匹配 -->
and del_flag = '0' <!-- 只查询未删除的子节点 -->
</select>
<!-- 批量逻辑删除标签项适配MySQL 5.0 -->
<update id="batchDeleteAnalysisLabelItem" parameterType="map">
UPDATE tb_analysis_label_item
SET del_flag = '1',
update_time = sysdate()
WHERE analysis_label_item_id IN
<foreach collection="validIds" item="id" open="(" separator="," close=")">
#{id}
</foreach>
<!-- 二次校验:确保删除的节点属于当前标签组 -->
<if test="analysisId != null and analysisId != 0">
AND analysis_label_id = #{analysisId}
</if>
</update>
</mapper>