Quellcode durchsuchen

查堵大屏--开发

wangxx vor 2 Tagen
Ursprung
Commit
b3b46f0b43

+ 3 - 24
airport-admin/src/main/java/com/sundot/airport/web/controller/blocked/BlockedDashboardController.java

@@ -1,27 +1,6 @@
1 1
 package com.sundot.airport.web.controller.blocked;
2 2
 
3
-import com.sundot.airport.blocked.dto.BlockedAreaDistributionDTO;
4
-import com.sundot.airport.blocked.dto.BlockedBrigadeCertificateDistributionDTO;
5
-import com.sundot.airport.blocked.dto.BlockedBrigadeRateStatsDTO;
6
-import com.sundot.airport.blocked.dto.BlockedBrigadeStatsDTO;
7
-import com.sundot.airport.blocked.dto.BlockedCertificateDistributionDTO;
8
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeLuggageStatsDTO;
9
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeRateStatsDTO;
10
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeStatsDTO;
11
-import com.sundot.airport.blocked.dto.BlockedDailyLuggageStatsDTO;
12
-import com.sundot.airport.blocked.dto.BlockedDailyRateStatsDTO;
13
-import com.sundot.airport.blocked.dto.BlockedDailyStatsDTO;
14
-import com.sundot.airport.blocked.dto.BlockedDashboardQueryDTO;
15
-import com.sundot.airport.blocked.dto.BlockedDashboardResultDTO;
16
-import com.sundot.airport.blocked.dto.BlockedDifficultyDistributionDTO;
17
-import com.sundot.airport.blocked.dto.BlockedDiscriminationDistributionDTO;
18
-import com.sundot.airport.blocked.dto.BlockedItemDistributionDTO;
19
-import com.sundot.airport.blocked.dto.BlockedItemLocationDistributionDTO;
20
-import com.sundot.airport.blocked.dto.BlockedMissCheckReasonDistributionDTO;
21
-import com.sundot.airport.blocked.dto.BlockedOperatingYearsDistributionDTO;
22
-import com.sundot.airport.blocked.dto.BlockedRankingDTO;
23
-import com.sundot.airport.blocked.dto.BlockedRateResultDTO;
24
-import com.sundot.airport.blocked.dto.BlockedTimePeriodStatsDTO;
3
+import com.sundot.airport.blocked.dto.*;
25 4
 import com.sundot.airport.blocked.service.IBlockedDashboardService;
26 5
 import com.sundot.airport.common.core.controller.BaseController;
27 6
 import com.sundot.airport.common.core.domain.AjaxResult;
@@ -209,7 +188,7 @@ public class BlockedDashboardController extends BaseController {
209 188
     @ApiOperation("区域查堵数量分布")
210 189
     @GetMapping("/areaDistribution")
211 190
     public AjaxResult getAreaDistribution(BlockedDashboardQueryDTO queryDTO) {
212
-        BlockedAreaDistributionDTO result = blockedDashboardService.getAreaDistribution(queryDTO);
191
+        BlockedAreaDistributionResultDTO result = blockedDashboardService.getAreaDistribution(queryDTO);
213 192
         return success(result);
214 193
     }
215 194
 
@@ -405,7 +384,7 @@ public class BlockedDashboardController extends BaseController {
405 384
     @ApiOperation("大队开机人员证书分布")
406 385
     @GetMapping("/brigadeCertificateDistribution")
407 386
     public AjaxResult getBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO) {
408
-        List<BlockedBrigadeCertificateDistributionDTO> resultList = blockedDashboardService.getBrigadeCertificateDistribution(queryDTO);
387
+        List<BlockedCertificateLevelDTO> resultList = blockedDashboardService.getBrigadeCertificateDistribution(queryDTO);
409 388
         return success(resultList);
410 389
     }
411 390
 

+ 2 - 9
airport-admin/src/main/java/com/sundot/airport/web/controller/blocked/BlockedLuggageStatisticsDailyController.java

@@ -4,14 +4,7 @@ import java.util.List;
4 4
 import javax.servlet.http.HttpServletResponse;
5 5
 import org.springframework.security.access.prepost.PreAuthorize;
6 6
 import org.springframework.beans.factory.annotation.Autowired;
7
-import org.springframework.web.bind.annotation.GetMapping;
8
-import org.springframework.web.bind.annotation.PostMapping;
9
-import org.springframework.web.bind.annotation.PutMapping;
10
-import org.springframework.web.bind.annotation.DeleteMapping;
11
-import org.springframework.web.bind.annotation.PathVariable;
12
-import org.springframework.web.bind.annotation.RequestBody;
13
-import org.springframework.web.bind.annotation.RequestMapping;
14
-import org.springframework.web.bind.annotation.RestController;
7
+import org.springframework.web.bind.annotation.*;
15 8
 import org.springframework.web.multipart.MultipartFile;
16 9
 import com.sundot.airport.common.annotation.Log;
17 10
 import com.sundot.airport.common.core.controller.BaseController;
@@ -66,7 +59,7 @@ public class BlockedLuggageStatisticsDailyController extends BaseController
66 59
     @PreAuthorize("@ss.hasPermi('blocked:daily:import')")
67 60
     @Log(title = "每日行李过检查堵统计", businessType = BusinessType.IMPORT)
68 61
     @PostMapping("/importData")
69
-    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
62
+    public AjaxResult importData(MultipartFile file, @RequestParam(defaultValue = "false") boolean updateSupport) throws Exception
70 63
     {
71 64
         ExcelUtil<BlockedLuggageStatisticsDaily> util = new ExcelUtil<BlockedLuggageStatisticsDaily>(BlockedLuggageStatisticsDaily.class);
72 65
         List<BlockedLuggageStatisticsDaily> list = util.importExcel(file.getInputStream());

+ 50 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedAreaBlockedDTO.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.blocked.dto;
2
+
3
+import io.swagger.annotations.ApiModel;
4
+import io.swagger.annotations.ApiModelProperty;
5
+import lombok.Data;
6
+
7
+import java.io.Serializable;
8
+
9
+/**
10
+ * 区域查堵-查堵件数统计DTO(折线图)
11
+ * 
12
+ * @author wangxx
13
+ * @date 2026-04-22
14
+ */
15
+@Data
16
+@ApiModel("区域查堵-查堵件数统计")
17
+public class BlockedAreaBlockedDTO implements Serializable {
18
+    
19
+    private static final long serialVersionUID = 1L;
20
+
21
+    /**
22
+     * 大队名称
23
+     */
24
+    @ApiModelProperty("大队名称")
25
+    private String brigadeName;
26
+
27
+    /**
28
+     * T1旅检查堵件数
29
+     */
30
+    @ApiModelProperty("T1旅检查堵件数")
31
+    private Integer t1PassengerBlockedCount;
32
+
33
+    /**
34
+     * T2旅检查堵件数
35
+     */
36
+    @ApiModelProperty("T2旅检查堵件数")
37
+    private Integer t2PassengerBlockedCount;
38
+
39
+    /**
40
+     * T1行检查堵件数
41
+     */
42
+    @ApiModelProperty("T1行检查堵件数")
43
+    private Integer t1CargoBlockedCount;
44
+
45
+    /**
46
+     * T2行检查堵件数
47
+     */
48
+    @ApiModelProperty("T2行检查堵件数")
49
+    private Integer t2CargoBlockedCount;
50
+}

+ 39 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedAreaDistributionResultDTO.java

@@ -0,0 +1,39 @@
1
+package com.sundot.airport.blocked.dto;
2
+
3
+import io.swagger.annotations.ApiModel;
4
+import io.swagger.annotations.ApiModelProperty;
5
+import lombok.Data;
6
+
7
+import java.io.Serializable;
8
+import java.util.List;
9
+
10
+/**
11
+ * 区域查堵数据分布统计结果DTO(双轴图表)
12
+ * 
13
+ * @author wangxx
14
+ * @date 2026-04-22
15
+ */
16
+@Data
17
+@ApiModel("区域查堵数据分布统计结果")
18
+public class BlockedAreaDistributionResultDTO implements Serializable {
19
+    
20
+    private static final long serialVersionUID = 1L;
21
+
22
+    /**
23
+     * 大队名称列表(X轴标签)
24
+     */
25
+    @ApiModelProperty("大队名称列表")
26
+    private List<String> brigadeNames;
27
+
28
+    /**
29
+     * 过检行李数统计列表(柱状图数据)
30
+     */
31
+    @ApiModelProperty("过检行李数统计列表")
32
+    private List<BlockedAreaLuggageDTO> luggageDataList;
33
+
34
+    /**
35
+     * 查堵件数统计列表(折线图数据)
36
+     */
37
+    @ApiModelProperty("查堵件数统计列表")
38
+    private List<BlockedAreaBlockedDTO> blockedDataList;
39
+}

+ 10 - 28
airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedAreaDistributionDTO.java

@@ -7,18 +7,24 @@ import lombok.Data;
7 7
 import java.io.Serializable;
8 8
 
9 9
 /**
10
- * 区域查堵数据分布统计DTO(用于双轴图表)
10
+ * 区域查堵-过检行李数统计DTO(柱状图)
11 11
  * 
12 12
  * @author wangxx
13
- * @date 2026-04-15
13
+ * @date 2026-04-22
14 14
  */
15 15
 @Data
16
-@ApiModel("区域查堵数据分布统计")
17
-public class BlockedAreaDistributionDTO implements Serializable {
16
+@ApiModel("区域查堵-过检行李数统计")
17
+public class BlockedAreaLuggageDTO implements Serializable {
18 18
     
19 19
     private static final long serialVersionUID = 1L;
20 20
 
21 21
     /**
22
+     * 大队名称
23
+     */
24
+    @ApiModelProperty("大队名称")
25
+    private String brigadeName;
26
+
27
+    /**
22 28
      * T1旅检过检行李数
23 29
      */
24 30
     @ApiModelProperty("T1旅检过检行李数")
@@ -41,28 +47,4 @@ public class BlockedAreaDistributionDTO implements Serializable {
41 47
      */
42 48
     @ApiModelProperty("T2行检过检行李数")
43 49
     private Integer t2CargoLuggageCount;
44
-
45
-    /**
46
-     * T1旅检查堵件数
47
-     */
48
-    @ApiModelProperty("T1旅检查堵件数")
49
-    private Integer t1PassengerBlockedCount;
50
-
51
-    /**
52
-     * T2旅检查堵件数
53
-     */
54
-    @ApiModelProperty("T2旅检查堵件数")
55
-    private Integer t2PassengerBlockedCount;
56
-
57
-    /**
58
-     * T1行检查堵件数
59
-     */
60
-    @ApiModelProperty("T1行检查堵件数")
61
-    private Integer t1CargoBlockedCount;
62
-
63
-    /**
64
-     * T2行检查堵件数
65
-     */
66
-    @ApiModelProperty("T2行检查堵件数")
67
-    private Integer t2CargoBlockedCount;
68 50
 }

+ 0 - 68
airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedBrigadeCertificateDistributionDTO.java

@@ -1,68 +0,0 @@
1
-package com.sundot.airport.blocked.dto;
2
-
3
-import io.swagger.annotations.ApiModel;
4
-import io.swagger.annotations.ApiModelProperty;
5
-import lombok.Data;
6
-
7
-import java.io.Serializable;
8
-
9
-/**
10
- * 大队开机人员证书分布统计DTO(用于柱状图)
11
- * 
12
- * @author wangxx
13
- * @date 2026-04-15
14
- */
15
-@Data
16
-@ApiModel("大队开机人员证书分布统计")
17
-public class BlockedBrigadeCertificateDistributionDTO implements Serializable {
18
-    
19
-    private static final long serialVersionUID = 1L;
20
-
21
-    /**
22
-     * 大队名称
23
-     */
24
-    @ApiModelProperty("大队名称")
25
-    private String brigadeName;
26
-
27
-    /**
28
-     * 大队ID
29
-     */
30
-    @ApiModelProperty("大队ID")
31
-    private Long brigadeId;
32
-
33
-    /**
34
-     * 一级证书人数
35
-     */
36
-    @ApiModelProperty("一级证书人数")
37
-    private Integer levelOneCount;
38
-
39
-    /**
40
-     * 二级证书人数
41
-     */
42
-    @ApiModelProperty("二级证书人数")
43
-    private Integer levelTwoCount;
44
-
45
-    /**
46
-     * 三级证书人数
47
-     */
48
-    @ApiModelProperty("三级证书人数")
49
-    private Integer levelThreeCount;
50
-
51
-    /**
52
-     * 四级证书人数
53
-     */
54
-    @ApiModelProperty("四级证书人数")
55
-    private Integer levelFourCount;
56
-
57
-    /**
58
-     * 五级证书人数
59
-     */
60
-    @ApiModelProperty("五级证书人数")
61
-    private Integer levelFiveCount;
62
-
63
-    /**
64
-     * 总人数
65
-     */
66
-    @ApiModelProperty("总人数")
67
-    private Integer totalCount;
68
-}

+ 56 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedCertificateLevelDTO.java

@@ -0,0 +1,56 @@
1
+package com.sundot.airport.blocked.dto;
2
+
3
+import io.swagger.annotations.ApiModel;
4
+import io.swagger.annotations.ApiModelProperty;
5
+import lombok.Data;
6
+
7
+import java.io.Serializable;
8
+
9
+/**
10
+ * 大队证书等级分布统计DTO(高/中/初)
11
+ * 
12
+ * @author wangxx
13
+ * @date 2026-04-22
14
+ */
15
+@Data
16
+@ApiModel("大队证书等级分布统计")
17
+public class BlockedCertificateLevelDTO implements Serializable {
18
+    
19
+    private static final long serialVersionUID = 1L;
20
+
21
+    /**
22
+     * 大队名称
23
+     */
24
+    @ApiModelProperty("大队名称")
25
+    private String brigadeName;
26
+
27
+    /**
28
+     * 大队ID
29
+     */
30
+    @ApiModelProperty("大队ID")
31
+    private Long brigadeId;
32
+
33
+    /**
34
+     * 高级人数(一级+二级+三级)
35
+     */
36
+    @ApiModelProperty("高级人数")
37
+    private Integer seniorCount;
38
+
39
+    /**
40
+     * 中级人数(四级)
41
+     */
42
+    @ApiModelProperty("中级人数")
43
+    private Integer middleCount;
44
+
45
+    /**
46
+     * 初级人数(五级)
47
+     */
48
+    @ApiModelProperty("初级人数")
49
+    private Integer juniorCount;
50
+
51
+    /**
52
+     * 总人数
53
+     */
54
+    @ApiModelProperty("总人数")
55
+    private Integer totalCount;
56
+}

+ 6 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedRankingDTO.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
5 5
 import lombok.Data;
6 6
 
7 7
 import java.io.Serializable;
8
+import java.math.BigDecimal;
8 9
 
9 10
 /**
10 11
  * 查堵排行榜统计DTO
@@ -41,4 +42,9 @@ public class BlockedRankingDTO implements Serializable {
41 42
      */
42 43
     @ApiModelProperty("统计记录总数")
43 44
     private Integer totalCount;
45
+    /**
46
+     * 百分比
47
+     */
48
+    @ApiModelProperty("百分比")
49
+    private BigDecimal percentage;
44 50
 }

+ 13 - 31
airport-blocked/src/main/java/com/sundot/airport/blocked/mapper/BlockedDashboardMapper.java

@@ -1,32 +1,6 @@
1 1
 package com.sundot.airport.blocked.mapper;
2 2
 
3
-import com.sundot.airport.blocked.dto.BlockedAreaDistributionDTO;
4
-import com.sundot.airport.blocked.dto.BlockedBrigadeCertificateDistributionDTO;
5
-import com.sundot.airport.blocked.dto.BlockedBrigadeRateStatsDTO;
6
-import com.sundot.airport.blocked.dto.BlockedBrigadeStatsDTO;
7
-import com.sundot.airport.blocked.dto.BlockedCertificateDistributionDTO;
8
-import com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO;
9
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeLuggageStatsDTO;
10
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeRateStatsDTO;
11
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeStatsDTO;
12
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeTerminalLuggageStatsDTO;
13
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeTerminalRateStatsDTO;
14
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeTerminalStatsDTO;
15
-import com.sundot.airport.blocked.dto.BlockedDailyLuggageStatsDTO;
16
-import com.sundot.airport.blocked.dto.BlockedDailyRateStatsDTO;
17
-import com.sundot.airport.blocked.dto.BlockedDailyStatsDTO;
18
-import com.sundot.airport.blocked.dto.BlockedDashboardQueryDTO;
19
-import com.sundot.airport.blocked.dto.BlockedDifficultyDistributionDTO;
20
-import com.sundot.airport.blocked.dto.BlockedDiscriminationDistributionDTO;
21
-import com.sundot.airport.blocked.dto.BlockedGenderDistributionDTO;
22
-import com.sundot.airport.blocked.dto.BlockedItemDistributionDTO;
23
-import com.sundot.airport.blocked.dto.BlockedItemLocationDistributionDTO;
24
-import com.sundot.airport.blocked.dto.BlockedMissCheckReasonDistributionDTO;
25
-import com.sundot.airport.blocked.dto.BlockedOperatingYearsDistributionDTO;
26
-import com.sundot.airport.blocked.dto.BlockedRankingDTO;
27
-import com.sundot.airport.blocked.dto.BlockedTerminalStatsDTO;
28
-import com.sundot.airport.blocked.dto.BlockedTimePeriodLuggageStatsDTO;
29
-import com.sundot.airport.blocked.dto.BlockedTimePeriodStatsDTO;
3
+import com.sundot.airport.blocked.dto.*;
30 4
 import org.apache.ibatis.annotations.Mapper;
31 5
 import org.apache.ibatis.annotations.Param;
32 6
 
@@ -138,12 +112,20 @@ public interface BlockedDashboardMapper {
138 112
     List<BlockedItemDistributionDTO> selectItemDistribution(BlockedDashboardQueryDTO queryDTO);
139 113
 
140 114
     /**
141
-     * 查询区域查堵数据分布(用于双轴图表)
115
+     * 查询区域查堵数据分布-过检行李数(柱状图)
142 116
      * 
143 117
      * @param queryDTO 查询参数
144
-     * @return 区域查堵数据分布统计
118
+     * @return 过检行李数统计列表
145 119
      */
146
-    BlockedAreaDistributionDTO selectAreaDistribution(BlockedDashboardQueryDTO queryDTO);
120
+    List<BlockedAreaLuggageDTO> selectAreaLuggageDistribution(BlockedDashboardQueryDTO queryDTO);
121
+
122
+    /**
123
+     * 查询区域查堵数据分布-查堵件数(折线图)
124
+     * 
125
+     * @param queryDTO 查询参数
126
+     * @return 查堵件数统计列表
127
+     */
128
+    List<BlockedAreaBlockedDTO> selectAreaBlockedDistribution(BlockedDashboardQueryDTO queryDTO);
147 129
 
148 130
     /**
149 131
      * 查询查堵类型分布(用于分组柱状图)
@@ -255,7 +237,7 @@ public interface BlockedDashboardMapper {
255 237
      * @param queryDTO 查询参数
256 238
      * @return 大队证书分布统计列表
257 239
      */
258
-    List<BlockedBrigadeCertificateDistributionDTO> selectBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO);
240
+    List<BlockedCertificateLevelDTO> selectBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO);
259 241
 
260 242
     /**
261 243
      * 查询两楼每日查堵走势(按大队)

+ 6 - 34
airport-blocked/src/main/java/com/sundot/airport/blocked/service/IBlockedDashboardService.java

@@ -1,34 +1,6 @@
1 1
 package com.sundot.airport.blocked.service;
2 2
 
3
-import com.sundot.airport.blocked.dto.BlockedAreaDistributionDTO;
4
-import com.sundot.airport.blocked.dto.BlockedBrigadeCertificateDistributionDTO;
5
-import com.sundot.airport.blocked.dto.BlockedBrigadeRateStatsDTO;
6
-import com.sundot.airport.blocked.dto.BlockedBrigadeStatsDTO;
7
-import com.sundot.airport.blocked.dto.BlockedCertificateDistributionDTO;
8
-import com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO;
9
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeLuggageStatsDTO;
10
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeRateStatsDTO;
11
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeStatsDTO;
12
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeTerminalLuggageStatsDTO;
13
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeTerminalRateStatsDTO;
14
-import com.sundot.airport.blocked.dto.BlockedDailyBrigadeTerminalStatsDTO;
15
-import com.sundot.airport.blocked.dto.BlockedDailyLuggageStatsDTO;
16
-import com.sundot.airport.blocked.dto.BlockedDailyRateStatsDTO;
17
-import com.sundot.airport.blocked.dto.BlockedDailyStatsDTO;
18
-import com.sundot.airport.blocked.dto.BlockedDashboardQueryDTO;
19
-import com.sundot.airport.blocked.dto.BlockedDashboardResultDTO;
20
-import com.sundot.airport.blocked.dto.BlockedDifficultyDistributionDTO;
21
-import com.sundot.airport.blocked.dto.BlockedDiscriminationDistributionDTO;
22
-import com.sundot.airport.blocked.dto.BlockedGenderDistributionDTO;
23
-import com.sundot.airport.blocked.dto.BlockedItemDistributionDTO;
24
-import com.sundot.airport.blocked.dto.BlockedItemLocationDistributionDTO;
25
-import com.sundot.airport.blocked.dto.BlockedMissCheckReasonDistributionDTO;
26
-import com.sundot.airport.blocked.dto.BlockedOperatingYearsDistributionDTO;
27
-import com.sundot.airport.blocked.dto.BlockedRankingDTO;
28
-import com.sundot.airport.blocked.dto.BlockedRateResultDTO;
29
-import com.sundot.airport.blocked.dto.BlockedTerminalStatsDTO;
30
-import com.sundot.airport.blocked.dto.BlockedTimePeriodLuggageStatsDTO;
31
-import com.sundot.airport.blocked.dto.BlockedTimePeriodStatsDTO;
3
+import com.sundot.airport.blocked.dto.*;
32 4
 
33 5
 import java.util.List;
34 6
 
@@ -129,12 +101,12 @@ public interface IBlockedDashboardService {
129 101
     List<BlockedItemDistributionDTO> getItemDistribution(BlockedDashboardQueryDTO queryDTO);
130 102
 
131 103
     /**
132
-     * 查询区域查堵数据分布(用于双轴图表)
104
+     * 查询区域查堵数据分布(双轴图表)
133 105
      *
134 106
      * @param queryDTO 查询参数
135
-     * @return 区域查堵数据分布统计
107
+     * @return 区域查堵数据分布统计结果
136 108
      */
137
-    BlockedAreaDistributionDTO getAreaDistribution(BlockedDashboardQueryDTO queryDTO);
109
+    BlockedAreaDistributionResultDTO getAreaDistribution(BlockedDashboardQueryDTO queryDTO);
138 110
 
139 111
     /**
140 112
      * 查询查堵类型分布(用于分组柱状图)
@@ -242,11 +214,11 @@ public interface IBlockedDashboardService {
242 214
 
243 215
     /**
244 216
      * 查询大队开机人员证书分布(用于柱状图)
245
-     * 
217
+     *
246 218
      * @param queryDTO 查询参数
247 219
      * @return 大队证书分布统计列表
248 220
      */
249
-    List<BlockedBrigadeCertificateDistributionDTO> getBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO);
221
+    List<BlockedCertificateLevelDTO> getBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO);
250 222
 
251 223
     /**
252 224
      * 查询两楼每日查堵走势(按大队)

+ 160 - 20
airport-blocked/src/main/java/com/sundot/airport/blocked/service/impl/BlockedDashboardServiceImpl.java

@@ -1,11 +1,13 @@
1 1
 package com.sundot.airport.blocked.service.impl;
2 2
 
3 3
 import cn.hutool.core.collection.CollectionUtil;
4
-import com.sundot.airport.blocked.dto.BlockedAreaDistributionDTO;
5
-import com.sundot.airport.blocked.dto.BlockedBrigadeCertificateDistributionDTO;
4
+import com.sundot.airport.blocked.dto.BlockedAreaBlockedDTO;
5
+import com.sundot.airport.blocked.dto.BlockedAreaDistributionResultDTO;
6
+import com.sundot.airport.blocked.dto.BlockedAreaLuggageDTO;
6 7
 import com.sundot.airport.blocked.dto.BlockedBrigadeRateStatsDTO;
7 8
 import com.sundot.airport.blocked.dto.BlockedBrigadeStatsDTO;
8 9
 import com.sundot.airport.blocked.dto.BlockedCertificateDistributionDTO;
10
+import com.sundot.airport.blocked.dto.BlockedCertificateLevelDTO;
9 11
 import com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO;
10 12
 import com.sundot.airport.blocked.dto.BlockedDailyBrigadeLuggageStatsDTO;
11 13
 import com.sundot.airport.blocked.dto.BlockedDailyBrigadeRateStatsDTO;
@@ -38,6 +40,7 @@ import org.springframework.stereotype.Service;
38 40
 import java.math.BigDecimal;
39 41
 import java.util.Collections;
40 42
 import java.util.List;
43
+import java.util.stream.Collectors;
41 44
 
42 45
 /**
43 46
  * 查堵大屏Service业务层处理
@@ -194,18 +197,55 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
194 197
     @Override
195 198
     public List<BlockedItemDistributionDTO> getItemDistribution(BlockedDashboardQueryDTO queryDTO) {
196 199
         List<BlockedItemDistributionDTO> resultList = blockedDashboardMapper.selectItemDistribution(queryDTO);
200
+        if (resultList != null && !resultList.isEmpty()) {
201
+            // 计算总数
202
+            long totalCount = resultList.stream().mapToLong(item -> item.getCount() != null ? item.getCount() : 0).sum();
203
+            // 计算百分比
204
+            if (totalCount > 0) {
205
+                resultList.forEach(item -> {
206
+                    long count = item.getCount() != null ? item.getCount() : 0;
207
+                    double percentage = Math.round(count * 10000.0 / totalCount) / 100.0;
208
+                    item.setPercentage(java.math.BigDecimal.valueOf(percentage));
209
+                });
210
+            }
211
+        }
197 212
         return resultList != null ? resultList : Collections.emptyList();
198 213
     }
199 214
 
200 215
     /**
201
-     * 查询区域查堵数据分布(用于双轴图表)
216
+     * 查询区域查堵数据分布(双轴图表)
202 217
      * 
203 218
      * @param queryDTO 查询参数
204
-     * @return 区域查堵数据分布统计
219
+     * @return 区域查堵数据分布统计结果
205 220
      */
206 221
     @Override
207
-    public BlockedAreaDistributionDTO getAreaDistribution(BlockedDashboardQueryDTO queryDTO) {
208
-        return blockedDashboardMapper.selectAreaDistribution(queryDTO);
222
+    public BlockedAreaDistributionResultDTO getAreaDistribution(BlockedDashboardQueryDTO queryDTO) {
223
+        BlockedAreaDistributionResultDTO result = new BlockedAreaDistributionResultDTO();
224
+        
225
+        // 查询过检行李数(柱状图数据)
226
+        List<BlockedAreaLuggageDTO> luggageList = blockedDashboardMapper.selectAreaLuggageDistribution(queryDTO);
227
+        result.setLuggageDataList(luggageList != null ? luggageList : Collections.emptyList());
228
+        
229
+        // 查询查堵件数(折线图数据)
230
+        List<BlockedAreaBlockedDTO> blockedList = blockedDashboardMapper.selectAreaBlockedDistribution(queryDTO);
231
+        result.setBlockedDataList(blockedList != null ? blockedList : Collections.emptyList());
232
+        
233
+        // 提取大队名称列表
234
+        if (luggageList != null && !luggageList.isEmpty()) {
235
+            List<String> brigadeNames = luggageList.stream()
236
+                    .map(BlockedAreaLuggageDTO::getBrigadeName)
237
+                    .collect(Collectors.toList());
238
+            result.setBrigadeNames(brigadeNames);
239
+        } else if (blockedList != null && !blockedList.isEmpty()) {
240
+            List<String> brigadeNames = blockedList.stream()
241
+                    .map(BlockedAreaBlockedDTO::getBrigadeName)
242
+                    .collect(Collectors.toList());
243
+            result.setBrigadeNames(brigadeNames);
244
+        } else {
245
+            result.setBrigadeNames(Collections.emptyList());
246
+        }
247
+        
248
+        return result;
209 249
     }
210 250
 
211 251
     /**
@@ -343,6 +383,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
343 383
     @Override
344 384
     public List<BlockedItemLocationDistributionDTO> getItemLocationDistribution(BlockedDashboardQueryDTO queryDTO) {
345 385
         List<BlockedItemLocationDistributionDTO> resultList = blockedDashboardMapper.selectItemLocationDistribution(queryDTO);
386
+        if (resultList != null && !resultList.isEmpty()) {
387
+            // 计算总数
388
+            long totalCount = resultList.stream().mapToLong(item -> item.getCount() != null ? item.getCount() : 0).sum();
389
+            // 计算百分比
390
+            if (totalCount > 0) {
391
+                resultList.forEach(item -> {
392
+                    long count = item.getCount() != null ? item.getCount() : 0;
393
+                    double percentage = Math.round(count * 10000.0 / totalCount) / 100.0;
394
+                    item.setPercentage(java.math.BigDecimal.valueOf(percentage));
395
+                });
396
+            }
397
+        }
346 398
         return resultList != null ? resultList : Collections.emptyList();
347 399
     }
348 400
 
@@ -355,6 +407,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
355 407
     @Override
356 408
     public List<BlockedMissCheckReasonDistributionDTO> getMissCheckReasonDistribution(BlockedDashboardQueryDTO queryDTO) {
357 409
         List<BlockedMissCheckReasonDistributionDTO> resultList = blockedDashboardMapper.selectMissCheckReasonDistribution(queryDTO);
410
+        if (resultList != null && !resultList.isEmpty()) {
411
+            // 计算总数
412
+            long totalCount = resultList.stream().mapToLong(item -> item.getCount() != null ? item.getCount() : 0).sum();
413
+            // 计算百分比
414
+            if (totalCount > 0) {
415
+                resultList.forEach(item -> {
416
+                    long count = item.getCount() != null ? item.getCount() : 0;
417
+                    double percentage = Math.round(count * 10000.0 / totalCount) / 100.0;
418
+                    item.setPercentage(java.math.BigDecimal.valueOf(percentage));
419
+                });
420
+            }
421
+        }
358 422
         return resultList != null ? resultList : Collections.emptyList();
359 423
     }
360 424
 
@@ -367,6 +431,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
367 431
     @Override
368 432
     public List<BlockedDifficultyDistributionDTO> getDifficultyDistribution(BlockedDashboardQueryDTO queryDTO) {
369 433
         List<BlockedDifficultyDistributionDTO> resultList = blockedDashboardMapper.selectDifficultyDistribution(queryDTO);
434
+        if (resultList != null && !resultList.isEmpty()) {
435
+            // 计算总数
436
+            long totalCount = resultList.stream().mapToLong(item -> item.getCount() != null ? item.getCount() : 0).sum();
437
+            // 计算百分比
438
+            if (totalCount > 0) {
439
+                resultList.forEach(item -> {
440
+                    long count = item.getCount() != null ? item.getCount() : 0;
441
+                    double percentage = Math.round(count * 10000.0 / totalCount) / 100.0;
442
+                    item.setPercentage(java.math.BigDecimal.valueOf(percentage));
443
+                });
444
+            }
445
+        }
370 446
         return resultList != null ? resultList : Collections.emptyList();
371 447
     }
372 448
 
@@ -380,12 +456,20 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
380 456
     public List<BlockedCertificateDistributionDTO> getCertificateDistribution(BlockedDashboardQueryDTO queryDTO) {
381 457
         List<BlockedCertificateDistributionDTO> resultList = blockedDashboardMapper.selectCertificateDistribution(queryDTO);
382 458
         if (resultList != null && !resultList.isEmpty()) {
383
-            // 转换证书级别为中文
384
-            resultList.forEach(item -> {
385
-                if (item.getCertificateLevel() != null) {
386
-                    item.setCertificateLevel(convertCertificateLevel(item.getCertificateLevel()));
387
-                }
388
-            });
459
+            // 计算总数
460
+            long totalCount = resultList.stream().mapToLong(item -> item.getCount() != null ? item.getCount() : 0).sum();
461
+            // 计算百分比
462
+            if (totalCount > 0) {
463
+                resultList.forEach(item -> {
464
+                    long count = item.getCount() != null ? item.getCount() : 0;
465
+                    double percentage = Math.round(count * 10000.0 / totalCount) / 100.0;
466
+                    item.setPercentage(java.math.BigDecimal.valueOf(percentage));
467
+                    // 转换证书级别为中文
468
+                    if (item.getCertificateLevel() != null) {
469
+                        item.setCertificateLevel(convertCertificateLevel(item.getCertificateLevel()));
470
+                    }
471
+                });
472
+            }
389 473
         }
390 474
         return resultList != null ? resultList : Collections.emptyList();
391 475
     }
@@ -397,8 +481,8 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
397 481
      * @return 大队证书分布统计列表
398 482
      */
399 483
     @Override
400
-    public List<BlockedBrigadeCertificateDistributionDTO> getBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO) {
401
-        List<BlockedBrigadeCertificateDistributionDTO> resultList = blockedDashboardMapper.selectBrigadeCertificateDistribution(queryDTO);
484
+    public List<BlockedCertificateLevelDTO> getBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO) {
485
+        List<BlockedCertificateLevelDTO> resultList = blockedDashboardMapper.selectBrigadeCertificateDistribution(queryDTO);
402 486
         return resultList != null ? resultList : Collections.emptyList();
403 487
     }
404 488
 
@@ -537,6 +621,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
537 621
     @Override
538 622
     public List<BlockedGenderDistributionDTO> getGenderDistribution(BlockedDashboardQueryDTO queryDTO) {
539 623
         List<BlockedGenderDistributionDTO> resultList = blockedDashboardMapper.selectGenderDistribution(queryDTO);
624
+        if (resultList != null && !resultList.isEmpty()) {
625
+            // 计算总数
626
+            long totalCount = resultList.stream().mapToLong(item -> item.getCount() != null ? item.getCount() : 0).sum();
627
+            // 计算百分比
628
+            if (totalCount > 0) {
629
+                resultList.forEach(item -> {
630
+                    long count = item.getCount() != null ? item.getCount() : 0;
631
+                    double percentage = Math.round(count * 10000.0 / totalCount) / 100.0;
632
+                    item.setPercentage(java.math.BigDecimal.valueOf(percentage));
633
+                });
634
+            }
635
+        }
540 636
         return resultList != null ? resultList : Collections.emptyList();
541 637
     }
542 638
 
@@ -551,6 +647,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
551 647
     @Override
552 648
     public List<BlockedCertificateLevelDistributionDTO> getCertificateLevelDistribution(BlockedDashboardQueryDTO queryDTO) {
553 649
         List<BlockedCertificateLevelDistributionDTO> resultList = blockedDashboardMapper.selectCertificateLevelDistribution(queryDTO);
650
+        if (resultList != null && !resultList.isEmpty()) {
651
+            // 计算总数
652
+            long totalCount = resultList.stream().mapToLong(item -> item.getCount() != null ? item.getCount() : 0).sum();
653
+            // 计算百分比
654
+            if (totalCount > 0) {
655
+                resultList.forEach(item -> {
656
+                    long count = item.getCount() != null ? item.getCount() : 0;
657
+                    double percentage = Math.round(count * 10000.0 / totalCount) / 100.0;
658
+                    item.setPercentage(java.math.BigDecimal.valueOf(percentage));
659
+                });
660
+            }
661
+        }
554 662
         return resultList != null ? resultList : Collections.emptyList();
555 663
     }
556 664
 
@@ -566,12 +674,20 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
566 674
     public List<BlockedCertificateLevelDistributionDTO> getBrigadePersonnelCertificateBase(BlockedDashboardQueryDTO queryDTO) {
567 675
         List<BlockedCertificateLevelDistributionDTO> resultList = blockedDashboardMapper.selectBrigadePersonnelCertificateBase(queryDTO);
568 676
         if (resultList != null && !resultList.isEmpty()) {
569
-            // 转换证书级别为中文
570
-            resultList.forEach(item -> {
571
-                if (item.getCertificateLevel() != null) {
572
-                    item.setCertificateLevel(convertCertificateLevel(item.getCertificateLevel()));
573
-                }
574
-            });
677
+            // 计算总数
678
+            long totalCount = resultList.stream().mapToLong(item -> item.getCount() != null ? item.getCount() : 0).sum();
679
+            // 计算百分比
680
+            if (totalCount > 0) {
681
+                resultList.forEach(item -> {
682
+                    long count = item.getCount() != null ? item.getCount() : 0;
683
+                    double percentage = Math.round(count * 10000.0 / totalCount) / 100.0;
684
+                    item.setPercentage(java.math.BigDecimal.valueOf(percentage));
685
+                    // 转换证书级别为中文
686
+                    if (item.getCertificateLevel() != null) {
687
+                        item.setCertificateLevel(convertCertificateLevel(item.getCertificateLevel()));
688
+                    }
689
+                });
690
+            }
575 691
         }
576 692
         return resultList != null ? resultList : Collections.emptyList();
577 693
     }
@@ -587,6 +703,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
587 703
     @Override
588 704
     public List<BlockedRankingDTO> getSupervisorDistribution(BlockedDashboardQueryDTO queryDTO) {
589 705
         List<BlockedRankingDTO> resultList = blockedDashboardMapper.selectSupervisorDistribution(queryDTO);
706
+        if (resultList != null && !resultList.isEmpty()) {
707
+            // 计算总数
708
+            long totalCount = resultList.stream().mapToLong(item -> item.getTotalCount() != null ? item.getTotalCount() : 0).sum();
709
+            // 计算百分比
710
+            if (totalCount > 0) {
711
+                resultList.forEach(item -> {
712
+                    long count = item.getTotalCount() != null ? item.getTotalCount() : 0;
713
+                    double percentage = Math.round(count * 10000.0 / totalCount) / 100.0;
714
+                    item.setPercentage(java.math.BigDecimal.valueOf(percentage));
715
+                });
716
+            }
717
+        }
590 718
         return resultList != null ? resultList : Collections.emptyList();
591 719
     }
592 720
 
@@ -601,6 +729,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
601 729
     @Override
602 730
     public List<BlockedOperatingYearsDistributionDTO> getOperatingYearsDistribution(BlockedDashboardQueryDTO queryDTO) {
603 731
         List<BlockedOperatingYearsDistributionDTO> resultList = blockedDashboardMapper.selectOperatingYearsDistribution(queryDTO);
732
+        if (resultList != null && !resultList.isEmpty()) {
733
+            // 计算总数
734
+            long totalCount = resultList.stream().mapToLong(item -> item.getCount() != null ? item.getCount() : 0).sum();
735
+            // 计算百分比
736
+            if (totalCount > 0) {
737
+                resultList.forEach(item -> {
738
+                    long count = item.getCount() != null ? item.getCount() : 0;
739
+                    double percentage = Math.round(count * 10000.0 / totalCount) / 100.0;
740
+                    item.setPercentage(java.math.BigDecimal.valueOf(percentage));
741
+                });
742
+            }
743
+        }
604 744
         return resultList != null ? resultList : Collections.emptyList();
605 745
     }
606 746
 

+ 2 - 2
airport-blocked/src/main/java/com/sundot/airport/blocked/service/impl/BlockedLuggageStatisticsDailyServiceImpl.java

@@ -296,7 +296,7 @@ public class BlockedLuggageStatisticsDailyServiceImpl implements IBlockedLuggage
296 296
      * 
297 297
      * @param blockedCount 查堵件数
298 298
      * @param luggageCount 过检行李数
299
-     * @return 万分率
299
+     * @return 万分率(保留2位小数)
300 300
      */
301 301
     private BigDecimal calculateBlockRate(Integer blockedCount, Integer luggageCount)
302 302
     {
@@ -310,7 +310,7 @@ public class BlockedLuggageStatisticsDailyServiceImpl implements IBlockedLuggage
310 310
         }
311 311
         return BigDecimal.valueOf(blockedCount)
312 312
                 .multiply(BigDecimal.valueOf(10000))
313
-                .divide(BigDecimal.valueOf(luggageCount), 4, RoundingMode.HALF_UP);
313
+                .divide(BigDecimal.valueOf(luggageCount), 2, RoundingMode.HALF_UP);
314 314
     }
315 315
 
316 316
     /**

+ 38 - 29
airport-blocked/src/main/resources/mapper/blocked/BlockedDashboardMapper.xml

@@ -186,8 +186,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
186 186
     <select id="selectItemDistribution" resultType="com.sundot.airport.blocked.dto.BlockedItemDistributionDTO">
187 187
         SELECT 
188 188
             miss_check_item as missCheckItem,
189
-            COUNT(1) as count,
190
-            ROUND(COUNT(1) * 100.0 / SUM(COUNT(1)) OVER(), 2) as percentage
189
+            COUNT(1) as count
191 190
         FROM blocked_miss_check_statistics
192 191
         WHERE del_flag = '0'
193 192
         AND miss_check_item IS NOT NULL
@@ -215,13 +214,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
215 214
         ORDER BY count DESC
216 215
     </select>
217 216
 
218
-    <!-- 查询区域查堵数据分布(用于双轴图表) -->
219
-    <select id="selectAreaDistribution" resultType="com.sundot.airport.blocked.dto.BlockedAreaDistributionDTO">
217
+    <!-- 查询区域查堵数据分布-过检行李数(柱状图) -->
218
+    <select id="selectAreaLuggageDistribution" resultType="com.sundot.airport.blocked.dto.BlockedAreaLuggageDTO">
220 219
         SELECT 
220
+            brigade_name as brigadeName,
221 221
             COALESCE(SUM(t1_travel_luggage_count), 0) as t1PassengerLuggageCount,
222 222
             COALESCE(SUM(t2_travel_luggage_count), 0) as t2PassengerLuggageCount,
223 223
             COALESCE(SUM(t1_walk_luggage_count), 0) as t1CargoLuggageCount,
224
-            COALESCE(SUM(t2_walk_luggage_count), 0) as t2CargoLuggageCount,
224
+            COALESCE(SUM(t2_walk_luggage_count), 0) as t2CargoLuggageCount
225
+        FROM blocked_luggage_statistics_daily
226
+        WHERE del_flag = '0'
227
+        AND brigade_id IS NOT NULL
228
+        <if test="startTime != null and endTime != null">
229
+            AND stat_date &gt;= #{startTime}
230
+            AND stat_date &lt;= #{endTime}
231
+        </if>
232
+        <if test="brigadeId != null">
233
+            AND brigade_id = #{brigadeId}
234
+        </if>
235
+        GROUP BY brigade_id, brigade_name
236
+        ORDER BY brigade_id
237
+    </select>
238
+
239
+    <!-- 查询区域查堵数据分布-查堵件数(折线图) -->
240
+    <select id="selectAreaBlockedDistribution" resultType="com.sundot.airport.blocked.dto.BlockedAreaBlockedDTO">
241
+        SELECT 
242
+            brigade_name as brigadeName,
225 243
             COALESCE(SUM(t1_travel_blocked_count), 0) as t1PassengerBlockedCount,
226 244
             COALESCE(SUM(t2_travel_blocked_count), 0) as t2PassengerBlockedCount,
227 245
             COALESCE(SUM(t1_walk_blocked_count), 0) as t1CargoBlockedCount,
@@ -236,6 +254,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
236 254
         <if test="brigadeId != null">
237 255
             AND brigade_id = #{brigadeId}
238 256
         </if>
257
+        GROUP BY brigade_id, brigade_name
258
+        ORDER BY brigade_id
239 259
     </select>
240 260
 
241 261
     <!-- 查询查堵类型分布(用于分组柱状图) -->
@@ -481,8 +501,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
481 501
     <select id="selectItemLocationDistribution" resultType="com.sundot.airport.blocked.dto.BlockedItemLocationDistributionDTO">
482 502
         SELECT 
483 503
             item_location as itemLocation,
484
-            COUNT(1) as count,
485
-            ROUND(COUNT(1) * 100.0 / SUM(COUNT(1)) OVER(), 2) as percentage
504
+            COUNT(1) as count
486 505
         FROM blocked_miss_check_statistics
487 506
         WHERE del_flag = '0'
488 507
         AND item_location IS NOT NULL
@@ -517,8 +536,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
517 536
     <select id="selectMissCheckReasonDistribution" resultType="com.sundot.airport.blocked.dto.BlockedMissCheckReasonDistributionDTO">
518 537
         SELECT 
519 538
             miss_check_reason_category as missCheckReasonCategory,
520
-            COUNT(1) as count,
521
-            ROUND(COUNT(1) * 100.0 / SUM(COUNT(1)) OVER(), 2) as percentage
539
+            COUNT(1) as count
522 540
         FROM blocked_miss_check_statistics
523 541
         WHERE del_flag = '0'
524 542
         AND area_id IS NOT NULL
@@ -551,8 +569,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
551 569
     <select id="selectDifficultyDistribution" resultType="com.sundot.airport.blocked.dto.BlockedDifficultyDistributionDTO">
552 570
         SELECT 
553 571
             difficulty_level as difficultyLevel,
554
-            COUNT(1) as count,
555
-            ROUND(COUNT(1) * 100.0 / SUM(COUNT(1)) OVER(), 2) as percentage
572
+            COUNT(1) as count
556 573
         FROM blocked_miss_check_statistics
557 574
         WHERE del_flag = '0'
558 575
         AND difficulty_level IS NOT NULL
@@ -584,8 +601,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
584 601
     <select id="selectCertificateDistribution" resultType="com.sundot.airport.blocked.dto.BlockedCertificateDistributionDTO">
585 602
         SELECT 
586 603
             u.qualification_level as certificateLevel,
587
-            COUNT(DISTINCT bms.reviewed_user_id) as count,
588
-            ROUND(COUNT(DISTINCT bms.reviewed_user_id) * 100.0 / SUM(COUNT(DISTINCT bms.reviewed_user_id)) OVER(), 2) as percentage
604
+            COUNT(DISTINCT bms.reviewed_user_id) as count
589 605
         FROM blocked_miss_check_statistics bms
590 606
         INNER JOIN sys_user u ON bms.reviewed_user_id = u.user_id
591 607
         WHERE bms.del_flag = '0'
@@ -617,15 +633,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
617 633
     </select>
618 634
 
619 635
     <!-- 查询大队开机人员证书分布(用于柱状图) -->
620
-    <select id="selectBrigadeCertificateDistribution" resultType="com.sundot.airport.blocked.dto.BlockedBrigadeCertificateDistributionDTO">
636
+    <select id="selectBrigadeCertificateDistribution" resultType="com.sundot.airport.blocked.dto.BlockedCertificateLevelDTO">
621 637
         SELECT 
622 638
             d.dept_name as brigadeName,
623 639
             d.dept_id as brigadeId,
624
-            COUNT(DISTINCT CASE WHEN u.qualification_level = 'LEVEL_ONE' THEN u.user_id END) as levelOneCount,
625
-            COUNT(DISTINCT CASE WHEN u.qualification_level = 'LEVEL_TWO' THEN u.user_id END) as levelTwoCount,
626
-            COUNT(DISTINCT CASE WHEN u.qualification_level = 'LEVEL_THREE' THEN u.user_id END) as levelThreeCount,
627
-            COUNT(DISTINCT CASE WHEN u.qualification_level = 'LEVEL_FOUR' THEN u.user_id END) as levelFourCount,
628
-            COUNT(DISTINCT CASE WHEN u.qualification_level = 'LEVEL_FIVE' THEN u.user_id END) as levelFiveCount,
640
+            COUNT(DISTINCT CASE WHEN u.qualification_level IN ('LEVEL_ONE', 'LEVEL_TWO', 'LEVEL_THREE') THEN u.user_id END) as seniorCount,
641
+            COUNT(DISTINCT CASE WHEN u.qualification_level = 'LEVEL_FOUR' THEN u.user_id END) as middleCount,
642
+            COUNT(DISTINCT CASE WHEN u.qualification_level = 'LEVEL_FIVE' THEN u.user_id END) as juniorCount,
629 643
             COUNT(DISTINCT u.user_id) as totalCount
630 644
         FROM sys_user u
631 645
         INNER JOIN sys_dept d ON u.dept_id = d.dept_id
@@ -858,8 +872,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
858 872
     <select id="selectGenderDistribution" resultType="com.sundot.airport.blocked.dto.BlockedGenderDistributionDTO">
859 873
         SELECT 
860 874
             gender as gender,
861
-            COUNT(1) as count,
862
-            ROUND(COUNT(1) * 100.0 / SUM(COUNT(1)) OVER(), 2) as percentage
875
+            COUNT(1) as count
863 876
         FROM blocked_miss_check_statistics
864 877
         WHERE del_flag = '0'
865 878
         AND gender IS NOT NULL
@@ -891,8 +904,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
891 904
     <select id="selectCertificateLevelDistribution" resultType="com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO">
892 905
         SELECT 
893 906
             certificate_level as certificateLevel,
894
-            COUNT(1) as count,
895
-            ROUND(COUNT(1) * 100.0 / SUM(COUNT(1)) OVER(), 2) as percentage
907
+            COUNT(1) as count
896 908
         FROM blocked_miss_check_statistics
897 909
         WHERE del_flag = '0'
898 910
         AND certificate_level IS NOT NULL
@@ -924,8 +936,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
924 936
     <select id="selectBrigadePersonnelCertificateBase" resultType="com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO">
925 937
         SELECT 
926 938
             u.qualification_level as certificateLevel,
927
-            COUNT(DISTINCT u.user_id) as count,
928
-            ROUND(COUNT(DISTINCT u.user_id) * 100.0 / SUM(COUNT(DISTINCT u.user_id)) OVER(), 2) as percentage
939
+            COUNT(DISTINCT u.user_id) as count
929 940
         FROM sys_user u
930 941
         INNER JOIN sys_dept d ON u.dept_id = d.dept_id
931 942
         WHERE u.del_flag = '0'
@@ -945,8 +956,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
945 956
         SELECT 
946 957
             supervisor_name as name,
947 958
             supervisor_id as id,
948
-            COUNT(1) as totalCount,
949
-            ROUND(COUNT(1) * 100.0 / SUM(COUNT(1)) OVER(), 2) as percentage
959
+            COUNT(1) as totalCount
950 960
         FROM blocked_miss_check_statistics
951 961
         WHERE del_flag = '0'
952 962
         AND supervisor_name IS NOT NULL
@@ -978,8 +988,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
978 988
     <select id="selectOperatingYearsDistribution" resultType="com.sundot.airport.blocked.dto.BlockedOperatingYearsDistributionDTO">
979 989
         SELECT 
980 990
             machine_operating_years as operatingYears,
981
-            COUNT(1) as count,
982
-            ROUND(COUNT(1) * 100.0 / SUM(COUNT(1)) OVER(), 2) as percentage
991
+            COUNT(1) as count
983 992
         FROM blocked_miss_check_statistics
984 993
         WHERE del_flag = '0'
985 994
         AND machine_operating_years IS NOT NULL