huminmin
2026-06-05 24019a8c1d8e78656e85b29ee7be223e0dd253a0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<?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.ruoyi.report.mapper.DashboardMapper">
 
    <!-- 获取待领样品数 -->
    <select id="getWaitReceive" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM ins_sample WHERE ins_state = 0
    </select>
 
    <!-- 获取待检样品数 -->
    <select id="getWaitInspection" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM ins_order WHERE ins_state = 0
    </select>
 
    <!-- 获取待审核样品数 -->
    <select id="getWaitAudit" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM ins_order WHERE ins_state = 3
    </select>
 
    <!-- 获取待编制报告数 -->
    <select id="getWaitReport" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM ins_report WHERE state = 0
    </select>
 
    <!-- 今日新增样品 -->
    <select id="getTodayNewSample" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM ins_sample
        WHERE DATE(create_time) = CURDATE()
    </select>
 
    <!-- 今日完成样品 -->
    <select id="getTodayFinished" resultType="java.lang.Integer">
        SELECT COUNT(*) FROM ins_order
        WHERE ins_state = 5 AND DATE(ins_time) = CURDATE()
    </select>
 
    <!-- 历史15天数据 -->
    <select id="getHistoryDays" resultType="com.ruoyi.report.vo.TaskCalendarVo">
        SELECT
            DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL n DAY), '%Y-%m-%d') AS date,
            COUNT(DISTINCT s.id) AS sampleCount,
            SUM(CASE WHEN o.ins_state = 5 THEN 1 ELSE 0 END) AS finishedCount,
            SUM(CASE WHEN o.ins_state IN (0,1,2,3) THEN 1 ELSE 0 END) AS pendingCount,
            SUM(CASE WHEN o.ins_state IN (0,1,2,3) AND o.appointed &lt; NOW() THEN 1 ELSE 0 END) AS overdueCount
        FROM (
            SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
            UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
            UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14
        ) days
        LEFT JOIN ins_order o ON DATE(o.create_time) = DATE_SUB(CURDATE(), INTERVAL n DAY)
        LEFT JOIN ins_sample s ON o.id = s.ins_order_id
        GROUP BY date
        ORDER BY date ASC
    </select>
 
    <!-- 未来15天任务 -->
    <select id="getFutureDays" resultType="com.ruoyi.report.vo.TaskCalendarVo">
        SELECT
            DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL n DAY), '%Y-%m-%d') AS date,
            COUNT(DISTINCT s.id) AS sampleCount,
            0 AS finishedCount,
            SUM(CASE WHEN o.ins_state IN (0,1,2,3) THEN 1 ELSE 0 END) AS pendingCount,
            0 AS overdueCount
        FROM (
            SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
            UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
            UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14
        ) days
        LEFT JOIN ins_order o ON DATE(o.appointed) = DATE_ADD(CURDATE(), INTERVAL n DAY) AND o.ins_state IN (0,1,2,3)
        LEFT JOIN ins_sample s ON o.id = s.ins_order_id
        GROUP BY date
        ORDER BY date ASC
    </select>
 
    <!-- 提交排行(原始记录) -->
    <select id="getOriginalRecordRanking" resultType="com.ruoyi.report.vo.RankingVo">
        SELECT
            u.id AS userId,
            u.name AS userName,
            d.dept_name AS deptName,
            COUNT(*) AS submitCount
        FROM ins_product p
        LEFT JOIN ins_product_user pu ON p.id = pu.ins_product_id
        LEFT JOIN user u ON pu.create_user = u.id
        LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
        LEFT JOIN ins_sample s ON p.ins_sample_id = s.id
        LEFT JOIN ins_order o ON s.ins_order_id = o.id
        WHERE o.ins_time IS NOT NULL
        <if test="dto.startTime != null and dto.startTime != ''">
            AND o.ins_time >= #{dto.startTime}
        </if>
        <if test="dto.endTime != null and dto.endTime != ''">
            AND o.ins_time &lt;= #{dto.endTime}
        </if>
        GROUP BY u.id, u.name, d.dept_name
        ORDER BY submitCount DESC
        LIMIT 10
    </select>
 
    <!-- 提交排行(报告) -->
    <select id="getReportRanking" resultType="com.ruoyi.report.vo.RankingVo">
        SELECT
            u.id AS userId,
            u.name AS userName,
            d.dept_name AS deptName,
            COUNT(*) AS submitCount
        FROM ins_report r
        LEFT JOIN user u ON r.write_user_id = u.id
        LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
        WHERE r.state >= 1
        <if test="dto.startTime != null and dto.startTime != ''">
            AND r.create_time >= #{dto.startTime}
        </if>
        <if test="dto.endTime != null and dto.endTime != ''">
            AND r.create_time &lt;= #{dto.endTime}
        </if>
        GROUP BY u.id, u.name, d.dept_name
        ORDER BY submitCount DESC
        LIMIT 10
    </select>
 
    <!-- 近30天检验结果 -->
    <select id="getInsResultByDays" resultType="java.util.Map">
        SELECT
            DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL n DAY), '%Y-%m-%d') AS date,
            SUM(CASE WHEN p.ins_result = 1 THEN 1 ELSE 0 END) AS qualified,
            SUM(CASE WHEN p.ins_result = 0 THEN 1 ELSE 0 END) AS unqualified,
            COUNT(*) AS total
        FROM (
            SELECT 0 AS n UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4
            UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9
            UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14
            UNION SELECT 15 UNION SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19
            UNION SELECT 20 UNION SELECT 21 UNION SELECT 22 UNION SELECT 23 UNION SELECT 24
            UNION SELECT 25 UNION SELECT 26 UNION SELECT 27 UNION SELECT 28 UNION SELECT 29
        ) days
        LEFT JOIN ins_product p ON DATE(p.create_time) = DATE_SUB(CURDATE(), INTERVAL n DAY)
        LEFT JOIN ins_sample s ON p.ins_sample_id = s.id
        LEFT JOIN ins_order o ON s.ins_order_id = o.id
        WHERE p.ins_result IS NOT NULL
        <if test="orderType != null and orderType != ''">
            AND o.order_type = #{orderType}
        </if>
        GROUP BY date
        ORDER BY date ASC
    </select>
 
    <!-- 获取语音播报队列 -->
    <select id="getVoiceQueue" resultType="java.util.Map">
        SELECT
            id,
            event_type AS eventType,
            event_name AS eventName,
            details,
            voice_text AS voiceText,
            priority,
            create_time AS createTime
        FROM voice_queue
        WHERE status = 0
        ORDER BY priority DESC, create_time ASC
        LIMIT 10
    </select>
 
</mapper>