<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.3//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zw.platform.repository.modules.LifecycleDao">
    <!-- 新增 -->
    <insert id="add" parameterType="com.zw.platform.domain.basicinfo.form.LifecycleInfoForm">
        INSERT INTO zw_m_service_lifecycle (
        id, billing_date, expire_date,create_data_time,create_data_username
        )
        VALUES(
        #{id}, #{billingDate}, #{expireDate},#{createDataTime},#{createDataUsername}
        )
    </insert>

    <!-- 新增 -->
    <insert id="addList">
        INSERT INTO zw_m_service_lifecycle (
        id, billing_date, expire_date,create_data_time,create_data_username
        )
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.id}, #{item.billingDate}, #{item.expireDate},#{item.createDataTime},#{item.createDataUsername})
        </foreach>
    </insert>

    <!-- 更新服务周期 -->
    <update id="update" parameterType="com.zw.platform.domain.basicinfo.form.LifecycleInfoForm">
    	UPDATE zw_m_service_lifecycle SET
        billing_date = #{billingDate}, expire_date = #{expireDate}, 
        update_data_time = #{updateDataTime},
        update_data_username = #{updateDataUsername}
        WHERE id = #{id}
    </update>

    <!-- 删除服务周期 -->
    <delete id="deleteById" parameterType="string">
    	DELETE FROM zw_m_service_lifecycle WHERE id = #{id}
    </delete>

    <select id="findLifecycleExpireBy" parameterType="com.zw.platform.domain.statistic.LifecycleExpireStatisticQuery"
            resultType="com.zw.platform.domain.statistic.info.LifecycleExpireStatisticInfo">
        select monitory.id AS monitorId,monitory.monitorNumber,c.monitor_type,sl.expire_date,
        DATEDIFF(sl.expire_date,#{queryDateStr}) expireDays
        from zw_m_config c
        INNER JOIN zw_m_service_lifecycle sl ON sl.id = c.service_lifecycle_id AND sl.flag = 1
        INNER JOIN (
        SELECT vi.id,vi.brand AS monitorNumber FROM zw_m_vehicle_info vi
        WHERE vi.flag = 1
        UNION ALL
        SELECT pi.id,pi.people_number AS monitorNumber FROM zw_m_people_info pi
        WHERE pi.flag = 1
        UNION ALL
        SELECT ti.id,ti.thing_number AS monitorNumber FROM zw_m_thing_info ti WHERE ti.flag = 1
        ) monitory ON monitory.id = c.vehicle_id
        WHERE c.flag = 1
        <if test="monitoryIds != null and monitoryIds.size > 0">
            AND monitory.id IN
            <foreach collection="monitoryIds" item="vehicleId" open="(" separator="," close=")">
                #{vehicleId}
            </foreach>
        </if>
        <if test="simpleQueryParam != null and simpleQueryParam != ''">
            AND monitory.monitorNumber LIKE CONCAT('%',#{simpleQueryParam},'%')
        </if>
        <if test="lifecycleStatus == 1">
            <!--全部：0、未到期：1（<服务到期时间>日期减去查询条件里的<时间>日期大于【平台信息配置】中设置的“到期提前提醒日期”）-->
            AND DATE_FORMAT(sl.expire_date, '%Y-%m-%d') > #{expireRemindDate}
        </if>
        <if test="lifecycleStatus == 2">
            <!--即将到期:2（<服务到期时间>日期减去查询条件里的<时间>日期小于等于【平台信息配置】中设置的"到期提前提醒日期”且大于0）-->
            AND DATE_FORMAT(sl.expire_date, '%Y-%m-%d') > #{queryDateStr} AND DATE_FORMAT(sl.expire_date, '%Y-%m-%d') &lt;= #{expireRemindDate}
        </if>
        <if test="lifecycleStatus == 3">
            <!--已到期：3（<服务到期时间>日期减去查询条件里的<时间>日期小于0）-->
            AND DATE_FORMAT(sl.expire_date, '%Y-%m-%d') &lt;= #{queryDateStr}
        </if>
        ORDER BY sl.expire_date
    </select>

    <select id="findLifecycleExpireRemindList" resultType="string">
        select c.vehicle_id FROM zw_m_config c
        INNER JOIN zw_m_service_lifecycle sl ON sl.id = c.service_lifecycle_id AND sl.flag = 1
        WHERE c.flag = 1 AND DATE_FORMAT(sl.expire_date, '%Y-%m-%d') > #{currentDateStr} AND DATE_FORMAT(sl.expire_date, '%Y-%m-%d') &lt;= #{expireRemindDate}
    </select>
    <select id="findLifecycleAlreadyExpireRemindList" resultType="string">
        select c.vehicle_id FROM zw_m_config c
        INNER JOIN zw_m_service_lifecycle sl ON sl.id = c.service_lifecycle_id AND sl.flag = 1
        WHERE c.flag = 1 AND DATE_FORMAT(sl.expire_date, '%Y-%m-%d')  &lt;= #{currentDateStr}
    </select>

</mapper>
