|
|
|
|
<?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.dongjian.dashboard.back.dao.ex.LevelMapperExt">
|
|
|
|
|
|
|
|
|
|
<!-- 根据levelType选择对应的表名 -->
|
|
|
|
|
<sql id="selectTable">
|
|
|
|
|
<choose>
|
|
|
|
|
<when test="levelType == 1">dashboard_level_branch</when>
|
|
|
|
|
<when test="levelType == 2">dashboard_level_store_area_merge</when>
|
|
|
|
|
<when test="levelType == 3">dashboard_level_site</when>
|
|
|
|
|
</choose>
|
|
|
|
|
</sql>
|
|
|
|
|
|
|
|
|
|
<sql id="selectParentTable">
|
|
|
|
|
<choose>
|
|
|
|
|
<when test="levelType == 2">dashboard_level_branch</when>
|
|
|
|
|
<when test="levelType == 3">dashboard_level_store_area_merge</when>
|
|
|
|
|
</choose>
|
|
|
|
|
</sql>
|
|
|
|
|
|
|
|
|
|
<!-- 检查级别名称是否存在 -->
|
|
|
|
|
<select id="checkExist" resultType="java.lang.Long">
|
|
|
|
|
SELECT
|
|
|
|
|
COUNT(1)
|
|
|
|
|
FROM
|
|
|
|
|
<include refid="selectTable" />
|
|
|
|
|
WHERE `flag` = 0 AND name = #{levelName} AND company_id = #{companyId}
|
|
|
|
|
<if test="id != null">
|
|
|
|
|
AND id != #{id}
|
|
|
|
|
</if>
|
|
|
|
|
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<select id="countParentLevel" resultType="java.lang.Long">
|
|
|
|
|
SELECT
|
|
|
|
|
COUNT(1)
|
|
|
|
|
FROM
|
|
|
|
|
<include refid="selectParentTable" />
|
|
|
|
|
WHERE `flag` = 0 AND company_id = #{companyId}
|
|
|
|
|
AND id IN <foreach collection="parentIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<!-- 保存级别信息到对应表 -->
|
|
|
|
|
<insert id="saveLevel" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
|
|
|
|
|
INSERT INTO
|
|
|
|
|
<include refid="selectTable" />
|
|
|
|
|
(company_id, name, `code`, remark,
|
|
|
|
|
<if test="sortOrder != null">sort_order,</if>
|
|
|
|
|
created_by, created_at
|
|
|
|
|
)
|
|
|
|
|
VALUES
|
|
|
|
|
(
|
|
|
|
|
#{companyId},
|
|
|
|
|
#{name},
|
|
|
|
|
<choose>
|
|
|
|
|
<when test="code != null and code != ''">#{code}</when>
|
|
|
|
|
<otherwise>NULL</otherwise>
|
|
|
|
|
</choose>,
|
|
|
|
|
<choose>
|
|
|
|
|
<when test="remark != null and remark != ''">#{remark}</when>
|
|
|
|
|
<otherwise>NULL</otherwise>
|
|
|
|
|
</choose>,
|
|
|
|
|
<if test="sortOrder != null">#{sortOrder},</if>
|
|
|
|
|
#{createdBy},
|
|
|
|
|
#{createdAt}
|
|
|
|
|
)
|
|
|
|
|
</insert>
|
|
|
|
|
|
|
|
|
|
<!-- 保存级别信息到对应表 -->
|
|
|
|
|
<insert id="saveLevelRelation">
|
|
|
|
|
INSERT INTO
|
|
|
|
|
${tableName}
|
|
|
|
|
(${parentField}, ${childField}, created_by, created_at)
|
|
|
|
|
VALUES
|
|
|
|
|
(#{parentId}, #{childId}, #{createdBy}, #{createdAt})
|
|
|
|
|
</insert>
|
|
|
|
|
|
|
|
|
|
<delete id="deleteLevelRelation">
|
|
|
|
|
delete from ${tableName} WHERE ${childField} = #{childId}
|
|
|
|
|
</delete>
|
|
|
|
|
|
|
|
|
|
<!-- 更新级别信息到对应表 -->
|
|
|
|
|
<update id="updateLevel">
|
|
|
|
|
UPDATE
|
|
|
|
|
<include refid="selectTable" />
|
|
|
|
|
SET
|
|
|
|
|
name = #{name},
|
|
|
|
|
`code` = #{code},
|
|
|
|
|
remark = #{remark},
|
|
|
|
|
<if test="sortOrder != null">
|
|
|
|
|
sort_order = #{sortOrder},
|
|
|
|
|
</if>
|
|
|
|
|
updated_at = #{updatedAt},
|
|
|
|
|
updated_by = #{updatedBy}
|
|
|
|
|
WHERE id = #{id}
|
|
|
|
|
</update>
|
|
|
|
|
|
|
|
|
|
<select id="checkIfReferencedByChildren" resultType="java.lang.Long">
|
|
|
|
|
SELECT
|
|
|
|
|
COUNT(1)
|
|
|
|
|
FROM
|
|
|
|
|
${param.tableName}
|
|
|
|
|
WHERE ${param.parentField} IN <foreach collection="idList" item="item" open="(" separator="," close=")">#{item}</foreach>
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<update id="deleteLevelByIdList">
|
|
|
|
|
UPDATE
|
|
|
|
|
${tableName}
|
|
|
|
|
SET
|
|
|
|
|
`flag` = 1
|
|
|
|
|
WHERE id IN <foreach collection="idList" item="item" open="(" separator="," close=")">#{item}</foreach>
|
|
|
|
|
</update>
|
|
|
|
|
|
|
|
|
|
<delete id="deleteLevelRelationByIdList">
|
|
|
|
|
delete from ${param.tableName}
|
|
|
|
|
WHERE ${param.childField}
|
|
|
|
|
IN <foreach collection="idList" item="item" open="(" separator="," close=")">#{item}</foreach>
|
|
|
|
|
</delete>
|
|
|
|
|
|
|
|
|
|
<sql id="commonField">
|
|
|
|
|
base.`id`,
|
|
|
|
|
base.company_id,
|
|
|
|
|
base.`name` AS levelName,
|
|
|
|
|
base.`code` AS levelCode,
|
|
|
|
|
base.remark,
|
|
|
|
|
base.sort_order,
|
|
|
|
|
base.created_by,
|
|
|
|
|
base.created_at,
|
|
|
|
|
base.updated_by,
|
|
|
|
|
base.updated_at
|
|
|
|
|
</sql>
|
|
|
|
|
|
|
|
|
|
<sql id="commonWhere">
|
|
|
|
|
base.flag =0
|
|
|
|
|
<if test="idList != null and idList.size() > 0">
|
|
|
|
|
AND base.`id` IN <foreach collection="idList" item="item" open="(" separator="," close=")">#{item}</foreach>
|
|
|
|
|
</if>
|
|
|
|
|
<if test="levelName != null and levelName != ''">
|
|
|
|
|
AND base.`name` like CONCAT('%',#{levelName},'%')
|
|
|
|
|
</if>
|
|
|
|
|
<if test="levelCode != null and levelCode != ''">
|
|
|
|
|
AND base.`code` like CONCAT('%',#{levelCode},'%')
|
|
|
|
|
</if>
|
|
|
|
|
<if test="parentIdList != null and parentIdList.size() > 0">
|
|
|
|
|
AND pa.id IN <foreach collection="parentIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
|
|
|
|
|
</if>
|
|
|
|
|
<if test="companyIdList != null and companyIdList.size() > 0">
|
|
|
|
|
AND base.company_id IN <foreach collection="companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
|
|
|
|
|
</if>
|
|
|
|
|
</sql>
|
|
|
|
|
|
|
|
|
|
<!-- 分页查询级别列表 -->
|
|
|
|
|
<select id="getListPage" resultType="com.dongjian.dashboard.back.vo.level.LevelPageDTO">
|
|
|
|
|
<choose>
|
|
|
|
|
<when test="levelType == 1">
|
|
|
|
|
SELECT
|
|
|
|
|
1 AS levelType,
|
|
|
|
|
<include refid="commonField" />
|
|
|
|
|
FROM
|
|
|
|
|
dashboard_level_branch base
|
|
|
|
|
WHERE
|
|
|
|
|
<include refid="commonWhere" />
|
|
|
|
|
</when>
|
|
|
|
|
<when test="levelType == 2">
|
|
|
|
|
SELECT
|
|
|
|
|
2 AS levelType,
|
|
|
|
|
GROUP_CONCAT(pa.id) AS parentIds,
|
|
|
|
|
GROUP_CONCAT(pa.`name`) AS parentNames,
|
|
|
|
|
<include refid="commonField" />
|
|
|
|
|
FROM
|
|
|
|
|
dashboard_level_store_area_merge base
|
|
|
|
|
LEFT JOIN dashboard_level_relation_branch_store_area rela ON base.`id` = rela.store_area_id
|
|
|
|
|
LEFT JOIN dashboard_level_branch pa ON rela.branch_id = pa.`id`
|
|
|
|
|
WHERE
|
|
|
|
|
<include refid="commonWhere" />
|
|
|
|
|
GROUP BY base.`id`
|
|
|
|
|
</when>
|
|
|
|
|
<when test="levelType == 3">
|
|
|
|
|
SELECT
|
|
|
|
|
3 AS levelType,
|
|
|
|
|
GROUP_CONCAT(pa.id) AS parentIds,
|
|
|
|
|
GROUP_CONCAT(pa.`name`) AS parentNames,
|
|
|
|
|
<include refid="commonField" />
|
|
|
|
|
FROM
|
|
|
|
|
dashboard_level_site base
|
|
|
|
|
LEFT JOIN dashboard_level_relation_store_area_site rela ON base.`id` = rela.site_id
|
|
|
|
|
LEFT JOIN dashboard_level_store_area_merge pa ON rela.store_area_id = pa.`id`
|
|
|
|
|
WHERE
|
|
|
|
|
<include refid="commonWhere" />
|
|
|
|
|
GROUP BY base.`id`
|
|
|
|
|
</when>
|
|
|
|
|
</choose>
|
|
|
|
|
order BY base.sort_order desc, base.`id` desc
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<select id="getBoundBuilding" resultType="java.lang.Long">
|
|
|
|
|
SELECT DISTINCT building_id
|
|
|
|
|
FROM (
|
|
|
|
|
|
|
|
|
|
-- BUILDING(直接绑定)
|
|
|
|
|
SELECT b.building_id
|
|
|
|
|
FROM dashboard_level_role_user ru
|
|
|
|
|
JOIN dashboard_level_role_object ro
|
|
|
|
|
ON ru.level_role_id = ro.level_role_id
|
|
|
|
|
JOIN basic_building b
|
|
|
|
|
ON ro.ref_id = b.building_id
|
|
|
|
|
WHERE ru.user_id = #{userId}
|
|
|
|
|
AND ro.ref_type = 'BUILDING'
|
|
|
|
|
AND b.flag = 0
|
|
|
|
|
|
|
|
|
|
UNION ALL
|
|
|
|
|
|
|
|
|
|
-- SITE → BUILDING
|
|
|
|
|
SELECT b.building_id
|
|
|
|
|
FROM dashboard_level_role_user ru
|
|
|
|
|
JOIN dashboard_level_role_object ro
|
|
|
|
|
ON ru.level_role_id = ro.level_role_id
|
|
|
|
|
JOIN dashboard_level_site s
|
|
|
|
|
ON ro.ref_id = s.id AND s.flag = 0
|
|
|
|
|
JOIN dashboard_level_relation_site_building rsb
|
|
|
|
|
ON s.id = rsb.site_id
|
|
|
|
|
JOIN basic_building b
|
|
|
|
|
ON rsb.building_id = b.building_id AND b.flag = 0
|
|
|
|
|
WHERE ru.user_id = #{userId}
|
|
|
|
|
AND ro.ref_type = 'SITE'
|
|
|
|
|
|
|
|
|
|
UNION ALL
|
|
|
|
|
|
|
|
|
|
-- STORE_AREA → SITE → BUILDING(核心替代 AREA / STORE)
|
|
|
|
|
SELECT b.building_id
|
|
|
|
|
FROM dashboard_level_role_user ru
|
|
|
|
|
JOIN dashboard_level_role_object ro
|
|
|
|
|
ON ru.level_role_id = ro.level_role_id
|
|
|
|
|
JOIN dashboard_level_store_area_merge sam
|
|
|
|
|
ON ro.ref_id = sam.id AND sam.flag = 0
|
|
|
|
|
JOIN dashboard_level_relation_store_area_site rsas
|
|
|
|
|
ON sam.id = rsas.store_area_id
|
|
|
|
|
JOIN dashboard_level_site s
|
|
|
|
|
ON rsas.site_id = s.id AND s.flag = 0
|
|
|
|
|
JOIN dashboard_level_relation_site_building rsb
|
|
|
|
|
ON s.id = rsb.site_id
|
|
|
|
|
JOIN basic_building b
|
|
|
|
|
ON rsb.building_id = b.building_id AND b.flag = 0
|
|
|
|
|
WHERE ru.user_id = #{userId}
|
|
|
|
|
AND ro.ref_type = 'STORE_AREA'
|
|
|
|
|
|
|
|
|
|
UNION ALL
|
|
|
|
|
|
|
|
|
|
-- BRANCH → STORE_AREA → SITE → BUILDING
|
|
|
|
|
SELECT b.building_id
|
|
|
|
|
FROM dashboard_level_role_user ru
|
|
|
|
|
JOIN dashboard_level_role_object ro
|
|
|
|
|
ON ru.level_role_id = ro.level_role_id
|
|
|
|
|
JOIN dashboard_level_branch br
|
|
|
|
|
ON ro.ref_id = br.id AND br.flag = 0
|
|
|
|
|
JOIN dashboard_level_relation_branch_store_area rbsa
|
|
|
|
|
ON br.id = rbsa.branch_id
|
|
|
|
|
JOIN dashboard_level_store_area_merge sam
|
|
|
|
|
ON rbsa.store_area_id = sam.id AND sam.flag = 0
|
|
|
|
|
JOIN dashboard_level_relation_store_area_site rsas
|
|
|
|
|
ON sam.id = rsas.store_area_id
|
|
|
|
|
JOIN dashboard_level_site s
|
|
|
|
|
ON rsas.site_id = s.id AND s.flag = 0
|
|
|
|
|
JOIN dashboard_level_relation_site_building rsb
|
|
|
|
|
ON s.id = rsb.site_id
|
|
|
|
|
JOIN basic_building b
|
|
|
|
|
ON rsb.building_id = b.building_id AND b.flag = 0
|
|
|
|
|
WHERE ru.user_id = #{userId}
|
|
|
|
|
AND ro.ref_type = 'BRANCH'
|
|
|
|
|
|
|
|
|
|
) t
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<select id="selectBuildingFullPath" resultType="com.dongjian.dashboard.back.vo.level.BuildingPathDTO">
|
|
|
|
|
SELECT
|
|
|
|
|
br.id AS branch_id,
|
|
|
|
|
br.name AS branch_name,
|
|
|
|
|
|
|
|
|
|
sam.id AS store_area_id,
|
|
|
|
|
sam.name AS store_area_name,
|
|
|
|
|
|
|
|
|
|
s.id AS site_id,
|
|
|
|
|
s.name AS site_name,
|
|
|
|
|
|
|
|
|
|
b.building_id,
|
|
|
|
|
b.name AS building_name
|
|
|
|
|
<choose>
|
|
|
|
|
<when test="isADSC != null and isADSC">
|
|
|
|
|
FROM dashboard_level_branch br
|
|
|
|
|
|
|
|
|
|
LEFT JOIN dashboard_level_relation_branch_store_area rbsa ON rbsa.branch_id = br.id AND br.flag = 0 AND br.company_id = #{companyId}
|
|
|
|
|
|
|
|
|
|
LEFT JOIN dashboard_level_store_area_merge sam ON sam.id = rbsa.store_area_id AND sam.flag = 0
|
|
|
|
|
|
|
|
|
|
LEFT JOIN dashboard_level_relation_store_area_site rsas ON rsas.store_area_id = sam.id
|
|
|
|
|
|
|
|
|
|
LEFT JOIN dashboard_level_site s ON s.id = rsas.site_id AND s.flag = 0
|
|
|
|
|
|
|
|
|
|
LEFT JOIN dashboard_level_relation_site_building rsb ON rsb.site_id = s.id
|
|
|
|
|
|
|
|
|
|
LEFT JOIN basic_building b ON b.building_id = rsb.building_id AND b.flag = 0
|
|
|
|
|
</when>
|
|
|
|
|
<otherwise>
|
|
|
|
|
FROM basic_building b
|
|
|
|
|
|
|
|
|
|
JOIN dashboard_level_relation_site_building rsb ON b.building_id = rsb.building_id AND b.flag = 0 AND b.company_id = #{companyId}
|
|
|
|
|
|
|
|
|
|
JOIN dashboard_level_site s ON rsb.site_id = s.id AND s.flag = 0
|
|
|
|
|
|
|
|
|
|
JOIN dashboard_level_relation_store_area_site rsas ON s.id = rsas.site_id
|
|
|
|
|
|
|
|
|
|
JOIN dashboard_level_store_area_merge sam ON rsas.store_area_id = sam.id AND sam.flag = 0
|
|
|
|
|
|
|
|
|
|
JOIN dashboard_level_relation_branch_store_area rbsa ON sam.id = rbsa.store_area_id
|
|
|
|
|
|
|
|
|
|
JOIN dashboard_level_branch br ON rbsa.branch_id = br.id AND br.flag = 0
|
|
|
|
|
</otherwise>
|
|
|
|
|
</choose>
|
|
|
|
|
<where>
|
|
|
|
|
<if test="bindBuildingIdList != null">
|
|
|
|
|
AND b.building_id IN <foreach collection="bindBuildingIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
|
|
|
|
|
</if>
|
|
|
|
|
</where>
|
|
|
|
|
order by br.sort_order desc, br.id desc
|
|
|
|
|
</select>
|
|
|
|
|
|
|
|
|
|
<delete id="deleteSiteBuildingRelation">
|
|
|
|
|
delete from dashboard_level_relation_site_building WHERE site_id = #{siteId}
|
|
|
|
|
</delete>
|
|
|
|
|
|
|
|
|
|
</mapper>
|