187 lines
8.3 KiB
XML
187 lines
8.3 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.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>
|