自动化立体仓库 - WMS系统
zwl
5 天以前 872dd98f359f6d6ff45dac82fe925a5abf4faa83
1.订单累计入库件数改成改站点入库所以总和。从早上8点开始计算
1个文件已添加
4个文件已修改
208 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/WrkMastLogService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/sql/20260421_inout_hourly_teu_user_dedup.sql 162 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -932,7 +932,7 @@
        // 总库位数
        Integer total1 = (int) Arith.add(0, locUseRate.getFqty(), locUseRate.getOqty(), locUseRate.getUqty(), locUseRate.getXqty());
        Integer total = total1>40000?40000:total1;
        Integer total = total1>40000?6528:total1;
        // 使用中
        Integer used = locUseRate.getFqty() + locUseRate.getUqty();
        // 库位使用率
@@ -979,20 +979,20 @@
        Integer count = 0;
        String supp = "";
        //该订单累计入出库件数
        List<WrkMast> orderNo = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("user_no", wrkMast.getUserNo()));
        List<WrkMastLog> userNo = wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>().eq("user_no", wrkMast.getUserNo()).eq("wrk_sts",15L));
        Integer ioType = wrkMast.getIoType();
        if (ioType != null && ioType < 100) {
            if (orderNo != null && orderNo.size() > 0) {
                count = orderNo.size();
            }
            if (userNo != null && userNo.size() > 0) {
                count = userNo.size()+count+1;
            }
            supp = count + "";
            Date endTime = new Date();
            Date startTime = resolveBusinessDayStart(endTime);
            Long inboundCount = wrkMastLogService.countInboundHistoryBySourceStaNo(startTime, endTime, resolveInboundStationNo(wrkMast));
            supp = String.valueOf(inboundCount);
        }else {
            List<WrkMast> orderNo = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("user_no", wrkMast.getUserNo()));
            List<WrkMastLog> userNo = wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>().eq("user_no", wrkMast.getUserNo()).eq("wrk_sts",15L));
            if (userNo != null && userNo.size() > 0) {
                count = userNo.size()+1;
            }
            if (orderNo != null && orderNo.size() > 0) {
                count=orderNo.size()+count;
            }
            supp = count + "";
        }
@@ -1016,6 +1016,13 @@
        return wrkMastLogService.sumCostTimeByWrkSts(startTime, endTime, wrkSts);
    }
    private Integer resolveInboundStationNo(WrkMast wrkMast) {
        if (wrkMast == null) {
            return null;
        }
        return wrkMast.getSourceStaNo() == null ? wrkMast.getStaNo() : wrkMast.getSourceStaNo();
    }
    private Date resolveBusinessDayStart(Date now) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(now);
src/main/java/com/zy/asrs/mapper/WrkMastLogMapper.java
@@ -43,6 +43,14 @@
            "AND appe_time <= #{endTime}")
    Long sumCostTimeByWrkSts(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("wrkSts") Integer wrkSts);
    @Select("SELECT COUNT(1) " +
            "FROM asr_wrk_mast_log " +
            "WHERE wrk_sts = 5 " +
            "AND source_sta_no = #{sourceStaNo} " +
            "AND appe_time >= #{startTime} " +
            "AND appe_time <= #{endTime}")
    Long countInboundHistoryBySourceStaNo(@Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("sourceStaNo") Integer sourceStaNo);
    /**
     * 查询库存移动流水记录
     */
src/main/java/com/zy/asrs/service/WrkMastLogService.java
@@ -13,6 +13,8 @@
    Long sumCostTimeByWrkSts(Date startTime, Date endTime, Integer wrkSts);
    Long countInboundHistoryBySourceStaNo(Date startTime, Date endTime, Integer sourceStaNo);
    /**
     * 查询库存移动流水记录
     */
src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
@@ -27,6 +27,15 @@
    }
    @Override
    public Long countInboundHistoryBySourceStaNo(Date startTime, Date endTime, Integer sourceStaNo) {
        if (sourceStaNo == null) {
            return 0L;
        }
        Long count = this.baseMapper.countInboundHistoryBySourceStaNo(startTime, endTime, sourceStaNo);
        return count == null ? 0L : count;
    }
    @Override
    public R inventoryFlowList(Integer curr, Integer limit, Map<String, Object> param) {
        Page<InventoryFlowDto> page = new Page<>();
        page.setCurrent(curr);
src/main/resources/sql/20260421_inout_hourly_teu_user_dedup.sql
New file
@@ -0,0 +1,162 @@
IF OBJECT_ID('dbo.v_asr_inout_hourly_stat', 'V') IS NULL
BEGIN
    EXEC('CREATE VIEW dbo.v_asr_inout_hourly_stat AS
        SELECT CONVERT(char(13), GETDATE(), 120) AS ymd,
               CAST(0 AS int) AS inqty,
               CAST(0 AS int) AS outqty,
               CAST(0 AS int) AS cube_inqty,
               CAST(0 AS int) AS cube_outqty,
               CAST(0 AS int) AS out_teu');
END
GO
ALTER VIEW dbo.v_asr_inout_hourly_stat
AS
WITH bounds AS (
    SELECT
        DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0) AS curr_hour,
        DATEADD(HOUR, -12, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0)) AS start_hour,
        DATEADD(HOUR,  1, DATEADD(HOUR, DATEDIFF(HOUR, 0, GETDATE()), 0)) AS end_hour
),
hours AS (
    SELECT DATEADD(HOUR, -v.n, b.curr_hour) AS hour_dt
    FROM bounds b
    CROSS JOIN (VALUES
        (0),(1),(2),(3),(4),(5),(6),
        (7),(8),(9),(10),(11),(12)
    ) v(n)
),
work_rows AS (
    SELECT
        m.wrk_no,
        m.wrk_date,
        m.wrk_sts,
        m.cube_number,
        m.teu,
        m.user_no,
        1 AS in_cnt,
        0 AS out_cnt,
        1 AS source_order
    FROM dbo.asr_wrk_mast m
    CROSS JOIN bounds b
    WHERE m.source_sta_no IS NOT NULL
      AND m.wrk_sts > 1
      AND m.wrk_sts <= 5
      AND m.wrk_date >= b.start_hour
      AND m.wrk_date <  b.end_hour
    UNION ALL
    SELECT
        m.wrk_no,
        m.wrk_date,
        m.wrk_sts,
        m.cube_number,
        m.teu,
        m.user_no,
        0 AS in_cnt,
        1 AS out_cnt,
        1 AS source_order
    FROM dbo.asr_wrk_mast m
    CROSS JOIN bounds b
    WHERE m.sta_no IS NOT NULL
      AND m.wrk_sts >= 14
      AND m.wrk_sts <= 15
      AND m.wrk_date >= b.start_hour
      AND m.wrk_date <  b.end_hour
    UNION ALL
    SELECT
        m.wrk_no,
        m.wrk_date,
        m.wrk_sts,
        m.cube_number,
        m.teu,
        m.user_no,
        1 AS in_cnt,
        0 AS out_cnt,
        2 AS source_order
    FROM dbo.asr_wrk_mast_log m
    CROSS JOIN bounds b
    WHERE m.source_sta_no IS NOT NULL
      AND m.wrk_sts > 1
      AND m.wrk_sts <= 5
      AND m.wrk_date >= b.start_hour
      AND m.wrk_date <  b.end_hour
    UNION ALL
    SELECT
        m.wrk_no,
        m.wrk_date,
        m.wrk_sts,
        m.cube_number,
        m.teu,
        m.user_no,
        0 AS in_cnt,
        1 AS out_cnt,
        2 AS source_order
    FROM dbo.asr_wrk_mast_log m
    CROSS JOIN bounds b
    WHERE m.sta_no IS NOT NULL
      AND m.wrk_sts >= 14
      AND m.wrk_sts <= 15
      AND m.wrk_date >= b.start_hour
      AND m.wrk_date <  b.end_hour
),
base_agg AS (
    SELECT
        DATEADD(HOUR, DATEDIFF(HOUR, 0, d.wrk_date), 0) AS hour_dt,
        CAST(SUM(d.in_cnt) AS INT) AS inqty,
        CAST(SUM(d.out_cnt) AS INT) AS outqty,
        CAST(SUM(CASE WHEN d.wrk_sts = 5  THEN ISNULL(d.cube_number, 0) ELSE 0 END) AS INT) AS cube_inqty,
        CAST(SUM(CASE WHEN d.wrk_sts = 15 THEN ISNULL(d.cube_number, 0) ELSE 0 END) AS INT) AS cube_outqty
    FROM work_rows d
    GROUP BY DATEADD(HOUR, DATEDIFF(HOUR, 0, d.wrk_date), 0)
),
out_teu_ranked AS (
    SELECT
        r.hour_dt,
        r.user_key,
        r.teu,
        ROW_NUMBER() OVER (
            PARTITION BY r.user_key
            ORDER BY CASE WHEN r.wrk_sts = 15 THEN 0 ELSE 1 END,
                     r.wrk_date DESC,
                     r.source_order,
                     r.wrk_no
        ) AS rn
    FROM (
        SELECT
            DATEADD(HOUR, DATEDIFF(HOUR, 0, d.wrk_date), 0) AS hour_dt,
            d.wrk_no,
            d.wrk_date,
            d.wrk_sts,
            ISNULL(d.teu, 0) AS teu,
            NULLIF(LTRIM(RTRIM(d.user_no)), '') AS user_key,
            d.source_order
        FROM work_rows d
        WHERE d.out_cnt = 1
    ) r
),
out_teu_agg AS (
    SELECT
        r.hour_dt,
        CAST(SUM(CASE WHEN r.user_key IS NULL OR r.rn = 1 THEN r.teu ELSE 0 END) AS INT) AS out_teu
    FROM out_teu_ranked r
    GROUP BY r.hour_dt
)
SELECT
    CONVERT(CHAR(13), h.hour_dt, 120) AS ymd,
    ISNULL(a.inqty, 0) AS inqty,
    ISNULL(a.outqty, 0) AS outqty,
    ISNULL(a.cube_inqty, 0) AS cube_inqty,
    ISNULL(a.cube_outqty, 0) AS cube_outqty,
    ISNULL(t.out_teu, 0) AS out_teu
FROM hours h
LEFT JOIN base_agg a
    ON a.hour_dt = h.hour_dt
LEFT JOIN out_teu_agg t
    ON t.hour_dt = h.hour_dt;
GO