2 コミット d6d816a333 ... ba6d4eb52f

作者 SHA1 メッセージ 日付
  wangxx ba6d4eb52f Merge remote-tracking branch 'origin/feature/dev' into feature/dev 5 日 前
  wangxx ba3de3fd20 每日各时段查堵行李+每日行李过检查堵统计+漏检统计表设计和代码开发 5 日 前
共有21 個のファイルを変更した4092 個の追加0 個の削除を含む
  1. 6 0
      airport-admin/pom.xml
  2. 159 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/blocked/BlockedLuggagePieceDailyController.java
  3. 159 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/blocked/BlockedLuggageStatisticsDailyController.java
  4. 159 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/blocked/BlockedMissCheckStatisticsController.java
  5. 39 0
      airport-blocked/pom.xml
  6. 284 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/domain/BlockedLuggagePieceDaily.java
  7. 568 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/domain/BlockedLuggageStatisticsDaily.java
  8. 531 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/domain/BlockedMissCheckStatistics.java
  9. 61 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/mapper/BlockedLuggagePieceDailyMapper.java
  10. 61 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/mapper/BlockedLuggageStatisticsDailyMapper.java
  11. 61 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/mapper/BlockedMissCheckStatisticsMapper.java
  12. 86 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/service/IBlockedLuggagePieceDailyService.java
  13. 86 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/service/IBlockedLuggageStatisticsDailyService.java
  14. 86 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/service/IBlockedMissCheckStatisticsService.java
  15. 363 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/service/impl/BlockedLuggagePieceDailyServiceImpl.java
  16. 394 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/service/impl/BlockedLuggageStatisticsDailyServiceImpl.java
  17. 390 0
      airport-blocked/src/main/java/com/sundot/airport/blocked/service/impl/BlockedMissCheckStatisticsServiceImpl.java
  18. 143 0
      airport-blocked/src/main/resources/mapper/blocked/BlockedLuggagePieceDailyMapper.xml
  19. 225 0
      airport-blocked/src/main/resources/mapper/blocked/BlockedLuggageStatisticsDailyMapper.xml
  20. 223 0
      airport-blocked/src/main/resources/mapper/blocked/BlockedMissCheckStatisticsMapper.xml
  21. 8 0
      pom.xml

+ 6 - 0
airport-admin/pom.xml

@@ -73,6 +73,12 @@
73 73
             <artifactId>airport-check</artifactId>
74 74
         </dependency>
75 75
 
76
+        <!-- 行李查堵统计模块-->
77
+        <dependency>
78
+            <groupId>com.sundot.airport</groupId>
79
+            <artifactId>airport-blocked</artifactId>
80
+        </dependency>
81
+
76 82
         <dependency>
77 83
             <groupId>org.projectlombok</groupId>
78 84
             <artifactId>lombok</artifactId>

+ 159 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/blocked/BlockedLuggagePieceDailyController.java

@@ -0,0 +1,159 @@
1
+package com.sundot.airport.web.controller.blocked;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+import org.springframework.security.access.prepost.PreAuthorize;
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;
15
+import org.springframework.web.multipart.MultipartFile;
16
+import com.sundot.airport.common.annotation.Log;
17
+import com.sundot.airport.common.core.controller.BaseController;
18
+import com.sundot.airport.common.core.domain.AjaxResult;
19
+import com.sundot.airport.common.enums.BusinessType;
20
+import com.sundot.airport.blocked.domain.BlockedLuggagePieceDaily;
21
+import com.sundot.airport.blocked.service.IBlockedLuggagePieceDailyService;
22
+import com.sundot.airport.common.utils.poi.ExcelUtil;
23
+import com.sundot.airport.common.core.page.TableDataInfo;
24
+
25
+/**
26
+ * 每日各时段查堵行李Controller
27
+ * 
28
+ * @author wangxx
29
+ * @date 2026-04-13
30
+ */
31
+@RestController
32
+@RequestMapping("/blocked/pieceDaily")
33
+public class BlockedLuggagePieceDailyController extends BaseController
34
+{
35
+    @Autowired
36
+    private IBlockedLuggagePieceDailyService blockedLuggagePieceDailyService;
37
+
38
+    /**
39
+     * 查询每日各时段查堵行李列表
40
+     */
41
+    @PreAuthorize("@ss.hasPermi('blocked:pieceDaily:list')")
42
+    @GetMapping("/list")
43
+    public TableDataInfo list(BlockedLuggagePieceDaily blockedLuggagePieceDaily)
44
+    {
45
+        startPage();
46
+        List<BlockedLuggagePieceDaily> list = blockedLuggagePieceDailyService.selectBlockedLuggagePieceDailyList(blockedLuggagePieceDaily);
47
+        return getDataTable(list);
48
+    }
49
+
50
+    /**
51
+     * 导出每日各时段查堵行李列表
52
+     */
53
+    @PreAuthorize("@ss.hasPermi('blocked:pieceDaily:export')")
54
+    @Log(title = "每日各时段查堵行李", businessType = BusinessType.EXPORT)
55
+    @PostMapping("/export")
56
+    public void export(HttpServletResponse response, BlockedLuggagePieceDaily blockedLuggagePieceDaily)
57
+    {
58
+        List<BlockedLuggagePieceDaily> list = blockedLuggagePieceDailyService.selectBlockedLuggagePieceDailyList(blockedLuggagePieceDaily);
59
+        ExcelUtil<BlockedLuggagePieceDaily> util = new ExcelUtil<BlockedLuggagePieceDaily>(BlockedLuggagePieceDaily.class);
60
+        util.exportExcel(response, list, "每日各时段查堵行李数据");
61
+    }
62
+
63
+    /**
64
+     * 导入每日各时段查堵行李列表
65
+     */
66
+    @PreAuthorize("@ss.hasPermi('blocked:pieceDaily:import')")
67
+    @Log(title = "每日各时段查堵行李", businessType = BusinessType.IMPORT)
68
+    @PostMapping("/importData")
69
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
70
+    {
71
+        ExcelUtil<BlockedLuggagePieceDaily> util = new ExcelUtil<BlockedLuggagePieceDaily>(BlockedLuggagePieceDaily.class);
72
+        List<BlockedLuggagePieceDaily> list = util.importExcel(file.getInputStream());
73
+        String message = blockedLuggagePieceDailyService.importData(list, updateSupport);
74
+        return success(message);
75
+    }
76
+
77
+    /**
78
+     * 获取导入模板
79
+     */
80
+    @PostMapping("/importTemplate")
81
+    public void importTemplate(HttpServletResponse response)
82
+    {
83
+        ExcelUtil<BlockedLuggagePieceDaily> util = new ExcelUtil<BlockedLuggagePieceDaily>(BlockedLuggagePieceDaily.class);
84
+        util.importTemplateExcel(response, "每日各时段查堵行李数据");
85
+    }
86
+
87
+    /**
88
+     * 获取每日各时段查堵行李详细信息
89
+     */
90
+    @PreAuthorize("@ss.hasPermi('blocked:pieceDaily:query')")
91
+    @GetMapping(value = "/{id}")
92
+    public AjaxResult getInfo(@PathVariable("id") Long id)
93
+    {
94
+        return success(blockedLuggagePieceDailyService.selectBlockedLuggagePieceDailyById(id));
95
+    }
96
+
97
+    /**
98
+     * 检查数据是否重复
99
+     */
100
+    @PreAuthorize("@ss.hasPermi('blocked:pieceDaily:add')")
101
+    @GetMapping("/checkDuplicate")
102
+    public AjaxResult checkDuplicate(BlockedLuggagePieceDaily blockedLuggagePieceDaily)
103
+    {
104
+        BlockedLuggagePieceDaily duplicate = blockedLuggagePieceDailyService.checkDuplicate(blockedLuggagePieceDaily);
105
+        if (duplicate != null)
106
+        {
107
+            return AjaxResult.warn("数据已存在,是否覆盖?", duplicate);
108
+        }
109
+        return success();
110
+    }
111
+
112
+    /**
113
+     * 新增每日各时段查堵行李
114
+     */
115
+    @PreAuthorize("@ss.hasPermi('blocked:pieceDaily:add')")
116
+    @Log(title = "每日各时段查堵行李", businessType = BusinessType.INSERT)
117
+    @PostMapping
118
+    public AjaxResult add(@RequestBody BlockedLuggagePieceDaily blockedLuggagePieceDaily)
119
+    {
120
+        blockedLuggagePieceDaily.setCreateBy(getUsername());
121
+        return toAjax(blockedLuggagePieceDailyService.insertBlockedLuggagePieceDaily(blockedLuggagePieceDaily));
122
+    }
123
+
124
+    /**
125
+     * 新增或覆盖每日各时段查堵行李
126
+     */
127
+    @PreAuthorize("@ss.hasPermi('blocked:pieceDaily:add')")
128
+    @Log(title = "每日各时段查堵行李", businessType = BusinessType.INSERT)
129
+    @PostMapping("/addOrOverwrite")
130
+    public AjaxResult addOrOverwrite(@RequestBody BlockedLuggagePieceDaily blockedLuggagePieceDaily)
131
+    {
132
+        blockedLuggagePieceDaily.setCreateBy(getUsername());
133
+        blockedLuggagePieceDaily.setUpdateBy(getUsername());
134
+        return toAjax(blockedLuggagePieceDailyService.insertOrUpdate(blockedLuggagePieceDaily));
135
+    }
136
+
137
+    /**
138
+     * 修改每日各时段查堵行李
139
+     */
140
+    @PreAuthorize("@ss.hasPermi('blocked:pieceDaily:edit')")
141
+    @Log(title = "每日各时段查堵行李", businessType = BusinessType.UPDATE)
142
+    @PutMapping
143
+    public AjaxResult edit(@RequestBody BlockedLuggagePieceDaily blockedLuggagePieceDaily)
144
+    {
145
+        blockedLuggagePieceDaily.setUpdateBy(getUsername());
146
+        return toAjax(blockedLuggagePieceDailyService.updateBlockedLuggagePieceDaily(blockedLuggagePieceDaily));
147
+    }
148
+
149
+    /**
150
+     * 删除每日各时段查堵行李
151
+     */
152
+    @PreAuthorize("@ss.hasPermi('blocked:pieceDaily:remove')")
153
+    @Log(title = "每日各时段查堵行李", businessType = BusinessType.DELETE)
154
+    @DeleteMapping("/{ids}")
155
+    public AjaxResult remove(@PathVariable Long[] ids)
156
+    {
157
+        return toAjax(blockedLuggagePieceDailyService.deleteBlockedLuggagePieceDailyByIds(ids));
158
+    }
159
+}

+ 159 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/blocked/BlockedLuggageStatisticsDailyController.java

@@ -0,0 +1,159 @@
1
+package com.sundot.airport.web.controller.blocked;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+import org.springframework.security.access.prepost.PreAuthorize;
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;
15
+import org.springframework.web.multipart.MultipartFile;
16
+import com.sundot.airport.common.annotation.Log;
17
+import com.sundot.airport.common.core.controller.BaseController;
18
+import com.sundot.airport.common.core.domain.AjaxResult;
19
+import com.sundot.airport.common.enums.BusinessType;
20
+import com.sundot.airport.blocked.domain.BlockedLuggageStatisticsDaily;
21
+import com.sundot.airport.blocked.service.IBlockedLuggageStatisticsDailyService;
22
+import com.sundot.airport.common.utils.poi.ExcelUtil;
23
+import com.sundot.airport.common.core.page.TableDataInfo;
24
+
25
+/**
26
+ * 每日行李过检查堵统计Controller
27
+ * 
28
+ * @author wangxx
29
+ * @date 2026-04-13
30
+ */
31
+@RestController
32
+@RequestMapping("/blocked/daily")
33
+public class BlockedLuggageStatisticsDailyController extends BaseController
34
+{
35
+    @Autowired
36
+    private IBlockedLuggageStatisticsDailyService blockedLuggageStatisticsDailyService;
37
+
38
+    /**
39
+     * 查询每日行李过检查堵统计列表
40
+     */
41
+    @PreAuthorize("@ss.hasPermi('blocked:daily:list')")
42
+    @GetMapping("/list")
43
+    public TableDataInfo list(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
44
+    {
45
+        startPage();
46
+        List<BlockedLuggageStatisticsDaily> list = blockedLuggageStatisticsDailyService.selectBlockedLuggageStatisticsDailyList(blockedLuggageStatisticsDaily);
47
+        return getDataTable(list);
48
+    }
49
+
50
+    /**
51
+     * 导出每日行李过检查堵统计列表
52
+     */
53
+    @PreAuthorize("@ss.hasPermi('blocked:daily:export')")
54
+    @Log(title = "每日行李过检查堵统计", businessType = BusinessType.EXPORT)
55
+    @PostMapping("/export")
56
+    public void export(HttpServletResponse response, BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
57
+    {
58
+        List<BlockedLuggageStatisticsDaily> list = blockedLuggageStatisticsDailyService.selectBlockedLuggageStatisticsDailyList(blockedLuggageStatisticsDaily);
59
+        ExcelUtil<BlockedLuggageStatisticsDaily> util = new ExcelUtil<BlockedLuggageStatisticsDaily>(BlockedLuggageStatisticsDaily.class);
60
+        util.exportExcel(response, list, "每日行李过检查堵统计数据");
61
+    }
62
+
63
+    /**
64
+     * 导入每日行李过检查堵统计列表
65
+     */
66
+    @PreAuthorize("@ss.hasPermi('blocked:daily:import')")
67
+    @Log(title = "每日行李过检查堵统计", businessType = BusinessType.IMPORT)
68
+    @PostMapping("/importData")
69
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
70
+    {
71
+        ExcelUtil<BlockedLuggageStatisticsDaily> util = new ExcelUtil<BlockedLuggageStatisticsDaily>(BlockedLuggageStatisticsDaily.class);
72
+        List<BlockedLuggageStatisticsDaily> list = util.importExcel(file.getInputStream());
73
+        String message = blockedLuggageStatisticsDailyService.importData(list, updateSupport);
74
+        return success(message);
75
+    }
76
+
77
+    /**
78
+     * 获取导入模板
79
+     */
80
+    @PostMapping("/importTemplate")
81
+    public void importTemplate(HttpServletResponse response)
82
+    {
83
+        ExcelUtil<BlockedLuggageStatisticsDaily> util = new ExcelUtil<BlockedLuggageStatisticsDaily>(BlockedLuggageStatisticsDaily.class);
84
+        util.importTemplateExcel(response, "每日行李过检查堵统计数据");
85
+    }
86
+
87
+    /**
88
+     * 获取每日行李过检查堵统计详细信息
89
+     */
90
+    @PreAuthorize("@ss.hasPermi('blocked:daily:query')")
91
+    @GetMapping(value = "/{id}")
92
+    public AjaxResult getInfo(@PathVariable("id") Long id)
93
+    {
94
+        return success(blockedLuggageStatisticsDailyService.selectBlockedLuggageStatisticsDailyById(id));
95
+    }
96
+
97
+    /**
98
+     * 检查数据是否重复
99
+     */
100
+    @PreAuthorize("@ss.hasPermi('blocked:daily:add')")
101
+    @GetMapping("/checkDuplicate")
102
+    public AjaxResult checkDuplicate(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
103
+    {
104
+        BlockedLuggageStatisticsDaily duplicate = blockedLuggageStatisticsDailyService.checkDuplicate(blockedLuggageStatisticsDaily);
105
+        if (duplicate != null)
106
+        {
107
+            return AjaxResult.warn("数据已存在,是否覆盖?", duplicate);
108
+        }
109
+        return success();
110
+    }
111
+
112
+    /**
113
+     * 新增每日行李过检查堵统计
114
+     */
115
+    @PreAuthorize("@ss.hasPermi('blocked:daily:add')")
116
+    @Log(title = "每日行李过检查堵统计", businessType = BusinessType.INSERT)
117
+    @PostMapping
118
+    public AjaxResult add(@RequestBody BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
119
+    {
120
+        blockedLuggageStatisticsDaily.setCreateBy(getUsername());
121
+        return toAjax(blockedLuggageStatisticsDailyService.insertBlockedLuggageStatisticsDaily(blockedLuggageStatisticsDaily));
122
+    }
123
+
124
+    /**
125
+     * 新增或覆盖每日行李过检查堵统计
126
+     */
127
+    @PreAuthorize("@ss.hasPermi('blocked:daily:add')")
128
+    @Log(title = "每日行李过检查堵统计", businessType = BusinessType.INSERT)
129
+    @PostMapping("/addOrOverwrite")
130
+    public AjaxResult addOrOverwrite(@RequestBody BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
131
+    {
132
+        blockedLuggageStatisticsDaily.setCreateBy(getUsername());
133
+        blockedLuggageStatisticsDaily.setUpdateBy(getUsername());
134
+        return toAjax(blockedLuggageStatisticsDailyService.insertOrUpdate(blockedLuggageStatisticsDaily));
135
+    }
136
+
137
+    /**
138
+     * 修改每日行李过检查堵统计
139
+     */
140
+    @PreAuthorize("@ss.hasPermi('blocked:daily:edit')")
141
+    @Log(title = "每日行李过检查堵统计", businessType = BusinessType.UPDATE)
142
+    @PutMapping
143
+    public AjaxResult edit(@RequestBody BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
144
+    {
145
+        blockedLuggageStatisticsDaily.setUpdateBy(getUsername());
146
+        return toAjax(blockedLuggageStatisticsDailyService.updateBlockedLuggageStatisticsDaily(blockedLuggageStatisticsDaily));
147
+    }
148
+
149
+    /**
150
+     * 删除每日行李过检查堵统计
151
+     */
152
+    @PreAuthorize("@ss.hasPermi('blocked:daily:remove')")
153
+    @Log(title = "每日行李过检查堵统计", businessType = BusinessType.DELETE)
154
+    @DeleteMapping("/{ids}")
155
+    public AjaxResult remove(@PathVariable Long[] ids)
156
+    {
157
+        return toAjax(blockedLuggageStatisticsDailyService.deleteBlockedLuggageStatisticsDailyByIds(ids));
158
+    }
159
+}

+ 159 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/blocked/BlockedMissCheckStatisticsController.java

@@ -0,0 +1,159 @@
1
+package com.sundot.airport.web.controller.blocked;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+import org.springframework.security.access.prepost.PreAuthorize;
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;
15
+import org.springframework.web.multipart.MultipartFile;
16
+import com.sundot.airport.common.annotation.Log;
17
+import com.sundot.airport.common.core.controller.BaseController;
18
+import com.sundot.airport.common.core.domain.AjaxResult;
19
+import com.sundot.airport.common.enums.BusinessType;
20
+import com.sundot.airport.blocked.domain.BlockedMissCheckStatistics;
21
+import com.sundot.airport.blocked.service.IBlockedMissCheckStatisticsService;
22
+import com.sundot.airport.common.utils.poi.ExcelUtil;
23
+import com.sundot.airport.common.core.page.TableDataInfo;
24
+
25
+/**
26
+ * 漏检统计Controller
27
+ * 
28
+ * @author wangxx
29
+ * @date 2026-04-13
30
+ */
31
+@RestController
32
+@RequestMapping("/blocked/missReview")
33
+public class BlockedMissCheckStatisticsController extends BaseController
34
+{
35
+    @Autowired
36
+    private IBlockedMissCheckStatisticsService blockedMissCheckStatisticsService;
37
+
38
+    /**
39
+     * 查询漏检统计列表
40
+     */
41
+    @PreAuthorize("@ss.hasPermi('blocked:missReview:list')")
42
+    @GetMapping("/list")
43
+    public TableDataInfo list(BlockedMissCheckStatistics blockedMissCheckStatistics)
44
+    {
45
+        startPage();
46
+        List<BlockedMissCheckStatistics> list = blockedMissCheckStatisticsService.selectBlockedMissCheckStatisticsList(blockedMissCheckStatistics);
47
+        return getDataTable(list);
48
+    }
49
+
50
+    /**
51
+     * 导出漏检统计列表
52
+     */
53
+    @PreAuthorize("@ss.hasPermi('blocked:missReview:export')")
54
+    @Log(title = "漏检统计", businessType = BusinessType.EXPORT)
55
+    @PostMapping("/export")
56
+    public void export(HttpServletResponse response, BlockedMissCheckStatistics blockedMissCheckStatistics)
57
+    {
58
+        List<BlockedMissCheckStatistics> list = blockedMissCheckStatisticsService.selectBlockedMissCheckStatisticsList(blockedMissCheckStatistics);
59
+        ExcelUtil<BlockedMissCheckStatistics> util = new ExcelUtil<BlockedMissCheckStatistics>(BlockedMissCheckStatistics.class);
60
+        util.exportExcel(response, list, "漏检统计数据");
61
+    }
62
+
63
+    /**
64
+     * 导入漏检统计列表
65
+     */
66
+    @PreAuthorize("@ss.hasPermi('blocked:missReview:import')")
67
+    @Log(title = "漏检统计", businessType = BusinessType.IMPORT)
68
+    @PostMapping("/importData")
69
+    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
70
+    {
71
+        ExcelUtil<BlockedMissCheckStatistics> util = new ExcelUtil<BlockedMissCheckStatistics>(BlockedMissCheckStatistics.class);
72
+        List<BlockedMissCheckStatistics> list = util.importExcel(file.getInputStream());
73
+        String message = blockedMissCheckStatisticsService.importData(list, updateSupport);
74
+        return success(message);
75
+    }
76
+
77
+    /**
78
+     * 获取导入模板
79
+     */
80
+    @PostMapping("/importTemplate")
81
+    public void importTemplate(HttpServletResponse response)
82
+    {
83
+        ExcelUtil<BlockedMissCheckStatistics> util = new ExcelUtil<BlockedMissCheckStatistics>(BlockedMissCheckStatistics.class);
84
+        util.importTemplateExcel(response, "漏检统计数据");
85
+    }
86
+
87
+    /**
88
+     * 获取漏检统计详细信息
89
+     */
90
+    @PreAuthorize("@ss.hasPermi('blocked:missReview:query')")
91
+    @GetMapping(value = "/{id}")
92
+    public AjaxResult getInfo(@PathVariable("id") Long id)
93
+    {
94
+        return success(blockedMissCheckStatisticsService.selectBlockedMissCheckStatisticsById(id));
95
+    }
96
+
97
+    /**
98
+     * 检查数据是否重复
99
+     */
100
+    @PreAuthorize("@ss.hasPermi('blocked:missReview:add')")
101
+    @GetMapping("/checkDuplicate")
102
+    public AjaxResult checkDuplicate(BlockedMissCheckStatistics blockedMissCheckStatistics)
103
+    {
104
+        BlockedMissCheckStatistics duplicate = blockedMissCheckStatisticsService.checkDuplicate(blockedMissCheckStatistics);
105
+        if (duplicate != null)
106
+        {
107
+            return AjaxResult.warn("数据已存在(被回查人:" + duplicate.getReviewedUserName() + ",回查日期:" + duplicate.getReviewDate() + ",漏检时间:" + duplicate.getMissCheckTime() + "),是否覆盖?", duplicate);
108
+        }
109
+        return success();
110
+    }
111
+
112
+    /**
113
+     * 新增漏检统计
114
+     */
115
+    @PreAuthorize("@ss.hasPermi('blocked:missReview:add')")
116
+    @Log(title = "漏检统计", businessType = BusinessType.INSERT)
117
+    @PostMapping
118
+    public AjaxResult add(@RequestBody BlockedMissCheckStatistics blockedMissCheckStatistics)
119
+    {
120
+        blockedMissCheckStatistics.setCreateBy(getUsername());
121
+        return toAjax(blockedMissCheckStatisticsService.insertBlockedMissCheckStatistics(blockedMissCheckStatistics));
122
+    }
123
+
124
+    /**
125
+     * 新增或覆盖漏检统计
126
+     */
127
+    @PreAuthorize("@ss.hasPermi('blocked:missReview:add')")
128
+    @Log(title = "漏检统计", businessType = BusinessType.INSERT)
129
+    @PostMapping("/addOrOverwrite")
130
+    public AjaxResult addOrOverwrite(@RequestBody BlockedMissCheckStatistics blockedMissCheckStatistics)
131
+    {
132
+        blockedMissCheckStatistics.setCreateBy(getUsername());
133
+        blockedMissCheckStatistics.setUpdateBy(getUsername());
134
+        return toAjax(blockedMissCheckStatisticsService.insertOrUpdate(blockedMissCheckStatistics));
135
+    }
136
+
137
+    /**
138
+     * 修改漏检统计
139
+     */
140
+    @PreAuthorize("@ss.hasPermi('blocked:missReview:edit')")
141
+    @Log(title = "漏检统计", businessType = BusinessType.UPDATE)
142
+    @PutMapping
143
+    public AjaxResult edit(@RequestBody BlockedMissCheckStatistics blockedMissCheckStatistics)
144
+    {
145
+        blockedMissCheckStatistics.setUpdateBy(getUsername());
146
+        return toAjax(blockedMissCheckStatisticsService.updateBlockedMissCheckStatistics(blockedMissCheckStatistics));
147
+    }
148
+
149
+    /**
150
+     * 删除漏检统计
151
+     */
152
+    @PreAuthorize("@ss.hasPermi('blocked:missReview:remove')")
153
+    @Log(title = "漏检统计", businessType = BusinessType.DELETE)
154
+    @DeleteMapping("/{ids}")
155
+    public AjaxResult remove(@PathVariable Long[] ids)
156
+    {
157
+        return toAjax(blockedMissCheckStatisticsService.deleteBlockedMissCheckStatisticsByIds(ids));
158
+    }
159
+}

+ 39 - 0
airport-blocked/pom.xml

@@ -0,0 +1,39 @@
1
+<?xml version="1.0" encoding="UTF-8"?>
2
+<project xmlns="http://maven.apache.org/POM/4.0.0"
3
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5
+    <parent>
6
+        <groupId>com.sundot.airport</groupId>
7
+        <artifactId>airport</artifactId>
8
+        <version>3.9.0</version>
9
+    </parent>
10
+    <modelVersion>4.0.0</modelVersion>
11
+
12
+    <artifactId>airport-blocked</artifactId>
13
+
14
+    <description>
15
+        blocked行李查堵统计模块
16
+    </description>
17
+
18
+    <dependencies>
19
+
20
+        <!-- 通用工具-->
21
+        <dependency>
22
+            <groupId>com.sundot.airport</groupId>
23
+            <artifactId>airport-common</artifactId>
24
+        </dependency>
25
+
26
+        <!-- 系统模块 -->
27
+        <dependency>
28
+            <groupId>com.sundot.airport</groupId>
29
+            <artifactId>airport-system</artifactId>
30
+        </dependency>
31
+
32
+        <dependency>
33
+            <groupId>org.projectlombok</groupId>
34
+            <artifactId>lombok</artifactId>
35
+            <scope>provided</scope>
36
+        </dependency>
37
+
38
+    </dependencies>
39
+</project>

+ 284 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/domain/BlockedLuggagePieceDaily.java

@@ -0,0 +1,284 @@
1
+package com.sundot.airport.blocked.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+import com.fasterxml.jackson.annotation.JsonFormat;
6
+import org.apache.commons.lang3.builder.ToStringBuilder;
7
+import org.apache.commons.lang3.builder.ToStringStyle;
8
+import com.sundot.airport.common.annotation.Excel;
9
+import com.sundot.airport.common.core.domain.BaseEntity;
10
+
11
+/**
12
+ * 每日各时段查堵行李对象 blocked_luggage_piece_daily
13
+ * 
14
+ * @author wangxx
15
+ * @date 2026-04-13
16
+ */
17
+public class BlockedLuggagePieceDaily extends BaseEntity
18
+{
19
+    private static final long serialVersionUID = 1L;
20
+
21
+    /** 主键ID */
22
+    private Long id;
23
+
24
+    /** 统计日期 */
25
+    @Excel(name = "统计日期", width = 30, dateFormat = "yyyy-MM-dd")
26
+    @JsonFormat(pattern = "yyyy-MM-dd")
27
+    private Date statDate;
28
+
29
+    /** 当班大队ID */
30
+    private Long brigadeId;
31
+
32
+    /** 当班大队名称:安检一大队/安检二大队/安检三大队 */
33
+    @Excel(name = "当班大队名称")
34
+    private String brigadeName;
35
+
36
+    /** 时间段:08:00-10:00/10:00-12:00等 */
37
+    @Excel(name = "时间段")
38
+    private String timePeriod;
39
+
40
+    /** T1行检箱包数 */
41
+    @Excel(name = "T1行检箱包数")
42
+    private Integer t1WalkBagCount;
43
+
44
+    /** T1行检查堵数 */
45
+    @Excel(name = "T1行检查堵数")
46
+    private Integer t1WalkBlockedCount;
47
+
48
+    /** T2行检箱包数(国内+国际) */
49
+    @Excel(name = "T2行检箱包数")
50
+    private Integer t2WalkBagCount;
51
+
52
+    /** T2行检查堵数 */
53
+    @Excel(name = "T2行检查堵数")
54
+    private Integer t2WalkBlockedCount;
55
+
56
+    /** T1旅检箱包数 */
57
+    @Excel(name = "T1旅检箱包数")
58
+    private Integer t1TravelBagCount;
59
+
60
+    /** T1旅检查堵数 */
61
+    @Excel(name = "T1旅检查堵数")
62
+    private Integer t1TravelBlockedCount;
63
+
64
+    /** T2旅检箱包数(国内+国际+中转) */
65
+    @Excel(name = "T2旅检箱包数")
66
+    private Integer t2TravelBagCount;
67
+
68
+    /** T2旅检查堵数 */
69
+    @Excel(name = "T2旅检查堵数")
70
+    private Integer t2TravelBlockedCount;
71
+
72
+    /** 过检行李数(T1行检+T2行检+T1旅检+T2旅检) */
73
+    @Excel(name = "过检行李数")
74
+    private Integer totalLuggageCount;
75
+
76
+    /** 时段查堵件数(T1行检+T2行检+T1旅检+T2旅检查堵数) */
77
+    @Excel(name = "时段查堵件数")
78
+    private Integer totalBlockedCount;
79
+
80
+    /** 查堵万分率(时段查堵件数/过检行李数*10000) */
81
+    @Excel(name = "查堵万分率")
82
+    private BigDecimal blockedRate;
83
+
84
+    /** 删除标志(0代表存在 2代表删除) */
85
+    private String delFlag;
86
+
87
+    public void setId(Long id) 
88
+    {
89
+        this.id = id;
90
+    }
91
+
92
+    public Long getId() 
93
+    {
94
+        return id;
95
+    }
96
+
97
+    public void setStatDate(Date statDate) 
98
+    {
99
+        this.statDate = statDate;
100
+    }
101
+
102
+    public Date getStatDate() 
103
+    {
104
+        return statDate;
105
+    }
106
+
107
+    public void setBrigadeId(Long brigadeId) 
108
+    {
109
+        this.brigadeId = brigadeId;
110
+    }
111
+
112
+    public Long getBrigadeId() 
113
+    {
114
+        return brigadeId;
115
+    }
116
+
117
+    public void setBrigadeName(String brigadeName) 
118
+    {
119
+        this.brigadeName = brigadeName;
120
+    }
121
+
122
+    public String getBrigadeName() 
123
+    {
124
+        return brigadeName;
125
+    }
126
+
127
+    public void setTimePeriod(String timePeriod) 
128
+    {
129
+        this.timePeriod = timePeriod;
130
+    }
131
+
132
+    public String getTimePeriod() 
133
+    {
134
+        return timePeriod;
135
+    }
136
+
137
+    public void setT1WalkBagCount(Integer t1WalkBagCount) 
138
+    {
139
+        this.t1WalkBagCount = t1WalkBagCount;
140
+    }
141
+
142
+    public Integer getT1WalkBagCount() 
143
+    {
144
+        return t1WalkBagCount;
145
+    }
146
+
147
+    public void setT1WalkBlockedCount(Integer t1WalkBlockedCount) 
148
+    {
149
+        this.t1WalkBlockedCount = t1WalkBlockedCount;
150
+    }
151
+
152
+    public Integer getT1WalkBlockedCount() 
153
+    {
154
+        return t1WalkBlockedCount;
155
+    }
156
+
157
+    public void setT2WalkBagCount(Integer t2WalkBagCount) 
158
+    {
159
+        this.t2WalkBagCount = t2WalkBagCount;
160
+    }
161
+
162
+    public Integer getT2WalkBagCount() 
163
+    {
164
+        return t2WalkBagCount;
165
+    }
166
+
167
+    public void setT2WalkBlockedCount(Integer t2WalkBlockedCount) 
168
+    {
169
+        this.t2WalkBlockedCount = t2WalkBlockedCount;
170
+    }
171
+
172
+    public Integer getT2WalkBlockedCount() 
173
+    {
174
+        return t2WalkBlockedCount;
175
+    }
176
+
177
+    public void setT1TravelBagCount(Integer t1TravelBagCount) 
178
+    {
179
+        this.t1TravelBagCount = t1TravelBagCount;
180
+    }
181
+
182
+    public Integer getT1TravelBagCount() 
183
+    {
184
+        return t1TravelBagCount;
185
+    }
186
+
187
+    public void setT1TravelBlockedCount(Integer t1TravelBlockedCount) 
188
+    {
189
+        this.t1TravelBlockedCount = t1TravelBlockedCount;
190
+    }
191
+
192
+    public Integer getT1TravelBlockedCount() 
193
+    {
194
+        return t1TravelBlockedCount;
195
+    }
196
+
197
+    public void setT2TravelBagCount(Integer t2TravelBagCount) 
198
+    {
199
+        this.t2TravelBagCount = t2TravelBagCount;
200
+    }
201
+
202
+    public Integer getT2TravelBagCount() 
203
+    {
204
+        return t2TravelBagCount;
205
+    }
206
+
207
+    public void setT2TravelBlockedCount(Integer t2TravelBlockedCount) 
208
+    {
209
+        this.t2TravelBlockedCount = t2TravelBlockedCount;
210
+    }
211
+
212
+    public Integer getT2TravelBlockedCount() 
213
+    {
214
+        return t2TravelBlockedCount;
215
+    }
216
+
217
+    public void setTotalLuggageCount(Integer totalLuggageCount) 
218
+    {
219
+        this.totalLuggageCount = totalLuggageCount;
220
+    }
221
+
222
+    public Integer getTotalLuggageCount() 
223
+    {
224
+        return totalLuggageCount;
225
+    }
226
+
227
+    public void setTotalBlockedCount(Integer totalBlockedCount) 
228
+    {
229
+        this.totalBlockedCount = totalBlockedCount;
230
+    }
231
+
232
+    public Integer getTotalBlockedCount() 
233
+    {
234
+        return totalBlockedCount;
235
+    }
236
+
237
+    public void setBlockedRate(BigDecimal blockedRate) 
238
+    {
239
+        this.blockedRate = blockedRate;
240
+    }
241
+
242
+    public BigDecimal getBlockedRate() 
243
+    {
244
+        return blockedRate;
245
+    }
246
+
247
+    public void setDelFlag(String delFlag) 
248
+    {
249
+        this.delFlag = delFlag;
250
+    }
251
+
252
+    public String getDelFlag() 
253
+    {
254
+        return delFlag;
255
+    }
256
+
257
+    @Override
258
+    public String toString() {
259
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
260
+            .append("id", getId())
261
+            .append("statDate", getStatDate())
262
+            .append("brigadeId", getBrigadeId())
263
+            .append("brigadeName", getBrigadeName())
264
+            .append("timePeriod", getTimePeriod())
265
+            .append("t1WalkBagCount", getT1WalkBagCount())
266
+            .append("t1WalkBlockedCount", getT1WalkBlockedCount())
267
+            .append("t2WalkBagCount", getT2WalkBagCount())
268
+            .append("t2WalkBlockedCount", getT2WalkBlockedCount())
269
+            .append("t1TravelBagCount", getT1TravelBagCount())
270
+            .append("t1TravelBlockedCount", getT1TravelBlockedCount())
271
+            .append("t2TravelBagCount", getT2TravelBagCount())
272
+            .append("t2TravelBlockedCount", getT2TravelBlockedCount())
273
+            .append("totalLuggageCount", getTotalLuggageCount())
274
+            .append("totalBlockedCount", getTotalBlockedCount())
275
+            .append("blockedRate", getBlockedRate())
276
+            .append("delFlag", getDelFlag())
277
+            .append("createBy", getCreateBy())
278
+            .append("createTime", getCreateTime())
279
+            .append("updateBy", getUpdateBy())
280
+            .append("updateTime", getUpdateTime())
281
+            .append("remark", getRemark())
282
+            .toString();
283
+    }
284
+}

+ 568 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/domain/BlockedLuggageStatisticsDaily.java

@@ -0,0 +1,568 @@
1
+package com.sundot.airport.blocked.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+import com.fasterxml.jackson.annotation.JsonFormat;
6
+import org.apache.commons.lang3.builder.ToStringBuilder;
7
+import org.apache.commons.lang3.builder.ToStringStyle;
8
+import com.sundot.airport.common.annotation.Excel;
9
+import com.sundot.airport.common.core.domain.BaseEntity;
10
+
11
+/**
12
+ * 每日行李过检查堵统计对象 blocked_luggage_statistics_daily
13
+ * 
14
+ * @author wangxx
15
+ * @date 2026-04-13
16
+ */
17
+public class BlockedLuggageStatisticsDaily extends BaseEntity
18
+{
19
+    private static final long serialVersionUID = 1L;
20
+
21
+    /** 主键ID */
22
+    private Long id;
23
+
24
+    /** 统计日期 */
25
+    @Excel(name = "统计日期", width = 30, dateFormat = "yyyy-MM-dd")
26
+    @JsonFormat(pattern = "yyyy-MM-dd")
27
+    private Date statDate;
28
+
29
+    /** 班次类型:白班/夜班 */
30
+    @Excel(name = "班次类型")
31
+    private String shiftType;
32
+
33
+    /** 当班大队ID */
34
+    private Long brigadeId;
35
+
36
+    /** 当班大队名称:安检一大队/安检二大队/安检三大队 */
37
+    @Excel(name = "当班大队名称")
38
+    private String brigadeName;
39
+
40
+    /** T1旅检过检行李数 */
41
+    @Excel(name = "T1旅检过检行李数")
42
+    private Integer t1TravelLuggageCount;
43
+
44
+    /** T1行检过检行李数 */
45
+    @Excel(name = "T1行检过检行李数")
46
+    private Integer t1WalkLuggageCount;
47
+
48
+    /** T2旅检过检行李数 */
49
+    @Excel(name = "T2旅检过检行李数")
50
+    private Integer t2TravelLuggageCount;
51
+
52
+    /** T2行检过检行李数 */
53
+    @Excel(name = "T2行检过检行李数")
54
+    private Integer t2WalkLuggageCount;
55
+
56
+    /** T1旅检查堵件数 */
57
+    @Excel(name = "T1旅检查堵件数")
58
+    private Integer t1TravelBlockedCount;
59
+
60
+    /** T2旅检查堵件数 */
61
+    @Excel(name = "T2旅检查堵件数")
62
+    private Integer t2TravelBlockedCount;
63
+
64
+    /** T1行检查堵件数 */
65
+    @Excel(name = "T1行检查堵件数")
66
+    private Integer t1WalkBlockedCount;
67
+
68
+    /** T2行检查堵件数 */
69
+    @Excel(name = "T2行检查堵件数")
70
+    private Integer t2WalkBlockedCount;
71
+
72
+    /** T1-复查图像总数 */
73
+    @Excel(name = "T1-复查图像总数")
74
+    private Integer t1ReviewImageTotal;
75
+
76
+    /** T1-AI标记总数 */
77
+    @Excel(name = "T1-AI标记总数")
78
+    private Integer t1AiMarkTotal;
79
+
80
+    /** T1-AI误判总数 */
81
+    @Excel(name = "T1-AI误判总数")
82
+    private Integer t1AiErrorTotal;
83
+
84
+    /** T1-AI漏判总数 */
85
+    @Excel(name = "T1-AI漏判总数")
86
+    private Integer t1AiMissTotal;
87
+
88
+    /** T2-复查图像总数 */
89
+    @Excel(name = "T2-复查图像总数")
90
+    private Integer t2ReviewImageTotal;
91
+
92
+    /** T2-AI标记总数 */
93
+    @Excel(name = "T2-AI标记总数")
94
+    private Integer t2AiMarkTotal;
95
+
96
+    /** T2-AI误判总数 */
97
+    @Excel(name = "T2-AI误判总数")
98
+    private Integer t2AiErrorTotal;
99
+
100
+    /** T2-AI漏判总数 */
101
+    @Excel(name = "T2-AI漏判总数")
102
+    private Integer t2AiMissTotal;
103
+
104
+    /** 其他(VIP通道)数量 */
105
+    @Excel(name = "其他(VIP通道)数量")
106
+    private Integer otherVipCount;
107
+
108
+    /** T1旅检万分率(T1旅检查堵件数/T1旅检过检行李数*10000) */
109
+    @Excel(name = "T1旅检万分率")
110
+    private BigDecimal t1TravelBlockRate;
111
+
112
+    /** T2旅检万分率(T2旅检查堵件数/T2旅检过检行李数*10000) */
113
+    @Excel(name = "T2旅检万分率")
114
+    private BigDecimal t2TravelBlockRate;
115
+
116
+    /** T1行检万分率(T1行检查堵件数/T1行检过检行李数*10000) */
117
+    @Excel(name = "T1行检万分率")
118
+    private BigDecimal t1WalkBlockRate;
119
+
120
+    /** T2行检万分率(T2行检查堵件数/T2行检过检行李数*10000) */
121
+    @Excel(name = "T2行检万分率")
122
+    private BigDecimal t2WalkBlockRate;
123
+
124
+    /** 查堵合计件数万分率(查堵合计件数/过检行李合计*10000) */
125
+    @Excel(name = "查堵合计万分率")
126
+    private BigDecimal totalBlockRate;
127
+
128
+    /** 当日查堵万分率(当日查堵件数/当日过检行李数*10000) */
129
+    @Excel(name = "当日查堵万分率")
130
+    private BigDecimal dailyBlockRate;
131
+
132
+    /** 过检行李合计(T1旅检+T1行检+T2旅检+T2行检) */
133
+    @Excel(name = "过检行李合计")
134
+    private Integer totalLuggageCount;
135
+
136
+    /** 查堵合计件数(T1旅检+T2旅检+T1行检+T2行检) */
137
+    @Excel(name = "查堵合计件数")
138
+    private Integer totalBlockedCount;
139
+
140
+    /** 当日查堵件数 */
141
+    @Excel(name = "当日查堵件数")
142
+    private Integer dailyBlockedCount;
143
+
144
+    /** AI复查图像总数(T1复查图像总数+T2复查图像总数) */
145
+    @Excel(name = "AI复查图像总数")
146
+    private Integer aiReviewImageTotal;
147
+
148
+    /** AI标记图像总数(T1-AI标记总数+T2-AI标记总数) */
149
+    @Excel(name = "AI标记图像总数")
150
+    private Integer aiMarkTotal;
151
+
152
+    /** AI误判图像总数(T1-AI误判总数+T2-AI误判总数) */
153
+    @Excel(name = "AI误判图像总数")
154
+    private Integer aiErrorImageTotal;
155
+
156
+    /** AI漏判图像总数(T1-AI漏判总数+T2-AI漏判总数) */
157
+    @Excel(name = "AI漏判图像总数")
158
+    private Integer aiMissImageTotal;
159
+
160
+    /** 删除标志(0代表存在 2代表删除) */
161
+    private String delFlag;
162
+
163
+    public void setId(Long id) 
164
+    {
165
+        this.id = id;
166
+    }
167
+
168
+    public Long getId() 
169
+    {
170
+        return id;
171
+    }
172
+
173
+    public void setStatDate(Date statDate) 
174
+    {
175
+        this.statDate = statDate;
176
+    }
177
+
178
+    public Date getStatDate() 
179
+    {
180
+        return statDate;
181
+    }
182
+
183
+    public void setShiftType(String shiftType) 
184
+    {
185
+        this.shiftType = shiftType;
186
+    }
187
+
188
+    public String getShiftType() 
189
+    {
190
+        return shiftType;
191
+    }
192
+
193
+    public void setBrigadeId(Long brigadeId) 
194
+    {
195
+        this.brigadeId = brigadeId;
196
+    }
197
+
198
+    public Long getBrigadeId() 
199
+    {
200
+        return brigadeId;
201
+    }
202
+
203
+    public void setBrigadeName(String brigadeName) 
204
+    {
205
+        this.brigadeName = brigadeName;
206
+    }
207
+
208
+    public String getBrigadeName() 
209
+    {
210
+        return brigadeName;
211
+    }
212
+
213
+    public void setT1TravelLuggageCount(Integer t1TravelLuggageCount) 
214
+    {
215
+        this.t1TravelLuggageCount = t1TravelLuggageCount;
216
+    }
217
+
218
+    public Integer getT1TravelLuggageCount() 
219
+    {
220
+        return t1TravelLuggageCount;
221
+    }
222
+
223
+    public void setT1WalkLuggageCount(Integer t1WalkLuggageCount) 
224
+    {
225
+        this.t1WalkLuggageCount = t1WalkLuggageCount;
226
+    }
227
+
228
+    public Integer getT1WalkLuggageCount() 
229
+    {
230
+        return t1WalkLuggageCount;
231
+    }
232
+
233
+    public void setT2TravelLuggageCount(Integer t2TravelLuggageCount) 
234
+    {
235
+        this.t2TravelLuggageCount = t2TravelLuggageCount;
236
+    }
237
+
238
+    public Integer getT2TravelLuggageCount() 
239
+    {
240
+        return t2TravelLuggageCount;
241
+    }
242
+
243
+    public void setT2WalkLuggageCount(Integer t2WalkLuggageCount) 
244
+    {
245
+        this.t2WalkLuggageCount = t2WalkLuggageCount;
246
+    }
247
+
248
+    public Integer getT2WalkLuggageCount() 
249
+    {
250
+        return t2WalkLuggageCount;
251
+    }
252
+
253
+    public void setT1TravelBlockedCount(Integer t1TravelBlockedCount) 
254
+    {
255
+        this.t1TravelBlockedCount = t1TravelBlockedCount;
256
+    }
257
+
258
+    public Integer getT1TravelBlockedCount() 
259
+    {
260
+        return t1TravelBlockedCount;
261
+    }
262
+
263
+    public void setT2TravelBlockedCount(Integer t2TravelBlockedCount) 
264
+    {
265
+        this.t2TravelBlockedCount = t2TravelBlockedCount;
266
+    }
267
+
268
+    public Integer getT2TravelBlockedCount() 
269
+    {
270
+        return t2TravelBlockedCount;
271
+    }
272
+
273
+    public void setT1WalkBlockedCount(Integer t1WalkBlockedCount) 
274
+    {
275
+        this.t1WalkBlockedCount = t1WalkBlockedCount;
276
+    }
277
+
278
+    public Integer getT1WalkBlockedCount() 
279
+    {
280
+        return t1WalkBlockedCount;
281
+    }
282
+
283
+    public void setT2WalkBlockedCount(Integer t2WalkBlockedCount) 
284
+    {
285
+        this.t2WalkBlockedCount = t2WalkBlockedCount;
286
+    }
287
+
288
+    public Integer getT2WalkBlockedCount() 
289
+    {
290
+        return t2WalkBlockedCount;
291
+    }
292
+
293
+    public void setT1ReviewImageTotal(Integer t1ReviewImageTotal) 
294
+    {
295
+        this.t1ReviewImageTotal = t1ReviewImageTotal;
296
+    }
297
+
298
+    public Integer getT1ReviewImageTotal() 
299
+    {
300
+        return t1ReviewImageTotal;
301
+    }
302
+
303
+    public void setT1AiMarkTotal(Integer t1AiMarkTotal) 
304
+    {
305
+        this.t1AiMarkTotal = t1AiMarkTotal;
306
+    }
307
+
308
+    public Integer getT1AiMarkTotal() 
309
+    {
310
+        return t1AiMarkTotal;
311
+    }
312
+
313
+    public void setT1AiErrorTotal(Integer t1AiErrorTotal) 
314
+    {
315
+        this.t1AiErrorTotal = t1AiErrorTotal;
316
+    }
317
+
318
+    public Integer getT1AiErrorTotal() 
319
+    {
320
+        return t1AiErrorTotal;
321
+    }
322
+
323
+    public void setT1AiMissTotal(Integer t1AiMissTotal) 
324
+    {
325
+        this.t1AiMissTotal = t1AiMissTotal;
326
+    }
327
+
328
+    public Integer getT1AiMissTotal() 
329
+    {
330
+        return t1AiMissTotal;
331
+    }
332
+
333
+    public void setT2ReviewImageTotal(Integer t2ReviewImageTotal) 
334
+    {
335
+        this.t2ReviewImageTotal = t2ReviewImageTotal;
336
+    }
337
+
338
+    public Integer getT2ReviewImageTotal() 
339
+    {
340
+        return t2ReviewImageTotal;
341
+    }
342
+
343
+    public void setT2AiMarkTotal(Integer t2AiMarkTotal) 
344
+    {
345
+        this.t2AiMarkTotal = t2AiMarkTotal;
346
+    }
347
+
348
+    public Integer getT2AiMarkTotal() 
349
+    {
350
+        return t2AiMarkTotal;
351
+    }
352
+
353
+    public void setT2AiErrorTotal(Integer t2AiErrorTotal) 
354
+    {
355
+        this.t2AiErrorTotal = t2AiErrorTotal;
356
+    }
357
+
358
+    public Integer getT2AiErrorTotal() 
359
+    {
360
+        return t2AiErrorTotal;
361
+    }
362
+
363
+    public void setT2AiMissTotal(Integer t2AiMissTotal) 
364
+    {
365
+        this.t2AiMissTotal = t2AiMissTotal;
366
+    }
367
+
368
+    public Integer getT2AiMissTotal() 
369
+    {
370
+        return t2AiMissTotal;
371
+    }
372
+
373
+    public void setOtherVipCount(Integer otherVipCount) 
374
+    {
375
+        this.otherVipCount = otherVipCount;
376
+    }
377
+
378
+    public Integer getOtherVipCount() 
379
+    {
380
+        return otherVipCount;
381
+    }
382
+
383
+    public void setT1TravelBlockRate(BigDecimal t1TravelBlockRate) 
384
+    {
385
+        this.t1TravelBlockRate = t1TravelBlockRate;
386
+    }
387
+
388
+    public BigDecimal getT1TravelBlockRate() 
389
+    {
390
+        return t1TravelBlockRate;
391
+    }
392
+
393
+    public void setT2TravelBlockRate(BigDecimal t2TravelBlockRate) 
394
+    {
395
+        this.t2TravelBlockRate = t2TravelBlockRate;
396
+    }
397
+
398
+    public BigDecimal getT2TravelBlockRate() 
399
+    {
400
+        return t2TravelBlockRate;
401
+    }
402
+
403
+    public void setT1WalkBlockRate(BigDecimal t1WalkBlockRate) 
404
+    {
405
+        this.t1WalkBlockRate = t1WalkBlockRate;
406
+    }
407
+
408
+    public BigDecimal getT1WalkBlockRate() 
409
+    {
410
+        return t1WalkBlockRate;
411
+    }
412
+
413
+    public void setT2WalkBlockRate(BigDecimal t2WalkBlockRate) 
414
+    {
415
+        this.t2WalkBlockRate = t2WalkBlockRate;
416
+    }
417
+
418
+    public BigDecimal getT2WalkBlockRate() 
419
+    {
420
+        return t2WalkBlockRate;
421
+    }
422
+
423
+    public void setTotalBlockRate(BigDecimal totalBlockRate) 
424
+    {
425
+        this.totalBlockRate = totalBlockRate;
426
+    }
427
+
428
+    public BigDecimal getTotalBlockRate() 
429
+    {
430
+        return totalBlockRate;
431
+    }
432
+
433
+    public void setDailyBlockRate(BigDecimal dailyBlockRate) 
434
+    {
435
+        this.dailyBlockRate = dailyBlockRate;
436
+    }
437
+
438
+    public BigDecimal getDailyBlockRate() 
439
+    {
440
+        return dailyBlockRate;
441
+    }
442
+
443
+    public void setTotalLuggageCount(Integer totalLuggageCount) 
444
+    {
445
+        this.totalLuggageCount = totalLuggageCount;
446
+    }
447
+
448
+    public Integer getTotalLuggageCount() 
449
+    {
450
+        return totalLuggageCount;
451
+    }
452
+
453
+    public void setTotalBlockedCount(Integer totalBlockedCount) 
454
+    {
455
+        this.totalBlockedCount = totalBlockedCount;
456
+    }
457
+
458
+    public Integer getTotalBlockedCount() 
459
+    {
460
+        return totalBlockedCount;
461
+    }
462
+
463
+    public void setDailyBlockedCount(Integer dailyBlockedCount) 
464
+    {
465
+        this.dailyBlockedCount = dailyBlockedCount;
466
+    }
467
+
468
+    public Integer getDailyBlockedCount() 
469
+    {
470
+        return dailyBlockedCount;
471
+    }
472
+
473
+    public void setAiReviewImageTotal(Integer aiReviewImageTotal) 
474
+    {
475
+        this.aiReviewImageTotal = aiReviewImageTotal;
476
+    }
477
+
478
+    public Integer getAiReviewImageTotal() 
479
+    {
480
+        return aiReviewImageTotal;
481
+    }
482
+
483
+    public void setAiMarkTotal(Integer aiMarkTotal) 
484
+    {
485
+        this.aiMarkTotal = aiMarkTotal;
486
+    }
487
+
488
+    public Integer getAiMarkTotal() 
489
+    {
490
+        return aiMarkTotal;
491
+    }
492
+
493
+    public void setAiErrorImageTotal(Integer aiErrorImageTotal) 
494
+    {
495
+        this.aiErrorImageTotal = aiErrorImageTotal;
496
+    }
497
+
498
+    public Integer getAiErrorImageTotal() 
499
+    {
500
+        return aiErrorImageTotal;
501
+    }
502
+
503
+    public void setAiMissImageTotal(Integer aiMissImageTotal) 
504
+    {
505
+        this.aiMissImageTotal = aiMissImageTotal;
506
+    }
507
+
508
+    public Integer getAiMissImageTotal() 
509
+    {
510
+        return aiMissImageTotal;
511
+    }
512
+
513
+    public void setDelFlag(String delFlag) 
514
+    {
515
+        this.delFlag = delFlag;
516
+    }
517
+
518
+    public String getDelFlag() 
519
+    {
520
+        return delFlag;
521
+    }
522
+
523
+    @Override
524
+    public String toString() {
525
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
526
+            .append("id", getId())
527
+            .append("statDate", getStatDate())
528
+            .append("shiftType", getShiftType())
529
+            .append("brigadeId", getBrigadeId())
530
+            .append("brigadeName", getBrigadeName())
531
+            .append("t1TravelLuggageCount", getT1TravelLuggageCount())
532
+            .append("t1WalkLuggageCount", getT1WalkLuggageCount())
533
+            .append("t2TravelLuggageCount", getT2TravelLuggageCount())
534
+            .append("t2WalkLuggageCount", getT2WalkLuggageCount())
535
+            .append("t1TravelBlockedCount", getT1TravelBlockedCount())
536
+            .append("t2TravelBlockedCount", getT2TravelBlockedCount())
537
+            .append("t1WalkBlockedCount", getT1WalkBlockedCount())
538
+            .append("t2WalkBlockedCount", getT2WalkBlockedCount())
539
+            .append("t1ReviewImageTotal", getT1ReviewImageTotal())
540
+            .append("t1AiMarkTotal", getT1AiMarkTotal())
541
+            .append("t1AiErrorTotal", getT1AiErrorTotal())
542
+            .append("t1AiMissTotal", getT1AiMissTotal())
543
+            .append("t2ReviewImageTotal", getT2ReviewImageTotal())
544
+            .append("t2AiMarkTotal", getT2AiMarkTotal())
545
+            .append("t2AiErrorTotal", getT2AiErrorTotal())
546
+            .append("t2AiMissTotal", getT2AiMissTotal())
547
+            .append("otherVipCount", getOtherVipCount())
548
+            .append("t1TravelBlockRate", getT1TravelBlockRate())
549
+            .append("t2TravelBlockRate", getT2TravelBlockRate())
550
+            .append("t1WalkBlockRate", getT1WalkBlockRate())
551
+            .append("t2WalkBlockRate", getT2WalkBlockRate())
552
+            .append("totalBlockRate", getTotalBlockRate())
553
+            .append("dailyBlockRate", getDailyBlockRate())
554
+            .append("totalLuggageCount", getTotalLuggageCount())
555
+            .append("totalBlockedCount", getTotalBlockedCount())
556
+            .append("dailyBlockedCount", getDailyBlockedCount())
557
+            .append("aiReviewImageTotal", getAiReviewImageTotal())
558
+            .append("aiMarkTotal", getAiMarkTotal())
559
+            .append("aiErrorImageTotal", getAiErrorImageTotal())
560
+            .append("aiMissImageTotal", getAiMissImageTotal())
561
+            .append("createBy", getCreateBy())
562
+            .append("createTime", getCreateTime())
563
+            .append("updateBy", getUpdateBy())
564
+            .append("updateTime", getUpdateTime())
565
+            .append("remark", getRemark())
566
+            .toString();
567
+    }
568
+}

+ 531 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/domain/BlockedMissCheckStatistics.java

@@ -0,0 +1,531 @@
1
+package com.sundot.airport.blocked.domain;
2
+
3
+import java.util.Date;
4
+import com.fasterxml.jackson.annotation.JsonFormat;
5
+import org.apache.commons.lang3.builder.ToStringBuilder;
6
+import org.apache.commons.lang3.builder.ToStringStyle;
7
+import com.sundot.airport.common.annotation.Excel;
8
+import com.sundot.airport.common.core.domain.BaseEntity;
9
+
10
+/**
11
+ * 漏检统计对象 blocked_miss_check_statistics
12
+ * 
13
+ * @author wangxx
14
+ * @date 2026-04-13
15
+ */
16
+public class BlockedMissCheckStatistics extends BaseEntity
17
+{
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    /** 主键ID */
21
+    private Long id;
22
+
23
+    /** 大队ID */
24
+    private Long brigadeId;
25
+
26
+    /** 大队名称 */
27
+    @Excel(name = "大队名称")
28
+    private String brigadeName;
29
+
30
+    /** 航站楼ID */
31
+    private Long terminalId;
32
+
33
+    /** 航站楼名称 */
34
+    @Excel(name = "航站楼名称")
35
+    private String terminalName;
36
+
37
+    /** 区域ID */
38
+    private Long areaId;
39
+
40
+    /** 区域名称 */
41
+    @Excel(name = "区域名称")
42
+    private String areaName;
43
+
44
+    /** 上岗位置ID */
45
+    private Long channelId;
46
+
47
+    /** 上岗位置名称 */
48
+    @Excel(name = "上岗位置名称")
49
+    private String channelName;
50
+
51
+    /** 被回查人ID */
52
+    private Long reviewedUserId;
53
+
54
+    /** 被回查人姓名 */
55
+    @Excel(name = "被回查人姓名")
56
+    private String reviewedUserName;
57
+
58
+    /** 回查人ID */
59
+    private Long reviewUserId;
60
+
61
+    /** 回查人姓名 */
62
+    @Excel(name = "回查人姓名")
63
+    private String reviewUserName;
64
+
65
+    /** 分管主管ID */
66
+    private Long supervisorId;
67
+
68
+    /** 分管主管姓名 */
69
+    @Excel(name = "分管主管姓名")
70
+    private String supervisorName;
71
+
72
+    /** 代管主管ID */
73
+    private Long actingSupervisorId;
74
+
75
+    /** 代管主管姓名 */
76
+    @Excel(name = "代管主管姓名")
77
+    private String actingSupervisorName;
78
+
79
+    /** 分管班组长ID */
80
+    private Long teamLeaderId;
81
+
82
+    /** 分管班组长姓名 */
83
+    @Excel(name = "分管班组长姓名")
84
+    private String teamLeaderName;
85
+
86
+    /** 回查日期 */
87
+    @Excel(name = "回查日期", width = 30, dateFormat = "yyyy-MM-dd")
88
+    @JsonFormat(pattern = "yyyy-MM-dd")
89
+    private Date reviewDate;
90
+
91
+    /** 漏检时间 */
92
+    @Excel(name = "漏检时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm")
93
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
94
+    private Date missCheckTime;
95
+
96
+    /** 漏检时间段 */
97
+    @Excel(name = "漏检时间段")
98
+    private String missCheckTimePeriod;
99
+
100
+    /** 漏检物品 */
101
+    @Excel(name = "漏检物品")
102
+    private String missCheckItem;
103
+
104
+    /** 物品位置 */
105
+    @Excel(name = "物品位置")
106
+    private String itemLocation;
107
+
108
+    /** 简单/难 */
109
+    @Excel(name = "难度级别")
110
+    private String difficultyLevel;
111
+
112
+    /** 判别类型 */
113
+    @Excel(name = "判别类型")
114
+    private String discriminationType;
115
+
116
+    /** 是否追回(0-否,1-是) */
117
+    @Excel(name = "是否追回", readConverterExp = "0=否,1=是")
118
+    private Integer isRecovered;
119
+
120
+    /** 开机年限 */
121
+    @Excel(name = "开机年限")
122
+    private Integer machineOperatingYears;
123
+
124
+    /** 证书级别 */
125
+    @Excel(name = "证书级别")
126
+    private String certificateLevel;
127
+
128
+    /** 人员性别 */
129
+    @Excel(name = "人员性别")
130
+    private String gender;
131
+
132
+    /** 漏检原因分类 */
133
+    @Excel(name = "漏检原因分类")
134
+    private String missCheckReasonCategory;
135
+
136
+    /** 月考核 */
137
+    @Excel(name = "月考核")
138
+    private String monthlyAssessment;
139
+
140
+    /** 本月自测有无漏检(0-无,1-有) */
141
+    @Excel(name = "本月自测有无漏检", readConverterExp = "0=无,1=有")
142
+    private Integer selfTestHasMissCheck;
143
+
144
+    /** 删除标志(0代表存在 2代表删除) */
145
+    private String delFlag;
146
+
147
+    public void setId(Long id) 
148
+    {
149
+        this.id = id;
150
+    }
151
+
152
+    public Long getId() 
153
+    {
154
+        return id;
155
+    }
156
+
157
+    public void setBrigadeId(Long brigadeId) 
158
+    {
159
+        this.brigadeId = brigadeId;
160
+    }
161
+
162
+    public Long getBrigadeId() 
163
+    {
164
+        return brigadeId;
165
+    }
166
+
167
+    public void setBrigadeName(String brigadeName) 
168
+    {
169
+        this.brigadeName = brigadeName;
170
+    }
171
+
172
+    public String getBrigadeName() 
173
+    {
174
+        return brigadeName;
175
+    }
176
+
177
+    public void setTerminalId(Long terminalId) 
178
+    {
179
+        this.terminalId = terminalId;
180
+    }
181
+
182
+    public Long getTerminalId() 
183
+    {
184
+        return terminalId;
185
+    }
186
+
187
+    public void setTerminalName(String terminalName) 
188
+    {
189
+        this.terminalName = terminalName;
190
+    }
191
+
192
+    public String getTerminalName() 
193
+    {
194
+        return terminalName;
195
+    }
196
+
197
+    public void setAreaId(Long areaId) 
198
+    {
199
+        this.areaId = areaId;
200
+    }
201
+
202
+    public Long getAreaId() 
203
+    {
204
+        return areaId;
205
+    }
206
+
207
+    public void setAreaName(String areaName) 
208
+    {
209
+        this.areaName = areaName;
210
+    }
211
+
212
+    public String getAreaName() 
213
+    {
214
+        return areaName;
215
+    }
216
+
217
+    public void setChannelId(Long channelId) 
218
+    {
219
+        this.channelId = channelId;
220
+    }
221
+
222
+    public Long getChannelId() 
223
+    {
224
+        return channelId;
225
+    }
226
+
227
+    public void setChannelName(String channelName) 
228
+    {
229
+        this.channelName = channelName;
230
+    }
231
+
232
+    public String getChannelName() 
233
+    {
234
+        return channelName;
235
+    }
236
+
237
+    public void setReviewedUserId(Long reviewedUserId) 
238
+    {
239
+        this.reviewedUserId = reviewedUserId;
240
+    }
241
+
242
+    public Long getReviewedUserId() 
243
+    {
244
+        return reviewedUserId;
245
+    }
246
+
247
+    public void setReviewedUserName(String reviewedUserName) 
248
+    {
249
+        this.reviewedUserName = reviewedUserName;
250
+    }
251
+
252
+    public String getReviewedUserName() 
253
+    {
254
+        return reviewedUserName;
255
+    }
256
+
257
+    public void setReviewUserId(Long reviewUserId) 
258
+    {
259
+        this.reviewUserId = reviewUserId;
260
+    }
261
+
262
+    public Long getReviewUserId() 
263
+    {
264
+        return reviewUserId;
265
+    }
266
+
267
+    public void setReviewUserName(String reviewUserName) 
268
+    {
269
+        this.reviewUserName = reviewUserName;
270
+    }
271
+
272
+    public String getReviewUserName() 
273
+    {
274
+        return reviewUserName;
275
+    }
276
+
277
+    public void setSupervisorId(Long supervisorId) 
278
+    {
279
+        this.supervisorId = supervisorId;
280
+    }
281
+
282
+    public Long getSupervisorId() 
283
+    {
284
+        return supervisorId;
285
+    }
286
+
287
+    public void setSupervisorName(String supervisorName) 
288
+    {
289
+        this.supervisorName = supervisorName;
290
+    }
291
+
292
+    public String getSupervisorName() 
293
+    {
294
+        return supervisorName;
295
+    }
296
+
297
+    public void setActingSupervisorId(Long actingSupervisorId) 
298
+    {
299
+        this.actingSupervisorId = actingSupervisorId;
300
+    }
301
+
302
+    public Long getActingSupervisorId() 
303
+    {
304
+        return actingSupervisorId;
305
+    }
306
+
307
+    public void setActingSupervisorName(String actingSupervisorName) 
308
+    {
309
+        this.actingSupervisorName = actingSupervisorName;
310
+    }
311
+
312
+    public String getActingSupervisorName() 
313
+    {
314
+        return actingSupervisorName;
315
+    }
316
+
317
+    public void setTeamLeaderId(Long teamLeaderId) 
318
+    {
319
+        this.teamLeaderId = teamLeaderId;
320
+    }
321
+
322
+    public Long getTeamLeaderId() 
323
+    {
324
+        return teamLeaderId;
325
+    }
326
+
327
+    public void setTeamLeaderName(String teamLeaderName) 
328
+    {
329
+        this.teamLeaderName = teamLeaderName;
330
+    }
331
+
332
+    public String getTeamLeaderName() 
333
+    {
334
+        return teamLeaderName;
335
+    }
336
+
337
+    public void setReviewDate(Date reviewDate) 
338
+    {
339
+        this.reviewDate = reviewDate;
340
+    }
341
+
342
+    public Date getReviewDate() 
343
+    {
344
+        return reviewDate;
345
+    }
346
+
347
+    public void setMissCheckTime(Date missCheckTime) 
348
+    {
349
+        this.missCheckTime = missCheckTime;
350
+    }
351
+
352
+    public Date getMissCheckTime() 
353
+    {
354
+        return missCheckTime;
355
+    }
356
+
357
+    public void setMissCheckTimePeriod(String missCheckTimePeriod) 
358
+    {
359
+        this.missCheckTimePeriod = missCheckTimePeriod;
360
+    }
361
+
362
+    public String getMissCheckTimePeriod() 
363
+    {
364
+        return missCheckTimePeriod;
365
+    }
366
+
367
+    public void setMissCheckItem(String missCheckItem) 
368
+    {
369
+        this.missCheckItem = missCheckItem;
370
+    }
371
+
372
+    public String getMissCheckItem() 
373
+    {
374
+        return missCheckItem;
375
+    }
376
+
377
+    public void setItemLocation(String itemLocation) 
378
+    {
379
+        this.itemLocation = itemLocation;
380
+    }
381
+
382
+    public String getItemLocation() 
383
+    {
384
+        return itemLocation;
385
+    }
386
+
387
+    public void setDifficultyLevel(String difficultyLevel) 
388
+    {
389
+        this.difficultyLevel = difficultyLevel;
390
+    }
391
+
392
+    public String getDifficultyLevel() 
393
+    {
394
+        return difficultyLevel;
395
+    }
396
+
397
+    public void setDiscriminationType(String discriminationType) 
398
+    {
399
+        this.discriminationType = discriminationType;
400
+    }
401
+
402
+    public String getDiscriminationType() 
403
+    {
404
+        return discriminationType;
405
+    }
406
+
407
+    public void setIsRecovered(Integer isRecovered) 
408
+    {
409
+        this.isRecovered = isRecovered;
410
+    }
411
+
412
+    public Integer getIsRecovered() 
413
+    {
414
+        return isRecovered;
415
+    }
416
+
417
+    public void setMachineOperatingYears(Integer machineOperatingYears) 
418
+    {
419
+        this.machineOperatingYears = machineOperatingYears;
420
+    }
421
+
422
+    public Integer getMachineOperatingYears() 
423
+    {
424
+        return machineOperatingYears;
425
+    }
426
+
427
+    public void setCertificateLevel(String certificateLevel) 
428
+    {
429
+        this.certificateLevel = certificateLevel;
430
+    }
431
+
432
+    public String getCertificateLevel() 
433
+    {
434
+        return certificateLevel;
435
+    }
436
+
437
+    public void setGender(String gender) 
438
+    {
439
+        this.gender = gender;
440
+    }
441
+
442
+    public String getGender() 
443
+    {
444
+        return gender;
445
+    }
446
+
447
+    public void setMissCheckReasonCategory(String missCheckReasonCategory) 
448
+    {
449
+        this.missCheckReasonCategory = missCheckReasonCategory;
450
+    }
451
+
452
+    public String getMissCheckReasonCategory() 
453
+    {
454
+        return missCheckReasonCategory;
455
+    }
456
+
457
+    public void setMonthlyAssessment(String monthlyAssessment) 
458
+    {
459
+        this.monthlyAssessment = monthlyAssessment;
460
+    }
461
+
462
+    public String getMonthlyAssessment() 
463
+    {
464
+        return monthlyAssessment;
465
+    }
466
+
467
+    public void setSelfTestHasMissCheck(Integer selfTestHasMissCheck) 
468
+    {
469
+        this.selfTestHasMissCheck = selfTestHasMissCheck;
470
+    }
471
+
472
+    public Integer getSelfTestHasMissCheck() 
473
+    {
474
+        return selfTestHasMissCheck;
475
+    }
476
+
477
+    public void setDelFlag(String delFlag) 
478
+    {
479
+        this.delFlag = delFlag;
480
+    }
481
+
482
+    public String getDelFlag() 
483
+    {
484
+        return delFlag;
485
+    }
486
+
487
+    @Override
488
+    public String toString() {
489
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
490
+            .append("id", getId())
491
+            .append("brigadeId", getBrigadeId())
492
+            .append("brigadeName", getBrigadeName())
493
+            .append("terminalId", getTerminalId())
494
+            .append("terminalName", getTerminalName())
495
+            .append("areaId", getAreaId())
496
+            .append("areaName", getAreaName())
497
+            .append("channelId", getChannelId())
498
+            .append("channelName", getChannelName())
499
+            .append("reviewedUserId", getReviewedUserId())
500
+            .append("reviewedUserName", getReviewedUserName())
501
+            .append("reviewUserId", getReviewUserId())
502
+            .append("reviewUserName", getReviewUserName())
503
+            .append("supervisorId", getSupervisorId())
504
+            .append("supervisorName", getSupervisorName())
505
+            .append("actingSupervisorId", getActingSupervisorId())
506
+            .append("actingSupervisorName", getActingSupervisorName())
507
+            .append("teamLeaderId", getTeamLeaderId())
508
+            .append("teamLeaderName", getTeamLeaderName())
509
+            .append("reviewDate", getReviewDate())
510
+            .append("missCheckTime", getMissCheckTime())
511
+            .append("missCheckTimePeriod", getMissCheckTimePeriod())
512
+            .append("missCheckItem", getMissCheckItem())
513
+            .append("itemLocation", getItemLocation())
514
+            .append("difficultyLevel", getDifficultyLevel())
515
+            .append("discriminationType", getDiscriminationType())
516
+            .append("isRecovered", getIsRecovered())
517
+            .append("machineOperatingYears", getMachineOperatingYears())
518
+            .append("certificateLevel", getCertificateLevel())
519
+            .append("gender", getGender())
520
+            .append("missCheckReasonCategory", getMissCheckReasonCategory())
521
+            .append("monthlyAssessment", getMonthlyAssessment())
522
+            .append("selfTestHasMissCheck", getSelfTestHasMissCheck())
523
+            .append("delFlag", getDelFlag())
524
+            .append("createBy", getCreateBy())
525
+            .append("createTime", getCreateTime())
526
+            .append("updateBy", getUpdateBy())
527
+            .append("updateTime", getUpdateTime())
528
+            .append("remark", getRemark())
529
+            .toString();
530
+    }
531
+}

+ 61 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/mapper/BlockedLuggagePieceDailyMapper.java

@@ -0,0 +1,61 @@
1
+package com.sundot.airport.blocked.mapper;
2
+
3
+import java.util.List;
4
+import com.sundot.airport.blocked.domain.BlockedLuggagePieceDaily;
5
+
6
+/**
7
+ * 每日各时段查堵行李Mapper接口
8
+ * 
9
+ * @author wangxx
10
+ * @date 2026-04-13
11
+ */
12
+public interface BlockedLuggagePieceDailyMapper 
13
+{
14
+    /**
15
+     * 查询每日行李过检查堵件数统计
16
+     * 
17
+     * @param id 每日行李过检查堵件数统计主键
18
+     * @return 每日行李过检查堵件数统计
19
+     */
20
+    public BlockedLuggagePieceDaily selectBlockedLuggagePieceDailyById(Long id);
21
+
22
+    /**
23
+     * 查询每日行李过检查堵件数统计列表
24
+     * 
25
+     * @param blockedLuggagePieceDaily 每日行李过检查堵件数统计
26
+     * @return 每日行李过检查堵件数统计集合
27
+     */
28
+    public List<BlockedLuggagePieceDaily> selectBlockedLuggagePieceDailyList(BlockedLuggagePieceDaily blockedLuggagePieceDaily);
29
+
30
+    /**
31
+     * 新增每日行李过检查堵件数统计
32
+     * 
33
+     * @param blockedLuggagePieceDaily 每日行李过检查堵件数统计
34
+     * @return 结果
35
+     */
36
+    public int insertBlockedLuggagePieceDaily(BlockedLuggagePieceDaily blockedLuggagePieceDaily);
37
+
38
+    /**
39
+     * 修改每日行李过检查堵件数统计
40
+     * 
41
+     * @param blockedLuggagePieceDaily 每日行李过检查堵件数统计
42
+     * @return 结果
43
+     */
44
+    public int updateBlockedLuggagePieceDaily(BlockedLuggagePieceDaily blockedLuggagePieceDaily);
45
+
46
+    /**
47
+     * 删除每日行李过检查堵件数统计
48
+     * 
49
+     * @param id 每日行李过检查堵件数统计主键
50
+     * @return 结果
51
+     */
52
+    public int deleteBlockedLuggagePieceDailyById(Long id);
53
+
54
+    /**
55
+     * 批量删除每日行李过检查堵件数统计
56
+     * 
57
+     * @param ids 需要删除的数据主键集合
58
+     * @return 结果
59
+     */
60
+    public int deleteBlockedLuggagePieceDailyByIds(Long[] ids);
61
+}

+ 61 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/mapper/BlockedLuggageStatisticsDailyMapper.java

@@ -0,0 +1,61 @@
1
+package com.sundot.airport.blocked.mapper;
2
+
3
+import java.util.List;
4
+import com.sundot.airport.blocked.domain.BlockedLuggageStatisticsDaily;
5
+
6
+/**
7
+ * 每日行李过检查堵统计Mapper接口
8
+ * 
9
+ * @author wangxx
10
+ * @date 2026-04-13
11
+ */
12
+public interface BlockedLuggageStatisticsDailyMapper 
13
+{
14
+    /**
15
+     * 查询每日行李过检查堵统计
16
+     * 
17
+     * @param id 每日行李过检查堵统计主键
18
+     * @return 每日行李过检查堵统计
19
+     */
20
+    public BlockedLuggageStatisticsDaily selectBlockedLuggageStatisticsDailyById(Long id);
21
+
22
+    /**
23
+     * 查询每日行李过检查堵统计列表
24
+     * 
25
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
26
+     * @return 每日行李过检查堵统计集合
27
+     */
28
+    public List<BlockedLuggageStatisticsDaily> selectBlockedLuggageStatisticsDailyList(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily);
29
+
30
+    /**
31
+     * 新增每日行李过检查堵统计
32
+     * 
33
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
34
+     * @return 结果
35
+     */
36
+    public int insertBlockedLuggageStatisticsDaily(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily);
37
+
38
+    /**
39
+     * 修改每日行李过检查堵统计
40
+     * 
41
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
42
+     * @return 结果
43
+     */
44
+    public int updateBlockedLuggageStatisticsDaily(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily);
45
+
46
+    /**
47
+     * 删除每日行李过检查堵统计
48
+     * 
49
+     * @param id 每日行李过检查堵统计主键
50
+     * @return 结果
51
+     */
52
+    public int deleteBlockedLuggageStatisticsDailyById(Long id);
53
+
54
+    /**
55
+     * 批量删除每日行李过检查堵统计
56
+     * 
57
+     * @param ids 需要删除的数据主键集合
58
+     * @return 结果
59
+     */
60
+    public int deleteBlockedLuggageStatisticsDailyByIds(Long[] ids);
61
+}

+ 61 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/mapper/BlockedMissCheckStatisticsMapper.java

@@ -0,0 +1,61 @@
1
+package com.sundot.airport.blocked.mapper;
2
+
3
+import java.util.List;
4
+import com.sundot.airport.blocked.domain.BlockedMissCheckStatistics;
5
+
6
+/**
7
+ * 漏检统计Mapper接口
8
+ * 
9
+ * @author wangxx
10
+ * @date 2026-04-13
11
+ */
12
+public interface BlockedMissCheckStatisticsMapper 
13
+{
14
+    /**
15
+     * 查询漏检统计
16
+     * 
17
+     * @param id 漏检统计主键
18
+     * @return 漏检统计
19
+     */
20
+    public BlockedMissCheckStatistics selectBlockedMissCheckStatisticsById(Long id);
21
+
22
+    /**
23
+     * 查询漏检统计列表
24
+     * 
25
+     * @param blockedMissCheckStatistics 漏检统计
26
+     * @return 漏检统计集合
27
+     */
28
+    public List<BlockedMissCheckStatistics> selectBlockedMissCheckStatisticsList(BlockedMissCheckStatistics blockedMissCheckStatistics);
29
+
30
+    /**
31
+     * 新增漏检统计
32
+     * 
33
+     * @param blockedMissCheckStatistics 漏检统计
34
+     * @return 结果
35
+     */
36
+    public int insertBlockedMissCheckStatistics(BlockedMissCheckStatistics blockedMissCheckStatistics);
37
+
38
+    /**
39
+     * 修改漏检统计
40
+     * 
41
+     * @param blockedMissCheckStatistics 漏检统计
42
+     * @return 结果
43
+     */
44
+    public int updateBlockedMissCheckStatistics(BlockedMissCheckStatistics blockedMissCheckStatistics);
45
+
46
+    /**
47
+     * 删除漏检统计
48
+     * 
49
+     * @param id 漏检统计主键
50
+     * @return 结果
51
+     */
52
+    public int deleteBlockedMissCheckStatisticsById(Long id);
53
+
54
+    /**
55
+     * 批量删除漏检统计
56
+     * 
57
+     * @param ids 需要删除的数据主键集合
58
+     * @return 结果
59
+     */
60
+    public int deleteBlockedMissCheckStatisticsByIds(Long[] ids);
61
+}

+ 86 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/service/IBlockedLuggagePieceDailyService.java

@@ -0,0 +1,86 @@
1
+package com.sundot.airport.blocked.service;
2
+
3
+import java.util.List;
4
+import com.sundot.airport.blocked.domain.BlockedLuggagePieceDaily;
5
+
6
+/**
7
+ * 每日各时段查堵行李Service接口
8
+ * 
9
+ * @author wangxx
10
+ * @date 2026-04-13
11
+ */
12
+public interface IBlockedLuggagePieceDailyService 
13
+{
14
+    /**
15
+     * 查询每日各时段查堵行李
16
+     * 
17
+     * @param id 每日各时段查堵行李主键
18
+     * @return 每日各时段查堵行李
19
+     */
20
+    public BlockedLuggagePieceDaily selectBlockedLuggagePieceDailyById(Long id);
21
+
22
+    /**
23
+     * 查询每日各时段查堵行李列表
24
+     * 
25
+     * @param blockedLuggagePieceDaily 每日各时段查堵行李
26
+     * @return 每日各时段查堵行李集合
27
+     */
28
+    public List<BlockedLuggagePieceDaily> selectBlockedLuggagePieceDailyList(BlockedLuggagePieceDaily blockedLuggagePieceDaily);
29
+
30
+    /**
31
+     * 新增每日各时段查堵行李
32
+     * 
33
+     * @param blockedLuggagePieceDaily 每日各时段查堵行李
34
+     * @return 结果
35
+     */
36
+    public int insertBlockedLuggagePieceDaily(BlockedLuggagePieceDaily blockedLuggagePieceDaily);
37
+
38
+    /**
39
+     * 修改每日各时段查堵行李
40
+     * 
41
+     * @param blockedLuggagePieceDaily 每日各时段查堵行李
42
+     * @return 结果
43
+     */
44
+    public int updateBlockedLuggagePieceDaily(BlockedLuggagePieceDaily blockedLuggagePieceDaily);
45
+
46
+    /**
47
+     * 批量删除每日各时段查堵行李
48
+     * 
49
+     * @param ids 需要删除的每日各时段查堵行李主键集合
50
+     * @return 结果
51
+     */
52
+    public int deleteBlockedLuggagePieceDailyByIds(Long[] ids);
53
+
54
+    /**
55
+     * 删除每日各时段查堵行李信息
56
+     * 
57
+     * @param id 每日各时段查堵行李主键
58
+     * @return 结果
59
+     */
60
+    public int deleteBlockedLuggagePieceDailyById(Long id);
61
+
62
+    /**
63
+     * 导入每日各时段查堵行李数据
64
+     * 
65
+     * @param list 数据列表
66
+     * @param updateSupport 是否更新支持
67
+     * @return 导入结果信息
68
+     */
69
+    public String importData(List<BlockedLuggagePieceDaily> list, boolean updateSupport);
70
+
71
+    /**
72
+     * 检查数据是否重复
73
+     * 
74
+     * @param blockedLuggagePieceDaily 统计数据
75
+     * @return 重复的数据,如果没有重复返回null
76
+     */
77
+    public BlockedLuggagePieceDaily checkDuplicate(BlockedLuggagePieceDaily blockedLuggagePieceDaily);
78
+
79
+    /**
80
+     * 新增或更新每日各时段查堵行李(如果数据重复则覆盖更新)
81
+     * 
82
+     * @param blockedLuggagePieceDaily 每日各时段查堵行李
83
+     * @return 结果
84
+     */
85
+    public int insertOrUpdate(BlockedLuggagePieceDaily blockedLuggagePieceDaily);
86
+}

+ 86 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/service/IBlockedLuggageStatisticsDailyService.java

@@ -0,0 +1,86 @@
1
+package com.sundot.airport.blocked.service;
2
+
3
+import java.util.List;
4
+import com.sundot.airport.blocked.domain.BlockedLuggageStatisticsDaily;
5
+
6
+/**
7
+ * 每日行李过检查堵统计Service接口
8
+ * 
9
+ * @author wangxx
10
+ * @date 2026-04-13
11
+ */
12
+public interface IBlockedLuggageStatisticsDailyService 
13
+{
14
+    /**
15
+     * 查询每日行李过检查堵统计
16
+     * 
17
+     * @param id 每日行李过检查堵统计主键
18
+     * @return 每日行李过检查堵统计
19
+     */
20
+    public BlockedLuggageStatisticsDaily selectBlockedLuggageStatisticsDailyById(Long id);
21
+
22
+    /**
23
+     * 查询每日行李过检查堵统计列表
24
+     * 
25
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
26
+     * @return 每日行李过检查堵统计集合
27
+     */
28
+    public List<BlockedLuggageStatisticsDaily> selectBlockedLuggageStatisticsDailyList(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily);
29
+
30
+    /**
31
+     * 新增每日行李过检查堵统计
32
+     * 
33
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
34
+     * @return 结果
35
+     */
36
+    public int insertBlockedLuggageStatisticsDaily(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily);
37
+
38
+    /**
39
+     * 修改每日行李过检查堵统计
40
+     * 
41
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
42
+     * @return 结果
43
+     */
44
+    public int updateBlockedLuggageStatisticsDaily(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily);
45
+
46
+    /**
47
+     * 批量删除每日行李过检查堵统计
48
+     * 
49
+     * @param ids 需要删除的每日行李过检查堵统计主键集合
50
+     * @return 结果
51
+     */
52
+    public int deleteBlockedLuggageStatisticsDailyByIds(Long[] ids);
53
+
54
+    /**
55
+     * 删除每日行李过检查堵统计信息
56
+     * 
57
+     * @param id 每日行李过检查堵统计主键
58
+     * @return 结果
59
+     */
60
+    public int deleteBlockedLuggageStatisticsDailyById(Long id);
61
+
62
+    /**
63
+     * 导入每日行李过检查堵统计数据
64
+     * 
65
+     * @param list 数据列表
66
+     * @param updateSupport 是否更新支持
67
+     * @return 导入结果信息
68
+     */
69
+    public String importData(List<BlockedLuggageStatisticsDaily> list, boolean updateSupport);
70
+
71
+    /**
72
+     * 检查数据是否重复
73
+     * 
74
+     * @param blockedLuggageStatisticsDaily 统计数据
75
+     * @return 重复的数据,如果没有重复返回null
76
+     */
77
+    public BlockedLuggageStatisticsDaily checkDuplicate(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily);
78
+
79
+    /**
80
+     * 新增或更新每日行李过检查堵统计(如果数据重复则覆盖更新)
81
+     * 
82
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
83
+     * @return 结果
84
+     */
85
+    public int insertOrUpdate(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily);
86
+}

+ 86 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/service/IBlockedMissCheckStatisticsService.java

@@ -0,0 +1,86 @@
1
+package com.sundot.airport.blocked.service;
2
+
3
+import java.util.List;
4
+import com.sundot.airport.blocked.domain.BlockedMissCheckStatistics;
5
+
6
+/**
7
+ * 漏检统计Service接口
8
+ * 
9
+ * @author wangxx
10
+ * @date 2026-04-13
11
+ */
12
+public interface IBlockedMissCheckStatisticsService 
13
+{
14
+    /**
15
+     * 查询漏检统计
16
+     * 
17
+     * @param id 漏检统计主键
18
+     * @return 漏检统计
19
+     */
20
+    public BlockedMissCheckStatistics selectBlockedMissCheckStatisticsById(Long id);
21
+
22
+    /**
23
+     * 查询漏检统计列表
24
+     * 
25
+     * @param blockedMissCheckStatistics 漏检统计
26
+     * @return 漏检统计集合
27
+     */
28
+    public List<BlockedMissCheckStatistics> selectBlockedMissCheckStatisticsList(BlockedMissCheckStatistics blockedMissCheckStatistics);
29
+
30
+    /**
31
+     * 新增漏检统计
32
+     * 
33
+     * @param blockedMissCheckStatistics 漏检统计
34
+     * @return 结果
35
+     */
36
+    public int insertBlockedMissCheckStatistics(BlockedMissCheckStatistics blockedMissCheckStatistics);
37
+
38
+    /**
39
+     * 修改漏检统计
40
+     * 
41
+     * @param blockedMissCheckStatistics 漏检统计
42
+     * @return 结果
43
+     */
44
+    public int updateBlockedMissCheckStatistics(BlockedMissCheckStatistics blockedMissCheckStatistics);
45
+
46
+    /**
47
+     * 批量删除漏检统计
48
+     * 
49
+     * @param ids 需要删除的漏检统计主键集合
50
+     * @return 结果
51
+     */
52
+    public int deleteBlockedMissCheckStatisticsByIds(Long[] ids);
53
+
54
+    /**
55
+     * 删除漏检统计信息
56
+     * 
57
+     * @param id 漏检统计主键
58
+     * @return 结果
59
+     */
60
+    public int deleteBlockedMissCheckStatisticsById(Long id);
61
+
62
+    /**
63
+     * 导入漏检统计数据
64
+     * 
65
+     * @param list 数据列表
66
+     * @param updateSupport 是否更新支持
67
+     * @return 导入结果信息
68
+     */
69
+    public String importData(List<BlockedMissCheckStatistics> list, boolean updateSupport);
70
+
71
+    /**
72
+     * 检查数据是否重复(被回查人+回查日期+漏检时间)
73
+     * 
74
+     * @param blockedMissCheckStatistics 漏检统计数据
75
+     * @return 重复的数据,如果没有重复返回null
76
+     */
77
+    public BlockedMissCheckStatistics checkDuplicate(BlockedMissCheckStatistics blockedMissCheckStatistics);
78
+
79
+    /**
80
+     * 新增或更新漏检统计(如果数据重复则覆盖更新)
81
+     * 
82
+     * @param blockedMissCheckStatistics 漏检统计
83
+     * @return 结果
84
+     */
85
+    public int insertOrUpdate(BlockedMissCheckStatistics blockedMissCheckStatistics);
86
+}

+ 363 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/service/impl/BlockedLuggagePieceDailyServiceImpl.java

@@ -0,0 +1,363 @@
1
+package com.sundot.airport.blocked.service.impl;
2
+
3
+import java.math.BigDecimal;
4
+import java.math.RoundingMode;
5
+import java.util.Date;
6
+import java.util.List;
7
+import cn.hutool.core.collection.CollUtil;
8
+import cn.hutool.core.util.ObjUtil;
9
+import cn.hutool.core.util.StrUtil;
10
+import org.springframework.beans.factory.annotation.Autowired;
11
+import org.springframework.stereotype.Service;
12
+import org.springframework.transaction.annotation.Transactional;
13
+import com.sundot.airport.common.exception.ServiceException;
14
+import com.sundot.airport.common.utils.DateUtils;
15
+import com.sundot.airport.blocked.mapper.BlockedLuggagePieceDailyMapper;
16
+import com.sundot.airport.blocked.domain.BlockedLuggagePieceDaily;
17
+import com.sundot.airport.blocked.service.IBlockedLuggagePieceDailyService;
18
+import com.sundot.airport.common.core.domain.entity.SysDept;
19
+import com.sundot.airport.system.service.ISysDeptService;
20
+
21
+/**
22
+ * 每日各时段查堵行李Service业务层处理
23
+ * 
24
+ * @author wangxx
25
+ * @date 2026-04-13
26
+ */
27
+@Service
28
+public class BlockedLuggagePieceDailyServiceImpl implements IBlockedLuggagePieceDailyService 
29
+{
30
+    @Autowired
31
+    private BlockedLuggagePieceDailyMapper blockedLuggagePieceDailyMapper;
32
+
33
+    @Autowired
34
+    private ISysDeptService sysDeptService;
35
+
36
+    /**
37
+     * 查询每日各时段查堵行李
38
+     * 
39
+     * @param id 每日各时段查堵行李主键
40
+     * @return 每日各时段查堵行李
41
+     */
42
+    @Override
43
+    public BlockedLuggagePieceDaily selectBlockedLuggagePieceDailyById(Long id)
44
+    {
45
+        return blockedLuggagePieceDailyMapper.selectBlockedLuggagePieceDailyById(id);
46
+    }
47
+
48
+    /**
49
+     * 查询每日各时段查堵行李列表
50
+     * 
51
+     * @param blockedLuggagePieceDaily 每日各时段查堵行李
52
+     * @return 每日各时段查堵行李
53
+     */
54
+    @Override
55
+    public List<BlockedLuggagePieceDaily> selectBlockedLuggagePieceDailyList(BlockedLuggagePieceDaily blockedLuggagePieceDaily)
56
+    {
57
+        return blockedLuggagePieceDailyMapper.selectBlockedLuggagePieceDailyList(blockedLuggagePieceDaily);
58
+    }
59
+
60
+    /**
61
+     * 新增每日各时段查堵行李
62
+     * 
63
+     * @param blockedLuggagePieceDaily 每日各时段查堵行李
64
+     * @return 结果
65
+     */
66
+    @Override
67
+    @Transactional
68
+    public int insertBlockedLuggagePieceDaily(BlockedLuggagePieceDaily blockedLuggagePieceDaily)
69
+    {
70
+        // 根据大队名称填充ID
71
+        fillBrigadeIdByName(blockedLuggagePieceDaily);
72
+        calculateAndSetFields(blockedLuggagePieceDaily);
73
+        return blockedLuggagePieceDailyMapper.insertBlockedLuggagePieceDaily(blockedLuggagePieceDaily);
74
+    }
75
+
76
+    /**
77
+     * 修改每日各时段查堵行李
78
+     * 
79
+     * @param blockedLuggagePieceDaily 每日各时段查堵行李
80
+     * @return 结果
81
+     */
82
+    @Override
83
+    @Transactional
84
+    public int updateBlockedLuggagePieceDaily(BlockedLuggagePieceDaily blockedLuggagePieceDaily)
85
+    {
86
+        // 根据大队名称填充ID
87
+        fillBrigadeIdByName(blockedLuggagePieceDaily);
88
+        calculateAndSetFields(blockedLuggagePieceDaily);
89
+        return blockedLuggagePieceDailyMapper.updateBlockedLuggagePieceDaily(blockedLuggagePieceDaily);
90
+    }
91
+
92
+    /**
93
+     * 批量删除每日各时段查堵行李
94
+     * 
95
+     * @param ids 需要删除的每日各时段查堵行李主键
96
+     * @return 结果
97
+     */
98
+    @Override
99
+    public int deleteBlockedLuggagePieceDailyByIds(Long[] ids)
100
+    {
101
+        return blockedLuggagePieceDailyMapper.deleteBlockedLuggagePieceDailyByIds(ids);
102
+    }
103
+
104
+    /**
105
+     * 删除每日各时段查堵行李信息
106
+     * 
107
+     * @param id 每日各时段查堵行李主键
108
+     * @return 结果
109
+     */
110
+    @Override
111
+    public int deleteBlockedLuggagePieceDailyById(Long id)
112
+    {
113
+        return blockedLuggagePieceDailyMapper.deleteBlockedLuggagePieceDailyById(id);
114
+    }
115
+
116
+    /**
117
+     * 导入每日各时段查堵行李数据
118
+     * 
119
+     * @param list 数据列表
120
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
121
+     * @return 结果
122
+     */
123
+    @Transactional(rollbackFor = Exception.class)
124
+    @Override
125
+    public String importData(List<BlockedLuggagePieceDaily> list, boolean isUpdateSupport)
126
+    {
127
+        if (CollUtil.isEmpty(list))
128
+        {
129
+            throw new ServiceException("导入每日各时段查堵行李数据不能为空!");
130
+        }
131
+
132
+        int successNum = 0;
133
+        int failureNum = 0;
134
+        StringBuilder successMsg = new StringBuilder();
135
+        StringBuilder failureMsg = new StringBuilder();
136
+        
137
+        for (BlockedLuggagePieceDaily data : list)
138
+        {
139
+            try
140
+            {
141
+                // 根据大队名称填充ID
142
+                fillBrigadeIdByName(data);
143
+                
144
+                // 数据校验
145
+                if (ObjUtil.isNull(data.getStatDate()))
146
+                {
147
+                    failureNum++;
148
+                    failureMsg.append("<br/>" + failureNum + "、统计日期不能为空");
149
+                    continue;
150
+                }
151
+                if (ObjUtil.isNull(data.getBrigadeId()))
152
+                {
153
+                    failureNum++;
154
+                    failureMsg.append("<br/>" + failureNum + "、大队ID不能为空");
155
+                    continue;
156
+                }
157
+                if (StrUtil.isBlank(data.getTimePeriod()))
158
+                {
159
+                    failureNum++;
160
+                    failureMsg.append("<br/>" + failureNum + "、时间段不能为空");
161
+                    continue;
162
+                }
163
+                
164
+                // 查询是否已存在(根据日期+大队ID+时间段唯一)
165
+                BlockedLuggagePieceDaily queryParam = new BlockedLuggagePieceDaily();
166
+                queryParam.setStatDate(data.getStatDate());
167
+                queryParam.setBrigadeId(data.getBrigadeId());
168
+                queryParam.setTimePeriod(data.getTimePeriod());
169
+                List<BlockedLuggagePieceDaily> existingList = blockedLuggagePieceDailyMapper.selectBlockedLuggagePieceDailyList(queryParam);
170
+                
171
+                if (CollUtil.isEmpty(existingList))
172
+                {
173
+                    // 新增
174
+                    data.setCreateTime(DateUtils.getNowDate());
175
+                    calculateAndSetFields(data);
176
+                    blockedLuggagePieceDailyMapper.insertBlockedLuggagePieceDaily(data);
177
+                    successNum++;
178
+                    successMsg.append("<br/>" + successNum + "、统计日期【" + data.getStatDate() + "】、大队【" + data.getBrigadeName() + "】、时间段【" + data.getTimePeriod() + "】导入成功");
179
+                }
180
+                else if (isUpdateSupport)
181
+                {
182
+                    // 更新
183
+                    BlockedLuggagePieceDaily old = existingList.get(0);
184
+                    data.setId(old.getId());
185
+                    data.setUpdateTime(DateUtils.getNowDate());
186
+                    calculateAndSetFields(data);
187
+                    blockedLuggagePieceDailyMapper.updateBlockedLuggagePieceDaily(data);
188
+                    successNum++;
189
+                    successMsg.append("<br/>" + successNum + "、统计日期【" + data.getStatDate() + "】、大队【" + data.getBrigadeName() + "】、时间段【" + data.getTimePeriod() + "】更新成功");
190
+                }
191
+                else
192
+                {
193
+                    failureNum++;
194
+                    failureMsg.append("<br/>" + failureNum + "、统计日期【" + data.getStatDate() + "】、大队【" + data.getBrigadeName() + "】、时间段【" + data.getTimePeriod() + "】已存在");
195
+                }
196
+            }
197
+            catch (Exception e)
198
+            {
199
+                failureNum++;
200
+                String msg = "<br/>" + failureNum + "、统计日期【" + data.getStatDate() + "】导入失败:";
201
+                failureMsg.append(msg + e.getMessage());
202
+            }
203
+        }
204
+        
205
+        if (failureNum > 0)
206
+        {
207
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
208
+            throw new ServiceException(failureMsg.toString());
209
+        }
210
+        else
211
+        {
212
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
213
+        }
214
+        return successMsg.toString();
215
+    }
216
+
217
+    /**
218
+     * 检查数据是否重复
219
+     * 
220
+     * @param blockedLuggagePieceDaily 统计数据
221
+     * @return 重复的数据,如果没有重复返回null
222
+     */
223
+    @Override
224
+    public BlockedLuggagePieceDaily checkDuplicate(BlockedLuggagePieceDaily blockedLuggagePieceDaily)
225
+    {
226
+        if (ObjUtil.isNull(blockedLuggagePieceDaily.getStatDate())
227
+                || ObjUtil.isNull(blockedLuggagePieceDaily.getBrigadeId())
228
+                || ObjUtil.isNull(blockedLuggagePieceDaily.getTimePeriod()))
229
+        {
230
+            return null;
231
+        }
232
+        
233
+        BlockedLuggagePieceDaily queryParam = new BlockedLuggagePieceDaily();
234
+        queryParam.setStatDate(blockedLuggagePieceDaily.getStatDate());
235
+        queryParam.setBrigadeId(blockedLuggagePieceDaily.getBrigadeId());
236
+        queryParam.setTimePeriod(blockedLuggagePieceDaily.getTimePeriod());
237
+        List<BlockedLuggagePieceDaily> existingList = blockedLuggagePieceDailyMapper.selectBlockedLuggagePieceDailyList(queryParam);
238
+        
239
+        if (CollUtil.isNotEmpty(existingList))
240
+        {
241
+            return existingList.get(0);
242
+        }
243
+        return null;
244
+    }
245
+
246
+    /**
247
+     * 新增或更新每日各时段查堵行李(如果数据重复则覆盖更新)
248
+     * 
249
+     * @param blockedLuggagePieceDaily 每日各时段查堵行李
250
+     * @return 结果
251
+     */
252
+    @Override
253
+    @Transactional
254
+    public int insertOrUpdate(BlockedLuggagePieceDaily blockedLuggagePieceDaily)
255
+    {
256
+        // 检查是否重复
257
+        BlockedLuggagePieceDaily existing = checkDuplicate(blockedLuggagePieceDaily);
258
+        // 根据大队名称填充ID
259
+        fillBrigadeIdByName(blockedLuggagePieceDaily);
260
+        if (existing != null)
261
+        {
262
+            // 数据已存在,执行更新(覆盖)
263
+            blockedLuggagePieceDaily.setId(existing.getId());
264
+            blockedLuggagePieceDaily.setUpdateBy(blockedLuggagePieceDaily.getUpdateBy() != null 
265
+                    ? blockedLuggagePieceDaily.getUpdateBy() : blockedLuggagePieceDaily.getCreateBy());
266
+
267
+            calculateAndSetFields(blockedLuggagePieceDaily);
268
+            return blockedLuggagePieceDailyMapper.updateBlockedLuggagePieceDaily(blockedLuggagePieceDaily);
269
+        }
270
+        else
271
+        {
272
+            // 数据不存在,执行新增
273
+            calculateAndSetFields(blockedLuggagePieceDaily);
274
+            return blockedLuggagePieceDailyMapper.insertBlockedLuggagePieceDaily(blockedLuggagePieceDaily);
275
+        }
276
+    }
277
+
278
+    /**
279
+     * 计算并设置所有计算字段
280
+     * 
281
+     * @param data 统计数据
282
+     */
283
+    private void calculateAndSetFields(BlockedLuggagePieceDaily data)
284
+    {
285
+        // 初始化默认值
286
+        initDefaultValues(data);
287
+        
288
+        // 计算过检行李数
289
+        Integer totalLuggage = (data.getT1WalkBagCount() != null ? data.getT1WalkBagCount() : 0)
290
+                + (data.getT2WalkBagCount() != null ? data.getT2WalkBagCount() : 0)
291
+                + (data.getT1TravelBagCount() != null ? data.getT1TravelBagCount() : 0)
292
+                + (data.getT2TravelBagCount() != null ? data.getT2TravelBagCount() : 0);
293
+        data.setTotalLuggageCount(totalLuggage);
294
+        
295
+        // 计算时段查堵件数
296
+        Integer totalBlocked = (data.getT1WalkBlockedCount() != null ? data.getT1WalkBlockedCount() : 0)
297
+                + (data.getT2WalkBlockedCount() != null ? data.getT2WalkBlockedCount() : 0)
298
+                + (data.getT1TravelBlockedCount() != null ? data.getT1TravelBlockedCount() : 0)
299
+                + (data.getT2TravelBlockedCount() != null ? data.getT2TravelBlockedCount() : 0);
300
+        data.setTotalBlockedCount(totalBlocked);
301
+        
302
+        // 计算查堵万分率
303
+        data.setBlockedRate(calculateBlockRate(totalBlocked, totalLuggage));
304
+    }
305
+    
306
+    /**
307
+     * 初始化默认值
308
+     * 
309
+     * @param data 统计数据
310
+     */
311
+    private void initDefaultValues(BlockedLuggagePieceDaily data)
312
+    {
313
+        if (data.getT1WalkBagCount() == null) data.setT1WalkBagCount(0);
314
+        if (data.getT1WalkBlockedCount() == null) data.setT1WalkBlockedCount(0);
315
+        if (data.getT2WalkBagCount() == null) data.setT2WalkBagCount(0);
316
+        if (data.getT2WalkBlockedCount() == null) data.setT2WalkBlockedCount(0);
317
+        if (data.getT1TravelBagCount() == null) data.setT1TravelBagCount(0);
318
+        if (data.getT1TravelBlockedCount() == null) data.setT1TravelBlockedCount(0);
319
+        if (data.getT2TravelBagCount() == null) data.setT2TravelBagCount(0);
320
+        if (data.getT2TravelBlockedCount() == null) data.setT2TravelBlockedCount(0);
321
+    }
322
+    
323
+    /**
324
+     * 计算万分率(查堵件数/过检行李数*10000)
325
+     * 
326
+     * @param blockedCount 查堵件数
327
+     * @param luggageCount 过检行李数
328
+     * @return 万分率
329
+     */
330
+    private BigDecimal calculateBlockRate(Integer blockedCount, Integer luggageCount)
331
+    {
332
+        if (luggageCount == null || luggageCount == 0)
333
+        {
334
+            return BigDecimal.ZERO;
335
+        }
336
+        if (blockedCount == null)
337
+        {
338
+            blockedCount = 0;
339
+        }
340
+        return BigDecimal.valueOf(blockedCount)
341
+                .multiply(BigDecimal.valueOf(10000))
342
+                .divide(BigDecimal.valueOf(luggageCount), 4, RoundingMode.HALF_UP);
343
+    }
344
+
345
+    /**
346
+     * 根据大队名称填充大队ID
347
+     * 
348
+     * @param data 统计数据
349
+     */
350
+    private void fillBrigadeIdByName(BlockedLuggagePieceDaily data)
351
+    {
352
+        if (ObjUtil.isNull(data.getBrigadeId()) && StrUtil.isNotBlank(data.getBrigadeName()))
353
+        {
354
+            SysDept deptQuery = new SysDept();
355
+            deptQuery.setDeptName(data.getBrigadeName());
356
+            List<SysDept> deptList = sysDeptService.selectDeptList(deptQuery);
357
+            if (CollUtil.isNotEmpty(deptList))
358
+            {
359
+                data.setBrigadeId(deptList.get(0).getDeptId());
360
+            }
361
+        }
362
+    }
363
+}

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

@@ -0,0 +1,394 @@
1
+package com.sundot.airport.blocked.service.impl;
2
+
3
+import java.math.BigDecimal;
4
+import java.math.RoundingMode;
5
+import java.util.Date;
6
+import java.util.List;
7
+import cn.hutool.core.collection.CollUtil;
8
+import cn.hutool.core.util.ObjUtil;
9
+import cn.hutool.core.util.StrUtil;
10
+import org.springframework.beans.factory.annotation.Autowired;
11
+import org.springframework.stereotype.Service;
12
+import org.springframework.transaction.annotation.Transactional;
13
+import com.sundot.airport.common.exception.ServiceException;
14
+import com.sundot.airport.common.utils.DateUtils;
15
+import com.sundot.airport.blocked.mapper.BlockedLuggageStatisticsDailyMapper;
16
+import com.sundot.airport.blocked.domain.BlockedLuggageStatisticsDaily;
17
+import com.sundot.airport.blocked.service.IBlockedLuggageStatisticsDailyService;
18
+import com.sundot.airport.common.core.domain.entity.SysDept;
19
+import com.sundot.airport.system.service.ISysDeptService;
20
+
21
+/**
22
+ * 每日行李过检查堵统计Service业务层处理
23
+ * 
24
+ * @author wangxx
25
+ * @date 2026-04-13
26
+ */
27
+@Service
28
+public class BlockedLuggageStatisticsDailyServiceImpl implements IBlockedLuggageStatisticsDailyService 
29
+{
30
+    @Autowired
31
+    private BlockedLuggageStatisticsDailyMapper blockedLuggageStatisticsDailyMapper;
32
+
33
+    @Autowired
34
+    private ISysDeptService sysDeptService;
35
+
36
+    /**
37
+     * 查询每日行李过检查堵统计
38
+     * 
39
+     * @param id 每日行李过检查堵统计主键
40
+     * @return 每日行李过检查堵统计
41
+     */
42
+    @Override
43
+    public BlockedLuggageStatisticsDaily selectBlockedLuggageStatisticsDailyById(Long id)
44
+    {
45
+        return blockedLuggageStatisticsDailyMapper.selectBlockedLuggageStatisticsDailyById(id);
46
+    }
47
+
48
+    /**
49
+     * 查询每日行李过检查堵统计列表
50
+     * 
51
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
52
+     * @return 每日行李过检查堵统计
53
+     */
54
+    @Override
55
+    public List<BlockedLuggageStatisticsDaily> selectBlockedLuggageStatisticsDailyList(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
56
+    {
57
+        return blockedLuggageStatisticsDailyMapper.selectBlockedLuggageStatisticsDailyList(blockedLuggageStatisticsDaily);
58
+    }
59
+
60
+    /**
61
+     * 新增每日行李过检查堵统计
62
+     * 
63
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
64
+     * @return 结果
65
+     */
66
+    @Override
67
+    @Transactional
68
+    public int insertBlockedLuggageStatisticsDaily(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
69
+    {
70
+        // 根据大队名称填充ID
71
+        fillBrigadeIdByName(blockedLuggageStatisticsDaily);
72
+        calculateAndSetFields(blockedLuggageStatisticsDaily);
73
+        return blockedLuggageStatisticsDailyMapper.insertBlockedLuggageStatisticsDaily(blockedLuggageStatisticsDaily);
74
+    }
75
+
76
+    /**
77
+     * 修改每日行李过检查堵统计
78
+     * 
79
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
80
+     * @return 结果
81
+     */
82
+    @Override
83
+    @Transactional
84
+    public int updateBlockedLuggageStatisticsDaily(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
85
+    {
86
+        // 根据大队名称填充ID
87
+        fillBrigadeIdByName(blockedLuggageStatisticsDaily);
88
+        calculateAndSetFields(blockedLuggageStatisticsDaily);
89
+        return blockedLuggageStatisticsDailyMapper.updateBlockedLuggageStatisticsDaily(blockedLuggageStatisticsDaily);
90
+    }
91
+
92
+    /**
93
+     * 批量删除每日行李过检查堵统计
94
+     * 
95
+     * @param ids 需要删除的每日行李过检查堵统计主键
96
+     * @return 结果
97
+     */
98
+    @Override
99
+    public int deleteBlockedLuggageStatisticsDailyByIds(Long[] ids)
100
+    {
101
+        return blockedLuggageStatisticsDailyMapper.deleteBlockedLuggageStatisticsDailyByIds(ids);
102
+    }
103
+
104
+    /**
105
+     * 删除每日行李过检查堵统计信息
106
+     * 
107
+     * @param id 每日行李过检查堵统计主键
108
+     * @return 结果
109
+     */
110
+    @Override
111
+    public int deleteBlockedLuggageStatisticsDailyById(Long id)
112
+    {
113
+        return blockedLuggageStatisticsDailyMapper.deleteBlockedLuggageStatisticsDailyById(id);
114
+    }
115
+
116
+    /**
117
+     * 导入每日行李过检查堵统计数据
118
+     * 
119
+     * @param list 数据列表
120
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
121
+     * @return 结果
122
+     */
123
+    @Transactional(rollbackFor = Exception.class)
124
+    @Override
125
+    public String importData(List<BlockedLuggageStatisticsDaily> list, boolean isUpdateSupport)
126
+    {
127
+        if (CollUtil.isEmpty(list))
128
+        {
129
+            throw new ServiceException("导入每日行李过检查堵统计数据不能为空!");
130
+        }
131
+
132
+        int successNum = 0;
133
+        int failureNum = 0;
134
+        StringBuilder successMsg = new StringBuilder();
135
+        StringBuilder failureMsg = new StringBuilder();
136
+        
137
+        for (BlockedLuggageStatisticsDaily data : list)
138
+        {
139
+            try
140
+            {
141
+                fillBrigadeIdByName(data);
142
+                // 数据校验
143
+                if (ObjUtil.isNull(data.getStatDate()))
144
+                {
145
+                    failureNum++;
146
+                    failureMsg.append("<br/>" + failureNum + "、统计日期不能为空");
147
+                    continue;
148
+                }
149
+                if (ObjUtil.isNull(data.getShiftType()))
150
+                {
151
+                    failureNum++;
152
+                    failureMsg.append("<br/>" + failureNum + "、班次类型不能为空");
153
+                    continue;
154
+                }
155
+                if (ObjUtil.isNull(data.getBrigadeId()))
156
+                {
157
+                    failureNum++;
158
+                    failureMsg.append("<br/>" + failureNum + "、当班大队ID不能为空");
159
+                    continue;
160
+                }
161
+                
162
+                // 查询是否已存在(根据日期+班次+大队ID唯一索引)
163
+                BlockedLuggageStatisticsDaily queryParam = new BlockedLuggageStatisticsDaily();
164
+                queryParam.setStatDate(data.getStatDate());
165
+                queryParam.setShiftType(data.getShiftType());
166
+                queryParam.setBrigadeId(data.getBrigadeId());
167
+                List<BlockedLuggageStatisticsDaily> existingList = blockedLuggageStatisticsDailyMapper.selectBlockedLuggageStatisticsDailyList(queryParam);
168
+                
169
+                if (CollUtil.isEmpty(existingList))
170
+                {
171
+                    // 新增
172
+                    data.setCreateTime(DateUtils.getNowDate());
173
+                    calculateAndSetFields(data);
174
+                    blockedLuggageStatisticsDailyMapper.insertBlockedLuggageStatisticsDaily(data);
175
+                    successNum++;
176
+                    successMsg.append("<br/>" + successNum + "、统计日期【" + data.getStatDate() + "】、班次【" + data.getShiftType() + "】、大队【" + data.getBrigadeName() + "】导入成功");
177
+                }
178
+                else if (isUpdateSupport)
179
+                {
180
+                    // 更新
181
+                    BlockedLuggageStatisticsDaily old = existingList.get(0);
182
+                    data.setId(old.getId());
183
+                    data.setUpdateTime(DateUtils.getNowDate());
184
+                    calculateAndSetFields(data);
185
+                    blockedLuggageStatisticsDailyMapper.updateBlockedLuggageStatisticsDaily(data);
186
+                    successNum++;
187
+                    successMsg.append("<br/>" + successNum + "、统计日期【" + data.getStatDate() + "】、班次【" + data.getShiftType() + "】、大队【" + data.getBrigadeName() + "】更新成功");
188
+                }
189
+                else
190
+                {
191
+                    failureNum++;
192
+                    failureMsg.append("<br/>" + failureNum + "、统计日期【" + data.getStatDate() + "】、班次【" + data.getShiftType() + "】、大队【" + data.getBrigadeName() + "】已存在");
193
+                }
194
+            }
195
+            catch (Exception e)
196
+            {
197
+                failureNum++;
198
+                String msg = "<br/>" + failureNum + "、统计日期【" + data.getStatDate() + "】、班次【" + data.getShiftType() + "】导入失败:";
199
+                failureMsg.append(msg + e.getMessage());
200
+            }
201
+        }
202
+        
203
+        if (failureNum > 0)
204
+        {
205
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
206
+            throw new ServiceException(failureMsg.toString());
207
+        }
208
+        else
209
+        {
210
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
211
+        }
212
+        return successMsg.toString();
213
+    }
214
+
215
+    /**
216
+     * 计算并设置所有计算字段
217
+     * 
218
+     * @param data 统计数据
219
+     */
220
+    private void calculateAndSetFields(BlockedLuggageStatisticsDaily data)
221
+    {
222
+        // 初始化默认值
223
+        initDefaultValues(data);
224
+        
225
+        // 计算过检行李合计
226
+        Integer totalLuggage = (data.getT1TravelLuggageCount() != null ? data.getT1TravelLuggageCount() : 0)
227
+                + (data.getT1WalkLuggageCount() != null ? data.getT1WalkLuggageCount() : 0)
228
+                + (data.getT2TravelLuggageCount() != null ? data.getT2TravelLuggageCount() : 0)
229
+                + (data.getT2WalkLuggageCount() != null ? data.getT2WalkLuggageCount() : 0);
230
+        data.setTotalLuggageCount(totalLuggage);
231
+        
232
+        // 计算查堵合计件数
233
+        Integer totalBlocked = (data.getT1TravelBlockedCount() != null ? data.getT1TravelBlockedCount() : 0)
234
+                + (data.getT2TravelBlockedCount() != null ? data.getT2TravelBlockedCount() : 0)
235
+                + (data.getT1WalkBlockedCount() != null ? data.getT1WalkBlockedCount() : 0)
236
+                + (data.getT2WalkBlockedCount() != null ? data.getT2WalkBlockedCount() : 0);
237
+        data.setTotalBlockedCount(totalBlocked);
238
+        
239
+        // 当日查堵件数等于查堵合计件数
240
+        data.setDailyBlockedCount(totalBlocked);
241
+        
242
+        // 计算万分率
243
+        data.setT1TravelBlockRate(calculateBlockRate(data.getT1TravelBlockedCount(), data.getT1TravelLuggageCount()));
244
+        data.setT2TravelBlockRate(calculateBlockRate(data.getT2TravelBlockedCount(), data.getT2TravelLuggageCount()));
245
+        data.setT1WalkBlockRate(calculateBlockRate(data.getT1WalkBlockedCount(), data.getT1WalkLuggageCount()));
246
+        data.setT2WalkBlockRate(calculateBlockRate(data.getT2WalkBlockedCount(), data.getT2WalkLuggageCount()));
247
+        data.setTotalBlockRate(calculateBlockRate(totalBlocked, totalLuggage));
248
+        data.setDailyBlockRate(calculateBlockRate(totalBlocked, totalLuggage));
249
+        
250
+        // 计算AI相关合计
251
+        Integer aiReviewTotal = (data.getT1ReviewImageTotal() != null ? data.getT1ReviewImageTotal() : 0)
252
+                + (data.getT2ReviewImageTotal() != null ? data.getT2ReviewImageTotal() : 0);
253
+        data.setAiReviewImageTotal(aiReviewTotal);
254
+        
255
+        Integer aiMarkTotal = (data.getT1AiMarkTotal() != null ? data.getT1AiMarkTotal() : 0)
256
+                + (data.getT2AiMarkTotal() != null ? data.getT2AiMarkTotal() : 0);
257
+        data.setAiMarkTotal(aiMarkTotal);
258
+        
259
+        Integer aiErrorTotal = (data.getT1AiErrorTotal() != null ? data.getT1AiErrorTotal() : 0)
260
+                + (data.getT2AiErrorTotal() != null ? data.getT2AiErrorTotal() : 0);
261
+        data.setAiErrorImageTotal(aiErrorTotal);
262
+        
263
+        Integer aiMissTotal = (data.getT1AiMissTotal() != null ? data.getT1AiMissTotal() : 0)
264
+                + (data.getT2AiMissTotal() != null ? data.getT2AiMissTotal() : 0);
265
+        data.setAiMissImageTotal(aiMissTotal);
266
+    }
267
+    
268
+    /**
269
+     * 初始化默认值
270
+     * 
271
+     * @param data 统计数据
272
+     */
273
+    private void initDefaultValues(BlockedLuggageStatisticsDaily data)
274
+    {
275
+        if (data.getT1TravelLuggageCount() == null) data.setT1TravelLuggageCount(0);
276
+        if (data.getT1WalkLuggageCount() == null) data.setT1WalkLuggageCount(0);
277
+        if (data.getT2TravelLuggageCount() == null) data.setT2TravelLuggageCount(0);
278
+        if (data.getT2WalkLuggageCount() == null) data.setT2WalkLuggageCount(0);
279
+        if (data.getT1TravelBlockedCount() == null) data.setT1TravelBlockedCount(0);
280
+        if (data.getT2TravelBlockedCount() == null) data.setT2TravelBlockedCount(0);
281
+        if (data.getT1WalkBlockedCount() == null) data.setT1WalkBlockedCount(0);
282
+        if (data.getT2WalkBlockedCount() == null) data.setT2WalkBlockedCount(0);
283
+        if (data.getT1ReviewImageTotal() == null) data.setT1ReviewImageTotal(0);
284
+        if (data.getT1AiMarkTotal() == null) data.setT1AiMarkTotal(0);
285
+        if (data.getT1AiErrorTotal() == null) data.setT1AiErrorTotal(0);
286
+        if (data.getT1AiMissTotal() == null) data.setT1AiMissTotal(0);
287
+        if (data.getT2ReviewImageTotal() == null) data.setT2ReviewImageTotal(0);
288
+        if (data.getT2AiMarkTotal() == null) data.setT2AiMarkTotal(0);
289
+        if (data.getT2AiErrorTotal() == null) data.setT2AiErrorTotal(0);
290
+        if (data.getT2AiMissTotal() == null) data.setT2AiMissTotal(0);
291
+        if (data.getOtherVipCount() == null) data.setOtherVipCount(0);
292
+    }
293
+    
294
+    /**
295
+     * 计算万分率(查堵件数/过检行李数*10000)
296
+     * 
297
+     * @param blockedCount 查堵件数
298
+     * @param luggageCount 过检行李数
299
+     * @return 万分率
300
+     */
301
+    private BigDecimal calculateBlockRate(Integer blockedCount, Integer luggageCount)
302
+    {
303
+        if (luggageCount == null || luggageCount == 0)
304
+        {
305
+            return BigDecimal.ZERO;
306
+        }
307
+        if (blockedCount == null)
308
+        {
309
+            blockedCount = 0;
310
+        }
311
+        return BigDecimal.valueOf(blockedCount)
312
+                .multiply(BigDecimal.valueOf(10000))
313
+                .divide(BigDecimal.valueOf(luggageCount), 4, RoundingMode.HALF_UP);
314
+    }
315
+
316
+    /**
317
+     * 检查数据是否重复
318
+     * 
319
+     * @param blockedLuggageStatisticsDaily 统计数据
320
+     * @return 重复的数据,如果没有重复返回null
321
+     */
322
+    @Override
323
+    public BlockedLuggageStatisticsDaily checkDuplicate(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
324
+    {
325
+        if (ObjUtil.isNull(blockedLuggageStatisticsDaily.getStatDate())
326
+                || ObjUtil.isNull(blockedLuggageStatisticsDaily.getShiftType())
327
+                || ObjUtil.isNull(blockedLuggageStatisticsDaily.getBrigadeId()))
328
+        {
329
+            return null;
330
+        }
331
+        
332
+        BlockedLuggageStatisticsDaily queryParam = new BlockedLuggageStatisticsDaily();
333
+        queryParam.setStatDate(blockedLuggageStatisticsDaily.getStatDate());
334
+        queryParam.setShiftType(blockedLuggageStatisticsDaily.getShiftType());
335
+        queryParam.setBrigadeId(blockedLuggageStatisticsDaily.getBrigadeId());
336
+        List<BlockedLuggageStatisticsDaily> existingList = blockedLuggageStatisticsDailyMapper.selectBlockedLuggageStatisticsDailyList(queryParam);
337
+        
338
+        if (CollUtil.isNotEmpty(existingList))
339
+        {
340
+            return existingList.get(0);
341
+        }
342
+        return null;
343
+    }
344
+
345
+    /**
346
+     * 新增或更新每日行李过检查堵统计(如果数据重复则覆盖更新)
347
+     * 
348
+     * @param blockedLuggageStatisticsDaily 每日行李过检查堵统计
349
+     * @return 结果
350
+     */
351
+    @Override
352
+    @Transactional
353
+    public int insertOrUpdate(BlockedLuggageStatisticsDaily blockedLuggageStatisticsDaily)
354
+    {
355
+        // 检查是否重复
356
+        BlockedLuggageStatisticsDaily existing = checkDuplicate(blockedLuggageStatisticsDaily);
357
+        // 根据大队名称填充ID
358
+        fillBrigadeIdByName(blockedLuggageStatisticsDaily);
359
+        if (existing != null)
360
+        {
361
+            // 数据已存在,执行更新(覆盖)
362
+            blockedLuggageStatisticsDaily.setId(existing.getId());
363
+            blockedLuggageStatisticsDaily.setUpdateBy(blockedLuggageStatisticsDaily.getUpdateBy() != null 
364
+                    ? blockedLuggageStatisticsDaily.getUpdateBy() : blockedLuggageStatisticsDaily.getCreateBy());
365
+            calculateAndSetFields(blockedLuggageStatisticsDaily);
366
+            return blockedLuggageStatisticsDailyMapper.updateBlockedLuggageStatisticsDaily(blockedLuggageStatisticsDaily);
367
+        }
368
+        else
369
+        {
370
+            // 数据不存在,执行新增
371
+            calculateAndSetFields(blockedLuggageStatisticsDaily);
372
+            return blockedLuggageStatisticsDailyMapper.insertBlockedLuggageStatisticsDaily(blockedLuggageStatisticsDaily);
373
+        }
374
+    }
375
+
376
+    /**
377
+     * 根据大队名称填充大队ID
378
+     * 
379
+     * @param data 统计数据
380
+     */
381
+    private void fillBrigadeIdByName(BlockedLuggageStatisticsDaily data)
382
+    {
383
+        if (ObjUtil.isNull(data.getBrigadeId()) && StrUtil.isNotBlank(data.getBrigadeName()))
384
+        {
385
+            SysDept deptQuery = new SysDept();
386
+            deptQuery.setDeptName(data.getBrigadeName());
387
+            List<SysDept> deptList = sysDeptService.selectDeptList(deptQuery);
388
+            if (CollUtil.isNotEmpty(deptList))
389
+            {
390
+                data.setBrigadeId(deptList.get(0).getDeptId());
391
+            }
392
+        }
393
+    }
394
+}

+ 390 - 0
airport-blocked/src/main/java/com/sundot/airport/blocked/service/impl/BlockedMissCheckStatisticsServiceImpl.java

@@ -0,0 +1,390 @@
1
+package com.sundot.airport.blocked.service.impl;
2
+
3
+import java.util.Date;
4
+import java.util.List;
5
+import cn.hutool.core.collection.CollUtil;
6
+import cn.hutool.core.util.ObjUtil;
7
+import cn.hutool.core.util.StrUtil;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+import org.springframework.stereotype.Service;
10
+import org.springframework.transaction.annotation.Transactional;
11
+import com.sundot.airport.common.exception.ServiceException;
12
+import com.sundot.airport.common.utils.DateUtils;
13
+import com.sundot.airport.blocked.mapper.BlockedMissCheckStatisticsMapper;
14
+import com.sundot.airport.blocked.domain.BlockedMissCheckStatistics;
15
+import com.sundot.airport.blocked.service.IBlockedMissCheckStatisticsService;
16
+import com.sundot.airport.system.domain.BasePosition;
17
+import com.sundot.airport.system.service.IBasePositionService;
18
+import com.sundot.airport.common.core.domain.entity.SysUser;
19
+import com.sundot.airport.system.service.ISysUserService;
20
+import com.sundot.airport.common.core.domain.entity.SysDept;
21
+import com.sundot.airport.system.service.ISysDeptService;
22
+
23
+/**
24
+ * 漏检统计Service业务层处理
25
+ * 
26
+ * @author wangxx
27
+ * @date 2026-04-13
28
+ */
29
+@Service
30
+public class BlockedMissCheckStatisticsServiceImpl implements IBlockedMissCheckStatisticsService 
31
+{
32
+    @Autowired
33
+    private BlockedMissCheckStatisticsMapper blockedMissCheckStatisticsMapper;
34
+
35
+    @Autowired
36
+    private IBasePositionService basePositionService;
37
+
38
+    @Autowired
39
+    private ISysUserService sysUserService;
40
+
41
+    @Autowired
42
+    private ISysDeptService sysDeptService;
43
+
44
+    /**
45
+     * 查询漏检统计
46
+     * 
47
+     * @param id 漏检统计主键
48
+     * @return 漏检统计
49
+     */
50
+    @Override
51
+    public BlockedMissCheckStatistics selectBlockedMissCheckStatisticsById(Long id)
52
+    {
53
+        return blockedMissCheckStatisticsMapper.selectBlockedMissCheckStatisticsById(id);
54
+    }
55
+
56
+    /**
57
+     * 查询漏检统计列表
58
+     * 
59
+     * @param blockedMissCheckStatistics 漏检统计
60
+     * @return 漏检统计
61
+     */
62
+    @Override
63
+    public List<BlockedMissCheckStatistics> selectBlockedMissCheckStatisticsList(BlockedMissCheckStatistics blockedMissCheckStatistics)
64
+    {
65
+        return blockedMissCheckStatisticsMapper.selectBlockedMissCheckStatisticsList(blockedMissCheckStatistics);
66
+    }
67
+
68
+    /**
69
+     * 新增漏检统计
70
+     * 
71
+     * @param blockedMissCheckStatistics 漏检统计
72
+     * @return 结果
73
+     */
74
+    @Override
75
+    public int insertBlockedMissCheckStatistics(BlockedMissCheckStatistics blockedMissCheckStatistics)
76
+    {
77
+        // 根据名称填充ID
78
+        fillIdsByName(blockedMissCheckStatistics);
79
+        blockedMissCheckStatistics.setCreateTime(DateUtils.getNowDate());
80
+        return blockedMissCheckStatisticsMapper.insertBlockedMissCheckStatistics(blockedMissCheckStatistics);
81
+    }
82
+
83
+    /**
84
+     * 修改漏检统计
85
+     * 
86
+     * @param blockedMissCheckStatistics 漏检统计
87
+     * @return 结果
88
+     */
89
+    @Override
90
+    public int updateBlockedMissCheckStatistics(BlockedMissCheckStatistics blockedMissCheckStatistics)
91
+    {
92
+        // 根据名称填充ID
93
+        fillIdsByName(blockedMissCheckStatistics);
94
+        blockedMissCheckStatistics.setUpdateTime(DateUtils.getNowDate());
95
+        return blockedMissCheckStatisticsMapper.updateBlockedMissCheckStatistics(blockedMissCheckStatistics);
96
+    }
97
+
98
+    /**
99
+     * 批量删除漏检统计
100
+     * 
101
+     * @param ids 需要删除的漏检统计主键
102
+     * @return 结果
103
+     */
104
+    @Override
105
+    public int deleteBlockedMissCheckStatisticsByIds(Long[] ids)
106
+    {
107
+        return blockedMissCheckStatisticsMapper.deleteBlockedMissCheckStatisticsByIds(ids);
108
+    }
109
+
110
+    /**
111
+     * 删除漏检统计信息
112
+     * 
113
+     * @param id 漏检统计主键
114
+     * @return 结果
115
+     */
116
+    @Override
117
+    public int deleteBlockedMissCheckStatisticsById(Long id)
118
+    {
119
+        return blockedMissCheckStatisticsMapper.deleteBlockedMissCheckStatisticsById(id);
120
+    }
121
+
122
+    /**
123
+     * 导入漏检统计数据
124
+     * 
125
+     * @param list 数据列表
126
+     * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据
127
+     * @return 结果
128
+     */
129
+    @Transactional(rollbackFor = Exception.class)
130
+    @Override
131
+    public String importData(List<BlockedMissCheckStatistics> list, boolean isUpdateSupport)
132
+    {
133
+        if (CollUtil.isEmpty(list))
134
+        {
135
+            throw new ServiceException("导入漏检统计数据不能为空!");
136
+        }
137
+
138
+        int successNum = 0;
139
+        int failureNum = 0;
140
+        StringBuilder successMsg = new StringBuilder();
141
+        StringBuilder failureMsg = new StringBuilder();
142
+        
143
+        for (BlockedMissCheckStatistics data : list)
144
+        {
145
+            try
146
+            {
147
+                if (ObjUtil.isNull(data.getReviewDate()))
148
+                {
149
+                    failureNum++;
150
+                    failureMsg.append("<br/>" + failureNum + "、回查日期不能为空");
151
+                    continue;
152
+                }
153
+                if (ObjUtil.isNull(data.getMissCheckTime()))
154
+                {
155
+                    failureNum++;
156
+                    failureMsg.append("<br/>" + failureNum + "、漏检时间不能为空");
157
+                    continue;
158
+                }
159
+                
160
+                // 查询是否已存在(根据被回查人+回查日期+漏检时间唯一)
161
+                BlockedMissCheckStatistics queryParam = new BlockedMissCheckStatistics();
162
+                queryParam.setReviewedUserId(data.getReviewedUserId());
163
+                queryParam.setReviewDate(data.getReviewDate());
164
+                queryParam.setMissCheckTime(data.getMissCheckTime());
165
+                List<BlockedMissCheckStatistics> existingList = blockedMissCheckStatisticsMapper.selectBlockedMissCheckStatisticsList(queryParam);
166
+                
167
+                if (CollUtil.isEmpty(existingList))
168
+                {
169
+                    // 新增
170
+                    fillIdsByName(data);
171
+                    data.setCreateTime(DateUtils.getNowDate());
172
+                    blockedMissCheckStatisticsMapper.insertBlockedMissCheckStatistics(data);
173
+                    successNum++;
174
+                    successMsg.append("<br/>" + successNum + "、被回查人【" + data.getReviewedUserName() + "】、回查日期【" + data.getReviewDate() + "】、漏检时间【" + data.getMissCheckTime() + "】导入成功");
175
+                }
176
+                else if (isUpdateSupport)
177
+                {
178
+                    // 更新
179
+                    BlockedMissCheckStatistics old = existingList.get(0);
180
+                    data.setId(old.getId());
181
+                    fillIdsByName(data);
182
+                    data.setUpdateTime(DateUtils.getNowDate());
183
+                    blockedMissCheckStatisticsMapper.updateBlockedMissCheckStatistics(data);
184
+                    successNum++;
185
+                    successMsg.append("<br/>" + successNum + "、被回查人【" + data.getReviewedUserName() + "】、回查日期【" + data.getReviewDate() + "】、漏检时间【" + data.getMissCheckTime() + "】更新成功");
186
+                }
187
+                else
188
+                {
189
+                    failureNum++;
190
+                    failureMsg.append("<br/>" + failureNum + "、被回查人【" + data.getReviewedUserName() + "】、回查日期【" + data.getReviewDate() + "】、漏检时间【" + data.getMissCheckTime() + "】已存在");
191
+                }
192
+            }
193
+            catch (Exception e)
194
+            {
195
+                failureNum++;
196
+                String msg = "<br/>" + failureNum + "、被回查人【" + data.getReviewedUserName() + "】导入失败:";
197
+                failureMsg.append(msg + e.getMessage());
198
+            }
199
+        }
200
+        
201
+        if (failureNum > 0)
202
+        {
203
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
204
+            throw new ServiceException(failureMsg.toString());
205
+        }
206
+        else
207
+        {
208
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
209
+        }
210
+        return successMsg.toString();
211
+    }
212
+
213
+    /**
214
+     * 检查数据是否重复(被回查人+回查日期+漏检时间)
215
+     * 
216
+     * @param blockedMissCheckStatistics 漏检统计数据
217
+     * @return 重复的数据,如果没有重复返回null
218
+     */
219
+    @Override
220
+    public BlockedMissCheckStatistics checkDuplicate(BlockedMissCheckStatistics blockedMissCheckStatistics)
221
+    {
222
+        if (ObjUtil.isNull(blockedMissCheckStatistics.getReviewedUserId())
223
+                || ObjUtil.isNull(blockedMissCheckStatistics.getReviewDate())
224
+                || ObjUtil.isNull(blockedMissCheckStatistics.getMissCheckTime()))
225
+        {
226
+            return null;
227
+        }
228
+        
229
+        BlockedMissCheckStatistics queryParam = new BlockedMissCheckStatistics();
230
+        queryParam.setReviewedUserId(blockedMissCheckStatistics.getReviewedUserId());
231
+        queryParam.setReviewDate(blockedMissCheckStatistics.getReviewDate());
232
+        queryParam.setMissCheckTime(blockedMissCheckStatistics.getMissCheckTime());
233
+        List<BlockedMissCheckStatistics> existingList = blockedMissCheckStatisticsMapper.selectBlockedMissCheckStatisticsList(queryParam);
234
+        
235
+        if (CollUtil.isNotEmpty(existingList))
236
+        {
237
+            return existingList.get(0);
238
+        }
239
+        return null;
240
+    }
241
+
242
+    /**
243
+     * 新增或更新漏检统计(如果数据重复则覆盖更新)
244
+     * 
245
+     * @param blockedMissCheckStatistics 漏检统计
246
+     * @return 结果
247
+     */
248
+    @Override
249
+    @Transactional
250
+    public int insertOrUpdate(BlockedMissCheckStatistics blockedMissCheckStatistics)
251
+    {
252
+        // 检查是否重复
253
+        BlockedMissCheckStatistics existing = checkDuplicate(blockedMissCheckStatistics);
254
+        
255
+        if (existing != null)
256
+        {
257
+            // 数据已存在,执行更新(覆盖)
258
+            blockedMissCheckStatistics.setId(existing.getId());
259
+            blockedMissCheckStatistics.setUpdateBy(blockedMissCheckStatistics.getUpdateBy() != null 
260
+                    ? blockedMissCheckStatistics.getUpdateBy() : blockedMissCheckStatistics.getCreateBy());
261
+            blockedMissCheckStatistics.setUpdateTime(DateUtils.getNowDate());
262
+            return blockedMissCheckStatisticsMapper.updateBlockedMissCheckStatistics(blockedMissCheckStatistics);
263
+        }
264
+        else
265
+        {
266
+            // 数据不存在,执行新增
267
+            blockedMissCheckStatistics.setCreateTime(DateUtils.getNowDate());
268
+            return blockedMissCheckStatisticsMapper.insertBlockedMissCheckStatistics(blockedMissCheckStatistics);
269
+        }
270
+    }
271
+
272
+    /**
273
+     * 根据名称填充ID字段
274
+     * 
275
+     * @param data 漏检统计数据
276
+     */
277
+    private void fillIdsByName(BlockedMissCheckStatistics data)
278
+    {
279
+        // 1. 大队ID - 通过部门表查询
280
+        if (ObjUtil.isNull(data.getBrigadeId()) && StrUtil.isNotBlank(data.getBrigadeName()))
281
+        {
282
+            SysDept deptQuery = new SysDept();
283
+            deptQuery.setDeptName(data.getBrigadeName());
284
+            List<SysDept> deptList = sysDeptService.selectDeptList(deptQuery);
285
+            if (CollUtil.isNotEmpty(deptList))
286
+            {
287
+                data.setBrigadeId(deptList.get(0).getDeptId());
288
+            }
289
+        }
290
+
291
+        // 2. 航站楼ID - 通过位置表查询(level=1)
292
+        if (ObjUtil.isNull(data.getTerminalId()) && StrUtil.isNotBlank(data.getTerminalName()))
293
+        {
294
+            BasePosition positionQuery = new BasePosition();
295
+            positionQuery.setName(data.getTerminalName());
296
+            positionQuery.setLevel(1);
297
+            List<BasePosition> positionList = basePositionService.selectBasePositionList(positionQuery);
298
+            if (CollUtil.isNotEmpty(positionList))
299
+            {
300
+                data.setTerminalId(positionList.get(0).getId());
301
+            }
302
+        }
303
+
304
+        // 3. 区域ID - 通过位置表查询(level=2)
305
+        if (ObjUtil.isNull(data.getAreaId()) && StrUtil.isNotBlank(data.getAreaName()))
306
+        {
307
+            BasePosition positionQuery = new BasePosition();
308
+            positionQuery.setName(data.getAreaName());
309
+            positionQuery.setLevel(2);
310
+            List<BasePosition> positionList = basePositionService.selectBasePositionList(positionQuery);
311
+            if (CollUtil.isNotEmpty(positionList))
312
+            {
313
+                data.setAreaId(positionList.get(0).getId());
314
+            }
315
+        }
316
+
317
+        // 4. 上岗位置ID - 通过位置表查询(level=3)
318
+        if (ObjUtil.isNull(data.getChannelId()) && StrUtil.isNotBlank(data.getChannelName()))
319
+        {
320
+            BasePosition positionQuery = new BasePosition();
321
+            positionQuery.setName(data.getChannelName());
322
+            positionQuery.setLevel(3);
323
+            List<BasePosition> positionList = basePositionService.selectBasePositionList(positionQuery);
324
+            if (CollUtil.isNotEmpty(positionList))
325
+            {
326
+                data.setChannelId(positionList.get(0).getId());
327
+            }
328
+        }
329
+
330
+        // 5. 被回查人ID - 通过用户昵称查询
331
+        if (ObjUtil.isNull(data.getReviewedUserId()) && StrUtil.isNotBlank(data.getReviewedUserName()))
332
+        {
333
+            SysUser userQuery = new SysUser();
334
+            userQuery.setNickName(data.getReviewedUserName());
335
+            List<SysUser> userList = sysUserService.selectUserList(userQuery);
336
+            if (CollUtil.isNotEmpty(userList))
337
+            {
338
+                data.setReviewedUserId(userList.get(0).getUserId());
339
+            }
340
+        }
341
+
342
+        // 6. 回查人ID - 通过用户昵称查询
343
+        if (ObjUtil.isNull(data.getReviewUserId()) && StrUtil.isNotBlank(data.getReviewUserName()))
344
+        {
345
+            SysUser userQuery = new SysUser();
346
+            userQuery.setNickName(data.getReviewUserName());
347
+            List<SysUser> userList = sysUserService.selectUserList(userQuery);
348
+            if (CollUtil.isNotEmpty(userList))
349
+            {
350
+                data.setReviewUserId(userList.get(0).getUserId());
351
+            }
352
+        }
353
+
354
+        // 7. 分管主管ID - 通过用户昵称查询
355
+        if (ObjUtil.isNull(data.getSupervisorId()) && StrUtil.isNotBlank(data.getSupervisorName()))
356
+        {
357
+            SysUser userQuery = new SysUser();
358
+            userQuery.setNickName(data.getSupervisorName());
359
+            List<SysUser> userList = sysUserService.selectUserList(userQuery);
360
+            if (CollUtil.isNotEmpty(userList))
361
+            {
362
+                data.setSupervisorId(userList.get(0).getUserId());
363
+            }
364
+        }
365
+
366
+        // 8. 代管主管ID - 通过用户昵称查询
367
+        if (ObjUtil.isNull(data.getActingSupervisorId()) && StrUtil.isNotBlank(data.getActingSupervisorName()))
368
+        {
369
+            SysUser userQuery = new SysUser();
370
+            userQuery.setNickName(data.getActingSupervisorName());
371
+            List<SysUser> userList = sysUserService.selectUserList(userQuery);
372
+            if (CollUtil.isNotEmpty(userList))
373
+            {
374
+                data.setActingSupervisorId(userList.get(0).getUserId());
375
+            }
376
+        }
377
+
378
+        // 9. 分管班组长ID - 通过用户昵称查询
379
+        if (ObjUtil.isNull(data.getTeamLeaderId()) && StrUtil.isNotBlank(data.getTeamLeaderName()))
380
+        {
381
+            SysUser userQuery = new SysUser();
382
+            userQuery.setNickName(data.getTeamLeaderName());
383
+            List<SysUser> userList = sysUserService.selectUserList(userQuery);
384
+            if (CollUtil.isNotEmpty(userList))
385
+            {
386
+                data.setTeamLeaderId(userList.get(0).getUserId());
387
+            }
388
+        }
389
+    }
390
+}

+ 143 - 0
airport-blocked/src/main/resources/mapper/blocked/BlockedLuggagePieceDailyMapper.xml

@@ -0,0 +1,143 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper
3
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5
+<mapper namespace="com.sundot.airport.blocked.mapper.BlockedLuggagePieceDailyMapper">
6
+    
7
+    <resultMap type="BlockedLuggagePieceDaily" id="BlockedLuggagePieceDailyResult">
8
+        <result property="id"    column="id"    />
9
+        <result property="statDate"    column="stat_date"    />
10
+        <result property="brigadeId"    column="brigade_id"    />
11
+        <result property="brigadeName"    column="brigade_name"    />
12
+        <result property="timePeriod"    column="time_period"    />
13
+        <result property="t1WalkBagCount"    column="t1_walk_bag_count"    />
14
+        <result property="t1WalkBlockedCount"    column="t1_walk_blocked_count"    />
15
+        <result property="t2WalkBagCount"    column="t2_walk_bag_count"    />
16
+        <result property="t2WalkBlockedCount"    column="t2_walk_blocked_count"    />
17
+        <result property="t1TravelBagCount"    column="t1_travel_bag_count"    />
18
+        <result property="t1TravelBlockedCount"    column="t1_travel_blocked_count"    />
19
+        <result property="t2TravelBagCount"    column="t2_travel_bag_count"    />
20
+        <result property="t2TravelBlockedCount"    column="t2_travel_blocked_count"    />
21
+        <result property="totalLuggageCount"    column="total_luggage_count"    />
22
+        <result property="totalBlockedCount"    column="total_blocked_count"    />
23
+        <result property="blockedRate"    column="blocked_rate"    />
24
+        <result property="createBy"    column="create_by"    />
25
+        <result property="createTime"    column="create_time"    />
26
+        <result property="updateBy"    column="update_by"    />
27
+        <result property="updateTime"    column="update_time"    />
28
+        <result property="remark"    column="remark"    />
29
+        <result property="delFlag"    column="del_flag"    />
30
+    </resultMap>
31
+
32
+    <sql id="selectBlockedLuggagePieceDailyVo">
33
+        select id, stat_date, brigade_id, brigade_name, time_period,
34
+               t1_walk_bag_count, t1_walk_blocked_count, t2_walk_bag_count, t2_walk_blocked_count,
35
+               t1_travel_bag_count, t1_travel_blocked_count, t2_travel_bag_count, t2_travel_blocked_count,
36
+               total_luggage_count, total_blocked_count, blocked_rate,
37
+               create_by, create_time, update_by, update_time, remark, del_flag
38
+        from blocked_luggage_piece_daily
39
+    </sql>
40
+
41
+    <select id="selectBlockedLuggagePieceDailyList" parameterType="BlockedLuggagePieceDaily" resultMap="BlockedLuggagePieceDailyResult">
42
+        <include refid="selectBlockedLuggagePieceDailyVo"/>
43
+        <where>  
44
+            del_flag = '0'
45
+            <if test="statDate != null "> and stat_date = #{statDate}</if>
46
+            <if test="brigadeId != null "> and brigade_id = #{brigadeId}</if>
47
+            <if test="brigadeName != null  and brigadeName != ''"> and brigade_name like concat('%', #{brigadeName}, '%')</if>
48
+            <if test="timePeriod != null  and timePeriod != ''"> and time_period = #{timePeriod}</if>
49
+        </where>
50
+        order by stat_date desc, time_period, brigade_id
51
+    </select>
52
+    
53
+    <select id="selectBlockedLuggagePieceDailyById" parameterType="Long" resultMap="BlockedLuggagePieceDailyResult">
54
+        <include refid="selectBlockedLuggagePieceDailyVo"/>
55
+        where id = #{id} and del_flag = '0'
56
+    </select>
57
+        
58
+    <insert id="insertBlockedLuggagePieceDaily" parameterType="BlockedLuggagePieceDaily" useGeneratedKeys="true" keyProperty="id">
59
+        insert into blocked_luggage_piece_daily
60
+        <trim prefix="(" suffix=")" suffixOverrides=",">
61
+            <if test="statDate != null">stat_date,</if>
62
+            <if test="brigadeId != null">brigade_id,</if>
63
+            <if test="brigadeName != null and brigadeName != ''">brigade_name,</if>
64
+            <if test="timePeriod != null and timePeriod != ''">time_period,</if>
65
+            <if test="t1WalkBagCount != null">t1_walk_bag_count,</if>
66
+            <if test="t1WalkBlockedCount != null">t1_walk_blocked_count,</if>
67
+            <if test="t2WalkBagCount != null">t2_walk_bag_count,</if>
68
+            <if test="t2WalkBlockedCount != null">t2_walk_blocked_count,</if>
69
+            <if test="t1TravelBagCount != null">t1_travel_bag_count,</if>
70
+            <if test="t1TravelBlockedCount != null">t1_travel_blocked_count,</if>
71
+            <if test="t2TravelBagCount != null">t2_travel_bag_count,</if>
72
+            <if test="t2TravelBlockedCount != null">t2_travel_blocked_count,</if>
73
+            <if test="totalLuggageCount != null">total_luggage_count,</if>
74
+            <if test="totalBlockedCount != null">total_blocked_count,</if>
75
+            <if test="blockedRate != null">blocked_rate,</if>
76
+            <if test="createBy != null and createBy != ''">create_by,</if>
77
+            <if test="createTime != null">create_time,</if>
78
+            <if test="updateBy != null and updateBy != ''">update_by,</if>
79
+            <if test="updateTime != null">update_time,</if>
80
+            <if test="remark != null">remark,</if>
81
+            <if test="delFlag != null and delFlag != ''">del_flag,</if>
82
+         </trim>
83
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
84
+            <if test="statDate != null">#{statDate},</if>
85
+            <if test="brigadeId != null">#{brigadeId},</if>
86
+            <if test="brigadeName != null and brigadeName != ''">#{brigadeName},</if>
87
+            <if test="timePeriod != null and timePeriod != ''">#{timePeriod},</if>
88
+            <if test="t1WalkBagCount != null">#{t1WalkBagCount},</if>
89
+            <if test="t1WalkBlockedCount != null">#{t1WalkBlockedCount},</if>
90
+            <if test="t2WalkBagCount != null">#{t2WalkBagCount},</if>
91
+            <if test="t2WalkBlockedCount != null">#{t2WalkBlockedCount},</if>
92
+            <if test="t1TravelBagCount != null">#{t1TravelBagCount},</if>
93
+            <if test="t1TravelBlockedCount != null">#{t1TravelBlockedCount},</if>
94
+            <if test="t2TravelBagCount != null">#{t2TravelBagCount},</if>
95
+            <if test="t2TravelBlockedCount != null">#{t2TravelBlockedCount},</if>
96
+            <if test="totalLuggageCount != null">#{totalLuggageCount},</if>
97
+            <if test="totalBlockedCount != null">#{totalBlockedCount},</if>
98
+            <if test="blockedRate != null">#{blockedRate},</if>
99
+            <if test="createBy != null and createBy != ''">#{createBy},</if>
100
+            <if test="createTime != null">#{createTime},</if>
101
+            <if test="updateBy != null and updateBy != ''">#{updateBy},</if>
102
+            <if test="updateTime != null">#{updateTime},</if>
103
+            <if test="remark != null">#{remark},</if>
104
+            <if test="delFlag != null and delFlag != ''">#{delFlag},</if>
105
+         </trim>
106
+    </insert>
107
+
108
+    <update id="updateBlockedLuggagePieceDaily" parameterType="BlockedLuggagePieceDaily">
109
+        update blocked_luggage_piece_daily
110
+        <trim prefix="SET" suffixOverrides=",">
111
+            <if test="statDate != null">stat_date = #{statDate},</if>
112
+            <if test="brigadeId != null">brigade_id = #{brigadeId},</if>
113
+            <if test="brigadeName != null and brigadeName != ''">brigade_name = #{brigadeName},</if>
114
+            <if test="timePeriod != null and timePeriod != ''">time_period = #{timePeriod},</if>
115
+            <if test="t1WalkBagCount != null">t1_walk_bag_count = #{t1WalkBagCount},</if>
116
+            <if test="t1WalkBlockedCount != null">t1_walk_blocked_count = #{t1WalkBlockedCount},</if>
117
+            <if test="t2WalkBagCount != null">t2_walk_bag_count = #{t2WalkBagCount},</if>
118
+            <if test="t2WalkBlockedCount != null">t2_walk_blocked_count = #{t2WalkBlockedCount},</if>
119
+            <if test="t1TravelBagCount != null">t1_travel_bag_count = #{t1TravelBagCount},</if>
120
+            <if test="t1TravelBlockedCount != null">t1_travel_blocked_count = #{t1TravelBlockedCount},</if>
121
+            <if test="t2TravelBagCount != null">t2_travel_bag_count = #{t2TravelBagCount},</if>
122
+            <if test="t2TravelBlockedCount != null">t2_travel_blocked_count = #{t2TravelBlockedCount},</if>
123
+            <if test="totalLuggageCount != null">total_luggage_count = #{totalLuggageCount},</if>
124
+            <if test="totalBlockedCount != null">total_blocked_count = #{totalBlockedCount},</if>
125
+            <if test="blockedRate != null">blocked_rate = #{blockedRate},</if>
126
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
127
+            <if test="updateTime != null">update_time = #{updateTime},</if>
128
+            <if test="remark != null">remark = #{remark},</if>
129
+        </trim>
130
+        where id = #{id}
131
+    </update>
132
+
133
+    <delete id="deleteBlockedLuggagePieceDailyById" parameterType="Long">
134
+        update blocked_luggage_piece_daily set del_flag = '2' where id = #{id}
135
+    </delete>
136
+
137
+    <delete id="deleteBlockedLuggagePieceDailyByIds" parameterType="String">
138
+        update blocked_luggage_piece_daily set del_flag = '2' where id in 
139
+        <foreach item="id" collection="array" open="(" separator="," close=")">
140
+            #{id}
141
+        </foreach>
142
+    </delete>
143
+</mapper>

+ 225 - 0
airport-blocked/src/main/resources/mapper/blocked/BlockedLuggageStatisticsDailyMapper.xml

@@ -0,0 +1,225 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper
3
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5
+<mapper namespace="com.sundot.airport.blocked.mapper.BlockedLuggageStatisticsDailyMapper">
6
+    
7
+    <resultMap type="BlockedLuggageStatisticsDaily" id="BlockedLuggageStatisticsDailyResult">
8
+        <result property="id"    column="id"    />
9
+        <result property="statDate"    column="stat_date"    />
10
+        <result property="shiftType"    column="shift_type"    />
11
+        <result property="brigadeId"    column="brigade_id"    />
12
+        <result property="brigadeName"    column="brigade_name"    />
13
+        <result property="t1TravelLuggageCount"    column="t1_travel_luggage_count"    />
14
+        <result property="t1WalkLuggageCount"    column="t1_walk_luggage_count"    />
15
+        <result property="t2TravelLuggageCount"    column="t2_travel_luggage_count"    />
16
+        <result property="t2WalkLuggageCount"    column="t2_walk_luggage_count"    />
17
+        <result property="t1TravelBlockedCount"    column="t1_travel_blocked_count"    />
18
+        <result property="t2TravelBlockedCount"    column="t2_travel_blocked_count"    />
19
+        <result property="t1WalkBlockedCount"    column="t1_walk_blocked_count"    />
20
+        <result property="t2WalkBlockedCount"    column="t2_walk_blocked_count"    />
21
+        <result property="t1ReviewImageTotal"    column="t1_review_image_total"    />
22
+        <result property="t1AiMarkTotal"    column="t1_ai_mark_total"    />
23
+        <result property="t1AiErrorTotal"    column="t1_ai_error_total"    />
24
+        <result property="t1AiMissTotal"    column="t1_ai_miss_total"    />
25
+        <result property="t2ReviewImageTotal"    column="t2_review_image_total"    />
26
+        <result property="t2AiMarkTotal"    column="t2_ai_mark_total"    />
27
+        <result property="t2AiErrorTotal"    column="t2_ai_error_total"    />
28
+        <result property="t2AiMissTotal"    column="t2_ai_miss_total"    />
29
+        <result property="otherVipCount"    column="other_vip_count"    />
30
+        <result property="t1TravelBlockRate"    column="t1_travel_block_rate"    />
31
+        <result property="t2TravelBlockRate"    column="t2_travel_block_rate"    />
32
+        <result property="t1WalkBlockRate"    column="t1_walk_block_rate"    />
33
+        <result property="t2WalkBlockRate"    column="t2_walk_block_rate"    />
34
+        <result property="totalBlockRate"    column="total_block_rate"    />
35
+        <result property="dailyBlockRate"    column="daily_block_rate"    />
36
+        <result property="totalLuggageCount"    column="total_luggage_count"    />
37
+        <result property="totalBlockedCount"    column="total_blocked_count"    />
38
+        <result property="dailyBlockedCount"    column="daily_blocked_count"    />
39
+        <result property="aiReviewImageTotal"    column="ai_review_image_total"    />
40
+        <result property="aiMarkTotal"    column="ai_mark_total"    />
41
+        <result property="aiErrorImageTotal"    column="ai_error_image_total"    />
42
+        <result property="aiMissImageTotal"    column="ai_miss_image_total"    />
43
+        <result property="createBy"    column="create_by"    />
44
+        <result property="createTime"    column="create_time"    />
45
+        <result property="updateBy"    column="update_by"    />
46
+        <result property="updateTime"    column="update_time"    />
47
+        <result property="remark"    column="remark"    />
48
+        <result property="delFlag"    column="del_flag"    />
49
+    </resultMap>
50
+
51
+    <sql id="selectBlockedLuggageStatisticsDailyVo">
52
+        select id, stat_date, shift_type, brigade_id, brigade_name, 
53
+               t1_travel_luggage_count, t1_walk_luggage_count, t2_travel_luggage_count, t2_walk_luggage_count,
54
+               t1_travel_blocked_count, t2_travel_blocked_count, t1_walk_blocked_count, t2_walk_blocked_count,
55
+               t1_review_image_total, t1_ai_mark_total, t1_ai_error_total, t1_ai_miss_total,
56
+               t2_review_image_total, t2_ai_mark_total, t2_ai_error_total, t2_ai_miss_total,
57
+               other_vip_count,
58
+               t1_travel_block_rate, t2_travel_block_rate, t1_walk_block_rate, t2_walk_block_rate,
59
+               total_block_rate, daily_block_rate,
60
+               total_luggage_count, total_blocked_count, daily_blocked_count,
61
+               ai_review_image_total, ai_mark_total, ai_error_image_total, ai_miss_image_total,
62
+               create_by, create_time, update_by, update_time, remark, del_flag
63
+        from blocked_luggage_statistics_daily
64
+    </sql>
65
+
66
+    <select id="selectBlockedLuggageStatisticsDailyList" parameterType="BlockedLuggageStatisticsDaily" resultMap="BlockedLuggageStatisticsDailyResult">
67
+        <include refid="selectBlockedLuggageStatisticsDailyVo"/>
68
+        <where>  
69
+            del_flag = '0'
70
+            <if test="statDate != null "> and stat_date = #{statDate}</if>
71
+            <if test="shiftType != null  and shiftType != ''"> and shift_type = #{shiftType}</if>
72
+            <if test="brigadeId != null "> and brigade_id = #{brigadeId}</if>
73
+            <if test="brigadeName != null  and brigadeName != ''"> and brigade_name like concat('%', #{brigadeName}, '%')</if>
74
+        </where>
75
+        order by stat_date desc, shift_type, brigade_id
76
+    </select>
77
+    
78
+    <select id="selectBlockedLuggageStatisticsDailyById" parameterType="Long" resultMap="BlockedLuggageStatisticsDailyResult">
79
+        <include refid="selectBlockedLuggageStatisticsDailyVo"/>
80
+        where id = #{id} and del_flag = '0'
81
+    </select>
82
+        
83
+    <insert id="insertBlockedLuggageStatisticsDaily" parameterType="BlockedLuggageStatisticsDaily" useGeneratedKeys="true" keyProperty="id">
84
+        insert into blocked_luggage_statistics_daily
85
+        <trim prefix="(" suffix=")" suffixOverrides=",">
86
+            <if test="statDate != null">stat_date,</if>
87
+            <if test="shiftType != null and shiftType != ''">shift_type,</if>
88
+            <if test="brigadeId != null">brigade_id,</if>
89
+            <if test="brigadeName != null and brigadeName != ''">brigade_name,</if>
90
+            <if test="t1TravelLuggageCount != null">t1_travel_luggage_count,</if>
91
+            <if test="t1WalkLuggageCount != null">t1_walk_luggage_count,</if>
92
+            <if test="t2TravelLuggageCount != null">t2_travel_luggage_count,</if>
93
+            <if test="t2WalkLuggageCount != null">t2_walk_luggage_count,</if>
94
+            <if test="t1TravelBlockedCount != null">t1_travel_blocked_count,</if>
95
+            <if test="t2TravelBlockedCount != null">t2_travel_blocked_count,</if>
96
+            <if test="t1WalkBlockedCount != null">t1_walk_blocked_count,</if>
97
+            <if test="t2WalkBlockedCount != null">t2_walk_blocked_count,</if>
98
+            <if test="t1ReviewImageTotal != null">t1_review_image_total,</if>
99
+            <if test="t1AiMarkTotal != null">t1_ai_mark_total,</if>
100
+            <if test="t1AiErrorTotal != null">t1_ai_error_total,</if>
101
+            <if test="t1AiMissTotal != null">t1_ai_miss_total,</if>
102
+            <if test="t2ReviewImageTotal != null">t2_review_image_total,</if>
103
+            <if test="t2AiMarkTotal != null">t2_ai_mark_total,</if>
104
+            <if test="t2AiErrorTotal != null">t2_ai_error_total,</if>
105
+            <if test="t2AiMissTotal != null">t2_ai_miss_total,</if>
106
+            <if test="otherVipCount != null">other_vip_count,</if>
107
+            <if test="t1TravelBlockRate != null">t1_travel_block_rate,</if>
108
+            <if test="t2TravelBlockRate != null">t2_travel_block_rate,</if>
109
+            <if test="t1WalkBlockRate != null">t1_walk_block_rate,</if>
110
+            <if test="t2WalkBlockRate != null">t2_walk_block_rate,</if>
111
+            <if test="totalBlockRate != null">total_block_rate,</if>
112
+            <if test="dailyBlockRate != null">daily_block_rate,</if>
113
+            <if test="totalLuggageCount != null">total_luggage_count,</if>
114
+            <if test="totalBlockedCount != null">total_blocked_count,</if>
115
+            <if test="dailyBlockedCount != null">daily_blocked_count,</if>
116
+            <if test="aiReviewImageTotal != null">ai_review_image_total,</if>
117
+            <if test="aiMarkTotal != null">ai_mark_total,</if>
118
+            <if test="aiErrorImageTotal != null">ai_error_image_total,</if>
119
+            <if test="aiMissImageTotal != null">ai_miss_image_total,</if>
120
+            <if test="createBy != null and createBy != ''">create_by,</if>
121
+            <if test="createTime != null">create_time,</if>
122
+            <if test="updateBy != null and updateBy != ''">update_by,</if>
123
+            <if test="updateTime != null">update_time,</if>
124
+            <if test="remark != null">remark,</if>
125
+            <if test="delFlag != null and delFlag != ''">del_flag,</if>
126
+         </trim>
127
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
128
+            <if test="statDate != null">#{statDate},</if>
129
+            <if test="shiftType != null and shiftType != ''">#{shiftType},</if>
130
+            <if test="brigadeId != null">#{brigadeId},</if>
131
+            <if test="brigadeName != null and brigadeName != ''">#{brigadeName},</if>
132
+            <if test="t1TravelLuggageCount != null">#{t1TravelLuggageCount},</if>
133
+            <if test="t1WalkLuggageCount != null">#{t1WalkLuggageCount},</if>
134
+            <if test="t2TravelLuggageCount != null">#{t2TravelLuggageCount},</if>
135
+            <if test="t2WalkLuggageCount != null">#{t2WalkLuggageCount},</if>
136
+            <if test="t1TravelBlockedCount != null">#{t1TravelBlockedCount},</if>
137
+            <if test="t2TravelBlockedCount != null">#{t2TravelBlockedCount},</if>
138
+            <if test="t1WalkBlockedCount != null">#{t1WalkBlockedCount},</if>
139
+            <if test="t2WalkBlockedCount != null">#{t2WalkBlockedCount},</if>
140
+            <if test="t1ReviewImageTotal != null">#{t1ReviewImageTotal},</if>
141
+            <if test="t1AiMarkTotal != null">#{t1AiMarkTotal},</if>
142
+            <if test="t1AiErrorTotal != null">#{t1AiErrorTotal},</if>
143
+            <if test="t1AiMissTotal != null">#{t1AiMissTotal},</if>
144
+            <if test="t2ReviewImageTotal != null">#{t2ReviewImageTotal},</if>
145
+            <if test="t2AiMarkTotal != null">#{t2AiMarkTotal},</if>
146
+            <if test="t2AiErrorTotal != null">#{t2AiErrorTotal},</if>
147
+            <if test="t2AiMissTotal != null">#{t2AiMissTotal},</if>
148
+            <if test="otherVipCount != null">#{otherVipCount},</if>
149
+            <if test="t1TravelBlockRate != null">#{t1TravelBlockRate},</if>
150
+            <if test="t2TravelBlockRate != null">#{t2TravelBlockRate},</if>
151
+            <if test="t1WalkBlockRate != null">#{t1WalkBlockRate},</if>
152
+            <if test="t2WalkBlockRate != null">#{t2WalkBlockRate},</if>
153
+            <if test="totalBlockRate != null">#{totalBlockRate},</if>
154
+            <if test="dailyBlockRate != null">#{dailyBlockRate},</if>
155
+            <if test="totalLuggageCount != null">#{totalLuggageCount},</if>
156
+            <if test="totalBlockedCount != null">#{totalBlockedCount},</if>
157
+            <if test="dailyBlockedCount != null">#{dailyBlockedCount},</if>
158
+            <if test="aiReviewImageTotal != null">#{aiReviewImageTotal},</if>
159
+            <if test="aiMarkTotal != null">#{aiMarkTotal},</if>
160
+            <if test="aiErrorImageTotal != null">#{aiErrorImageTotal},</if>
161
+            <if test="aiMissImageTotal != null">#{aiMissImageTotal},</if>
162
+            <if test="createBy != null and createBy != ''">#{createBy},</if>
163
+            <if test="createTime != null">#{createTime},</if>
164
+            <if test="updateBy != null and updateBy != ''">#{updateBy},</if>
165
+            <if test="updateTime != null">#{updateTime},</if>
166
+            <if test="remark != null">#{remark},</if>
167
+            <if test="delFlag != null and delFlag != ''">#{delFlag},</if>
168
+         </trim>
169
+    </insert>
170
+
171
+    <update id="updateBlockedLuggageStatisticsDaily" parameterType="BlockedLuggageStatisticsDaily">
172
+        update blocked_luggage_statistics_daily
173
+        <trim prefix="SET" suffixOverrides=",">
174
+            <if test="statDate != null">stat_date = #{statDate},</if>
175
+            <if test="shiftType != null and shiftType != ''">shift_type = #{shiftType},</if>
176
+            <if test="brigadeId != null">brigade_id = #{brigadeId},</if>
177
+            <if test="brigadeName != null and brigadeName != ''">brigade_name = #{brigadeName},</if>
178
+            <if test="t1TravelLuggageCount != null">t1_travel_luggage_count = #{t1TravelLuggageCount},</if>
179
+            <if test="t1WalkLuggageCount != null">t1_walk_luggage_count = #{t1WalkLuggageCount},</if>
180
+            <if test="t2TravelLuggageCount != null">t2_travel_luggage_count = #{t2TravelLuggageCount},</if>
181
+            <if test="t2WalkLuggageCount != null">t2_walk_luggage_count = #{t2WalkLuggageCount},</if>
182
+            <if test="t1TravelBlockedCount != null">t1_travel_blocked_count = #{t1TravelBlockedCount},</if>
183
+            <if test="t2TravelBlockedCount != null">t2_travel_blocked_count = #{t2TravelBlockedCount},</if>
184
+            <if test="t1WalkBlockedCount != null">t1_walk_blocked_count = #{t1WalkBlockedCount},</if>
185
+            <if test="t2WalkBlockedCount != null">t2_walk_blocked_count = #{t2WalkBlockedCount},</if>
186
+            <if test="t1ReviewImageTotal != null">t1_review_image_total = #{t1ReviewImageTotal},</if>
187
+            <if test="t1AiMarkTotal != null">t1_ai_mark_total = #{t1AiMarkTotal},</if>
188
+            <if test="t1AiErrorTotal != null">t1_ai_error_total = #{t1AiErrorTotal},</if>
189
+            <if test="t1AiMissTotal != null">t1_ai_miss_total = #{t1AiMissTotal},</if>
190
+            <if test="t2ReviewImageTotal != null">t2_review_image_total = #{t2ReviewImageTotal},</if>
191
+            <if test="t2AiMarkTotal != null">t2_ai_mark_total = #{t2AiMarkTotal},</if>
192
+            <if test="t2AiErrorTotal != null">t2_ai_error_total = #{t2AiErrorTotal},</if>
193
+            <if test="t2AiMissTotal != null">t2_ai_miss_total = #{t2AiMissTotal},</if>
194
+            <if test="otherVipCount != null">other_vip_count = #{otherVipCount},</if>
195
+            <if test="t1TravelBlockRate != null">t1_travel_block_rate = #{t1TravelBlockRate},</if>
196
+            <if test="t2TravelBlockRate != null">t2_travel_block_rate = #{t2TravelBlockRate},</if>
197
+            <if test="t1WalkBlockRate != null">t1_walk_block_rate = #{t1WalkBlockRate},</if>
198
+            <if test="t2WalkBlockRate != null">t2_walk_block_rate = #{t2WalkBlockRate},</if>
199
+            <if test="totalBlockRate != null">total_block_rate = #{totalBlockRate},</if>
200
+            <if test="dailyBlockRate != null">daily_block_rate = #{dailyBlockRate},</if>
201
+            <if test="totalLuggageCount != null">total_luggage_count = #{totalLuggageCount},</if>
202
+            <if test="totalBlockedCount != null">total_blocked_count = #{totalBlockedCount},</if>
203
+            <if test="dailyBlockedCount != null">daily_blocked_count = #{dailyBlockedCount},</if>
204
+            <if test="aiReviewImageTotal != null">ai_review_image_total = #{aiReviewImageTotal},</if>
205
+            <if test="aiMarkTotal != null">ai_mark_total = #{aiMarkTotal},</if>
206
+            <if test="aiErrorImageTotal != null">ai_error_image_total = #{aiErrorImageTotal},</if>
207
+            <if test="aiMissImageTotal != null">ai_miss_image_total = #{aiMissImageTotal},</if>
208
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
209
+            <if test="updateTime != null">update_time = #{updateTime},</if>
210
+            <if test="remark != null">remark = #{remark},</if>
211
+        </trim>
212
+        where id = #{id}
213
+    </update>
214
+
215
+    <delete id="deleteBlockedLuggageStatisticsDailyById" parameterType="Long">
216
+        update blocked_luggage_statistics_daily set del_flag = '2' where id = #{id}
217
+    </delete>
218
+
219
+    <delete id="deleteBlockedLuggageStatisticsDailyByIds" parameterType="String">
220
+        update blocked_luggage_statistics_daily set del_flag = '2' where id in 
221
+        <foreach item="id" collection="array" open="(" separator="," close=")">
222
+            #{id}
223
+        </foreach>
224
+    </delete>
225
+</mapper>

+ 223 - 0
airport-blocked/src/main/resources/mapper/blocked/BlockedMissCheckStatisticsMapper.xml

@@ -0,0 +1,223 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper
3
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
4
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
5
+<mapper namespace="com.sundot.airport.blocked.mapper.BlockedMissCheckStatisticsMapper">
6
+    
7
+    <resultMap type="BlockedMissCheckStatistics" id="BlockedMissCheckStatisticsResult">
8
+        <result property="id"    column="id"    />
9
+        <result property="brigadeId"    column="brigade_id"    />
10
+        <result property="brigadeName"    column="brigade_name"    />
11
+        <result property="terminalId"    column="terminal_id"    />
12
+        <result property="terminalName"    column="terminal_name"    />
13
+        <result property="areaId"    column="area_id"    />
14
+        <result property="areaName"    column="area_name"    />
15
+        <result property="channelId"    column="channel_id"    />
16
+        <result property="channelName"    column="channel_name"    />
17
+        <result property="reviewedUserId"    column="reviewed_user_id"    />
18
+        <result property="reviewedUserName"    column="reviewed_user_name"    />
19
+        <result property="reviewUserId"    column="review_user_id"    />
20
+        <result property="reviewUserName"    column="review_user_name"    />
21
+        <result property="supervisorId"    column="supervisor_id"    />
22
+        <result property="supervisorName"    column="supervisor_name"    />
23
+        <result property="actingSupervisorId"    column="acting_supervisor_id"    />
24
+        <result property="actingSupervisorName"    column="acting_supervisor_name"    />
25
+        <result property="teamLeaderId"    column="team_leader_id"    />
26
+        <result property="teamLeaderName"    column="team_leader_name"    />
27
+        <result property="reviewDate"    column="review_date"    />
28
+        <result property="missCheckTime"    column="miss_check_time"    />
29
+        <result property="missCheckTimePeriod"    column="miss_check_time_period"    />
30
+        <result property="missCheckItem"    column="miss_check_item"    />
31
+        <result property="itemLocation"    column="item_location"    />
32
+        <result property="difficultyLevel"    column="difficulty_level"    />
33
+        <result property="discriminationType"    column="discrimination_type"    />
34
+        <result property="isRecovered"    column="is_recovered"    />
35
+        <result property="machineOperatingYears"    column="machine_operating_years"    />
36
+        <result property="certificateLevel"    column="certificate_level"    />
37
+        <result property="gender"    column="gender"    />
38
+        <result property="missCheckReasonCategory"    column="miss_check_reason_category"    />
39
+        <result property="monthlyAssessment"    column="monthly_assessment"    />
40
+        <result property="selfTestHasMissCheck"    column="self_test_has_miss_check"    />
41
+        <result property="createBy"    column="create_by"    />
42
+        <result property="createTime"    column="create_time"    />
43
+        <result property="updateBy"    column="update_by"    />
44
+        <result property="updateTime"    column="update_time"    />
45
+        <result property="remark"    column="remark"    />
46
+        <result property="delFlag"    column="del_flag"    />
47
+    </resultMap>
48
+
49
+    <sql id="selectBlockedMissCheckStatisticsVo">
50
+        select id, brigade_id, brigade_name, terminal_id, terminal_name, area_id, area_name, 
51
+               channel_id, channel_name, reviewed_user_id, reviewed_user_name, review_user_id, 
52
+               review_user_name, supervisor_id, supervisor_name, acting_supervisor_id, 
53
+               acting_supervisor_name, team_leader_id, team_leader_name, review_date, 
54
+               miss_check_time, miss_check_time_period, miss_check_item, item_location, 
55
+               difficulty_level, discrimination_type, is_recovered, machine_operating_years, 
56
+               certificate_level, gender, miss_check_reason_category, monthly_assessment, 
57
+               self_test_has_miss_check, create_by, create_time, update_by, update_time, 
58
+               remark, del_flag
59
+        from blocked_miss_check_statistics
60
+    </sql>
61
+
62
+    <select id="selectBlockedMissCheckStatisticsList" parameterType="BlockedMissCheckStatistics" resultMap="BlockedMissCheckStatisticsResult">
63
+        <include refid="selectBlockedMissCheckStatisticsVo"/>
64
+        <where>  
65
+            del_flag = '0'
66
+            <if test="brigadeId != null "> and brigade_id = #{brigadeId}</if>
67
+            <if test="brigadeName != null  and brigadeName != ''"> and brigade_name like concat('%', #{brigadeName}, '%')</if>
68
+            <if test="terminalId != null "> and terminal_id = #{terminalId}</if>
69
+            <if test="areaId != null "> and area_id = #{areaId}</if>
70
+            <if test="channelId != null "> and channel_id = #{channelId}</if>
71
+            <if test="reviewedUserId != null "> and reviewed_user_id = #{reviewedUserId}</if>
72
+            <if test="reviewedUserName != null  and reviewedUserName != ''"> and reviewed_user_name like concat('%', #{reviewedUserName}, '%')</if>
73
+            <if test="reviewUserId != null "> and review_user_id = #{reviewUserId}</if>
74
+            <if test="reviewDate != null "> and review_date = #{reviewDate}</if>
75
+            <if test="missCheckTime != null "> and DATE_FORMAT(miss_check_time, '%Y-%m-%d %H:%i') = DATE_FORMAT(#{missCheckTime}, '%Y-%m-%d %H:%i')</if>
76
+            <if test="difficultyLevel != null  and difficultyLevel != ''"> and difficulty_level = #{difficultyLevel}</if>
77
+            <if test="gender != null  and gender != ''"> and gender = #{gender}</if>
78
+        </where>
79
+        order by review_date desc, miss_check_time desc
80
+    </select>
81
+    
82
+    <select id="selectBlockedMissCheckStatisticsById" parameterType="Long" resultMap="BlockedMissCheckStatisticsResult">
83
+        <include refid="selectBlockedMissCheckStatisticsVo"/>
84
+        where id = #{id} and del_flag = '0'
85
+    </select>
86
+        
87
+    <insert id="insertBlockedMissCheckStatistics" parameterType="BlockedMissCheckStatistics" useGeneratedKeys="true" keyProperty="id">
88
+        insert into blocked_miss_check_statistics
89
+        <trim prefix="(" suffix=")" suffixOverrides=",">
90
+            <if test="brigadeId != null">brigade_id,</if>
91
+            <if test="brigadeName != null and brigadeName != ''">brigade_name,</if>
92
+            <if test="terminalId != null">terminal_id,</if>
93
+            <if test="terminalName != null and terminalName != ''">terminal_name,</if>
94
+            <if test="areaId != null">area_id,</if>
95
+            <if test="areaName != null and areaName != ''">area_name,</if>
96
+            <if test="channelId != null">channel_id,</if>
97
+            <if test="channelName != null and channelName != ''">channel_name,</if>
98
+            <if test="reviewedUserId != null">reviewed_user_id,</if>
99
+            <if test="reviewedUserName != null and reviewedUserName != ''">reviewed_user_name,</if>
100
+            <if test="reviewUserId != null">review_user_id,</if>
101
+            <if test="reviewUserName != null and reviewUserName != ''">review_user_name,</if>
102
+            <if test="supervisorId != null">supervisor_id,</if>
103
+            <if test="supervisorName != null and supervisorName != ''">supervisor_name,</if>
104
+            <if test="actingSupervisorId != null">acting_supervisor_id,</if>
105
+            <if test="actingSupervisorName != null and actingSupervisorName != ''">acting_supervisor_name,</if>
106
+            <if test="teamLeaderId != null">team_leader_id,</if>
107
+            <if test="teamLeaderName != null and teamLeaderName != ''">team_leader_name,</if>
108
+            <if test="reviewDate != null">review_date,</if>
109
+            <if test="missCheckTime != null">miss_check_time,</if>
110
+            <if test="missCheckTimePeriod != null and missCheckTimePeriod != ''">miss_check_time_period,</if>
111
+            <if test="missCheckItem != null and missCheckItem != ''">miss_check_item,</if>
112
+            <if test="itemLocation != null and itemLocation != ''">item_location,</if>
113
+            <if test="difficultyLevel != null and difficultyLevel != ''">difficulty_level,</if>
114
+            <if test="discriminationType != null and discriminationType != ''">discrimination_type,</if>
115
+            <if test="isRecovered != null">is_recovered,</if>
116
+            <if test="machineOperatingYears != null">machine_operating_years,</if>
117
+            <if test="certificateLevel != null and certificateLevel != ''">certificate_level,</if>
118
+            <if test="gender != null and gender != ''">gender,</if>
119
+            <if test="missCheckReasonCategory != null and missCheckReasonCategory != ''">miss_check_reason_category,</if>
120
+            <if test="monthlyAssessment != null and monthlyAssessment != ''">monthly_assessment,</if>
121
+            <if test="selfTestHasMissCheck != null">self_test_has_miss_check,</if>
122
+            <if test="createBy != null and createBy != ''">create_by,</if>
123
+            <if test="createTime != null">create_time,</if>
124
+            <if test="updateBy != null and updateBy != ''">update_by,</if>
125
+            <if test="updateTime != null">update_time,</if>
126
+            <if test="remark != null">remark,</if>
127
+            <if test="delFlag != null and delFlag != ''">del_flag,</if>
128
+         </trim>
129
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
130
+            <if test="brigadeId != null">#{brigadeId},</if>
131
+            <if test="brigadeName != null and brigadeName != ''">#{brigadeName},</if>
132
+            <if test="terminalId != null">#{terminalId},</if>
133
+            <if test="terminalName != null and terminalName != ''">#{terminalName},</if>
134
+            <if test="areaId != null">#{areaId},</if>
135
+            <if test="areaName != null and areaName != ''">#{areaName},</if>
136
+            <if test="channelId != null">#{channelId},</if>
137
+            <if test="channelName != null and channelName != ''">#{channelName},</if>
138
+            <if test="reviewedUserId != null">#{reviewedUserId},</if>
139
+            <if test="reviewedUserName != null and reviewedUserName != ''">#{reviewedUserName},</if>
140
+            <if test="reviewUserId != null">#{reviewUserId},</if>
141
+            <if test="reviewUserName != null and reviewUserName != ''">#{reviewUserName},</if>
142
+            <if test="supervisorId != null">#{supervisorId},</if>
143
+            <if test="supervisorName != null and supervisorName != ''">#{supervisorName},</if>
144
+            <if test="actingSupervisorId != null">#{actingSupervisorId},</if>
145
+            <if test="actingSupervisorName != null and actingSupervisorName != ''">#{actingSupervisorName},</if>
146
+            <if test="teamLeaderId != null">#{teamLeaderId},</if>
147
+            <if test="teamLeaderName != null and teamLeaderName != ''">#{teamLeaderName},</if>
148
+            <if test="reviewDate != null">#{reviewDate},</if>
149
+            <if test="missCheckTime != null">#{missCheckTime},</if>
150
+            <if test="missCheckTimePeriod != null and missCheckTimePeriod != ''">#{missCheckTimePeriod},</if>
151
+            <if test="missCheckItem != null and missCheckItem != ''">#{missCheckItem},</if>
152
+            <if test="itemLocation != null and itemLocation != ''">#{itemLocation},</if>
153
+            <if test="difficultyLevel != null and difficultyLevel != ''">#{difficultyLevel},</if>
154
+            <if test="discriminationType != null and discriminationType != ''">#{discriminationType},</if>
155
+            <if test="isRecovered != null">#{isRecovered},</if>
156
+            <if test="machineOperatingYears != null">#{machineOperatingYears},</if>
157
+            <if test="certificateLevel != null and certificateLevel != ''">#{certificateLevel},</if>
158
+            <if test="gender != null and gender != ''">#{gender},</if>
159
+            <if test="missCheckReasonCategory != null and missCheckReasonCategory != ''">#{missCheckReasonCategory},</if>
160
+            <if test="monthlyAssessment != null and monthlyAssessment != ''">#{monthlyAssessment},</if>
161
+            <if test="selfTestHasMissCheck != null">#{selfTestHasMissCheck},</if>
162
+            <if test="createBy != null and createBy != ''">#{createBy},</if>
163
+            <if test="createTime != null">#{createTime},</if>
164
+            <if test="updateBy != null and updateBy != ''">#{updateBy},</if>
165
+            <if test="updateTime != null">#{updateTime},</if>
166
+            <if test="remark != null">#{remark},</if>
167
+            <if test="delFlag != null and delFlag != ''">#{delFlag},</if>
168
+         </trim>
169
+    </insert>
170
+
171
+    <update id="updateBlockedMissCheckStatistics" parameterType="BlockedMissCheckStatistics">
172
+        update blocked_miss_check_statistics
173
+        <trim prefix="SET" suffixOverrides=",">
174
+            <if test="brigadeId != null">brigade_id = #{brigadeId},</if>
175
+            <if test="brigadeName != null and brigadeName != ''">brigade_name = #{brigadeName},</if>
176
+            <if test="terminalId != null">terminal_id = #{terminalId},</if>
177
+            <if test="terminalName != null and terminalName != ''">terminal_name = #{terminalName},</if>
178
+            <if test="areaId != null">area_id = #{areaId},</if>
179
+            <if test="areaName != null and areaName != ''">area_name = #{areaName},</if>
180
+            <if test="channelId != null">channel_id = #{channelId},</if>
181
+            <if test="channelName != null and channelName != ''">channel_name = #{channelName},</if>
182
+            <if test="reviewedUserId != null">reviewed_user_id = #{reviewedUserId},</if>
183
+            <if test="reviewedUserName != null and reviewedUserName != ''">reviewed_user_name = #{reviewedUserName},</if>
184
+            <if test="reviewUserId != null">review_user_id = #{reviewUserId},</if>
185
+            <if test="reviewUserName != null and reviewUserName != ''">review_user_name = #{reviewUserName},</if>
186
+            <if test="supervisorId != null">supervisor_id = #{supervisorId},</if>
187
+            <if test="supervisorName != null and supervisorName != ''">supervisor_name = #{supervisorName},</if>
188
+            <if test="actingSupervisorId != null">acting_supervisor_id = #{actingSupervisorId},</if>
189
+            <if test="actingSupervisorName != null and actingSupervisorName != ''">acting_supervisor_name = #{actingSupervisorName},</if>
190
+            <if test="teamLeaderId != null">team_leader_id = #{teamLeaderId},</if>
191
+            <if test="teamLeaderName != null and teamLeaderName != ''">team_leader_name = #{teamLeaderName},</if>
192
+            <if test="reviewDate != null">review_date = #{reviewDate},</if>
193
+            <if test="missCheckTime != null">miss_check_time = #{missCheckTime},</if>
194
+            <if test="missCheckTimePeriod != null and missCheckTimePeriod != ''">miss_check_time_period = #{missCheckTimePeriod},</if>
195
+            <if test="missCheckItem != null and missCheckItem != ''">miss_check_item = #{missCheckItem},</if>
196
+            <if test="itemLocation != null and itemLocation != ''">item_location = #{itemLocation},</if>
197
+            <if test="difficultyLevel != null and difficultyLevel != ''">difficulty_level = #{difficultyLevel},</if>
198
+            <if test="discriminationType != null and discriminationType != ''">discrimination_type = #{discriminationType},</if>
199
+            <if test="isRecovered != null">is_recovered = #{isRecovered},</if>
200
+            <if test="machineOperatingYears != null">machine_operating_years = #{machineOperatingYears},</if>
201
+            <if test="certificateLevel != null and certificateLevel != ''">certificate_level = #{certificateLevel},</if>
202
+            <if test="gender != null and gender != ''">gender = #{gender},</if>
203
+            <if test="missCheckReasonCategory != null and missCheckReasonCategory != ''">miss_check_reason_category = #{missCheckReasonCategory},</if>
204
+            <if test="monthlyAssessment != null and monthlyAssessment != ''">monthly_assessment = #{monthlyAssessment},</if>
205
+            <if test="selfTestHasMissCheck != null">self_test_has_miss_check = #{selfTestHasMissCheck},</if>
206
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
207
+            <if test="updateTime != null">update_time = #{updateTime},</if>
208
+            <if test="remark != null">remark = #{remark},</if>
209
+        </trim>
210
+        where id = #{id}
211
+    </update>
212
+
213
+    <delete id="deleteBlockedMissCheckStatisticsById" parameterType="Long">
214
+        update blocked_miss_check_statistics set del_flag = '2' where id = #{id}
215
+    </delete>
216
+
217
+    <delete id="deleteBlockedMissCheckStatisticsByIds" parameterType="String">
218
+        update blocked_miss_check_statistics set del_flag = '2' where id in 
219
+        <foreach item="id" collection="array" open="(" separator="," close=")">
220
+            #{id}
221
+        </foreach>
222
+    </delete>
223
+</mapper>

+ 8 - 0
pom.xml

@@ -253,6 +253,13 @@
253 253
                 <version>${airport.version}</version>
254 254
             </dependency>
255 255
 
256
+            <!-- 行李查堵统计模块-->
257
+            <dependency>
258
+                <groupId>com.sundot.airport</groupId>
259
+                <artifactId>airport-blocked</artifactId>
260
+                <version>${airport.version}</version>
261
+            </dependency>
262
+
256 263
             <dependency>
257 264
                 <groupId>org.projectlombok</groupId>
258 265
                 <artifactId>lombok</artifactId>
@@ -281,6 +288,7 @@
281 288
         <module>airport-exam</module>
282 289
         <module>airport-check</module>
283 290
         <module>airport-attendance</module>
291
+        <module>airport-blocked</module>
284 292
     </modules>
285 293
     <packaging>pom</packaging>
286 294