<?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.mes.dal.mysql.dashboard.MesDashboardMapper">
|
|
<!-- ========== 生产维度 ========== -->
|
|
<!-- 按状态统计批次数量 -->
|
<select id="selectBatchCountGroupByStatus" resultType="java.util.Map">
|
SELECT status, COUNT(*) AS count
|
FROM mes_pro_batch
|
WHERE deleted = 0
|
GROUP BY status
|
</select>
|
|
<!-- 按状态统计袋码数量 -->
|
<select id="selectBagCodeCountGroupByStatus" resultType="java.util.Map">
|
SELECT status, COUNT(*) AS count
|
FROM mes_pro_bag_code
|
WHERE deleted = 0
|
GROUP BY status
|
</select>
|
|
<!-- 统计托盘码总数 -->
|
<select id="selectPalletTotal" resultType="java.lang.Long">
|
SELECT COUNT(*)
|
FROM mes_pro_pallet
|
WHERE deleted = 0
|
</select>
|
|
<!-- 统计今日扫码入库袋数(扫码成功事件数量之和) -->
|
<select id="selectTodayInboundBagCount" resultType="java.lang.Long">
|
SELECT IFNULL(ROUND(SUM(quantity)), 0)
|
FROM mes_pro_scan_event
|
WHERE status = 'SUCCESS'
|
AND event_time >= #{beginTime}
|
</select>
|
|
<!-- 按天聚合新增批次数 -->
|
<select id="selectDailyBatchCount" resultType="java.util.Map">
|
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS date, COUNT(*) AS count
|
FROM mes_pro_batch
|
WHERE deleted = 0
|
AND create_time >= #{beginTime}
|
<if test="endTime != null">
|
AND create_time < #{endTime}
|
</if>
|
GROUP BY DATE_FORMAT(create_time, '%Y-%m-%d')
|
ORDER BY date
|
</select>
|
|
<!-- 按天聚合新增袋码数 -->
|
<select id="selectDailyBagCodeCount" resultType="java.util.Map">
|
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS date, COUNT(*) AS count
|
FROM mes_pro_bag_code
|
WHERE deleted = 0
|
AND create_time >= #{beginTime}
|
<if test="endTime != null">
|
AND create_time < #{endTime}
|
</if>
|
GROUP BY DATE_FORMAT(create_time, '%Y-%m-%d')
|
ORDER BY date
|
</select>
|
|
<!-- 按天聚合新增托盘码数 -->
|
<select id="selectDailyPalletCount" resultType="java.util.Map">
|
SELECT DATE_FORMAT(create_time, '%Y-%m-%d') AS date, COUNT(*) AS count
|
FROM mes_pro_pallet
|
WHERE deleted = 0
|
AND create_time >= #{beginTime}
|
<if test="endTime != null">
|
AND create_time < #{endTime}
|
</if>
|
GROUP BY DATE_FORMAT(create_time, '%Y-%m-%d')
|
ORDER BY date
|
</select>
|
|
<!-- 按天聚合扫码入库袋数(扫码成功事件数量之和) -->
|
<select id="selectDailyInboundBagQuantity" resultType="java.util.Map">
|
SELECT DATE_FORMAT(event_time, '%Y-%m-%d') AS date,
|
IFNULL(SUM(quantity), 0) AS quantity
|
FROM mes_pro_scan_event
|
WHERE status = 'SUCCESS'
|
AND event_time >= #{beginTime}
|
<if test="endTime != null">
|
AND event_time < #{endTime}
|
</if>
|
GROUP BY DATE_FORMAT(event_time, '%Y-%m-%d')
|
ORDER BY date
|
</select>
|
|
<!-- ========== 质检维度 ========== -->
|
|
<!-- 按检验结果统计数量(0处理中 1合格 2不合格) -->
|
<select id="selectQualityCountGroupByResult" resultType="java.util.Map">
|
SELECT result, COUNT(*) AS count
|
FROM mes_qc_seed_quality
|
WHERE deleted = 0
|
GROUP BY result
|
</select>
|
|
<!-- 指标均值与合格率(值落在标准区间 [min_value, max_value] 内视为合格) -->
|
<select id="selectIndicatorStatistics" resultType="java.util.Map">
|
SELECT indicator_code,
|
COUNT(*) AS checkCount,
|
ROUND(AVG(value), 6) AS averageValue,
|
IFNULL(ROUND(SUM(CASE WHEN value >= min_value AND value <= max_value THEN 1 ELSE 0 END)
|
/ COUNT(*) * 100, 2), 0) AS passRate
|
FROM mes_qc_seed_quality_indicator
|
WHERE deleted = 0
|
GROUP BY indicator_code
|
ORDER BY indicator_code
|
</select>
|
|
<!-- ========== 库存维度 ========== -->
|
|
<!-- 按库存状态汇总数量(10暂存库 20合格库 30已出库) -->
|
<select id="selectStockGroupByState" resultType="java.util.Map">
|
SELECT IFNULL(stock_state, -1) AS stockState,
|
IFNULL(SUM(quantity), 0) AS quantity
|
FROM mes_wm_material_stock
|
WHERE deleted = 0
|
GROUP BY stock_state
|
</select>
|
|
<!-- 按仓库汇总数量 -->
|
<select id="selectStockGroupByWarehouse" resultType="java.util.Map">
|
SELECT IFNULL(w.name, '未知仓库') AS name,
|
IFNULL(SUM(s.quantity), 0) AS quantity
|
FROM mes_wm_material_stock s
|
LEFT JOIN mes_wm_warehouse w ON w.id = s.warehouse_id AND w.deleted = 0
|
WHERE s.deleted = 0
|
GROUP BY s.warehouse_id
|
ORDER BY quantity DESC
|
</select>
|
|
<!-- 按品种汇总数量 -->
|
<select id="selectStockGroupByItem" resultType="java.util.Map">
|
SELECT IFNULL(i.name, '未知品种') AS name,
|
IFNULL(SUM(s.quantity), 0) AS quantity
|
FROM mes_wm_material_stock s
|
LEFT JOIN mes_md_item i ON i.id = s.item_id AND i.deleted = 0
|
WHERE s.deleted = 0
|
GROUP BY s.item_id
|
ORDER BY quantity DESC
|
</select>
|
|
<!-- ========== 出库维度 ========== -->
|
|
<!-- 出库汇总(单数/总量/今日出库量) -->
|
<select id="selectOutboundSummary" resultType="java.util.Map">
|
SELECT COUNT(DISTINCT s.id) AS orderTotal,
|
IFNULL(SUM(l.quantity), 0) AS quantityTotal,
|
IFNULL(SUM(CASE WHEN s.sales_date >= #{beginTime} THEN l.quantity ELSE 0 END), 0) AS todayQuantity
|
FROM mes_wm_product_sales s
|
LEFT JOIN mes_wm_product_sales_line l ON l.sales_id = s.id AND l.deleted = 0
|
WHERE s.deleted = 0
|
</select>
|
|
<!-- 按天聚合出库量 -->
|
<select id="selectOutboundDailyQuantity" resultType="java.util.Map">
|
SELECT DATE_FORMAT(s.sales_date, '%Y-%m-%d') AS date,
|
IFNULL(SUM(l.quantity), 0) AS quantity
|
FROM mes_wm_product_sales s
|
LEFT JOIN mes_wm_product_sales_line l ON l.sales_id = s.id AND l.deleted = 0
|
WHERE s.deleted = 0
|
AND s.sales_date >= #{beginTime}
|
<if test="endTime != null">
|
AND s.sales_date < #{endTime}
|
</if>
|
GROUP BY DATE_FORMAT(s.sales_date, '%Y-%m-%d')
|
ORDER BY date
|
</select>
|
|
<!-- 按经销商汇总出库量(TOP 20) -->
|
<select id="selectOutboundGroupByClient" resultType="java.util.Map">
|
SELECT COALESCE(NULLIF(c.name, ''), CONCAT('经销商#', s.client_id), CONCAT('客户ID:', s.client_id)) AS name,
|
IFNULL(SUM(l.quantity), 0) AS quantity
|
FROM mes_wm_product_sales s
|
LEFT JOIN mes_wm_product_sales_line l ON l.sales_id = s.id AND l.deleted = 0
|
LEFT JOIN crm_customer c ON c.id = s.client_id AND c.deleted = 0
|
WHERE s.deleted = 0
|
GROUP BY s.client_id, c.name
|
ORDER BY quantity DESC
|
LIMIT 20
|
</select>
|
|
</mapper>
|