<?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="cn.iocoder.yudao.module.flow.dal.mysql.outbound.OutboundMapper">

    <!--
        一般情况下，尽可能使用 Mapper 进行 CRUD 增删改查即可。
        无法满足的场景，例如说多表关联查询，才使用 XML 编写 SQL。
        代码生成器暂时只生成 Mapper XML 文件本身，更多推荐 MybatisX 快速开发插件来生成查询。
        文档可见：https://www.iocoder.cn/MyBatis/x-plugins/
     -->

    <select id="getDatasGroupByGoodsId"
            resultType="cn.iocoder.yudao.module.flow.controller.admin.outbound.vo.OutboundStatisticsDataRespVO">
            SELECT
                b.goods_id AS goodsId,
                b.goods_name AS goodsName,
                SUM(b.goods_num) AS goodsNum,
                SUM(b.goods_weight) AS goodsWeight,
                 (
                    SELECT SUM(g.goods_num * g.goods_weight)
                    FROM flow_outbound a
                    LEFT JOIN flow_outbound_goods g ON g.out_bound_id = a.out_bound_id
                    WHERE
                    MONTH(a.out_bound_time) = MONTH(NOW())
                    AND g.goods_id = b.goods_id
                ) AS sumNum
            FROM
                flow_outbound a
            LEFT JOIN
                flow_outbound_goods b ON b.out_bound_id = a.out_bound_id
            WHERE
                MONTH(a.out_bound_time) = MONTH(NOW())
            GROUP BY
                b.goods_id, b.goods_name
    </select>
    <select id="getSixDatasByGoodsId"
            resultType="cn.iocoder.yudao.module.flow.controller.admin.outbound.vo.OutboundStatisticsDataRespVO">
            SELECT
            DATE(a.out_bound_time) AS date,
            SUM(b.goods_num) AS goodsNum,
            SUM(b.goods_weight) AS goodsWeight,
            SUM(b.goods_num * b.goods_weight) AS sumNum
            FROM
            flow_outbound a
            LEFT JOIN
            flow_outbound_goods b ON b.out_bound_id = a.out_bound_id
            WHERE
            a.out_bound_time >= CURDATE() - INTERVAL 6 DAY
            AND a.out_bound_time &lt; CURDATE()
            GROUP BY
            DATE(a.out_bound_time)
            ORDER BY
            DATE(a.out_bound_time);
    </select>
    <select id="getTodayOutboundCount" resultType="java.math.BigDecimal">
        SELECT SUM(sumNum) AS totalQuantity
        FROM (
            SELECT b.goods_id AS goodsId,
                   b.goods_name AS goodsName,
                   SUM(b.goods_num * b.goods_weight) AS sumNum
            FROM flow_outbound a
            LEFT JOIN flow_outbound_goods b ON b.out_bound_id = a.out_bound_id
            WHERE MONTH(a.out_bound_time) = MONTH(NOW())
            GROUP BY b.goods_id, b.goods_name
        ) AS subquery
    </select>
</mapper>
