wangxx дней назад: 2
Родитель
Сommit
b3b46f0b43
13 измененных файлов с 385 добавлено и 245 удалено
  1. 3 24
      airport-admin/src/main/java/com/sundot/airport/web/controller/blocked/BlockedDashboardController.java
  2. 2 9
      airport-admin/src/main/java/com/sundot/airport/web/controller/blocked/BlockedLuggageStatisticsDailyController.java
  3. 50 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedAreaBlockedDTO.java
  4. 39 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedAreaDistributionResultDTO.java
  5. 10 28
      airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedAreaDistributionDTO.java
  6. 0 68
      airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedBrigadeCertificateDistributionDTO.java
  7. 56 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedCertificateLevelDTO.java
  8. 6 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/dto/BlockedRankingDTO.java
  9. 13 31
      airport-blocked/src/main/java/com/sundot/airport/blocked/mapper/BlockedDashboardMapper.java
  10. 6 34
      airport-blocked/src/main/java/com/sundot/airport/blocked/service/IBlockedDashboardService.java
  11. 160 20
      airport-blocked/src/main/java/com/sundot/airport/blocked/service/impl/BlockedDashboardServiceImpl.java
  12. 2 2
      airport-blocked/src/main/java/com/sundot/airport/blocked/service/impl/BlockedLuggageStatisticsDailyServiceImpl.java
  13. 38 29
      airport-blocked/src/main/resources/mapper/blocked/BlockedDashboardMapper.xml

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

@@ -1,27 +1,6 @@
1
 package com.sundot.airport.web.controller.blocked;
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
 import com.sundot.airport.blocked.service.IBlockedDashboardService;
4
 import com.sundot.airport.blocked.service.IBlockedDashboardService;
26
 import com.sundot.airport.common.core.controller.BaseController;
5
 import com.sundot.airport.common.core.controller.BaseController;
27
 import com.sundot.airport.common.core.domain.AjaxResult;
6
 import com.sundot.airport.common.core.domain.AjaxResult;
@@ -209,7 +188,7 @@ public class BlockedDashboardController extends BaseController {
209
     @ApiOperation("区域查堵数量分布")
188
     @ApiOperation("区域查堵数量分布")
210
     @GetMapping("/areaDistribution")
189
     @GetMapping("/areaDistribution")
211
     public AjaxResult getAreaDistribution(BlockedDashboardQueryDTO queryDTO) {
190
     public AjaxResult getAreaDistribution(BlockedDashboardQueryDTO queryDTO) {
212
-        BlockedAreaDistributionDTO result = blockedDashboardService.getAreaDistribution(queryDTO);
191
+        BlockedAreaDistributionResultDTO result = blockedDashboardService.getAreaDistribution(queryDTO);
213
         return success(result);
192
         return success(result);
214
     }
193
     }
215
 
194
 
@@ -405,7 +384,7 @@ public class BlockedDashboardController extends BaseController {
405
     @ApiOperation("大队开机人员证书分布")
384
     @ApiOperation("大队开机人员证书分布")
406
     @GetMapping("/brigadeCertificateDistribution")
385
     @GetMapping("/brigadeCertificateDistribution")
407
     public AjaxResult getBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO) {
386
     public AjaxResult getBrigadeCertificateDistribution(BlockedDashboardQueryDTO queryDTO) {
408
-        List<BlockedBrigadeCertificateDistributionDTO> resultList = blockedDashboardService.getBrigadeCertificateDistribution(queryDTO);
387
+        List<BlockedCertificateLevelDTO> resultList = blockedDashboardService.getBrigadeCertificateDistribution(queryDTO);
409
         return success(resultList);
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
 import javax.servlet.http.HttpServletResponse;
4
 import javax.servlet.http.HttpServletResponse;
5
 import org.springframework.security.access.prepost.PreAuthorize;
5
 import org.springframework.security.access.prepost.PreAuthorize;
6
 import org.springframework.beans.factory.annotation.Autowired;
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
 import org.springframework.web.multipart.MultipartFile;
8
 import org.springframework.web.multipart.MultipartFile;
16
 import com.sundot.airport.common.annotation.Log;
9
 import com.sundot.airport.common.annotation.Log;
17
 import com.sundot.airport.common.core.controller.BaseController;
10
 import com.sundot.airport.common.core.controller.BaseController;
@@ -66,7 +59,7 @@ public class BlockedLuggageStatisticsDailyController extends BaseController
66
     @PreAuthorize("@ss.hasPermi('blocked:daily:import')")
59
     @PreAuthorize("@ss.hasPermi('blocked:daily:import')")
67
     @Log(title = "每日行李过检查堵统计", businessType = BusinessType.IMPORT)
60
     @Log(title = "每日行李过检查堵统计", businessType = BusinessType.IMPORT)
68
     @PostMapping("/importData")
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
         ExcelUtil<BlockedLuggageStatisticsDaily> util = new ExcelUtil<BlockedLuggageStatisticsDaily>(BlockedLuggageStatisticsDaily.class);
64
         ExcelUtil<BlockedLuggageStatisticsDaily> util = new ExcelUtil<BlockedLuggageStatisticsDaily>(BlockedLuggageStatisticsDaily.class);
72
         List<BlockedLuggageStatisticsDaily> list = util.importExcel(file.getInputStream());
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
 import java.io.Serializable;
7
 import java.io.Serializable;
8
 
8
 
9
 /**
9
 /**
10
- * 区域查堵数据分布统计DTO(用于双轴图表)
10
+ * 区域查堵-过检行李数统计DTO(柱状图)
11
  * 
11
  * 
12
  * @author wangxx
12
  * @author wangxx
13
- * @date 2026-04-15
13
+ * @date 2026-04-22
14
  */
14
  */
15
 @Data
15
 @Data
16
-@ApiModel("区域查堵数据分布统计")
17
-public class BlockedAreaDistributionDTO implements Serializable {
16
+@ApiModel("区域查堵-过检行李数统计")
17
+public class BlockedAreaLuggageDTO implements Serializable {
18
     
18
     
19
     private static final long serialVersionUID = 1L;
19
     private static final long serialVersionUID = 1L;
20
 
20
 
21
     /**
21
     /**
22
+     * 大队名称
23
+     */
24
+    @ApiModelProperty("大队名称")
25
+    private String brigadeName;
26
+
27
+    /**
22
      * T1旅检过检行李数
28
      * T1旅检过检行李数
23
      */
29
      */
24
     @ApiModelProperty("T1旅检过检行李数")
30
     @ApiModelProperty("T1旅检过检行李数")
@@ -41,28 +47,4 @@ public class BlockedAreaDistributionDTO implements Serializable {
41
      */
47
      */
42
     @ApiModelProperty("T2行检过检行李数")
48
     @ApiModelProperty("T2行检过检行李数")
43
     private Integer t2CargoLuggageCount;
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
 import lombok.Data;
5
 import lombok.Data;
6
 
6
 
7
 import java.io.Serializable;
7
 import java.io.Serializable;
8
+import java.math.BigDecimal;
8
 
9
 
9
 /**
10
 /**
10
  * 查堵排行榜统计DTO
11
  * 查堵排行榜统计DTO
@@ -41,4 +42,9 @@ public class BlockedRankingDTO implements Serializable {
41
      */
42
      */
42
     @ApiModelProperty("统计记录总数")
43
     @ApiModelProperty("统计记录总数")
43
     private Integer totalCount;
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
 package com.sundot.airport.blocked.mapper;
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
 import org.apache.ibatis.annotations.Mapper;
4
 import org.apache.ibatis.annotations.Mapper;
31
 import org.apache.ibatis.annotations.Param;
5
 import org.apache.ibatis.annotations.Param;
32
 
6
 
@@ -138,12 +112,20 @@ public interface BlockedDashboardMapper {
138
     List<BlockedItemDistributionDTO> selectItemDistribution(BlockedDashboardQueryDTO queryDTO);
112
     List<BlockedItemDistributionDTO> selectItemDistribution(BlockedDashboardQueryDTO queryDTO);
139
 
113
 
140
     /**
114
     /**
141
-     * 查询区域查堵数据分布(用于双轴图表)
115
+     * 查询区域查堵数据分布-过检行李数(柱状图)
142
      * 
116
      * 
143
      * @param queryDTO 查询参数
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
      * @param queryDTO 查询参数
237
      * @param queryDTO 查询参数
256
      * @return 大队证书分布统计列表
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
 package com.sundot.airport.blocked.service;
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
 import java.util.List;
5
 import java.util.List;
34
 
6
 
@@ -129,12 +101,12 @@ public interface IBlockedDashboardService {
129
     List<BlockedItemDistributionDTO> getItemDistribution(BlockedDashboardQueryDTO queryDTO);
101
     List<BlockedItemDistributionDTO> getItemDistribution(BlockedDashboardQueryDTO queryDTO);
130
 
102
 
131
     /**
103
     /**
132
-     * 查询区域查堵数据分布(用于双轴图表)
104
+     * 查询区域查堵数据分布(双轴图表)
133
      *
105
      *
134
      * @param queryDTO 查询参数
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
      * @param queryDTO 查询参数
218
      * @param queryDTO 查询参数
247
      * @return 大队证书分布统计列表
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
 package com.sundot.airport.blocked.service.impl;
1
 package com.sundot.airport.blocked.service.impl;
2
 
2
 
3
 import cn.hutool.core.collection.CollectionUtil;
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
 import com.sundot.airport.blocked.dto.BlockedBrigadeRateStatsDTO;
7
 import com.sundot.airport.blocked.dto.BlockedBrigadeRateStatsDTO;
7
 import com.sundot.airport.blocked.dto.BlockedBrigadeStatsDTO;
8
 import com.sundot.airport.blocked.dto.BlockedBrigadeStatsDTO;
8
 import com.sundot.airport.blocked.dto.BlockedCertificateDistributionDTO;
9
 import com.sundot.airport.blocked.dto.BlockedCertificateDistributionDTO;
10
+import com.sundot.airport.blocked.dto.BlockedCertificateLevelDTO;
9
 import com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO;
11
 import com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO;
10
 import com.sundot.airport.blocked.dto.BlockedDailyBrigadeLuggageStatsDTO;
12
 import com.sundot.airport.blocked.dto.BlockedDailyBrigadeLuggageStatsDTO;
11
 import com.sundot.airport.blocked.dto.BlockedDailyBrigadeRateStatsDTO;
13
 import com.sundot.airport.blocked.dto.BlockedDailyBrigadeRateStatsDTO;
@@ -38,6 +40,7 @@ import org.springframework.stereotype.Service;
38
 import java.math.BigDecimal;
40
 import java.math.BigDecimal;
39
 import java.util.Collections;
41
 import java.util.Collections;
40
 import java.util.List;
42
 import java.util.List;
43
+import java.util.stream.Collectors;
41
 
44
 
42
 /**
45
 /**
43
  * 查堵大屏Service业务层处理
46
  * 查堵大屏Service业务层处理
@@ -194,18 +197,55 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
194
     @Override
197
     @Override
195
     public List<BlockedItemDistributionDTO> getItemDistribution(BlockedDashboardQueryDTO queryDTO) {
198
     public List<BlockedItemDistributionDTO> getItemDistribution(BlockedDashboardQueryDTO queryDTO) {
196
         List<BlockedItemDistributionDTO> resultList = blockedDashboardMapper.selectItemDistribution(queryDTO);
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
         return resultList != null ? resultList : Collections.emptyList();
212
         return resultList != null ? resultList : Collections.emptyList();
198
     }
213
     }
199
 
214
 
200
     /**
215
     /**
201
-     * 查询区域查堵数据分布(用于双轴图表)
216
+     * 查询区域查堵数据分布(双轴图表)
202
      * 
217
      * 
203
      * @param queryDTO 查询参数
218
      * @param queryDTO 查询参数
204
-     * @return 区域查堵数据分布统计
219
+     * @return 区域查堵数据分布统计结果
205
      */
220
      */
206
     @Override
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
     @Override
383
     @Override
344
     public List<BlockedItemLocationDistributionDTO> getItemLocationDistribution(BlockedDashboardQueryDTO queryDTO) {
384
     public List<BlockedItemLocationDistributionDTO> getItemLocationDistribution(BlockedDashboardQueryDTO queryDTO) {
345
         List<BlockedItemLocationDistributionDTO> resultList = blockedDashboardMapper.selectItemLocationDistribution(queryDTO);
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
         return resultList != null ? resultList : Collections.emptyList();
398
         return resultList != null ? resultList : Collections.emptyList();
347
     }
399
     }
348
 
400
 
@@ -355,6 +407,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
355
     @Override
407
     @Override
356
     public List<BlockedMissCheckReasonDistributionDTO> getMissCheckReasonDistribution(BlockedDashboardQueryDTO queryDTO) {
408
     public List<BlockedMissCheckReasonDistributionDTO> getMissCheckReasonDistribution(BlockedDashboardQueryDTO queryDTO) {
357
         List<BlockedMissCheckReasonDistributionDTO> resultList = blockedDashboardMapper.selectMissCheckReasonDistribution(queryDTO);
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
         return resultList != null ? resultList : Collections.emptyList();
422
         return resultList != null ? resultList : Collections.emptyList();
359
     }
423
     }
360
 
424
 
@@ -367,6 +431,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
367
     @Override
431
     @Override
368
     public List<BlockedDifficultyDistributionDTO> getDifficultyDistribution(BlockedDashboardQueryDTO queryDTO) {
432
     public List<BlockedDifficultyDistributionDTO> getDifficultyDistribution(BlockedDashboardQueryDTO queryDTO) {
369
         List<BlockedDifficultyDistributionDTO> resultList = blockedDashboardMapper.selectDifficultyDistribution(queryDTO);
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
         return resultList != null ? resultList : Collections.emptyList();
446
         return resultList != null ? resultList : Collections.emptyList();
371
     }
447
     }
372
 
448
 
@@ -380,12 +456,20 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
380
     public List<BlockedCertificateDistributionDTO> getCertificateDistribution(BlockedDashboardQueryDTO queryDTO) {
456
     public List<BlockedCertificateDistributionDTO> getCertificateDistribution(BlockedDashboardQueryDTO queryDTO) {
381
         List<BlockedCertificateDistributionDTO> resultList = blockedDashboardMapper.selectCertificateDistribution(queryDTO);
457
         List<BlockedCertificateDistributionDTO> resultList = blockedDashboardMapper.selectCertificateDistribution(queryDTO);
382
         if (resultList != null && !resultList.isEmpty()) {
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
         return resultList != null ? resultList : Collections.emptyList();
474
         return resultList != null ? resultList : Collections.emptyList();
391
     }
475
     }
@@ -397,8 +481,8 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
397
      * @return 大队证书分布统计列表
481
      * @return 大队证书分布统计列表
398
      */
482
      */
399
     @Override
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
         return resultList != null ? resultList : Collections.emptyList();
486
         return resultList != null ? resultList : Collections.emptyList();
403
     }
487
     }
404
 
488
 
@@ -537,6 +621,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
537
     @Override
621
     @Override
538
     public List<BlockedGenderDistributionDTO> getGenderDistribution(BlockedDashboardQueryDTO queryDTO) {
622
     public List<BlockedGenderDistributionDTO> getGenderDistribution(BlockedDashboardQueryDTO queryDTO) {
539
         List<BlockedGenderDistributionDTO> resultList = blockedDashboardMapper.selectGenderDistribution(queryDTO);
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
         return resultList != null ? resultList : Collections.emptyList();
636
         return resultList != null ? resultList : Collections.emptyList();
541
     }
637
     }
542
 
638
 
@@ -551,6 +647,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
551
     @Override
647
     @Override
552
     public List<BlockedCertificateLevelDistributionDTO> getCertificateLevelDistribution(BlockedDashboardQueryDTO queryDTO) {
648
     public List<BlockedCertificateLevelDistributionDTO> getCertificateLevelDistribution(BlockedDashboardQueryDTO queryDTO) {
553
         List<BlockedCertificateLevelDistributionDTO> resultList = blockedDashboardMapper.selectCertificateLevelDistribution(queryDTO);
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
         return resultList != null ? resultList : Collections.emptyList();
662
         return resultList != null ? resultList : Collections.emptyList();
555
     }
663
     }
556
 
664
 
@@ -566,12 +674,20 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
566
     public List<BlockedCertificateLevelDistributionDTO> getBrigadePersonnelCertificateBase(BlockedDashboardQueryDTO queryDTO) {
674
     public List<BlockedCertificateLevelDistributionDTO> getBrigadePersonnelCertificateBase(BlockedDashboardQueryDTO queryDTO) {
567
         List<BlockedCertificateLevelDistributionDTO> resultList = blockedDashboardMapper.selectBrigadePersonnelCertificateBase(queryDTO);
675
         List<BlockedCertificateLevelDistributionDTO> resultList = blockedDashboardMapper.selectBrigadePersonnelCertificateBase(queryDTO);
568
         if (resultList != null && !resultList.isEmpty()) {
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
         return resultList != null ? resultList : Collections.emptyList();
692
         return resultList != null ? resultList : Collections.emptyList();
577
     }
693
     }
@@ -587,6 +703,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
587
     @Override
703
     @Override
588
     public List<BlockedRankingDTO> getSupervisorDistribution(BlockedDashboardQueryDTO queryDTO) {
704
     public List<BlockedRankingDTO> getSupervisorDistribution(BlockedDashboardQueryDTO queryDTO) {
589
         List<BlockedRankingDTO> resultList = blockedDashboardMapper.selectSupervisorDistribution(queryDTO);
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
         return resultList != null ? resultList : Collections.emptyList();
718
         return resultList != null ? resultList : Collections.emptyList();
591
     }
719
     }
592
 
720
 
@@ -601,6 +729,18 @@ public class BlockedDashboardServiceImpl implements IBlockedDashboardService {
601
     @Override
729
     @Override
602
     public List<BlockedOperatingYearsDistributionDTO> getOperatingYearsDistribution(BlockedDashboardQueryDTO queryDTO) {
730
     public List<BlockedOperatingYearsDistributionDTO> getOperatingYearsDistribution(BlockedDashboardQueryDTO queryDTO) {
603
         List<BlockedOperatingYearsDistributionDTO> resultList = blockedDashboardMapper.selectOperatingYearsDistribution(queryDTO);
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
         return resultList != null ? resultList : Collections.emptyList();
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
      * @param blockedCount 查堵件数
297
      * @param blockedCount 查堵件数
298
      * @param luggageCount 过检行李数
298
      * @param luggageCount 过检行李数
299
-     * @return 万分率
299
+     * @return 万分率(保留2位小数)
300
      */
300
      */
301
     private BigDecimal calculateBlockRate(Integer blockedCount, Integer luggageCount)
301
     private BigDecimal calculateBlockRate(Integer blockedCount, Integer luggageCount)
302
     {
302
     {
@@ -310,7 +310,7 @@ public class BlockedLuggageStatisticsDailyServiceImpl implements IBlockedLuggage
310
         }
310
         }
311
         return BigDecimal.valueOf(blockedCount)
311
         return BigDecimal.valueOf(blockedCount)
312
                 .multiply(BigDecimal.valueOf(10000))
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
     <select id="selectItemDistribution" resultType="com.sundot.airport.blocked.dto.BlockedItemDistributionDTO">
186
     <select id="selectItemDistribution" resultType="com.sundot.airport.blocked.dto.BlockedItemDistributionDTO">
187
         SELECT 
187
         SELECT 
188
             miss_check_item as missCheckItem,
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
         FROM blocked_miss_check_statistics
190
         FROM blocked_miss_check_statistics
192
         WHERE del_flag = '0'
191
         WHERE del_flag = '0'
193
         AND miss_check_item IS NOT NULL
192
         AND miss_check_item IS NOT NULL
@@ -215,13 +214,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
215
         ORDER BY count DESC
214
         ORDER BY count DESC
216
     </select>
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
         SELECT 
219
         SELECT 
220
+            brigade_name as brigadeName,
221
             COALESCE(SUM(t1_travel_luggage_count), 0) as t1PassengerLuggageCount,
221
             COALESCE(SUM(t1_travel_luggage_count), 0) as t1PassengerLuggageCount,
222
             COALESCE(SUM(t2_travel_luggage_count), 0) as t2PassengerLuggageCount,
222
             COALESCE(SUM(t2_travel_luggage_count), 0) as t2PassengerLuggageCount,
223
             COALESCE(SUM(t1_walk_luggage_count), 0) as t1CargoLuggageCount,
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
             COALESCE(SUM(t1_travel_blocked_count), 0) as t1PassengerBlockedCount,
243
             COALESCE(SUM(t1_travel_blocked_count), 0) as t1PassengerBlockedCount,
226
             COALESCE(SUM(t2_travel_blocked_count), 0) as t2PassengerBlockedCount,
244
             COALESCE(SUM(t2_travel_blocked_count), 0) as t2PassengerBlockedCount,
227
             COALESCE(SUM(t1_walk_blocked_count), 0) as t1CargoBlockedCount,
245
             COALESCE(SUM(t1_walk_blocked_count), 0) as t1CargoBlockedCount,
@@ -236,6 +254,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
236
         <if test="brigadeId != null">
254
         <if test="brigadeId != null">
237
             AND brigade_id = #{brigadeId}
255
             AND brigade_id = #{brigadeId}
238
         </if>
256
         </if>
257
+        GROUP BY brigade_id, brigade_name
258
+        ORDER BY brigade_id
239
     </select>
259
     </select>
240
 
260
 
241
     <!-- 查询查堵类型分布(用于分组柱状图) -->
261
     <!-- 查询查堵类型分布(用于分组柱状图) -->
@@ -481,8 +501,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
481
     <select id="selectItemLocationDistribution" resultType="com.sundot.airport.blocked.dto.BlockedItemLocationDistributionDTO">
501
     <select id="selectItemLocationDistribution" resultType="com.sundot.airport.blocked.dto.BlockedItemLocationDistributionDTO">
482
         SELECT 
502
         SELECT 
483
             item_location as itemLocation,
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
         FROM blocked_miss_check_statistics
505
         FROM blocked_miss_check_statistics
487
         WHERE del_flag = '0'
506
         WHERE del_flag = '0'
488
         AND item_location IS NOT NULL
507
         AND item_location IS NOT NULL
@@ -517,8 +536,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
517
     <select id="selectMissCheckReasonDistribution" resultType="com.sundot.airport.blocked.dto.BlockedMissCheckReasonDistributionDTO">
536
     <select id="selectMissCheckReasonDistribution" resultType="com.sundot.airport.blocked.dto.BlockedMissCheckReasonDistributionDTO">
518
         SELECT 
537
         SELECT 
519
             miss_check_reason_category as missCheckReasonCategory,
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
         FROM blocked_miss_check_statistics
540
         FROM blocked_miss_check_statistics
523
         WHERE del_flag = '0'
541
         WHERE del_flag = '0'
524
         AND area_id IS NOT NULL
542
         AND area_id IS NOT NULL
@@ -551,8 +569,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
551
     <select id="selectDifficultyDistribution" resultType="com.sundot.airport.blocked.dto.BlockedDifficultyDistributionDTO">
569
     <select id="selectDifficultyDistribution" resultType="com.sundot.airport.blocked.dto.BlockedDifficultyDistributionDTO">
552
         SELECT 
570
         SELECT 
553
             difficulty_level as difficultyLevel,
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
         FROM blocked_miss_check_statistics
573
         FROM blocked_miss_check_statistics
557
         WHERE del_flag = '0'
574
         WHERE del_flag = '0'
558
         AND difficulty_level IS NOT NULL
575
         AND difficulty_level IS NOT NULL
@@ -584,8 +601,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
584
     <select id="selectCertificateDistribution" resultType="com.sundot.airport.blocked.dto.BlockedCertificateDistributionDTO">
601
     <select id="selectCertificateDistribution" resultType="com.sundot.airport.blocked.dto.BlockedCertificateDistributionDTO">
585
         SELECT 
602
         SELECT 
586
             u.qualification_level as certificateLevel,
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
         FROM blocked_miss_check_statistics bms
605
         FROM blocked_miss_check_statistics bms
590
         INNER JOIN sys_user u ON bms.reviewed_user_id = u.user_id
606
         INNER JOIN sys_user u ON bms.reviewed_user_id = u.user_id
591
         WHERE bms.del_flag = '0'
607
         WHERE bms.del_flag = '0'
@@ -617,15 +633,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
617
     </select>
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
         SELECT 
637
         SELECT 
622
             d.dept_name as brigadeName,
638
             d.dept_name as brigadeName,
623
             d.dept_id as brigadeId,
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
             COUNT(DISTINCT u.user_id) as totalCount
643
             COUNT(DISTINCT u.user_id) as totalCount
630
         FROM sys_user u
644
         FROM sys_user u
631
         INNER JOIN sys_dept d ON u.dept_id = d.dept_id
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
     <select id="selectGenderDistribution" resultType="com.sundot.airport.blocked.dto.BlockedGenderDistributionDTO">
872
     <select id="selectGenderDistribution" resultType="com.sundot.airport.blocked.dto.BlockedGenderDistributionDTO">
859
         SELECT 
873
         SELECT 
860
             gender as gender,
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
         FROM blocked_miss_check_statistics
876
         FROM blocked_miss_check_statistics
864
         WHERE del_flag = '0'
877
         WHERE del_flag = '0'
865
         AND gender IS NOT NULL
878
         AND gender IS NOT NULL
@@ -891,8 +904,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
891
     <select id="selectCertificateLevelDistribution" resultType="com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO">
904
     <select id="selectCertificateLevelDistribution" resultType="com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO">
892
         SELECT 
905
         SELECT 
893
             certificate_level as certificateLevel,
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
         FROM blocked_miss_check_statistics
908
         FROM blocked_miss_check_statistics
897
         WHERE del_flag = '0'
909
         WHERE del_flag = '0'
898
         AND certificate_level IS NOT NULL
910
         AND certificate_level IS NOT NULL
@@ -924,8 +936,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
924
     <select id="selectBrigadePersonnelCertificateBase" resultType="com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO">
936
     <select id="selectBrigadePersonnelCertificateBase" resultType="com.sundot.airport.blocked.dto.BlockedCertificateLevelDistributionDTO">
925
         SELECT 
937
         SELECT 
926
             u.qualification_level as certificateLevel,
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
         FROM sys_user u
940
         FROM sys_user u
930
         INNER JOIN sys_dept d ON u.dept_id = d.dept_id
941
         INNER JOIN sys_dept d ON u.dept_id = d.dept_id
931
         WHERE u.del_flag = '0'
942
         WHERE u.del_flag = '0'
@@ -945,8 +956,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
945
         SELECT 
956
         SELECT 
946
             supervisor_name as name,
957
             supervisor_name as name,
947
             supervisor_id as id,
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
         FROM blocked_miss_check_statistics
960
         FROM blocked_miss_check_statistics
951
         WHERE del_flag = '0'
961
         WHERE del_flag = '0'
952
         AND supervisor_name IS NOT NULL
962
         AND supervisor_name IS NOT NULL
@@ -978,8 +988,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
978
     <select id="selectOperatingYearsDistribution" resultType="com.sundot.airport.blocked.dto.BlockedOperatingYearsDistributionDTO">
988
     <select id="selectOperatingYearsDistribution" resultType="com.sundot.airport.blocked.dto.BlockedOperatingYearsDistributionDTO">
979
         SELECT 
989
         SELECT 
980
             machine_operating_years as operatingYears,
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
         FROM blocked_miss_check_statistics
992
         FROM blocked_miss_check_statistics
984
         WHERE del_flag = '0'
993
         WHERE del_flag = '0'
985
         AND machine_operating_years IS NOT NULL
994
         AND machine_operating_years IS NOT NULL