自动化立体仓库 - WMS系统
zwl
5 天以前 4031cede20c17c15772d8c4f17064dbc1f90234f
1.12天入库体积统计
2个文件已修改
80 ■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/sql/20260415_wrk_cube_day_stat.sql 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java
@@ -91,32 +91,15 @@
    List<WorkCubeTotalAxis> getCubeTotal();
    /**
     * 最近 12 天入库体积汇总,先筛选完成状态主档,再关联明细,避免明细日志大范围预聚合。
     * 最近 12 天入库体积汇总。
     * 接口只读取汇总表,避免每次请求实时扫描工作日志明细。
     */
    @Select("WITH dates AS ( "
            + "    SELECT DATEADD(DAY, -v.n, CONVERT(date, GETDATE())) AS stat_date "
            + "    FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11)) AS v(n) "
            + "), completed_mast AS ( "
            + "    SELECT DISTINCT m.wrk_no, m.io_time "
            + "    FROM dbo.asr_wrk_mast_log AS m "
            + "    WHERE m.wrk_sts = 5 "
            + "      AND m.io_time >= DATEADD(DAY, -11, CONVERT(date, GETDATE())) "
            + "      AND m.io_time < DATEADD(DAY, 1, CONVERT(date, GETDATE())) "
            + "), agg AS ( "
            + "    SELECT CONVERT(date, cm.io_time) AS stat_date, "
            + "           SUM(ISNULL(d.cube_number, 0)) AS wrk_sts_5_cube_sum "
            + "    FROM completed_mast AS cm "
            + "    INNER JOIN dbo.asr_wrk_detl_log AS d "
            + "        ON d.wrk_no = cm.wrk_no "
            + "       AND d.io_time = cm.io_time "
            + "    GROUP BY CONVERT(date, cm.io_time) "
            + ") "
            + "SELECT CONVERT(char(10), ds.stat_date, 23) AS ymd, "
            + "       CAST(ISNULL(a.wrk_sts_5_cube_sum, 0) AS decimal(18,4)) AS cube5Total "
            + "FROM dates AS ds "
            + "LEFT JOIN agg AS a ON a.stat_date = ds.stat_date "
            + "ORDER BY ds.stat_date "
            + "OPTION (RECOMPILE)")
    @Select("SELECT CONVERT(char(10), stat_date, 23) AS ymd, "
            + "CAST(ISNULL(wrk_sts_5_cube_sum, 0) AS decimal(18,4)) AS cube5Total "
            + "FROM dbo.asr_wrk_cube_day_stat "
            + "WHERE stat_date >= DATEADD(DAY, -11, CONVERT(date, GETDATE())) "
            + "  AND stat_date < DATEADD(DAY, 1, CONVERT(date, GETDATE())) "
            + "ORDER BY stat_date")
    List<WorkCubeTotalAxis> getInboundCubeTotal();
src/main/resources/sql/20260415_wrk_cube_day_stat.sql
@@ -10,6 +10,33 @@
END
GO
IF OBJECT_ID('dbo.asr_wrk_mast_log', 'U') IS NOT NULL
   AND NOT EXISTS (
        SELECT 1
        FROM sys.indexes
        WHERE name = 'IX_asr_wrk_mast_log_sts_iotime_wrkno'
          AND object_id = OBJECT_ID('dbo.asr_wrk_mast_log')
   )
BEGIN
    CREATE INDEX IX_asr_wrk_mast_log_sts_iotime_wrkno
    ON dbo.asr_wrk_mast_log (wrk_sts, io_time, wrk_no);
END
GO
IF OBJECT_ID('dbo.asr_wrk_detl_log', 'U') IS NOT NULL
   AND NOT EXISTS (
        SELECT 1
        FROM sys.indexes
        WHERE name = 'IX_asr_wrk_detl_log_wrkno_iotime_cube'
          AND object_id = OBJECT_ID('dbo.asr_wrk_detl_log')
   )
BEGIN
    CREATE INDEX IX_asr_wrk_detl_log_wrkno_iotime_cube
    ON dbo.asr_wrk_detl_log (wrk_no, io_time)
    INCLUDE (cube_number);
END
GO
IF OBJECT_ID('dbo.usp_refresh_wrk_cube_day_stat', 'P') IS NOT NULL
    DROP PROCEDURE dbo.usp_refresh_wrk_cube_day_stat;
GO
@@ -37,7 +64,7 @@
            FROM n
        ),
        mast AS (
            SELECT
            SELECT DISTINCT
                m.wrk_no,
                m.io_time,
                m.wrk_sts
@@ -46,25 +73,17 @@
              AND m.io_time >= @start_dt
              AND m.io_time < @end_dt
        ),
        detl AS (
            SELECT
                d.wrk_no,
                d.io_time,
                SUM(ISNULL(d.cube_number, 0)) AS cube_sum
            FROM dbo.asr_wrk_detl_log d
            WHERE d.io_time >= @start_dt
              AND d.io_time < @end_dt
            GROUP BY d.wrk_no, d.io_time
        ),
        agg AS (
            SELECT
                CONVERT(date, m.io_time) AS stat_date,
                SUM(CASE WHEN m.wrk_sts = 5 THEN d.cube_sum ELSE 0 END) AS wrk_sts_5_cube_sum,
                SUM(CASE WHEN m.wrk_sts = 15 THEN d.cube_sum ELSE 0 END) AS wrk_sts_15_cube_sum
                SUM(CASE WHEN m.wrk_sts = 5 THEN ISNULL(d.cube_number, 0) ELSE 0 END) AS wrk_sts_5_cube_sum,
                SUM(CASE WHEN m.wrk_sts = 15 THEN ISNULL(d.cube_number, 0) ELSE 0 END) AS wrk_sts_15_cube_sum
            FROM mast m
            INNER JOIN detl d
            INNER JOIN dbo.asr_wrk_detl_log d
                ON d.wrk_no = m.wrk_no
               AND d.io_time = m.io_time
               AND d.io_time >= @start_dt
               AND d.io_time < @end_dt
            GROUP BY CONVERT(date, m.io_time)
        )
        INSERT INTO dbo.asr_wrk_cube_day_stat (