<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~
  ~      Copyright (c) 2018-2025, lengleng All rights reserved.
  ~
  ~  Redistribution and use in source and binary forms, with or without
  ~  modification, are permitted provided that the following conditions are met:
  ~
  ~ Redistributions of source code must retain the above copyright notice,
  ~  this list of conditions and the following disclaimer.
  ~  Redistributions in binary form must reproduce the above copyright
  ~  notice, this list of conditions and the following disclaimer in the
  ~  documentation and/or other materials provided with the distribution.
  ~  Neither the name of the pig4cloud.com developer nor the names of its
  ~  contributors may be used to endorse or promote products derived from
  ~  this software without specific prior written permission.
  ~  Author: lengleng (wangiegie@gmail.com)
  ~
  -->

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pig4cloud.pig.marketing.mapper.MarketingGroupIpMapper">

	<select id="checkIpConflict" resultType="java.lang.Boolean">
        SELECT
        COUNT(*) > 0 AS exists_flag
        FROM
        mkt_mgmt_group_ip
        WHERE del_flag = '0'
        <if test="groupId != null">
            AND group_id = #{groupId}
        </if>
        <if test="id != null">
            AND id != #{id}
        </if>
        AND (
        <if test="ipMode == 1">
            (
            (ip_mode = 1 AND start_ip = #{startIp}) OR
            (ip_mode = 2 AND INET_ATON(#{startIp}) BETWEEN INET_ATON(start_ip) AND INET_ATON(end_ip))
            )
        </if>

        <if test="ipMode == 2">
            (
            <!-- 与单IP重叠：单IP在输入IP段范围内 -->
            (ip_mode = 1 AND INET_ATON(start_ip) BETWEEN INET_ATON(#{startIp}) AND INET_ATON(#{endIp})) OR
            <!-- 与IP段重叠：两个IP段有交集 -->
            (ip_mode = 2 AND
            (INET_ATON(start_ip) BETWEEN INET_ATON(#{startIp}) AND INET_ATON(#{endIp})) OR
            (INET_ATON(end_ip) BETWEEN INET_ATON(#{startIp}) AND INET_ATON(#{endIp})) OR
            (INET_ATON(#{startIp}) BETWEEN INET_ATON(start_ip) AND INET_ATON(end_ip))
            )
            )
        </if>
        )
    </select>
</mapper>
