<?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.xhpc.user.mapper.XhpcCustomersMapper">

    <resultMap type="com.xhpc.user.domain.XhpcCustomers" id="XhpcCustomersResult">
        <result column="customers_id" property="customersId"/>
        <result column="name" property="name"/>
        <result column="service_preferential" property="servicePreferential"/>
        <result column="contact_name" property="contactName"/>
        <result column="contact_phone" property="contactPhone"/>
        <result column="address" property="address"/>
        <result column="parent_id" property="parentId"/>
        <result column="type" property="type"/>
        <result column="dimension" property="dimension"/>
        <result column="status" property="status"/>
        <result column="del_flag" property="delFlag"/>
        <result column="create_by" property="createBy"/>
        <result column="create_time" property="createTime"/>
        <result column="update_by" property="updateBy"/>
        <result column="update_time" property="updateTime"/>
        <result column="remark" property="remark"/>
    </resultMap>

    <select id="getLandUser" resultType="map">
        select user_id as userId,user_type as userType,operator_id as operatorId  from sys_user where user_id =#{userId}
    </select>

    <select id="list" resultType="map">
        select
        customers_id as customersId,
            name as name
        from xhpc_customers
        where del_flag =0
        <if test="name !=null and name !=''">
            and name like CONCAT('%',#{name},'%')
        </if>
        <if test="operatorId !=null">
            and operator_id=#{operatorId}
        </if>
        <if test="tenantId !=null and tenantId !=''">
            and tenant_id=#{tenantId}
        </if>
        order by create_time desc
    </select>

    <insert id="addCustomers" parameterType="com.xhpc.user.domain.XhpcCustomers" useGeneratedKeys="true" keyProperty="customersId">
        insert into xhpc_customers
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="null != customersId">
                customers_id,
            </if>
            <if test="null != name and '' != name">
                name,
            </if>
            <if test="null != servicePreferential">
                service_preferential,
            </if>
            <if test="null != contactName and '' != contactName">
                contact_name,
            </if>
            <if test="null != contactPhone and '' != contactPhone">
                contact_phone,
            </if>
            <if test="null != address and '' != address">
                address,
            </if>
            <if test="null != dimension">
                dimension,
            </if>
            <if test="null != status ">
                status,
            </if>
            <if test="null != delFlag ">
                del_flag,
            </if>
            <if test="null != createTime ">
                create_time,
            </if>
            <if test="null != createBy and '' != createBy">
                create_by,
            </if>
            <if test="null != updateTime ">
                update_time,
            </if>
            <if test="null != updateBy and '' != updateBy">
                update_by,
            </if>
            <if test="null != remark and '' != remark">
                remark,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="null != customersId">
                #{customersId},
            </if>
            <if test="null != name and '' != name">
                #{name},
            </if>
            <if test="null != servicePreferential">
                #{servicePreferential},
            </if>
            <if test="null != contactName and '' != contactName">
                #{contactName},
            </if>
            <if test="null != contactPhone and '' != contactPhone">
                #{contactPhone},
            </if>
            <if test="null != address and '' != address">
                #{address},
            </if>
            <if test="null != dimension">
                #{dimension},
            </if>
            <if test="null != status ">
                #{status},
            </if>
            <if test="null != delFlag ">
                #{delFlag},
            </if>
            <if test="null != createTime ">
                #{createTime},
            </if>
            <if test="null != createBy and '' != createBy">
                #{createBy},
            </if>
            <if test="null != updateTime ">
                #{updateTime},
            </if>
            <if test="null != updateBy and '' != updateBy">
                #{updateBy},
            </if>
            <if test="null != remark and '' != remark">
                #{remark},
            </if>
        </trim>
    </insert>

    <update id="updateCustomers" parameterType="com.xhpc.user.domain.XhpcCustomers" useGeneratedKeys="true" keyProperty="customersId">
        update xhpc_customers
        <trim prefix="SET" suffixOverrides=",">
            <if test="name != null">name = #{name},</if>
            <if test="servicePreferential != null">service_preferential = #{servicePreferential},</if>
            <if test="contactName != null">contact_name = #{contactName},</if>
            <if test="contactPhone != null">contact_phone = #{contactPhone},</if>
            <if test="address != null">address = #{address},</if>
            <if test="dimension != null">dimension = #{dimension},</if>
            <if test="status != null">status = #{status},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
        </trim>
        where customers_id=#{customersId}
    </update>

    <update id="deleteCustomers">
        update xhpc_customers set del_flag =1 where customers_id=#{customersId}
    </update>

    <select id="countCustomersPersonnel" resultType="java.lang.Integer">
        select count(customers_personnel_id) from xhpc_customers_personnel where customers_id=#{customersId} and del_flag=0
    </select>

    <select id="getCustomersById" resultType="map">
        select
            co.customers_id as customersId,
            co.name as name,
            co.service_preferential as servicePreferential,
            co.contact_name as contactName,
            co.contact_phone as contactPhone,
            co.address as address,
            co.dimension as dimension,
            co.status as status,
            group_concat(me.charging_station_id) chargingStationIds
        from xhpc_customers co
        left join xhpc_mechanism me on me.mechanism_id = co.customers_id and me.source = 1 and me.del_flag =0
        where 1=1
        <if test="customersId !=null and type !=null and type==1">
            and co.customers_id=#{customersId}
        </if>
        <if test="customersId !=null and type !=null and type==2">
            and co.customers_id !=#{customersId}
        </if>
        <if test="name !=null">
            and co.name =#{name}
        </if>
        limit 1
    </select>

    <select id="customersPersonnelList" resultType="map">
        SELECT
        customers_personnel_id AS customersPersonnelId,
        name AS name,
        customers_id AS customersId,
        account AS account,
        phone AS phone,
        recharge_money AS rechargeMoney,
        consume_money AS consumeMoney,
        red_packet AS redPacket,
        surplus_money AS surplusMoney,
        create_time as createTime,
        type,
        status
        FROM
        xhpc_customers_personnel
        where customers_id=#{customersId} and del_flag=0
        <if test="account !=null and account !=''">
            and account like concat('%', #{account}, '%')
        </if>
        <if test="phone !=null and phone !=''">
            and phone like concat('%', #{phone}, '%')
        </if>
        <if test="status !=null">
            and status=#{status}
        </if>
        order by create_time desc
    </select>

    <insert id="addCustomersPersonnel" parameterType="com.xhpc.user.domain.XhpcCustomersPersonnel" useGeneratedKeys="true" keyProperty="customersPersonnelId">
        insert into xhpc_customers_personnel
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="null != customersPersonnelId">
                customers_personnel_id,
            </if>
            <if test="null != customersId">
                customers_id,
            </if>
            <if test="null != name and '' != name">
                name,
            </if>
            <if test="null != account">
                account,
            </if>
            <if test="null != rechargeMoney">
                recharge_money,
            </if>
            <if test="null != consumeMoney">
                consume_money,
            </if>
            <if test="null != redPacket">
                red_packet,
            </if>
            <if test="null != surplusMoney">
                surplus_money,
            </if>
            <if test="null != phone">
                phone,
            </if>
            <if test="null != type">
                type,
            </if>
            <if test="null != status ">
                status,
            </if>
            <if test="null != delFlag ">
                del_flag,
            </if>
            <if test="null != createTime ">
                create_time,
            </if>
            <if test="null != createBy and '' != createBy">
                create_by,
            </if>
            <if test="null != updateTime ">
                update_time,
            </if>
            <if test="null != updateBy and '' != updateBy">
                update_by,
            </if>
            <if test="null != remark and '' != remark">
                remark,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="null != customersPersonnelId">
                #{customersPersonnelId},
            </if>
            <if test="null != customersId">
                #{customersId},
            </if>
            <if test="null != name and '' != name">
                #{name},
            </if>
            <if test="null != account">
                #{account},
            </if>
            <if test="null != rechargeMoney">
                #{rechargeMoney},
            </if>
            <if test="null != consumeMoney">
                #{consumeMoney},
            </if>
            <if test="null != redPacket">
                #{redPacket},
            </if>
            <if test="null != surplusMoney">
                #{surplusMoney},
            </if>
            <if test="null != phone">
                #{phone},
            </if>
            <if test="null != type">
                #{type},
            </if>
            <if test="null != status ">
                #{status},
            </if>
            <if test="null != delFlag ">
                #{delFlag},
            </if>
            <if test="null != createTime ">
                #{createTime},
            </if>
            <if test="null != createBy and '' != createBy">
                #{createBy},
            </if>
            <if test="null != updateTime ">
                #{updateTime},
            </if>
            <if test="null != updateBy and '' != updateBy">
                #{updateBy},
            </if>
            <if test="null != remark and '' != remark">
                #{remark},
            </if>
        </trim>
    </insert>

    <select id="getCustomersPersonnelById" resultType="map">
        select
        customers_personnel_id AS customersPersonnelId,
        name AS name,
        customers_id AS customersId,
        account AS account,
        phone AS phone,
        recharge_money AS rechargeMoney,
        surplus_money AS surplusMoney,
        type,
        status
        from xhpc_customers_personnel
        where del_flag =0
        <if test="customersPersonnelId !=null and type !=null and type==1">
            and customers_personnel_id=#{customersPersonnelId}
        </if>

        <if test="type !=null and type==3">
            and phone =#{phone}  or account =#{account}
        </if>

        <if test="customersPersonnelId !=null and type !=null and type==2">
            and customers_personnel_id !=#{customersPersonnelId}
            and customers_personnel_id in ( select customers_personnel_id from xhpc_customers_personnel where phone =#{phone} or account =#{account} and del_flag =0)
        </if>

        limit 1
    </select>


    <update id="updateCustomersPersonnel">
        update xhpc_customers_personnel
        <trim prefix="SET" suffixOverrides=",">
            <if test="customersId != null">customers_id = #{customersId},</if>
            <if test="name != null">name = #{name},</if>
            <if test="account != null">account = #{account},</if>
            <if test="phone != null">phone = #{phone},</if>
            <if test="rechargeMoney != null">recharge_money = #{rechargeMoney},</if>
            <if test="surplusMoney != null">surplus_money = #{surplusMoney},</if>
            <if test="type != null">type = #{type},</if>
            <if test="status != null">address = #{status},</if>
            <if test="delFlag != null">del_flag = #{delFlag},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="remark != null">remark = #{remark},</if>
        </trim>
        where customers_personnel_id=#{customersPersonnelId}
    </update>

    <update id="deleteCustomersPersonnel">
        update xhpc_customers_personnel set del_flag=1 where customers_personnel_id=#{customersPersonnelId}
    </update>

    <update id="updateCustomersPersonnelStatus">
        update xhpc_customers_personnel set status=#{status} where customers_personnel_id=#{customersPersonnelId}
    </update>
</mapper>
