<?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.XhpcRefundOrderMapper">

    <resultMap type="com.xhpc.common.domain.XhpcRefundOrder" id="XhpcRefundOrderResult">
        <result column="refund_order_id" property="refundOrderId"/>
        <result column="refund_order_number" property="refundOrderNumber"/>
        <result column="user_id" property="userId"/>
        <result column="open_id" property="openId"/>
        <result column="alipay_id" property="alipayId"/>
        <result column="amount" property="amount"/>
        <result column="type" property="type"/>
        <result column="examine_status" property="examineStatus"/>
        <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" />
        <result column="payment_no" property="paymentNo" />
        <result column="payment_time" property="paymentTime" />
        <result column="order_id" property="orderId" />
        <result column="pay_fund_order_id" property="payFundOrderId" />
        <result column="trans_pay_time" property="transPayTime" />
    </resultMap>

    <insert id="insert" parameterType="com.xhpc.common.domain.XhpcRefundOrder" useGeneratedKeys="true"
            keyProperty="refundOrderId">
        INSERT INTO xhpc_refund_order
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="null != refundOrderNumber and '' != refundOrderNumber">
                refund_order_number,
            </if>
            <if test="null != userId and '' != userId">
                user_id,
            </if>
            <if test="null != openId and '' != openId">
                open_id,
            </if>
            <if test="null != alipayId and '' != alipayId">
                alipay_id,
            </if>
            <if test="null != amount and '' != amount">
                amount,
            </if>
            <if test="null != type and '' != type">
                type,
            </if>
            <if test="null != examineStatus and '' != examineStatus">
                examine_status,
            </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 != refundOrderNumber and '' != refundOrderNumber">
                #{refundOrderNumber},
            </if>
            <if test="null != userId and '' != userId">
                #{userId},
            </if>
            <if test="null != openId and '' != openId">
                #{openId},
            </if>
            <if test="null != alipayId and '' != alipayId">
                #{alipayId},
            </if>
            <if test="null != amount and '' != amount">
                #{amount},
            </if>
            <if test="null != type and '' != type">
                #{type},
            </if>
            <if test="null != examineStatus and '' != examineStatus">
                #{examineStatus},
            </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.XhpcRefundOrder">
        UPDATE xhpc_refund_order
        <set>
            <if test="null != refundOrderNumber and '' != refundOrderNumber">refund_order_number =#{refundOrderNumber},</if>
            <if test="null != userId and '' != userId">user_id = #{userId},</if>
            <if test="null != openId and '' != openId">open_id = #{openId},</if>
            <if test="null != alipayId and '' != alipayId">alipay_id = #{alipayId},</if>
            <if test="null != amount ">amount = #{amount},</if>
            <if test="null != type ">type = #{type},</if>
            <if test="null != examineStatus ">examine_status = #{examineStatus},</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>
            <if test="null != paymentNo and '' != paymentNo">payment_no = #{paymentNo},</if>
            <if test="null != paymentTime and '' != paymentTime">payment_time = #{paymentTime},</if>
            <if test="null != orderId and '' != orderId">order_id = #{orderId},</if>
            <if test="null != payFundOrderId and '' != payFundOrderId">pay_fund_order_id = #{payFundOrderId},</if>
            <if test="null != transPayTime and '' != transPayTime">trans_pay_time = #{transPayTime}</if>
        </set>
        WHERE refund_order_id = #{refundOrderId}
    </update>

    <update id="updateStatus" parameterType="com.xhpc.common.domain.XhpcRefundOrder">
        UPDATE xhpc_refund_order
        <set>
            <if test="null != status">status = #{status},</if>
            <if test="null != examineStatus">examine_status = #{examineStatus},</if>
        </set>
        WHERE refund_order_id = #{refundOrderId} and examine_status = 0
    </update>

    <update id="updateExamineStatus" parameterType="com.xhpc.common.domain.XhpcRefundOrder">
        UPDATE xhpc_refund_order
        <set>
            <if test="null != status">examine_status = #{examineStatus},</if>
        </set>
        WHERE refund_order_id = #{refundOrderId} and status = #{status}
    </update>

    <select id="info" parameterType="java.lang.Long" resultType="java.util.Map">
       select xro.refund_order_id refundOrderId ,xro.refund_order_number refundOrderNumber,xro.tenant_id tenantId,
        xro.alipay_id alipayId  ,xro.open_id openId,xro.user_id userId,xro.amount,xro.source source,cop.phone communityPhone,
        xro.type,xro.examine_status examineStatus,xro.`status`,xro.source source,xro.create_time createTime,xau.phone,
        sdd.dict_label statusName,sdds.dict_label examineStatusName
        from xhpc_refund_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 sys_dict_data sdd on sdd.`dict_type` = 'refund_order_status' and sdd.dict_value = xro.`status`
        LEFT JOIN sys_dict_data sdds on sdds.`dict_type` = 'refund_examine_status' and sdds.dict_value = xro.examine_status
        where xro.del_flag = 0 and xro.refund_order_id = #{refundOrderId}
    </select>

    <select id="page" parameterType="java.lang.String" resultType="java.util.Map">
        select xro.refund_order_id refundOrderId ,xro.refund_order_number refundOrderNumber,
        xro.alipay_id alipayId ,xro.open_id openId,xro.user_id userId,xro.amount,
        xro.type,xro.examine_status examineStatus,xro.`status`,xro.source source,xro.create_time createTime,
        xau.phone,sdd.dict_label statusName,sdds.dict_label examineStatusName,cop.account communityAccount,cup.account customersAccount
        from xhpc_refund_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` = 'refund_order_status' and sdd.dict_value = xro.`status`
        LEFT JOIN sys_dict_data sdds on sdds.`dict_type` = 'refund_examine_status' and sdds.dict_value =xro.examine_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">
            <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="refundOrderNumber != null and refundOrderNumber != ''">
            and xro.refund_order_number like concat('%', #{refundOrderNumber}, '%')
        </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 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_refund_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` = 'refund_order_status' and sdd.dict_value = xro.`status`
        LEFT JOIN sys_dict_data sdds on sdds.`dict_type` = 'refund_examine_status' and sdds.dict_value =
        xro.examine_status
        where xro.del_flag = 0
        <if test="phone != null and phone != ''">
            and xau.phone like concat('%', #{phone}, '%')
        </if>
        <if test="refundOrderNumber != null and refundOrderNumber != ''">
            and xro.refund_order_number like concat('%', #{refundOrderNumber}, '%')
        </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>
        ORDER BY xro.create_time DESC
    </select>

    <select id="getNotChargeOrder" parameterType="java.lang.Long" resultType="java.util.Map">
        select xco.*
        from xhpc_charge_order xco
        where xco.del_flag = 0 and xco.status IN (0,2)
        <if test="userId != null and userId != ''">
            and xco.user_id = #{userId}
        </if>
        <if test="tenantId !=null and tenantId !=''">
            and xco.tenant_id = #{tenantId}
        </if>
        <if test="userType !=null">
            and xco.source = #{userType}
        </if>
        ORDER BY xco.create_time DESC
    </select>

    <select id="getNotRefundOrder" parameterType="java.lang.Long" resultType="java.util.Map">
        select xro.refund_order_id refundOrderId ,xro.refund_order_number refundOrderNumber,
        xro.alipay_id alipayId ,xro.open_id openId,xro.user_id userId,xro.amount,
        xro.type,xro.examine_status examineStatus,xro.`status`,xro.create_time createTime,
        xro.source source,sdd.dict_label statusName,sdds.dict_label examineStatusName
        from xhpc_refund_order xro
        LEFT JOIN sys_dict_data sdd on sdd.`dict_type` = 'refund_order_status' and sdd.dict_value = xro.`status`
        LEFT JOIN sys_dict_data sdds on sdds.`dict_type` = 'refund_examine_status' and sdds.dict_value =
        xro.examine_status
        where xro.del_flag = 0 and xro.examine_status = 0 and xro.status = 0
        <if test="userId != null and userId != ''">
            and xro.user_id = #{userId}
        </if>
        <if test="tenantId != null and tenantId != ''">
            and xro.tenant_id = #{tenantId}
        </if>
        <if test="userType != null">
            and xro.source = #{userType}
        </if>
        ORDER BY xro.create_time DESC LIMIT 1
    </select>


    <select id="countXhpcRealTimeOrder" resultType="int">
        select
               count(charge_order_id)
        from xhpc_charge_order
        where user_id =#{userId}
          and status=0 and del_flag =0
          <if test="tenantId !=null and tenantId !=''">
             and tenant_id=#{tenantId}
          </if>
          <if test="source !=null">
             and source=#{source}
          </if>
          limit 1
    </select>

    <select id="countXhpcChargeOrder" resultType="int">
        select
               count(charge_order_id)
        from xhpc_charge_order
        where user_id =#{userId} and status =2 and del_flag =0
        <if test="tenantId !=null and tenantId !=''">
            and tenant_id=#{tenantId}
        </if>
        <if test="source !=null">
            and source=#{source}
        </if>
    </select>

    <select id="moneyPage" resultType="long">
        select xro.refund_order_id refundOrderId
        from xhpc_refund_order xro
        where xro.del_flag = 0 and xro.examine_status=0 and xro.status=0 and amount&lt;=100
    </select>

    <update id="updateRefundApplication">
        UPDATE xhpc_community_personnel set is_refund_application=#{isRefundApplication} where community_personnel_id=#{userId}
    </update>
</mapper> 