<?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.xmomen.module.stock.mapper.StockRecordMapperExt">
    <!--
        定义一个查询语句，用于获取库存记录模型数据。
        id: 该查询语句的唯一标识，在代码中通过此标识调用该查询。
        resultType: 指定查询结果映射到的 Java 类，这里是 com.xmomen.module.stock.model.StockRecordModel。
        parameterType: 指定传入的参数类型，这里是查询条件对象 com.xmomen.module.stock.model.StockRecordQuery。
    -->
    <select id="getStockRecordModel"
            resultType="com.xmomen.module.stock.model.StockRecordModel"
            parameterType="com.xmomen.module.stock.model.StockRecordQuery">
        SELECT
        t.*,
        <!-- 关联查询出商品的名称 -->
        item.item_name,
        <!-- 关联查询出商品的编码 -->
        item.item_code,
        <!-- 关联查询出订单的订单号 -->
        tborder.order_no
        FROM
        cd_stock_record t
        <!-- 左连接 cd_stock 表，根据库存记录中的 stock_id 关联库存表 -->
        LEFT JOIN cd_stock stock ON t.stock_id = stock.id
        <!-- 左连接 cd_item 表，根据库存表中的 item_id 关联商品表 -->
        LEFT JOIN cd_item item ON stock.item_id = item.id
        <!-- 左连接 tb_order 表，根据库存记录中的 ref_order_id 关联订单表 -->
        LEFT JOIN tb_order tborder ON tborder.id = t.ref_order_id
        <!--
            <where> 标签用于动态生成 SQL 的 WHERE 子句。
            它会自动处理子句开头多余的 AND 关键字。
        -->
        <where>
            <!--
                如果查询条件中的 id 不为空，添加条件 t.ID = #{id} 到 WHERE 子句中。
                #{id} 是 MyBatis 的占位符，会在执行时被实际的参数值替换。
            -->
            <if test="id">
                AND t.ID = #{id}
            </if>
            <if test="stockId">
                AND t.stock_id = #{stockId}
            </if>
            <if test="changeType">
                AND t.chang_type = #{changeType}
            </if>
            <if test="dailyDate">
                <![CDATA[
                    <!-- 使用 DATE_FORMAT 函数将插入日期格式化为 '%Y-%m-%d' 的形式，并与传入的 dailyDate 进行比较 -->
                    AND DATE_FORMAT(t.insert_date ,'%Y-%m-%d') = #{dailyDate}
                ]]>
            </if>
            <if test="ids">
                AND t.ID IN
                <foreach collection="ids" item="item" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
            <if test="excludeIds">
                AND t.ID NOT IN
                <foreach collection="excludeIds" item="item" separator="," open="(" close=")">
                    #{item}
                </foreach>
            </if>
        </where>
        <!-- 按照插入日期对查询结果进行排序 -->
        ORDER BY t.insert_date
    </select>
</mapper>