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

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