<?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.ruoyi.manage.mapper.OrdersMapper">
    <!--
      模块：订单（示例）
      说明：
        - 基础 CRUD，遵循 RuoYi 生成器结构；分页由 PageHelper 注入。
    -->

    <resultMap type="Orders" id="OrdersResult">
        <result property="id" column="id"/>
        <result property="orderNumber" column="order_number"/>
        <result property="userId" column="user_id"/>
        <result property="userName" column="user_name"/>
        <result property="nickName" column="nick_name"/>
        <result property="totalAmount" column="total_amount"/>
        <result property="status" column="status"/>
        <result property="paymentTime" column="payment_time"/>
        <result property="shippingTime" column="shipping_time"/>
        <result property="receiveTime" column="receive_time"/>
        <result property="cancelTime" column="cancel_time"/>
        <result property="notes" column="notes"/>
        <result property="createdAt" column="created_at"/>
    </resultMap>

    <sql id="selectOrdersVo">
        select t.id,
               t.order_number,
               t.user_id,
               u.user_name as user_name,
               u.nick_name as nick_name,
               t.total_amount,
               t.status,
               t.payment_time,
               t.shipping_time,
               t.receive_time,
               t.cancel_time,
               t.notes,
               t.created_at
        from tb_orders t
        left join sys_user u on u.user_id = t.user_id
    </sql>

    <select id="selectOrdersList" parameterType="Orders" resultMap="OrdersResult">
        <include refid="selectOrdersVo"/>
        <where>
            <if test="orderNumber != null  and orderNumber != ''">and order_number = #{orderNumber}</if>
            <if test="userId != null ">and user_id = #{userId}</if>
            <if test="userName != null and userName != ''">and u.user_name like concat('%', #{userName}, '%')</if>
            <if test="totalAmount != null ">and total_amount = #{totalAmount}</if>
            <if test="status != null  and status != ''">and status = #{status}</if>
            <if test="paymentTime != null ">and payment_time = #{paymentTime}</if>
            <if test="shippingTime != null ">and shipping_time = #{shippingTime}</if>
            <if test="receiveTime != null ">and receive_time = #{receiveTime}</if>
            <if test="cancelTime != null ">and cancel_time = #{cancelTime}</if>
            <if test="notes != null  and notes != ''">and notes = #{notes}</if>
            <if test="createdAt != null ">and created_at = #{createdAt}</if>
        </where>
    </select>

    <select id="selectOrdersById" parameterType="Long" resultMap="OrdersResult">
        <include refid="selectOrdersVo"/>
        where id = #{id}
    </select>

    <insert id="insertOrders" parameterType="Orders" useGeneratedKeys="true" keyProperty="id">
        insert into tb_orders
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="orderNumber != null">order_number,</if>
            <if test="userId != null">user_id,</if>
            <if test="totalAmount != null">total_amount,</if>
            <if test="status != null">status,</if>
            <if test="paymentTime != null">payment_time,</if>
            <if test="shippingTime != null">shipping_time,</if>
            <if test="receiveTime != null">receive_time,</if>
            <if test="cancelTime != null">cancel_time,</if>
            <if test="notes != null">notes,</if>
            <if test="createdAt != null">created_at,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="orderNumber != null">#{orderNumber},</if>
            <if test="userId != null">#{userId},</if>
            <if test="totalAmount != null">#{totalAmount},</if>
            <if test="status != null">#{status},</if>
            <if test="paymentTime != null">#{paymentTime},</if>
            <if test="shippingTime != null">#{shippingTime},</if>
            <if test="receiveTime != null">#{receiveTime},</if>
            <if test="cancelTime != null">#{cancelTime},</if>
            <if test="notes != null">#{notes},</if>
            <if test="createdAt != null">#{createdAt},</if>
        </trim>
    </insert>

    <update id="updateOrders" parameterType="Orders">
        update tb_orders
        <trim prefix="SET" suffixOverrides=",">
            <if test="orderNumber != null">order_number = #{orderNumber},</if>
            <if test="userId != null">user_id = #{userId},</if>
            <if test="totalAmount != null">total_amount = #{totalAmount},</if>
            <if test="status != null">status = #{status},</if>
            <if test="paymentTime != null">payment_time = #{paymentTime},</if>
            <if test="shippingTime != null">shipping_time = #{shippingTime},</if>
            <if test="receiveTime != null">receive_time = #{receiveTime},</if>
            <if test="cancelTime != null">cancel_time = #{cancelTime},</if>
            <if test="notes != null">notes = #{notes},</if>
            <if test="createdAt != null">created_at = #{createdAt},</if>
        </trim>
        where id = #{id}
    </update>

    <delete id="deleteOrdersById" parameterType="Long">
        delete
        from tb_orders
        where id = #{id}
    </delete>

    <delete id="deleteOrdersByIds" parameterType="String">
        delete from tb_orders where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
