<?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.payment.mapper.XhpcRechargeOrderMapper">

    <resultMap type="com.xhpc.common.domain.XhpcRechargeOrder" id="XhpcRechargeOrderResult">
        <result column="recharge_order_id" property="rechargeOrderId" />
        <result column="user_id" property="userId" />
        <result column="recharge_order_number" property="rechargeOrderNumber"/>
        <result column="prepay_id" property="prepayId" />
        <result column="alipay_number" property="alipayNumber" />
        <result column="amount" property="amount" />
        <result column="type" property="type" />
        <result column="status" property="status" />
        <result column="del_flag" property="delFlag" />
        <result column="create_time" property="createTime" />
        <result column="create_by" property="createBy" />
        <result column="update_time" property="updateTime" />
        <result column="update_by" property="updateBy" />
        <result column="remark" property="remark" />
        <result column="source" property="source" />
    </resultMap>

    <insert id="insert" parameterType="com.xhpc.common.domain.XhpcRechargeOrder" useGeneratedKeys="true"
            keyProperty="rechargeOrderId">
        INSERT INTO xhpc_recharge_order
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="null != userId and '' != userId">
                user_id,
            </if>
            <if test="null != rechargeOrderNumber and '' != rechargeOrderNumber">
                recharge_order_number,
            </if>
            <if test="null != prepayId and '' != prepayId">
                prepay_id,
            </if>
            <if test="null != alipayNumber and '' != alipayNumber">
                alipay_number,
            </if>
            <if test="null != amount and '' != amount">
                amount,
            </if>
            <if test="null != type and '' != type">
                type,
            </if>
            <if test="null != status and '' != status">
                status,
            </if>
            <if test="null != delFlag and '' != 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>
            <if test="null != source">
                source
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="null != userId and '' != userId">
                #{userId},
            </if>
            <if test="null != rechargeOrderNumber and '' != rechargeOrderNumber">
                #{rechargeOrderNumber},
            </if>
            <if test="null != prepayId and '' != prepayId">
                #{prepayId},
            </if>
            <if test="null != alipayNumber and '' != alipayNumber">
                #{alipayNumber},
            </if>
            <if test="null != amount and '' != amount">
                #{amount},
            </if>
            <if test="null != type and '' != type">
                #{type},
            </if>
            <if test="null != status and '' != status">
                #{status},
            </if>
            <if test="null != delFlag and '' != 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>
            <if test="null != source">
                #{source}
            </if>
        </trim>
    </insert>

    <update id="update" parameterType="com.xhpc.common.domain.XhpcRechargeOrder">
        UPDATE xhpc_recharge_order
        <set>
            <if test="null != userId and '' != userId">user_id = #{userId},</if>
            <if test="null != rechargeOrderNumber and '' != rechargeOrderNumber">recharge_order_number =
                #{rechargeOrderNumber},
            </if>
            <if test="null != prepayId and '' != prepayId">prepay_id = #{prepayId},</if>
            <if test="null != alipayNumber and '' != alipayNumber">alipay_number = #{alipayNumber},</if>
            <if test="null != amount ">amount = #{amount},</if>
            <if test="null != type">type = #{type},</if>
            <if test="null != status ">status = #{status},</if>
            <if test="null != delFlag and '' != delFlag">del_flag = #{delFlag},</if>
            <if test="null != createTime ">create_time = #{createTime},</if>
            <if test="null != createBy and '' != createBy">create_by = #{createBy},</if>
            <if test="null != updateTime">update_time = #{updateTime},</if>
            <if test="null != updateBy and '' != updateBy">update_by = #{updateBy},</if>
            <if test="null != remark and '' != remark">remark = #{remark}</if>
        </set>
        WHERE recharge_order_id = #{rechargeOrderId}
    </update>

    <select id="info" parameterType="java.lang.Long" resultType="java.util.Map">
      select xro.recharge_order_id rechargeOrderId ,xro.recharge_order_number rechargeOrderNumber,
        xro.alipay_number alipayNumber  ,xro.prepay_id prepayid,xro.user_id userId,xro.amount,
        xro.type ,xro.`status`,xro.create_time createTime,xro.source source,xau.phone,sdd.dict_label statusName
        from xhpc_recharge_order xro
        LEFT JOIN xhpc_app_user xau on xau.app_user_id = xro.user_id
       LEFT JOIN sys_dict_data sdd on sdd.`dict_type` = 'recharge_order_status' and sdd.dict_value = xro.`status`
        where xro.del_flag = 0 and xro.recharge_order_id = #{rechargeOrderId}
    </select>

    <select id="page" parameterType="java.lang.Long" resultType="java.util.Map">
        select
               xro.recharge_order_id rechargeOrderId ,xro.recharge_order_number rechargeOrderNumber,
               xro.alipay_number alipayNumber ,xro.prepay_id prepayid,xro.user_id userId,xro.amount,
               xro.type ,xro.`status`,xro.create_time createTime,xro.source source,
               xau.phone,cop.account communityAccount,cup.account customersAccount,
               sdd.dict_label statusName
        from xhpc_recharge_order xro
        LEFT JOIN xhpc_app_user xau on xau.app_user_id = xro.user_id and xro.source =0
        LEFT JOIN xhpc_community_personnel cop on cop.community_personnel_id = xro.user_id and xro.source =2
        LEFT JOIN xhpc_customers_personnel cup on cup.customers_personnel_id = xro.user_id and xro.source =3
        LEFT JOIN sys_dict_data sdd on sdd.`dict_type` = 'recharge_order_status' and sdd.dict_value = xro.`status`
        <if test="source == null and phone != null and phone != ''">
            inner join (
                select xau.app_user_id from xhpc_app_user as xau inner join (select user_id from xhpc_recharge_order where source=0) us1 on us1.user_id=xau.app_user_id where xau.phone like concat('%', #{phone}, '%')
                union
                select xcop.community_personnel_id as app_user_id from xhpc_community_personnel as xcop inner join (select user_id from xhpc_recharge_order where source=2) us2 on us2.user_id=xcop.community_personnel_id  where xcop.phone like concat('%', #{phone}, '%')
                union
                select xcup.customers_personnel_id as app_user_id from xhpc_customers_personnel as xcup inner join (select user_id from xhpc_recharge_order where source=3) us3 on us3.user_id = xcup.customers_personnel_id where xcup.phone like concat('%', #{phone}, '%')
            ) ut on ut.app_user_id = xro.user_id
        </if>
        where xro.del_flag = 0

        <if test="source != null and phone != null and phone != ''">
          <if test="source==0 ">
             and xro.source=#{source} and xau.phone like concat('%', #{phone}, '%')
          </if>
          <if test="source=2">
            and xro.source=#{source} and cop.account like concat('%', #{phone}, '%')
          </if>
          <if test="source=3">
            and xro.source=#{source} and cup.account like concat('%', #{phone}, '%')
          </if>
        </if>
        <if test="source != null">
            and xro.source=#{source}
        </if>

        <if test="rechargeOrderNumber != null and rechargeOrderNumber != ''">
            and xro.recharge_order_number like concat('%', #{rechargeOrderNumber}, '%')
        </if>
        <if test="status != null and status != ''">
            and xro.status like concat('%', #{status}, '%')
        </if>
        <if test="createTimeStart != null and createTimeStart != ''"><!-- 开始时间检索 -->
            AND xro.create_time &gt;= #{createTimeStart}
        </if>
        <if test="createTimeEnd != null and createTimeEnd != ''"><!-- 结束时间检索 -->
            AND xro.create_time &lt;= #{createTimeEnd}
        </if>
        <if test="type != null and type != ''">
            AND xro.type = #{type}
        </if>
        <if test="userId != null">
            and xro.user_id=#{userId}
        </if>
        ORDER BY xro.create_time DESC
    </select>

    <select id="sumMoney" resultType="String">
        select sum(xro.amount) amount
        from xhpc_recharge_order xro
        LEFT JOIN xhpc_app_user xau on xau.app_user_id = xro.user_id
        LEFT JOIN sys_dict_data sdd on sdd.`dict_type` = 'recharge_order_status' and sdd.dict_value = xro.`status`
        where xro.del_flag = 0
        <if test="phone != null and phone != ''">
            and xau.phone like concat('%', #{phone}, '%')
        </if>
        <if test="rechargeOrderNumber != null and rechargeOrderNumber != ''">
            and xro.recharge_order_number like concat('%', #{rechargeOrderNumber}, '%')
        </if>
        <if test="status != null and status != ''">
            and xro.status like concat('%', #{status}, '%')
        </if>
        <if test="createTimeStart != null and createTimeStart != ''"><!-- 开始时间检索 -->
            AND xro.create_time &gt;= #{createTimeStart}
        </if>
        <if test="createTimeEnd != null and createTimeEnd != ''"><!-- 结束时间检索 -->
            AND xro.create_time &lt;= #{createTimeEnd}
        </if>
        <if test="type != null and type != ''">
            AND xro.type = #{type}
        </if>
        <if test="source != null">
            AND xro.source = #{source}
        </if>
        <if test="userId != null">
            and xro.user_id=#{userId}
        </if>
        ORDER BY xro.create_time DESC
    </select>



    <select id="infoRechargeOrderNumber" parameterType="java.lang.String" resultMap="XhpcRechargeOrderResult">
      select *
        from xhpc_recharge_order xro
        where xro.del_flag = 0 and xro.recharge_order_number = #{rechargeOrderNumber}
    </select>


    <update id="updateRechargeOrderStatus">
        update xhpc_recharge_order set del_flag =1 where status=0 and TIMESTAMPDIFF(MINUTE,create_time,now())>30
    </update>
</mapper> 