Browse Source

海口大屏及数据导入功能:查获/运行/待检区/劝阻充电宝数据的CRUD、自定义Excel导入解析、大屏接口免鉴权

simonlll 1 month ago
parent
commit
110a0e48f9
42 changed files with 3281 additions and 2 deletions
  1. 146 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/item/HkLargeScreenController.java
  2. 156 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/item/HkOperationDataController.java
  3. 171 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/item/HkPendingConfiscateController.java
  4. 167 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/item/HkPersuadePowerBankController.java
  5. 172 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/item/HkSeizureStatController.java
  6. 1 1
      airport-framework/src/main/java/com/sundot/airport/framework/config/SecurityConfig.java
  7. 1 1
      airport-framework/src/main/java/com/sundot/airport/framework/config/WebAdminInterceptorConfig.java
  8. 171 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkOperationData.java
  9. 142 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkPendingConfiscate.java
  10. 139 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkPersuadePowerBank.java
  11. 28 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenBrigadeSeizureVO.java
  12. 24 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenCargoTrendVO.java
  13. 24 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenLuggageCheckTrendVO.java
  14. 28 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenOperationSummaryVO.java
  15. 22 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenPendingConfiscateSummaryVO.java
  16. 37 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenPowerBankSummaryVO.java
  17. 19 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenSeizureCategoryVO.java
  18. 26 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenSeizureTotalVO.java
  19. 24 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenT1PassengerTrendVO.java
  20. 24 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenT2PassengerTrendVO.java
  21. 24 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenVehicleCheckTrendVO.java
  22. 203 0
      airport-item/src/main/java/com/sundot/airport/item/domain/HkSeizureStat.java
  23. 64 0
      airport-item/src/main/java/com/sundot/airport/item/mapper/HkLargeScreenMapper.java
  24. 21 0
      airport-item/src/main/java/com/sundot/airport/item/mapper/HkOperationDataMapper.java
  25. 22 0
      airport-item/src/main/java/com/sundot/airport/item/mapper/HkPendingConfiscateMapper.java
  26. 22 0
      airport-item/src/main/java/com/sundot/airport/item/mapper/HkPersuadePowerBankMapper.java
  27. 22 0
      airport-item/src/main/java/com/sundot/airport/item/mapper/HkSeizureStatMapper.java
  28. 35 0
      airport-item/src/main/java/com/sundot/airport/item/service/IHkLargeScreenService.java
  29. 20 0
      airport-item/src/main/java/com/sundot/airport/item/service/IHkOperationDataService.java
  30. 20 0
      airport-item/src/main/java/com/sundot/airport/item/service/IHkPendingConfiscateService.java
  31. 20 0
      airport-item/src/main/java/com/sundot/airport/item/service/IHkPersuadePowerBankService.java
  32. 20 0
      airport-item/src/main/java/com/sundot/airport/item/service/IHkSeizureStatService.java
  33. 93 0
      airport-item/src/main/java/com/sundot/airport/item/service/impl/HkLargeScreenServiceImpl.java
  34. 87 0
      airport-item/src/main/java/com/sundot/airport/item/service/impl/HkOperationDataServiceImpl.java
  35. 91 0
      airport-item/src/main/java/com/sundot/airport/item/service/impl/HkPendingConfiscateServiceImpl.java
  36. 91 0
      airport-item/src/main/java/com/sundot/airport/item/service/impl/HkPersuadePowerBankServiceImpl.java
  37. 91 0
      airport-item/src/main/java/com/sundot/airport/item/service/impl/HkSeizureStatServiceImpl.java
  38. 173 0
      airport-item/src/main/resources/mapper/item/HkLargeScreenMapper.xml
  39. 172 0
      airport-item/src/main/resources/mapper/item/HkOperationDataMapper.xml
  40. 145 0
      airport-item/src/main/resources/mapper/item/HkPendingConfiscateMapper.xml
  41. 138 0
      airport-item/src/main/resources/mapper/item/HkPersuadePowerBankMapper.xml
  42. 185 0
      airport-item/src/main/resources/mapper/item/HkSeizureStatMapper.xml

+ 146 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/item/HkLargeScreenController.java

@@ -0,0 +1,146 @@
1
+package com.sundot.airport.web.controller.item;
2
+
3
+import com.sundot.airport.common.core.controller.BaseController;
4
+import com.sundot.airport.common.core.domain.AjaxResult;
5
+import com.sundot.airport.item.service.IHkLargeScreenService;
6
+import org.springframework.beans.factory.annotation.Autowired;
7
+import org.springframework.format.annotation.DateTimeFormat;
8
+import org.springframework.web.bind.annotation.GetMapping;
9
+import org.springframework.web.bind.annotation.RequestMapping;
10
+import org.springframework.web.bind.annotation.RequestParam;
11
+import org.springframework.web.bind.annotation.RestController;
12
+
13
+import java.util.Date;
14
+
15
+/**
16
+ * 运行数据大屏 Controller(第二大屏,独立于查获大屏)
17
+ * 基础路径:/hk/screen
18
+ *
19
+ * 模块一:运行数据
20
+ *   GET /operationSummary       — 5个数字卡片汇总
21
+ *   GET /t1PassengerTrend       — T1旅检折线图(A区/B区)
22
+ *   GET /t2PassengerTrend       — T2旅检折线图(国内旅检/国际旅检)
23
+ *   GET /luggageCheckTrend      — 行检折线图(T1行检/T2行检)
24
+ *   GET /cargoTrend             — 货物折线图(国内货站/国际货站)
25
+ *   GET /vehicleCheckTrend      — 车辆折线图(南侧车检/北侧车检)
26
+ *
27
+ * 模块二:查获/收缴数据
28
+ *   GET /seizureCategory        — 查获数据分类环形图
29
+ *   GET /brigadeSeizureCompare  — 大队查获对比(白班/夜班 × 大队)
30
+ *   GET /powerBankSummary       — 不合规充电宝环形图
31
+ *   GET /pendingConfiscate      — 待检区收缴物品环形图
32
+ */
33
+@RestController
34
+@RequestMapping("/hk/screen")
35
+public class HkLargeScreenController extends BaseController {
36
+
37
+    @Autowired
38
+    private IHkLargeScreenService service;
39
+
40
+    // ===== 模块一:运行数据 =====
41
+
42
+    /**
43
+     * 运行数据汇总(旅检总人数、行检总数、国内/国际货站总数、车辆总数)
44
+     */
45
+    @GetMapping("/operationSummary")
46
+    public AjaxResult operationSummary(
47
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
48
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
49
+        return success(service.getOperationSummary(startDate, endDate));
50
+    }
51
+
52
+    /**
53
+     * T1旅检过检人数趋势(A区 / B区)
54
+     */
55
+    @GetMapping("/t1PassengerTrend")
56
+    public AjaxResult t1PassengerTrend(
57
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
58
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
59
+        return success(service.getT1PassengerTrend(startDate, endDate));
60
+    }
61
+
62
+    /**
63
+     * T2旅检过检人数趋势(国内旅检 / 国际旅检)
64
+     */
65
+    @GetMapping("/t2PassengerTrend")
66
+    public AjaxResult t2PassengerTrend(
67
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
68
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
69
+        return success(service.getT2PassengerTrend(startDate, endDate));
70
+    }
71
+
72
+    /**
73
+     * 行检过检数趋势(T1行检 / T2行检)
74
+     */
75
+    @GetMapping("/luggageCheckTrend")
76
+    public AjaxResult luggageCheckTrend(
77
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
78
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
79
+        return success(service.getLuggageCheckTrend(startDate, endDate));
80
+    }
81
+
82
+    /**
83
+     * 货物过检数趋势(国内货站 / 国际货站)
84
+     */
85
+    @GetMapping("/cargoTrend")
86
+    public AjaxResult cargoTrend(
87
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
88
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
89
+        return success(service.getCargoTrend(startDate, endDate));
90
+    }
91
+
92
+    /**
93
+     * 车辆过检数趋势(南侧车检 / 北侧车检)
94
+     */
95
+    @GetMapping("/vehicleCheckTrend")
96
+    public AjaxResult vehicleCheckTrend(
97
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
98
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
99
+        return success(service.getVehicleCheckTrend(startDate, endDate));
100
+    }
101
+
102
+    // ===== 模块二:查获/收缴数据 =====
103
+
104
+    /**
105
+     * 查获数据分类环形图
106
+     * 返回:[{name:"火种", total:xxx}, {name:"刀具", total:xxx}, ...]
107
+     */
108
+    @GetMapping("/seizureCategory")
109
+    public AjaxResult seizureCategory(
110
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
111
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
112
+        return success(service.getSeizureCategoryList(startDate, endDate));
113
+    }
114
+
115
+    /**
116
+     * 大队查获数对比柱状图(白班/夜班 × 一/二/三大队)
117
+     * 同一份数据支持:总量对比、T1区对比、T2区对比 三个图
118
+     * 返回:[{shift:"白班", brigade:"一大队", t1Total:xxx, t2Total:xxx, grandTotal:xxx}, ...]
119
+     */
120
+    @GetMapping("/brigadeSeizureCompare")
121
+    public AjaxResult brigadeSeizureCompare(
122
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
123
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
124
+        return success(service.getBrigadeSeizureCompare(startDate, endDate));
125
+    }
126
+
127
+    /**
128
+     * 不合规充电宝功能数据环形图(邮寄/暂存/自弃/两楼总数等)
129
+     */
130
+    @GetMapping("/powerBankSummary")
131
+    public AjaxResult powerBankSummary(
132
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
133
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
134
+        return success(service.getPowerBankSummary(startDate, endDate));
135
+    }
136
+
137
+    /**
138
+     * 待检区收缴禁带物品环形图(火种/液态物品/其他)
139
+     */
140
+    @GetMapping("/pendingConfiscate")
141
+    public AjaxResult pendingConfiscate(
142
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
143
+            @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") Date endDate) {
144
+        return success(service.getPendingConfiscateSummary(startDate, endDate));
145
+    }
146
+}

+ 156 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/item/HkOperationDataController.java

@@ -0,0 +1,156 @@
1
+package com.sundot.airport.web.controller.item;
2
+
3
+import com.sundot.airport.common.annotation.Log;
4
+import com.sundot.airport.common.core.controller.BaseController;
5
+import com.sundot.airport.common.core.domain.AjaxResult;
6
+import com.sundot.airport.common.core.page.TableDataInfo;
7
+import com.sundot.airport.common.enums.BusinessType;
8
+import com.sundot.airport.common.exception.ServiceException;
9
+import com.sundot.airport.common.utils.poi.ExcelUtil;
10
+import com.sundot.airport.item.domain.HkOperationData;
11
+import com.sundot.airport.item.service.IHkOperationDataService;
12
+import org.apache.poi.ss.usermodel.*;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.web.bind.annotation.*;
15
+import org.springframework.web.multipart.MultipartFile;
16
+
17
+import javax.servlet.http.HttpServletResponse;
18
+import java.io.InputStream;
19
+import java.util.ArrayList;
20
+import java.util.List;
21
+
22
+/**
23
+ * 每日运行数据
24
+ */
25
+@RestController
26
+@RequestMapping("/item/hkOperationData")
27
+public class HkOperationDataController extends BaseController {
28
+
29
+    @Autowired
30
+    private IHkOperationDataService service;
31
+
32
+    @GetMapping("/list")
33
+    public TableDataInfo list(HkOperationData query) {
34
+        startPage();
35
+        List<HkOperationData> list = service.selectHkOperationDataList(query);
36
+        return getDataTable(list);
37
+    }
38
+
39
+    @GetMapping("/{id}")
40
+    public AjaxResult getInfo(@PathVariable Long id) {
41
+        return success(service.selectHkOperationDataById(id));
42
+    }
43
+
44
+    @Log(title = "每日运行数据", businessType = BusinessType.EXPORT)
45
+    @PostMapping("/export")
46
+    public void export(HttpServletResponse response, HkOperationData query) {
47
+        List<HkOperationData> list = service.selectHkOperationDataList(query);
48
+        ExcelUtil<HkOperationData> util = new ExcelUtil<>(HkOperationData.class);
49
+        util.exportExcel(response, list, "每日运行数据");
50
+    }
51
+
52
+    @Log(title = "每日运行数据", businessType = BusinessType.INSERT)
53
+    @PostMapping
54
+    public AjaxResult add(@RequestBody HkOperationData data) {
55
+        return toAjax(service.insertHkOperationData(data));
56
+    }
57
+
58
+    @Log(title = "每日运行数据", businessType = BusinessType.UPDATE)
59
+    @PutMapping
60
+    public AjaxResult edit(@RequestBody HkOperationData data) {
61
+        return toAjax(service.updateHkOperationData(data));
62
+    }
63
+
64
+    @Log(title = "每日运行数据", businessType = BusinessType.DELETE)
65
+    @DeleteMapping("/{ids}")
66
+    public AjaxResult remove(@PathVariable Long[] ids) {
67
+        return toAjax(service.deleteHkOperationDataByIds(ids));
68
+    }
69
+
70
+    @PostMapping("/importTemplate")
71
+    public void importTemplate(HttpServletResponse response) {
72
+        ExcelUtil<HkOperationData> util = new ExcelUtil<>(HkOperationData.class);
73
+        util.importTemplateExcel(response, "每日运行数据导入模板");
74
+    }
75
+
76
+    /**
77
+     * 导入客户原始格式的每日运行数据统计表
78
+     * Excel结构:前4行为标题/分组表头,第5行起为数据,列按固定位置映射
79
+     */
80
+    @Log(title = "每日运行数据", businessType = BusinessType.IMPORT)
81
+    @PostMapping("/importData")
82
+    public AjaxResult importData(MultipartFile file) throws Exception {
83
+        if (file == null || file.isEmpty()) {
84
+            throw new ServiceException("请选择要导入的文件");
85
+        }
86
+        List<HkOperationData> list = parseFromExcel(file.getInputStream());
87
+        if (list.isEmpty()) {
88
+            throw new ServiceException("未读取到有效数据,请确认文件格式是否正确");
89
+        }
90
+        String message = service.importData(list);
91
+        return success(message);
92
+    }
93
+
94
+    private List<HkOperationData> parseFromExcel(InputStream is) throws Exception {
95
+        List<HkOperationData> list = new ArrayList<>();
96
+        try (Workbook workbook = WorkbookFactory.create(is)) {
97
+            Sheet sheet = workbook.getSheetAt(0);
98
+            // 前4行:标题、分组表头、子表头、列标题,数据从第5行(索引4)开始
99
+            for (int i = 4; i <= sheet.getLastRowNum(); i++) {
100
+                Row row = sheet.getRow(i);
101
+                if (row == null) continue;
102
+                Cell dateCell = row.getCell(0);
103
+                if (dateCell == null || dateCell.getCellType() == CellType.BLANK) continue;
104
+                if (dateCell.getCellType() != CellType.NUMERIC) continue;
105
+
106
+                HkOperationData data = new HkOperationData();
107
+                // col 0: 日期(Excel序列数或日期格式均支持)
108
+                if (DateUtil.isCellDateFormatted(dateCell)) {
109
+                    data.setRecordDate(dateCell.getDateCellValue());
110
+                } else {
111
+                    data.setRecordDate(DateUtil.getJavaDate(dateCell.getNumericCellValue()));
112
+                }
113
+                data.setAZone(intVal(row, 1));           // A区
114
+                data.setBZone(intVal(row, 2));           // B区
115
+                data.setVip(intVal(row, 3));             // 贵宾
116
+                data.setDomesticPassenger(intVal(row, 4)); // 国内旅检
117
+                data.setIntlPassenger(intVal(row, 5));   // 国际旅检
118
+                data.setVipChannel(intVal(row, 6));      // 贵宾通道
119
+                data.setT1ReturnChannel(intVal(row, 7)); // T1回流通道
120
+                data.setT1LuggageCheck(intVal(row, 8)); // T1行检
121
+                data.setFloor1Staff(intVal(row, 9));     // 一楼员工
122
+                data.setT2ReturnChannel(intVal(row, 10));// T2回流通道
123
+                data.setT2LuggageCheck(intVal(row, 11));// T2行检
124
+                data.setFloor3EastStaff(intVal(row, 12));    // 三楼东区员工
125
+                data.setFloor1CenterStaff(intVal(row, 13));  // 一楼中心区员工
126
+                data.setFloorB1WestStaff(intVal(row, 14));   // 负一楼西区员工
127
+                data.setFloor3WestStaff(intVal(row, 15));    // 三楼西区员工
128
+                data.setDomesticCargo(intVal(row, 16));  // 国内货站
129
+                data.setDomesticGate(intVal(row, 17));   // 道口(国内货站)
130
+                data.setSouthVehicleCheck(intVal(row, 18));  // 南侧车检
131
+                data.setDomesticBomb(intVal(row, 19));   // 防爆(国内货站)
132
+                data.setIntlCargo(intVal(row, 20));      // 国际货站
133
+                data.setIntlGate(intVal(row, 21));       // 道口(国际货站)
134
+                data.setNorthVehicleCheck(intVal(row, 22)); // 北侧车检
135
+                data.setIntlBomb(intVal(row, 23));       // 防爆(国际货站)
136
+                // col 24: 车检总数(公式列,不导入)
137
+                list.add(data);
138
+            }
139
+        }
140
+        return list;
141
+    }
142
+
143
+    private Integer intVal(Row row, int colIdx) {
144
+        Cell cell = row.getCell(colIdx);
145
+        if (cell == null || cell.getCellType() == CellType.BLANK) return null;
146
+        try {
147
+            if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) {
148
+                return (int) cell.getNumericCellValue();
149
+            }
150
+            String s = cell.toString().trim();
151
+            return s.isEmpty() ? null : (int) Double.parseDouble(s);
152
+        } catch (Exception e) {
153
+            return null;
154
+        }
155
+    }
156
+}

+ 171 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/item/HkPendingConfiscateController.java

@@ -0,0 +1,171 @@
1
+package com.sundot.airport.web.controller.item;
2
+
3
+import com.sundot.airport.common.annotation.Log;
4
+import com.sundot.airport.common.core.controller.BaseController;
5
+import com.sundot.airport.common.core.domain.AjaxResult;
6
+import com.sundot.airport.common.core.page.TableDataInfo;
7
+import com.sundot.airport.common.enums.BusinessType;
8
+import com.sundot.airport.common.exception.ServiceException;
9
+import com.sundot.airport.common.utils.poi.ExcelUtil;
10
+import com.sundot.airport.item.domain.HkPendingConfiscate;
11
+import com.sundot.airport.item.service.IHkPendingConfiscateService;
12
+import org.apache.poi.ss.usermodel.*;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.web.bind.annotation.*;
15
+import org.springframework.web.multipart.MultipartFile;
16
+
17
+import javax.servlet.http.HttpServletResponse;
18
+import java.io.InputStream;
19
+import java.util.ArrayList;
20
+import java.util.Date;
21
+import java.util.List;
22
+
23
+/**
24
+ * 待检区收缴数据
25
+ */
26
+@RestController
27
+@RequestMapping("/item/hkPendingConfiscate")
28
+public class HkPendingConfiscateController extends BaseController {
29
+
30
+    @Autowired
31
+    private IHkPendingConfiscateService service;
32
+
33
+    @GetMapping("/list")
34
+    public TableDataInfo list(HkPendingConfiscate query) {
35
+        startPage();
36
+        List<HkPendingConfiscate> list = service.selectHkPendingConfiscateList(query);
37
+        return getDataTable(list);
38
+    }
39
+
40
+    @GetMapping("/{id}")
41
+    public AjaxResult getInfo(@PathVariable Long id) {
42
+        return success(service.selectHkPendingConfiscateById(id));
43
+    }
44
+
45
+    @Log(title = "待检区收缴数据", businessType = BusinessType.EXPORT)
46
+    @PostMapping("/export")
47
+    public void export(HttpServletResponse response, HkPendingConfiscate query) {
48
+        List<HkPendingConfiscate> list = service.selectHkPendingConfiscateList(query);
49
+        ExcelUtil<HkPendingConfiscate> util = new ExcelUtil<>(HkPendingConfiscate.class);
50
+        util.exportExcel(response, list, "待检区收缴数据");
51
+    }
52
+
53
+    @Log(title = "待检区收缴数据", businessType = BusinessType.INSERT)
54
+    @PostMapping
55
+    public AjaxResult add(@RequestBody HkPendingConfiscate data) {
56
+        return toAjax(service.insertHkPendingConfiscate(data));
57
+    }
58
+
59
+    @Log(title = "待检区收缴数据", businessType = BusinessType.UPDATE)
60
+    @PutMapping
61
+    public AjaxResult edit(@RequestBody HkPendingConfiscate data) {
62
+        return toAjax(service.updateHkPendingConfiscate(data));
63
+    }
64
+
65
+    @Log(title = "待检区收缴数据", businessType = BusinessType.DELETE)
66
+    @DeleteMapping("/{ids}")
67
+    public AjaxResult remove(@PathVariable Long[] ids) {
68
+        return toAjax(service.deleteHkPendingConfiscateByIds(ids));
69
+    }
70
+
71
+    @PostMapping("/importTemplate")
72
+    public void importTemplate(HttpServletResponse response) {
73
+        ExcelUtil<HkPendingConfiscate> util = new ExcelUtil<>(HkPendingConfiscate.class);
74
+        util.importTemplateExcel(response, "待检区收缴数据导入模板");
75
+    }
76
+
77
+    /**
78
+     * 导入客户原始格式的待检区收缴数据
79
+     * Excel结构:
80
+     *   Row1: 分组表头(T1航站楼A区/B区, T2国内/国际/中转, 每日收缴总数)
81
+     *   Row2: 子列表头(火种/液态物品/其他)
82
+     *   Row3+: 数据,每天3个时间段(00:00-08:00 / 08:00-17:00 / 17:00-24:00)
83
+     *   日期列A跨行合并,需向下传递
84
+     *   col17-19(每日收缴总数)为公式列,跳过
85
+     */
86
+    @Log(title = "待检区收缴数据", businessType = BusinessType.IMPORT)
87
+    @PostMapping("/importData")
88
+    public AjaxResult importData(MultipartFile file) throws Exception {
89
+        if (file == null || file.isEmpty()) {
90
+            throw new ServiceException("请选择要导入的文件");
91
+        }
92
+        List<HkPendingConfiscate> list = parseFromExcel(file.getInputStream());
93
+        if (list.isEmpty()) {
94
+            throw new ServiceException("未读取到有效数据,请确认文件格式是否正确");
95
+        }
96
+        String message = service.importData(list);
97
+        return success(message);
98
+    }
99
+
100
+    private List<HkPendingConfiscate> parseFromExcel(InputStream is) throws Exception {
101
+        List<HkPendingConfiscate> list = new ArrayList<>();
102
+        try (Workbook workbook = WorkbookFactory.create(is)) {
103
+            Sheet sheet = workbook.getSheetAt(0);
104
+            Date lastDate = null;
105
+            // 前2行为表头,数据从第3行(index=2)开始
106
+            for (int i = 2; i <= sheet.getLastRowNum(); i++) {
107
+                Row row = sheet.getRow(i);
108
+                if (row == null) continue;
109
+
110
+                // 日期列跨行合并,非空时更新,空时沿用上一个日期
111
+                Cell dateCell = row.getCell(0);
112
+                if (dateCell != null && dateCell.getCellType() == CellType.NUMERIC) {
113
+                    lastDate = DateUtil.isCellDateFormatted(dateCell)
114
+                            ? dateCell.getDateCellValue()
115
+                            : DateUtil.getJavaDate(dateCell.getNumericCellValue());
116
+                }
117
+                if (lastDate == null) continue;
118
+
119
+                String timeSlot = strVal(row, 1);
120
+                if (timeSlot == null || timeSlot.isEmpty()) continue;
121
+
122
+                HkPendingConfiscate data = new HkPendingConfiscate();
123
+                data.setRecordDate(lastDate);
124
+                data.setTimeSlot(timeSlot);
125
+                // T1 A区
126
+                data.setT1AFireSource(intVal(row, 2));
127
+                data.setT1ALiquid(intVal(row, 3));
128
+                data.setT1AOther(intVal(row, 4));
129
+                // T1 B区
130
+                data.setT1BFireSource(intVal(row, 5));
131
+                data.setT1BLiquid(intVal(row, 6));
132
+                data.setT1BOther(intVal(row, 7));
133
+                // T2 国内
134
+                data.setT2DomesticFireSource(intVal(row, 8));
135
+                data.setT2DomesticLiquid(intVal(row, 9));
136
+                data.setT2DomesticOther(intVal(row, 10));
137
+                // T2 国际
138
+                data.setT2IntlFireSource(intVal(row, 11));
139
+                data.setT2IntlLiquid(intVal(row, 12));
140
+                data.setT2IntlOther(intVal(row, 13));
141
+                // T2 中转
142
+                data.setT2TransitFireSource(intVal(row, 14));
143
+                data.setT2TransitLiquid(intVal(row, 15));
144
+                data.setT2TransitOther(intVal(row, 16));
145
+                // col17-19: 每日收缴总数(公式,跳过)
146
+                list.add(data);
147
+            }
148
+        }
149
+        return list;
150
+    }
151
+
152
+    private String strVal(Row row, int colIdx) {
153
+        Cell cell = row.getCell(colIdx);
154
+        if (cell == null || cell.getCellType() == CellType.BLANK) return null;
155
+        return cell.toString().trim();
156
+    }
157
+
158
+    private Integer intVal(Row row, int colIdx) {
159
+        Cell cell = row.getCell(colIdx);
160
+        if (cell == null || cell.getCellType() == CellType.BLANK) return null;
161
+        try {
162
+            if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) {
163
+                return (int) cell.getNumericCellValue();
164
+            }
165
+            String s = cell.toString().trim();
166
+            return s.isEmpty() ? null : (int) Double.parseDouble(s);
167
+        } catch (Exception e) {
168
+            return null;
169
+        }
170
+    }
171
+}

+ 167 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/item/HkPersuadePowerBankController.java

@@ -0,0 +1,167 @@
1
+package com.sundot.airport.web.controller.item;
2
+
3
+import com.sundot.airport.common.annotation.Log;
4
+import com.sundot.airport.common.core.controller.BaseController;
5
+import com.sundot.airport.common.core.domain.AjaxResult;
6
+import com.sundot.airport.common.core.page.TableDataInfo;
7
+import com.sundot.airport.common.enums.BusinessType;
8
+import com.sundot.airport.common.exception.ServiceException;
9
+import com.sundot.airport.common.utils.poi.ExcelUtil;
10
+import com.sundot.airport.item.domain.HkPersuadePowerBank;
11
+import com.sundot.airport.item.service.IHkPersuadePowerBankService;
12
+import org.apache.poi.ss.usermodel.*;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.web.bind.annotation.*;
15
+import org.springframework.web.multipart.MultipartFile;
16
+
17
+import javax.servlet.http.HttpServletResponse;
18
+import java.io.InputStream;
19
+import java.util.ArrayList;
20
+import java.util.Date;
21
+import java.util.List;
22
+
23
+/**
24
+ * 劝阻充电宝数据
25
+ */
26
+@RestController
27
+@RequestMapping("/item/hkPersuadePowerBank")
28
+public class HkPersuadePowerBankController extends BaseController {
29
+
30
+    @Autowired
31
+    private IHkPersuadePowerBankService service;
32
+
33
+    @GetMapping("/list")
34
+    public TableDataInfo list(HkPersuadePowerBank query) {
35
+        startPage();
36
+        List<HkPersuadePowerBank> list = service.selectHkPersuadePowerBankList(query);
37
+        return getDataTable(list);
38
+    }
39
+
40
+    @GetMapping("/{id}")
41
+    public AjaxResult getInfo(@PathVariable Long id) {
42
+        return success(service.selectHkPersuadePowerBankById(id));
43
+    }
44
+
45
+    @Log(title = "劝阻充电宝数据", businessType = BusinessType.EXPORT)
46
+    @PostMapping("/export")
47
+    public void export(HttpServletResponse response, HkPersuadePowerBank query) {
48
+        List<HkPersuadePowerBank> list = service.selectHkPersuadePowerBankList(query);
49
+        ExcelUtil<HkPersuadePowerBank> util = new ExcelUtil<>(HkPersuadePowerBank.class);
50
+        util.exportExcel(response, list, "劝阻充电宝数据");
51
+    }
52
+
53
+    @Log(title = "劝阻充电宝数据", businessType = BusinessType.INSERT)
54
+    @PostMapping
55
+    public AjaxResult add(@RequestBody HkPersuadePowerBank data) {
56
+        return toAjax(service.insertHkPersuadePowerBank(data));
57
+    }
58
+
59
+    @Log(title = "劝阻充电宝数据", businessType = BusinessType.UPDATE)
60
+    @PutMapping
61
+    public AjaxResult edit(@RequestBody HkPersuadePowerBank data) {
62
+        return toAjax(service.updateHkPersuadePowerBank(data));
63
+    }
64
+
65
+    @Log(title = "劝阻充电宝数据", businessType = BusinessType.DELETE)
66
+    @DeleteMapping("/{ids}")
67
+    public AjaxResult remove(@PathVariable Long[] ids) {
68
+        return toAjax(service.deleteHkPersuadePowerBankByIds(ids));
69
+    }
70
+
71
+    @PostMapping("/importTemplate")
72
+    public void importTemplate(HttpServletResponse response) {
73
+        ExcelUtil<HkPersuadePowerBank> util = new ExcelUtil<>(HkPersuadePowerBank.class);
74
+        util.importTemplateExcel(response, "劝阻充电宝数据导入模板");
75
+    }
76
+
77
+    /**
78
+     * 导入客户原始格式的劝阻充电宝数据
79
+     * Excel结构:
80
+     *   Row1: 分组表头(T1航站楼 / T2航站楼 / 每日劝阻总数)
81
+     *   Row2: 子列表头(召回充电宝/无3C标识/标识不清/超规数量/邮寄/自弃/暂存/总数)
82
+     *   Row3+: 数据,每天3个时间段,日期列A跨行合并需向下传递
83
+     *   col9=T1总数(公式)  col17=T2总数(公式)  col18-20=汇总(公式)  均跳过
84
+     */
85
+    @Log(title = "劝阻充电宝数据", businessType = BusinessType.IMPORT)
86
+    @PostMapping("/importData")
87
+    public AjaxResult importData(MultipartFile file) throws Exception {
88
+        if (file == null || file.isEmpty()) {
89
+            throw new ServiceException("请选择要导入的文件");
90
+        }
91
+        List<HkPersuadePowerBank> list = parseFromExcel(file.getInputStream());
92
+        if (list.isEmpty()) {
93
+            throw new ServiceException("未读取到有效数据,请确认文件格式是否正确");
94
+        }
95
+        String message = service.importData(list);
96
+        return success(message);
97
+    }
98
+
99
+    private List<HkPersuadePowerBank> parseFromExcel(InputStream is) throws Exception {
100
+        List<HkPersuadePowerBank> list = new ArrayList<>();
101
+        try (Workbook workbook = WorkbookFactory.create(is)) {
102
+            Sheet sheet = workbook.getSheetAt(0);
103
+            Date lastDate = null;
104
+            // 前2行为表头,数据从第3行(index=2)开始
105
+            for (int i = 2; i <= sheet.getLastRowNum(); i++) {
106
+                Row row = sheet.getRow(i);
107
+                if (row == null) continue;
108
+
109
+                // 日期列跨行合并,非空时更新,空时沿用上一个日期
110
+                Cell dateCell = row.getCell(0);
111
+                if (dateCell != null && dateCell.getCellType() == CellType.NUMERIC) {
112
+                    lastDate = DateUtil.isCellDateFormatted(dateCell)
113
+                            ? dateCell.getDateCellValue()
114
+                            : DateUtil.getJavaDate(dateCell.getNumericCellValue());
115
+                }
116
+                if (lastDate == null) continue;
117
+
118
+                String timeSlot = strVal(row, 1);
119
+                if (timeSlot == null || timeSlot.isEmpty()) continue;
120
+
121
+                HkPersuadePowerBank data = new HkPersuadePowerBank();
122
+                data.setRecordDate(lastDate);
123
+                data.setTimeSlot(timeSlot);
124
+                // T1
125
+                data.setT1Recall(intVal(row, 2));
126
+                data.setT1No3c(intVal(row, 3));
127
+                data.setT1UnclearMark(intVal(row, 4));
128
+                data.setT1ExcessQty(intVal(row, 5));
129
+                data.setT1Mail(intVal(row, 6));
130
+                data.setT1Abandon(intVal(row, 7));
131
+                data.setT1TempStore(intVal(row, 8));
132
+                // col9: T1总数(公式,跳过)
133
+                // T2
134
+                data.setT2Recall(intVal(row, 10));
135
+                data.setT2No3c(intVal(row, 11));
136
+                data.setT2UnclearMark(intVal(row, 12));
137
+                data.setT2ExcessQty(intVal(row, 13));
138
+                data.setT2Mail(intVal(row, 14));
139
+                data.setT2Abandon(intVal(row, 15));
140
+                data.setT2TempStore(intVal(row, 16));
141
+                // col17: T2总数  col18-20: 汇总(公式,跳过)
142
+                list.add(data);
143
+            }
144
+        }
145
+        return list;
146
+    }
147
+
148
+    private String strVal(Row row, int colIdx) {
149
+        Cell cell = row.getCell(colIdx);
150
+        if (cell == null || cell.getCellType() == CellType.BLANK) return null;
151
+        return cell.toString().trim();
152
+    }
153
+
154
+    private Integer intVal(Row row, int colIdx) {
155
+        Cell cell = row.getCell(colIdx);
156
+        if (cell == null || cell.getCellType() == CellType.BLANK) return null;
157
+        try {
158
+            if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) {
159
+                return (int) cell.getNumericCellValue();
160
+            }
161
+            String s = cell.toString().trim();
162
+            return s.isEmpty() ? null : (int) Double.parseDouble(s);
163
+        } catch (Exception e) {
164
+            return null;
165
+        }
166
+    }
167
+}

+ 172 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/item/HkSeizureStatController.java

@@ -0,0 +1,172 @@
1
+package com.sundot.airport.web.controller.item;
2
+
3
+import com.sundot.airport.common.annotation.Log;
4
+import com.sundot.airport.common.core.controller.BaseController;
5
+import com.sundot.airport.common.core.domain.AjaxResult;
6
+import com.sundot.airport.common.core.page.TableDataInfo;
7
+import com.sundot.airport.common.enums.BusinessType;
8
+import com.sundot.airport.common.exception.ServiceException;
9
+import com.sundot.airport.common.utils.poi.ExcelUtil;
10
+import com.sundot.airport.item.domain.HkSeizureStat;
11
+import com.sundot.airport.item.service.IHkSeizureStatService;
12
+import org.apache.poi.ss.usermodel.*;
13
+import org.springframework.beans.factory.annotation.Autowired;
14
+import org.springframework.web.bind.annotation.*;
15
+import org.springframework.web.multipart.MultipartFile;
16
+
17
+import javax.servlet.http.HttpServletResponse;
18
+import java.io.InputStream;
19
+import java.util.ArrayList;
20
+import java.util.List;
21
+
22
+/**
23
+ * 查获数据
24
+ */
25
+@RestController
26
+@RequestMapping("/item/hkSeizureStat")
27
+public class HkSeizureStatController extends BaseController {
28
+
29
+    @Autowired
30
+    private IHkSeizureStatService service;
31
+
32
+    @GetMapping("/list")
33
+    public TableDataInfo list(HkSeizureStat query) {
34
+        startPage();
35
+        List<HkSeizureStat> list = service.selectHkSeizureStatList(query);
36
+        return getDataTable(list);
37
+    }
38
+
39
+    @GetMapping("/{id}")
40
+    public AjaxResult getInfo(@PathVariable Long id) {
41
+        return success(service.selectHkSeizureStatById(id));
42
+    }
43
+
44
+    @Log(title = "查获数据", businessType = BusinessType.EXPORT)
45
+    @PostMapping("/export")
46
+    public void export(HttpServletResponse response, HkSeizureStat query) {
47
+        List<HkSeizureStat> list = service.selectHkSeizureStatList(query);
48
+        ExcelUtil<HkSeizureStat> util = new ExcelUtil<>(HkSeizureStat.class);
49
+        util.exportExcel(response, list, "查获数据");
50
+    }
51
+
52
+    @Log(title = "查获数据", businessType = BusinessType.INSERT)
53
+    @PostMapping
54
+    public AjaxResult add(@RequestBody HkSeizureStat data) {
55
+        return toAjax(service.insertHkSeizureStat(data));
56
+    }
57
+
58
+    @Log(title = "查获数据", businessType = BusinessType.UPDATE)
59
+    @PutMapping
60
+    public AjaxResult edit(@RequestBody HkSeizureStat data) {
61
+        return toAjax(service.updateHkSeizureStat(data));
62
+    }
63
+
64
+    @Log(title = "查获数据", businessType = BusinessType.DELETE)
65
+    @DeleteMapping("/{ids}")
66
+    public AjaxResult remove(@PathVariable Long[] ids) {
67
+        return toAjax(service.deleteHkSeizureStatByIds(ids));
68
+    }
69
+
70
+    @PostMapping("/importTemplate")
71
+    public void importTemplate(HttpServletResponse response) {
72
+        ExcelUtil<HkSeizureStat> util = new ExcelUtil<>(HkSeizureStat.class);
73
+        util.importTemplateExcel(response, "查获数据导入模板");
74
+    }
75
+
76
+    /**
77
+     * 导入客户原始格式的查获数据
78
+     * Excel结构:第1行为表头,第2行起为数据
79
+     * col0=日期  col1=班次  col2=当班大队
80
+     * col3-14=T1各类别  col15=T1总数(公式,跳过)
81
+     * col16-27=T2各类别  col28=T2总数(公式,跳过)  col29=合计(公式,跳过)
82
+     */
83
+    @Log(title = "查获数据", businessType = BusinessType.IMPORT)
84
+    @PostMapping("/importData")
85
+    public AjaxResult importData(MultipartFile file) throws Exception {
86
+        if (file == null || file.isEmpty()) {
87
+            throw new ServiceException("请选择要导入的文件");
88
+        }
89
+        List<HkSeizureStat> list = parseFromExcel(file.getInputStream());
90
+        if (list.isEmpty()) {
91
+            throw new ServiceException("未读取到有效数据,请确认文件格式是否正确");
92
+        }
93
+        String message = service.importData(list);
94
+        return success(message);
95
+    }
96
+
97
+    private List<HkSeizureStat> parseFromExcel(InputStream is) throws Exception {
98
+        List<HkSeizureStat> list = new ArrayList<>();
99
+        try (Workbook workbook = WorkbookFactory.create(is)) {
100
+            Sheet sheet = workbook.getSheetAt(0);
101
+            // 第1行(index=0)为表头,数据从第2行(index=1)开始
102
+            for (int i = 1; i <= sheet.getLastRowNum(); i++) {
103
+                Row row = sheet.getRow(i);
104
+                if (row == null) continue;
105
+                Cell dateCell = row.getCell(0);
106
+                if (dateCell == null || dateCell.getCellType() == CellType.BLANK) continue;
107
+
108
+                HkSeizureStat data = new HkSeizureStat();
109
+                // col0: 日期
110
+                if (dateCell.getCellType() == CellType.NUMERIC) {
111
+                    data.setRecordDate(DateUtil.isCellDateFormatted(dateCell)
112
+                            ? dateCell.getDateCellValue()
113
+                            : DateUtil.getJavaDate(dateCell.getNumericCellValue()));
114
+                }
115
+                if (data.getRecordDate() == null) continue;
116
+
117
+                data.setShift(strVal(row, 1));    // 班次
118
+                data.setBrigade(strVal(row, 2));  // 当班大队
119
+                // T1
120
+                data.setT1FireSource(intVal(row, 3));
121
+                data.setT1Knife(intVal(row, 4));
122
+                data.setT1PoliceWeapon(intVal(row, 5));
123
+                data.setT1Firework(intVal(row, 6));
124
+                data.setT1LiveAnimal(intVal(row, 7));
125
+                data.setT1Corrosive(intVal(row, 8));
126
+                data.setT1FakeId(intVal(row, 9));
127
+                data.setT1Explosive(intVal(row, 10));
128
+                data.setT1Tool(intVal(row, 11));
129
+                data.setT1GunAmmo(intVal(row, 12));
130
+                data.setT1Illegal(intVal(row, 13));
131
+                data.setT1Other(intVal(row, 14));
132
+                // col15: T1总数(公式,跳过)
133
+                // T2
134
+                data.setT2FireSource(intVal(row, 16));
135
+                data.setT2Knife(intVal(row, 17));
136
+                data.setT2PoliceWeapon(intVal(row, 18));
137
+                data.setT2Firework(intVal(row, 19));
138
+                data.setT2LiveAnimal(intVal(row, 20));
139
+                data.setT2Corrosive(intVal(row, 21));
140
+                data.setT2FakeId(intVal(row, 22));
141
+                data.setT2Explosive(intVal(row, 23));
142
+                data.setT2Tool(intVal(row, 24));
143
+                data.setT2GunAmmo(intVal(row, 25));
144
+                data.setT2Illegal(intVal(row, 26));
145
+                data.setT2Other(intVal(row, 27));
146
+                // col28: T2总数(公式)  col29: 合计(公式)— 均跳过
147
+                list.add(data);
148
+            }
149
+        }
150
+        return list;
151
+    }
152
+
153
+    private String strVal(Row row, int colIdx) {
154
+        Cell cell = row.getCell(colIdx);
155
+        if (cell == null || cell.getCellType() == CellType.BLANK) return null;
156
+        return cell.toString().trim();
157
+    }
158
+
159
+    private Integer intVal(Row row, int colIdx) {
160
+        Cell cell = row.getCell(colIdx);
161
+        if (cell == null || cell.getCellType() == CellType.BLANK) return null;
162
+        try {
163
+            if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) {
164
+                return (int) cell.getNumericCellValue();
165
+            }
166
+            String s = cell.toString().trim();
167
+            return s.isEmpty() ? null : (int) Double.parseDouble(s);
168
+        } catch (Exception e) {
169
+            return null;
170
+        }
171
+    }
172
+}

+ 1 - 1
airport-framework/src/main/java/com/sundot/airport/framework/config/SecurityConfig.java

@@ -108,7 +108,7 @@ public class SecurityConfig {
108 108
                 .authorizeHttpRequests((requests) -> {
109 109
                     permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
110 110
                     // 对于登录login 注册register 验证码captchaImage 允许匿名访问
111
-                    requests.antMatchers("/login", "/register", "/captchaImage", "/sms/code").permitAll()
111
+                    requests.antMatchers("/login", "/register", "/captchaImage", "/sms/code", "/hk/screen/**").permitAll()
112 112
                             // 静态资源,可匿名访问
113 113
                             .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
114 114
                             .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 1 - 1
airport-framework/src/main/java/com/sundot/airport/framework/config/WebAdminInterceptorConfig.java

@@ -21,7 +21,7 @@ public class WebAdminInterceptorConfig implements WebMvcConfigurer {
21 21
     public void addInterceptors(InterceptorRegistry registry) {
22 22
         registry.addInterceptor(requestSourceInterceptor)
23 23
                 .addPathPatterns("/**")
24
-                .excludePathPatterns("/captchaImage", "/login", "/logout", "/sms/code");
24
+                .excludePathPatterns("/captchaImage", "/login", "/logout", "/sms/code", "/hk/screen/**");
25 25
     }
26 26
 
27 27
 }

+ 171 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkOperationData.java

@@ -0,0 +1,171 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import com.sundot.airport.common.annotation.Excel;
5
+import com.sundot.airport.common.core.domain.BaseEntity;
6
+
7
+import java.util.Date;
8
+
9
+/**
10
+ * 每日运行数据 hk_operation_data
11
+ */
12
+public class HkOperationData extends BaseEntity {
13
+    private static final long serialVersionUID = 1L;
14
+
15
+    private Long id;
16
+
17
+    @JsonFormat(pattern = "yyyy-MM-dd")
18
+    @Excel(name = "日期", dateFormat = "yyyy-MM-dd", sort = 1)
19
+    private Date recordDate;
20
+
21
+    @Excel(name = "A区", sort = 2)
22
+    private Integer aZone;
23
+
24
+    @Excel(name = "B区", sort = 3)
25
+    private Integer bZone;
26
+
27
+    @Excel(name = "贵宾", sort = 4)
28
+    private Integer vip;
29
+
30
+    @Excel(name = "国内旅检", sort = 5)
31
+    private Integer domesticPassenger;
32
+
33
+    @Excel(name = "国际旅检", sort = 6)
34
+    private Integer intlPassenger;
35
+
36
+    @Excel(name = "贵宾通道", sort = 7)
37
+    private Integer vipChannel;
38
+
39
+    @Excel(name = "T1回流通道", sort = 8)
40
+    private Integer t1ReturnChannel;
41
+
42
+    @Excel(name = "T1行检", sort = 9)
43
+    private Integer t1LuggageCheck;
44
+
45
+    @Excel(name = "一楼员工", sort = 10)
46
+    private Integer floor1Staff;
47
+
48
+    @Excel(name = "T2回流通道", sort = 11)
49
+    private Integer t2ReturnChannel;
50
+
51
+    @Excel(name = "T2行检", sort = 12)
52
+    private Integer t2LuggageCheck;
53
+
54
+    @Excel(name = "三楼东区员工", sort = 13)
55
+    private Integer floor3EastStaff;
56
+
57
+    @Excel(name = "一楼中心区员工", sort = 14)
58
+    private Integer floor1CenterStaff;
59
+
60
+    @Excel(name = "负一楼西区员工", sort = 15)
61
+    private Integer floorB1WestStaff;
62
+
63
+    @Excel(name = "三楼西区员工", sort = 16)
64
+    private Integer floor3WestStaff;
65
+
66
+    @Excel(name = "国内货站", sort = 17)
67
+    private Integer domesticCargo;
68
+
69
+    @Excel(name = "道口(国内货站)", sort = 18)
70
+    private Integer domesticGate;
71
+
72
+    @Excel(name = "南侧车检", sort = 19)
73
+    private Integer southVehicleCheck;
74
+
75
+    @Excel(name = "防爆(国内货站)", sort = 20)
76
+    private Integer domesticBomb;
77
+
78
+    @Excel(name = "国际货站", sort = 21)
79
+    private Integer intlCargo;
80
+
81
+    @Excel(name = "道口(国际货站)", sort = 22)
82
+    private Integer intlGate;
83
+
84
+    @Excel(name = "北侧车检", sort = 23)
85
+    private Integer northVehicleCheck;
86
+
87
+    @Excel(name = "防爆(国际货站)", sort = 24)
88
+    private Integer intlBomb;
89
+
90
+    /** 车检总数(计算值) */
91
+    public Integer getVehicleCheckTotal() {
92
+        int s = southVehicleCheck == null ? 0 : southVehicleCheck;
93
+        int n = northVehicleCheck == null ? 0 : northVehicleCheck;
94
+        return s + n;
95
+    }
96
+
97
+    public Long getId() { return id; }
98
+    public void setId(Long id) { this.id = id; }
99
+
100
+    public Date getRecordDate() { return recordDate; }
101
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
102
+
103
+    public Integer getAZone() { return aZone; }
104
+    public void setAZone(Integer aZone) { this.aZone = aZone; }
105
+
106
+    public Integer getBZone() { return bZone; }
107
+    public void setBZone(Integer bZone) { this.bZone = bZone; }
108
+
109
+    public Integer getVip() { return vip; }
110
+    public void setVip(Integer vip) { this.vip = vip; }
111
+
112
+    public Integer getDomesticPassenger() { return domesticPassenger; }
113
+    public void setDomesticPassenger(Integer domesticPassenger) { this.domesticPassenger = domesticPassenger; }
114
+
115
+    public Integer getIntlPassenger() { return intlPassenger; }
116
+    public void setIntlPassenger(Integer intlPassenger) { this.intlPassenger = intlPassenger; }
117
+
118
+    public Integer getVipChannel() { return vipChannel; }
119
+    public void setVipChannel(Integer vipChannel) { this.vipChannel = vipChannel; }
120
+
121
+    public Integer getT1ReturnChannel() { return t1ReturnChannel; }
122
+    public void setT1ReturnChannel(Integer t1ReturnChannel) { this.t1ReturnChannel = t1ReturnChannel; }
123
+
124
+    public Integer getT1LuggageCheck() { return t1LuggageCheck; }
125
+    public void setT1LuggageCheck(Integer t1LuggageCheck) { this.t1LuggageCheck = t1LuggageCheck; }
126
+
127
+    public Integer getFloor1Staff() { return floor1Staff; }
128
+    public void setFloor1Staff(Integer floor1Staff) { this.floor1Staff = floor1Staff; }
129
+
130
+    public Integer getT2ReturnChannel() { return t2ReturnChannel; }
131
+    public void setT2ReturnChannel(Integer t2ReturnChannel) { this.t2ReturnChannel = t2ReturnChannel; }
132
+
133
+    public Integer getT2LuggageCheck() { return t2LuggageCheck; }
134
+    public void setT2LuggageCheck(Integer t2LuggageCheck) { this.t2LuggageCheck = t2LuggageCheck; }
135
+
136
+    public Integer getFloor3EastStaff() { return floor3EastStaff; }
137
+    public void setFloor3EastStaff(Integer floor3EastStaff) { this.floor3EastStaff = floor3EastStaff; }
138
+
139
+    public Integer getFloor1CenterStaff() { return floor1CenterStaff; }
140
+    public void setFloor1CenterStaff(Integer floor1CenterStaff) { this.floor1CenterStaff = floor1CenterStaff; }
141
+
142
+    public Integer getFloorB1WestStaff() { return floorB1WestStaff; }
143
+    public void setFloorB1WestStaff(Integer floorB1WestStaff) { this.floorB1WestStaff = floorB1WestStaff; }
144
+
145
+    public Integer getFloor3WestStaff() { return floor3WestStaff; }
146
+    public void setFloor3WestStaff(Integer floor3WestStaff) { this.floor3WestStaff = floor3WestStaff; }
147
+
148
+    public Integer getDomesticCargo() { return domesticCargo; }
149
+    public void setDomesticCargo(Integer domesticCargo) { this.domesticCargo = domesticCargo; }
150
+
151
+    public Integer getDomesticGate() { return domesticGate; }
152
+    public void setDomesticGate(Integer domesticGate) { this.domesticGate = domesticGate; }
153
+
154
+    public Integer getSouthVehicleCheck() { return southVehicleCheck; }
155
+    public void setSouthVehicleCheck(Integer southVehicleCheck) { this.southVehicleCheck = southVehicleCheck; }
156
+
157
+    public Integer getDomesticBomb() { return domesticBomb; }
158
+    public void setDomesticBomb(Integer domesticBomb) { this.domesticBomb = domesticBomb; }
159
+
160
+    public Integer getIntlCargo() { return intlCargo; }
161
+    public void setIntlCargo(Integer intlCargo) { this.intlCargo = intlCargo; }
162
+
163
+    public Integer getIntlGate() { return intlGate; }
164
+    public void setIntlGate(Integer intlGate) { this.intlGate = intlGate; }
165
+
166
+    public Integer getNorthVehicleCheck() { return northVehicleCheck; }
167
+    public void setNorthVehicleCheck(Integer northVehicleCheck) { this.northVehicleCheck = northVehicleCheck; }
168
+
169
+    public Integer getIntlBomb() { return intlBomb; }
170
+    public void setIntlBomb(Integer intlBomb) { this.intlBomb = intlBomb; }
171
+}

+ 142 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkPendingConfiscate.java

@@ -0,0 +1,142 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import com.sundot.airport.common.annotation.Excel;
5
+import com.sundot.airport.common.core.domain.BaseEntity;
6
+
7
+import java.util.Date;
8
+
9
+/**
10
+ * 待检区收缴数据 hk_pending_confiscate
11
+ */
12
+public class HkPendingConfiscate extends BaseEntity {
13
+    private static final long serialVersionUID = 1L;
14
+
15
+    private Long id;
16
+
17
+    @JsonFormat(pattern = "yyyy-MM-dd")
18
+    @Excel(name = "日期", dateFormat = "yyyy-MM-dd", sort = 1)
19
+    private Date recordDate;
20
+
21
+    @Excel(name = "时间段", sort = 2)
22
+    private String timeSlot;
23
+
24
+    @Excel(name = "T1 A区火种", sort = 3)
25
+    private Integer t1AFireSource;
26
+
27
+    @Excel(name = "T1 A区液态物品", sort = 4)
28
+    private Integer t1ALiquid;
29
+
30
+    @Excel(name = "T1 A区其他物品", sort = 5)
31
+    private Integer t1AOther;
32
+
33
+    @Excel(name = "T1 B区火种", sort = 6)
34
+    private Integer t1BFireSource;
35
+
36
+    @Excel(name = "T1 B区液态物品", sort = 7)
37
+    private Integer t1BLiquid;
38
+
39
+    @Excel(name = "T1 B区其他物品", sort = 8)
40
+    private Integer t1BOther;
41
+
42
+    @Excel(name = "T2国内火种", sort = 9)
43
+    private Integer t2DomesticFireSource;
44
+
45
+    @Excel(name = "T2国内液态物品", sort = 10)
46
+    private Integer t2DomesticLiquid;
47
+
48
+    @Excel(name = "T2国内其他物品", sort = 11)
49
+    private Integer t2DomesticOther;
50
+
51
+    @Excel(name = "T2国际火种", sort = 12)
52
+    private Integer t2IntlFireSource;
53
+
54
+    @Excel(name = "T2国际液态物品", sort = 13)
55
+    private Integer t2IntlLiquid;
56
+
57
+    @Excel(name = "T2国际其他物品", sort = 14)
58
+    private Integer t2IntlOther;
59
+
60
+    @Excel(name = "T2中转火种", sort = 15)
61
+    private Integer t2TransitFireSource;
62
+
63
+    @Excel(name = "T2中转液态物品", sort = 16)
64
+    private Integer t2TransitLiquid;
65
+
66
+    @Excel(name = "T2中转其他物品", sort = 17)
67
+    private Integer t2TransitOther;
68
+
69
+    /** 火种总数(计算值) */
70
+    public Integer getFireSourceTotal() {
71
+        return safe(t1AFireSource) + safe(t1BFireSource) + safe(t2DomesticFireSource)
72
+                + safe(t2IntlFireSource) + safe(t2TransitFireSource);
73
+    }
74
+
75
+    /** 液态物品总数(计算值) */
76
+    public Integer getLiquidTotal() {
77
+        return safe(t1ALiquid) + safe(t1BLiquid) + safe(t2DomesticLiquid)
78
+                + safe(t2IntlLiquid) + safe(t2TransitLiquid);
79
+    }
80
+
81
+    /** 其他物品总数(计算值) */
82
+    public Integer getOtherTotal() {
83
+        return safe(t1AOther) + safe(t1BOther) + safe(t2DomesticOther)
84
+                + safe(t2IntlOther) + safe(t2TransitOther);
85
+    }
86
+
87
+    private int safe(Integer v) { return v == null ? 0 : v; }
88
+
89
+    public Long getId() { return id; }
90
+    public void setId(Long id) { this.id = id; }
91
+
92
+    public Date getRecordDate() { return recordDate; }
93
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
94
+
95
+    public String getTimeSlot() { return timeSlot; }
96
+    public void setTimeSlot(String timeSlot) { this.timeSlot = timeSlot; }
97
+
98
+    public Integer getT1AFireSource() { return t1AFireSource; }
99
+    public void setT1AFireSource(Integer t1AFireSource) { this.t1AFireSource = t1AFireSource; }
100
+
101
+    public Integer getT1ALiquid() { return t1ALiquid; }
102
+    public void setT1ALiquid(Integer t1ALiquid) { this.t1ALiquid = t1ALiquid; }
103
+
104
+    public Integer getT1AOther() { return t1AOther; }
105
+    public void setT1AOther(Integer t1AOther) { this.t1AOther = t1AOther; }
106
+
107
+    public Integer getT1BFireSource() { return t1BFireSource; }
108
+    public void setT1BFireSource(Integer t1BFireSource) { this.t1BFireSource = t1BFireSource; }
109
+
110
+    public Integer getT1BLiquid() { return t1BLiquid; }
111
+    public void setT1BLiquid(Integer t1BLiquid) { this.t1BLiquid = t1BLiquid; }
112
+
113
+    public Integer getT1BOther() { return t1BOther; }
114
+    public void setT1BOther(Integer t1BOther) { this.t1BOther = t1BOther; }
115
+
116
+    public Integer getT2DomesticFireSource() { return t2DomesticFireSource; }
117
+    public void setT2DomesticFireSource(Integer t2DomesticFireSource) { this.t2DomesticFireSource = t2DomesticFireSource; }
118
+
119
+    public Integer getT2DomesticLiquid() { return t2DomesticLiquid; }
120
+    public void setT2DomesticLiquid(Integer t2DomesticLiquid) { this.t2DomesticLiquid = t2DomesticLiquid; }
121
+
122
+    public Integer getT2DomesticOther() { return t2DomesticOther; }
123
+    public void setT2DomesticOther(Integer t2DomesticOther) { this.t2DomesticOther = t2DomesticOther; }
124
+
125
+    public Integer getT2IntlFireSource() { return t2IntlFireSource; }
126
+    public void setT2IntlFireSource(Integer t2IntlFireSource) { this.t2IntlFireSource = t2IntlFireSource; }
127
+
128
+    public Integer getT2IntlLiquid() { return t2IntlLiquid; }
129
+    public void setT2IntlLiquid(Integer t2IntlLiquid) { this.t2IntlLiquid = t2IntlLiquid; }
130
+
131
+    public Integer getT2IntlOther() { return t2IntlOther; }
132
+    public void setT2IntlOther(Integer t2IntlOther) { this.t2IntlOther = t2IntlOther; }
133
+
134
+    public Integer getT2TransitFireSource() { return t2TransitFireSource; }
135
+    public void setT2TransitFireSource(Integer t2TransitFireSource) { this.t2TransitFireSource = t2TransitFireSource; }
136
+
137
+    public Integer getT2TransitLiquid() { return t2TransitLiquid; }
138
+    public void setT2TransitLiquid(Integer t2TransitLiquid) { this.t2TransitLiquid = t2TransitLiquid; }
139
+
140
+    public Integer getT2TransitOther() { return t2TransitOther; }
141
+    public void setT2TransitOther(Integer t2TransitOther) { this.t2TransitOther = t2TransitOther; }
142
+}

+ 139 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkPersuadePowerBank.java

@@ -0,0 +1,139 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import com.sundot.airport.common.annotation.Excel;
5
+import com.sundot.airport.common.core.domain.BaseEntity;
6
+
7
+import java.util.Date;
8
+
9
+/**
10
+ * 劝阻充电宝数据 hk_persuade_power_bank
11
+ */
12
+public class HkPersuadePowerBank extends BaseEntity {
13
+    private static final long serialVersionUID = 1L;
14
+
15
+    private Long id;
16
+
17
+    @JsonFormat(pattern = "yyyy-MM-dd")
18
+    @Excel(name = "日期", dateFormat = "yyyy-MM-dd", sort = 1)
19
+    private Date recordDate;
20
+
21
+    @Excel(name = "时间段", sort = 2)
22
+    private String timeSlot;
23
+
24
+    @Excel(name = "T1召回充电宝", sort = 3)
25
+    private Integer t1Recall;
26
+
27
+    @Excel(name = "T1无3C标识", sort = 4)
28
+    private Integer t1No3c;
29
+
30
+    @Excel(name = "T1标识不清", sort = 5)
31
+    private Integer t1UnclearMark;
32
+
33
+    @Excel(name = "T1超规数量", sort = 6)
34
+    private Integer t1ExcessQty;
35
+
36
+    @Excel(name = "T1邮寄", sort = 7)
37
+    private Integer t1Mail;
38
+
39
+    @Excel(name = "T1自弃", sort = 8)
40
+    private Integer t1Abandon;
41
+
42
+    @Excel(name = "T1暂存", sort = 9)
43
+    private Integer t1TempStore;
44
+
45
+    @Excel(name = "T2召回充电宝", sort = 10)
46
+    private Integer t2Recall;
47
+
48
+    @Excel(name = "T2无3C标识", sort = 11)
49
+    private Integer t2No3c;
50
+
51
+    @Excel(name = "T2标识不清", sort = 12)
52
+    private Integer t2UnclearMark;
53
+
54
+    @Excel(name = "T2超规数量", sort = 13)
55
+    private Integer t2ExcessQty;
56
+
57
+    @Excel(name = "T2邮寄", sort = 14)
58
+    private Integer t2Mail;
59
+
60
+    @Excel(name = "T2自弃", sort = 15)
61
+    private Integer t2Abandon;
62
+
63
+    @Excel(name = "T2暂存", sort = 16)
64
+    private Integer t2TempStore;
65
+
66
+    /** T1总数(计算值) */
67
+    public Integer getT1Total() {
68
+        return safe(t1Recall) + safe(t1No3c) + safe(t1UnclearMark) + safe(t1ExcessQty)
69
+                + safe(t1Mail) + safe(t1Abandon) + safe(t1TempStore);
70
+    }
71
+
72
+    /** T2总数(计算值) */
73
+    public Integer getT2Total() {
74
+        return safe(t2Recall) + safe(t2No3c) + safe(t2UnclearMark) + safe(t2ExcessQty)
75
+                + safe(t2Mail) + safe(t2Abandon) + safe(t2TempStore);
76
+    }
77
+
78
+    /** 两楼总数(计算值) */
79
+    public Integer getBothTotal() { return getT1Total() + getT2Total(); }
80
+
81
+    /** 邮寄总数(计算值) */
82
+    public Integer getMailTotal() { return safe(t1Mail) + safe(t2Mail); }
83
+
84
+    /** 暂存总数(计算值) */
85
+    public Integer getTempStoreTotal() { return safe(t1TempStore) + safe(t2TempStore); }
86
+
87
+    private int safe(Integer v) { return v == null ? 0 : v; }
88
+
89
+    public Long getId() { return id; }
90
+    public void setId(Long id) { this.id = id; }
91
+
92
+    public Date getRecordDate() { return recordDate; }
93
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
94
+
95
+    public String getTimeSlot() { return timeSlot; }
96
+    public void setTimeSlot(String timeSlot) { this.timeSlot = timeSlot; }
97
+
98
+    public Integer getT1Recall() { return t1Recall; }
99
+    public void setT1Recall(Integer t1Recall) { this.t1Recall = t1Recall; }
100
+
101
+    public Integer getT1No3c() { return t1No3c; }
102
+    public void setT1No3c(Integer t1No3c) { this.t1No3c = t1No3c; }
103
+
104
+    public Integer getT1UnclearMark() { return t1UnclearMark; }
105
+    public void setT1UnclearMark(Integer t1UnclearMark) { this.t1UnclearMark = t1UnclearMark; }
106
+
107
+    public Integer getT1ExcessQty() { return t1ExcessQty; }
108
+    public void setT1ExcessQty(Integer t1ExcessQty) { this.t1ExcessQty = t1ExcessQty; }
109
+
110
+    public Integer getT1Mail() { return t1Mail; }
111
+    public void setT1Mail(Integer t1Mail) { this.t1Mail = t1Mail; }
112
+
113
+    public Integer getT1Abandon() { return t1Abandon; }
114
+    public void setT1Abandon(Integer t1Abandon) { this.t1Abandon = t1Abandon; }
115
+
116
+    public Integer getT1TempStore() { return t1TempStore; }
117
+    public void setT1TempStore(Integer t1TempStore) { this.t1TempStore = t1TempStore; }
118
+
119
+    public Integer getT2Recall() { return t2Recall; }
120
+    public void setT2Recall(Integer t2Recall) { this.t2Recall = t2Recall; }
121
+
122
+    public Integer getT2No3c() { return t2No3c; }
123
+    public void setT2No3c(Integer t2No3c) { this.t2No3c = t2No3c; }
124
+
125
+    public Integer getT2UnclearMark() { return t2UnclearMark; }
126
+    public void setT2UnclearMark(Integer t2UnclearMark) { this.t2UnclearMark = t2UnclearMark; }
127
+
128
+    public Integer getT2ExcessQty() { return t2ExcessQty; }
129
+    public void setT2ExcessQty(Integer t2ExcessQty) { this.t2ExcessQty = t2ExcessQty; }
130
+
131
+    public Integer getT2Mail() { return t2Mail; }
132
+    public void setT2Mail(Integer t2Mail) { this.t2Mail = t2Mail; }
133
+
134
+    public Integer getT2Abandon() { return t2Abandon; }
135
+    public void setT2Abandon(Integer t2Abandon) { this.t2Abandon = t2Abandon; }
136
+
137
+    public Integer getT2TempStore() { return t2TempStore; }
138
+    public void setT2TempStore(Integer t2TempStore) { this.t2TempStore = t2TempStore; }
139
+}

+ 28 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenBrigadeSeizureVO.java

@@ -0,0 +1,28 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import lombok.Data;
4
+
5
+import java.io.Serializable;
6
+
7
+/**
8
+ * 查获/收缴大屏 - 大队查获数对比(柱状图)
9
+ */
10
+@Data
11
+public class HkScreenBrigadeSeizureVO implements Serializable {
12
+    private static final long serialVersionUID = 1L;
13
+
14
+    /** 班次(白班/夜班) */
15
+    private String shift;
16
+
17
+    /** 大队名称 */
18
+    private String brigade;
19
+
20
+    /** T1区域查获合计 */
21
+    private Long t1Total;
22
+
23
+    /** T2区域查获合计 */
24
+    private Long t2Total;
25
+
26
+    /** T1+T2总合计 */
27
+    private Long grandTotal;
28
+}

+ 24 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenCargoTrendVO.java

@@ -0,0 +1,24 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import lombok.Data;
5
+
6
+import java.io.Serializable;
7
+import java.util.Date;
8
+
9
+/**
10
+ * 运行数据大屏 - 货物过检数趋势(折线图:国内货站/国际货站)
11
+ */
12
+@Data
13
+public class HkScreenCargoTrendVO implements Serializable {
14
+    private static final long serialVersionUID = 1L;
15
+
16
+    @JsonFormat(pattern = "yyyy-MM-dd")
17
+    private Date recordDate;
18
+
19
+    /** 国内货站过检数 */
20
+    private Integer domesticCargo;
21
+
22
+    /** 国际货站过检数 */
23
+    private Integer intlCargo;
24
+}

+ 24 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenLuggageCheckTrendVO.java

@@ -0,0 +1,24 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import lombok.Data;
5
+
6
+import java.io.Serializable;
7
+import java.util.Date;
8
+
9
+/**
10
+ * 运行数据大屏 - 行检过检数趋势(折线图:T1行检/T2行检)
11
+ */
12
+@Data
13
+public class HkScreenLuggageCheckTrendVO implements Serializable {
14
+    private static final long serialVersionUID = 1L;
15
+
16
+    @JsonFormat(pattern = "yyyy-MM-dd")
17
+    private Date recordDate;
18
+
19
+    /** T1行检过检数 */
20
+    private Integer t1LuggageCheck;
21
+
22
+    /** T2行检过检数 */
23
+    private Integer t2LuggageCheck;
24
+}

+ 28 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenOperationSummaryVO.java

@@ -0,0 +1,28 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import lombok.Data;
4
+
5
+import java.io.Serializable;
6
+
7
+/**
8
+ * 运行数据大屏 - 汇总数字卡片
9
+ */
10
+@Data
11
+public class HkScreenOperationSummaryVO implements Serializable {
12
+    private static final long serialVersionUID = 1L;
13
+
14
+    /** 旅检过检总人数 */
15
+    private Long passengerTotal;
16
+
17
+    /** 行检过检总行李数 */
18
+    private Long luggageTotal;
19
+
20
+    /** 国内货站总过检数(件) */
21
+    private Long domesticCargoTotal;
22
+
23
+    /** 国际货站总过检数(件) */
24
+    private Long intlCargoTotal;
25
+
26
+    /** 道口车辆过检总数(辆) */
27
+    private Long vehicleCheckTotal;
28
+}

+ 22 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenPendingConfiscateSummaryVO.java

@@ -0,0 +1,22 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import lombok.Data;
4
+
5
+import java.io.Serializable;
6
+
7
+/**
8
+ * 查获/收缴大屏 - 待检区收缴禁带物品数据(环形图)
9
+ */
10
+@Data
11
+public class HkScreenPendingConfiscateSummaryVO implements Serializable {
12
+    private static final long serialVersionUID = 1L;
13
+
14
+    /** 火种总数(T1A+T1B+T2国内+T2国际+T2中转) */
15
+    private Long fireSourceTotal;
16
+
17
+    /** 液态物品总数 */
18
+    private Long liquidTotal;
19
+
20
+    /** 其他物品总数 */
21
+    private Long otherTotal;
22
+}

+ 37 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenPowerBankSummaryVO.java

@@ -0,0 +1,37 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import lombok.Data;
4
+
5
+import java.io.Serializable;
6
+
7
+/**
8
+ * 查获/收缴大屏 - 不合规充电宝功能数据(环形图)
9
+ */
10
+@Data
11
+public class HkScreenPowerBankSummaryVO implements Serializable {
12
+    private static final long serialVersionUID = 1L;
13
+
14
+    /** 邮寄总数(T1+T2) */
15
+    private Long mailTotal;
16
+
17
+    /** 暂存总数(T1+T2) */
18
+    private Long tempStoreTotal;
19
+
20
+    /** 自弃总数(T1+T2) */
21
+    private Long abandonTotal;
22
+
23
+    /** 召回充电宝总数(T1+T2) */
24
+    private Long recallTotal;
25
+
26
+    /** 无3C标识总数(T1+T2) */
27
+    private Long no3cTotal;
28
+
29
+    /** 标识不清总数(T1+T2) */
30
+    private Long unclearMarkTotal;
31
+
32
+    /** 超规数量总数(T1+T2) */
33
+    private Long excessQtyTotal;
34
+
35
+    /** 两楼总数(所有项合计) */
36
+    private Long bothTotal;
37
+}

+ 19 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenSeizureCategoryVO.java

@@ -0,0 +1,19 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import lombok.Data;
4
+
5
+import java.io.Serializable;
6
+
7
+/**
8
+ * 查获/收缴大屏 - 查获数据分类分布(环形图)
9
+ */
10
+@Data
11
+public class HkScreenSeizureCategoryVO implements Serializable {
12
+    private static final long serialVersionUID = 1L;
13
+
14
+    /** 类别名称 */
15
+    private String name;
16
+
17
+    /** 合计数量 */
18
+    private Long total;
19
+}

+ 26 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenSeizureTotalVO.java

@@ -0,0 +1,26 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import lombok.Data;
4
+
5
+import java.io.Serializable;
6
+
7
+/**
8
+ * 查获数据各类别合计(Mapper 中间结果,Service 再转为 name/total 列表)
9
+ */
10
+@Data
11
+public class HkScreenSeizureTotalVO implements Serializable {
12
+    private static final long serialVersionUID = 1L;
13
+
14
+    private Long fireSource;
15
+    private Long knife;
16
+    private Long policeWeapon;
17
+    private Long firework;
18
+    private Long liveAnimal;
19
+    private Long corrosive;
20
+    private Long fakeId;
21
+    private Long explosive;
22
+    private Long tool;
23
+    private Long gunAmmo;
24
+    private Long illegal;
25
+    private Long other;
26
+}

+ 24 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenT1PassengerTrendVO.java

@@ -0,0 +1,24 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import lombok.Data;
5
+
6
+import java.io.Serializable;
7
+import java.util.Date;
8
+
9
+/**
10
+ * 运行数据大屏 - T1旅检过检人数趋势(折线图:A区/B区)
11
+ */
12
+@Data
13
+public class HkScreenT1PassengerTrendVO implements Serializable {
14
+    private static final long serialVersionUID = 1L;
15
+
16
+    @JsonFormat(pattern = "yyyy-MM-dd")
17
+    private Date recordDate;
18
+
19
+    /** A区过检人数 */
20
+    private Integer aZone;
21
+
22
+    /** B区过检人数 */
23
+    private Integer bZone;
24
+}

+ 24 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenT2PassengerTrendVO.java

@@ -0,0 +1,24 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import lombok.Data;
5
+
6
+import java.io.Serializable;
7
+import java.util.Date;
8
+
9
+/**
10
+ * 运行数据大屏 - T2旅检过检人数趋势(折线图:国内旅检/国际旅检)
11
+ */
12
+@Data
13
+public class HkScreenT2PassengerTrendVO implements Serializable {
14
+    private static final long serialVersionUID = 1L;
15
+
16
+    @JsonFormat(pattern = "yyyy-MM-dd")
17
+    private Date recordDate;
18
+
19
+    /** 国内旅检过检人数 */
20
+    private Integer domesticPassenger;
21
+
22
+    /** 国际旅检过检人数 */
23
+    private Integer intlPassenger;
24
+}

+ 24 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkScreenVehicleCheckTrendVO.java

@@ -0,0 +1,24 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import lombok.Data;
5
+
6
+import java.io.Serializable;
7
+import java.util.Date;
8
+
9
+/**
10
+ * 运行数据大屏 - 车辆过检数趋势(折线图:南侧车检/北侧车检)
11
+ */
12
+@Data
13
+public class HkScreenVehicleCheckTrendVO implements Serializable {
14
+    private static final long serialVersionUID = 1L;
15
+
16
+    @JsonFormat(pattern = "yyyy-MM-dd")
17
+    private Date recordDate;
18
+
19
+    /** 南侧车检数 */
20
+    private Integer southVehicleCheck;
21
+
22
+    /** 北侧车检数 */
23
+    private Integer northVehicleCheck;
24
+}

+ 203 - 0
airport-item/src/main/java/com/sundot/airport/item/domain/HkSeizureStat.java

@@ -0,0 +1,203 @@
1
+package com.sundot.airport.item.domain;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import com.sundot.airport.common.annotation.Excel;
5
+import com.sundot.airport.common.core.domain.BaseEntity;
6
+
7
+import java.util.Date;
8
+
9
+/**
10
+ * 查获数据 hk_seizure_stat
11
+ */
12
+public class HkSeizureStat extends BaseEntity {
13
+    private static final long serialVersionUID = 1L;
14
+
15
+    private Long id;
16
+
17
+    @JsonFormat(pattern = "yyyy-MM-dd")
18
+    @Excel(name = "日期", dateFormat = "yyyy-MM-dd", sort = 1)
19
+    private Date recordDate;
20
+
21
+    @Excel(name = "班次", sort = 2)
22
+    private String shift;
23
+
24
+    @Excel(name = "当班大队", sort = 3)
25
+    private String brigade;
26
+
27
+    @Excel(name = "T1火种", sort = 4)
28
+    private Integer t1FireSource;
29
+
30
+    @Excel(name = "T1刀具", sort = 5)
31
+    private Integer t1Knife;
32
+
33
+    @Excel(name = "T1警械器具", sort = 6)
34
+    private Integer t1PoliceWeapon;
35
+
36
+    @Excel(name = "T1烟花爆竹", sort = 7)
37
+    private Integer t1Firework;
38
+
39
+    @Excel(name = "T1活体动物", sort = 8)
40
+    private Integer t1LiveAnimal;
41
+
42
+    @Excel(name = "T1腐蚀性物品", sort = 9)
43
+    private Integer t1Corrosive;
44
+
45
+    @Excel(name = "T1用假冒他", sort = 10)
46
+    private Integer t1FakeId;
47
+
48
+    @Excel(name = "T1爆炸装置", sort = 11)
49
+    private Integer t1Explosive;
50
+
51
+    @Excel(name = "T1工具", sort = 12)
52
+    private Integer t1Tool;
53
+
54
+    @Excel(name = "T1枪支弹药", sort = 13)
55
+    private Integer t1GunAmmo;
56
+
57
+    @Excel(name = "T1扫黄打非", sort = 14)
58
+    private Integer t1Illegal;
59
+
60
+    @Excel(name = "T1其他", sort = 15)
61
+    private Integer t1Other;
62
+
63
+    @Excel(name = "T2火种", sort = 16)
64
+    private Integer t2FireSource;
65
+
66
+    @Excel(name = "T2刀具", sort = 17)
67
+    private Integer t2Knife;
68
+
69
+    @Excel(name = "T2警械器具", sort = 18)
70
+    private Integer t2PoliceWeapon;
71
+
72
+    @Excel(name = "T2烟花爆竹", sort = 19)
73
+    private Integer t2Firework;
74
+
75
+    @Excel(name = "T2活体动物", sort = 20)
76
+    private Integer t2LiveAnimal;
77
+
78
+    @Excel(name = "T2腐蚀性物品", sort = 21)
79
+    private Integer t2Corrosive;
80
+
81
+    @Excel(name = "T2用假冒他", sort = 22)
82
+    private Integer t2FakeId;
83
+
84
+    @Excel(name = "T2爆炸装置", sort = 23)
85
+    private Integer t2Explosive;
86
+
87
+    @Excel(name = "T2工具", sort = 24)
88
+    private Integer t2Tool;
89
+
90
+    @Excel(name = "T2枪支弹药", sort = 25)
91
+    private Integer t2GunAmmo;
92
+
93
+    @Excel(name = "T2扫黄打非", sort = 26)
94
+    private Integer t2Illegal;
95
+
96
+    @Excel(name = "T2其他", sort = 27)
97
+    private Integer t2Other;
98
+
99
+    /** T1总数(计算值) */
100
+    public Integer getT1Total() {
101
+        return safe(t1FireSource) + safe(t1Knife) + safe(t1PoliceWeapon) + safe(t1Firework)
102
+                + safe(t1LiveAnimal) + safe(t1Corrosive) + safe(t1FakeId) + safe(t1Explosive)
103
+                + safe(t1Tool) + safe(t1GunAmmo) + safe(t1Illegal) + safe(t1Other);
104
+    }
105
+
106
+    /** T2总数(计算值) */
107
+    public Integer getT2Total() {
108
+        return safe(t2FireSource) + safe(t2Knife) + safe(t2PoliceWeapon) + safe(t2Firework)
109
+                + safe(t2LiveAnimal) + safe(t2Corrosive) + safe(t2FakeId) + safe(t2Explosive)
110
+                + safe(t2Tool) + safe(t2GunAmmo) + safe(t2Illegal) + safe(t2Other);
111
+    }
112
+
113
+    /** T1+T2总数(计算值) */
114
+    public Integer getGrandTotal() {
115
+        return getT1Total() + getT2Total();
116
+    }
117
+
118
+    private int safe(Integer v) { return v == null ? 0 : v; }
119
+
120
+    public Long getId() { return id; }
121
+    public void setId(Long id) { this.id = id; }
122
+
123
+    public Date getRecordDate() { return recordDate; }
124
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
125
+
126
+    public String getShift() { return shift; }
127
+    public void setShift(String shift) { this.shift = shift; }
128
+
129
+    public String getBrigade() { return brigade; }
130
+    public void setBrigade(String brigade) { this.brigade = brigade; }
131
+
132
+    public Integer getT1FireSource() { return t1FireSource; }
133
+    public void setT1FireSource(Integer t1FireSource) { this.t1FireSource = t1FireSource; }
134
+
135
+    public Integer getT1Knife() { return t1Knife; }
136
+    public void setT1Knife(Integer t1Knife) { this.t1Knife = t1Knife; }
137
+
138
+    public Integer getT1PoliceWeapon() { return t1PoliceWeapon; }
139
+    public void setT1PoliceWeapon(Integer t1PoliceWeapon) { this.t1PoliceWeapon = t1PoliceWeapon; }
140
+
141
+    public Integer getT1Firework() { return t1Firework; }
142
+    public void setT1Firework(Integer t1Firework) { this.t1Firework = t1Firework; }
143
+
144
+    public Integer getT1LiveAnimal() { return t1LiveAnimal; }
145
+    public void setT1LiveAnimal(Integer t1LiveAnimal) { this.t1LiveAnimal = t1LiveAnimal; }
146
+
147
+    public Integer getT1Corrosive() { return t1Corrosive; }
148
+    public void setT1Corrosive(Integer t1Corrosive) { this.t1Corrosive = t1Corrosive; }
149
+
150
+    public Integer getT1FakeId() { return t1FakeId; }
151
+    public void setT1FakeId(Integer t1FakeId) { this.t1FakeId = t1FakeId; }
152
+
153
+    public Integer getT1Explosive() { return t1Explosive; }
154
+    public void setT1Explosive(Integer t1Explosive) { this.t1Explosive = t1Explosive; }
155
+
156
+    public Integer getT1Tool() { return t1Tool; }
157
+    public void setT1Tool(Integer t1Tool) { this.t1Tool = t1Tool; }
158
+
159
+    public Integer getT1GunAmmo() { return t1GunAmmo; }
160
+    public void setT1GunAmmo(Integer t1GunAmmo) { this.t1GunAmmo = t1GunAmmo; }
161
+
162
+    public Integer getT1Illegal() { return t1Illegal; }
163
+    public void setT1Illegal(Integer t1Illegal) { this.t1Illegal = t1Illegal; }
164
+
165
+    public Integer getT1Other() { return t1Other; }
166
+    public void setT1Other(Integer t1Other) { this.t1Other = t1Other; }
167
+
168
+    public Integer getT2FireSource() { return t2FireSource; }
169
+    public void setT2FireSource(Integer t2FireSource) { this.t2FireSource = t2FireSource; }
170
+
171
+    public Integer getT2Knife() { return t2Knife; }
172
+    public void setT2Knife(Integer t2Knife) { this.t2Knife = t2Knife; }
173
+
174
+    public Integer getT2PoliceWeapon() { return t2PoliceWeapon; }
175
+    public void setT2PoliceWeapon(Integer t2PoliceWeapon) { this.t2PoliceWeapon = t2PoliceWeapon; }
176
+
177
+    public Integer getT2Firework() { return t2Firework; }
178
+    public void setT2Firework(Integer t2Firework) { this.t2Firework = t2Firework; }
179
+
180
+    public Integer getT2LiveAnimal() { return t2LiveAnimal; }
181
+    public void setT2LiveAnimal(Integer t2LiveAnimal) { this.t2LiveAnimal = t2LiveAnimal; }
182
+
183
+    public Integer getT2Corrosive() { return t2Corrosive; }
184
+    public void setT2Corrosive(Integer t2Corrosive) { this.t2Corrosive = t2Corrosive; }
185
+
186
+    public Integer getT2FakeId() { return t2FakeId; }
187
+    public void setT2FakeId(Integer t2FakeId) { this.t2FakeId = t2FakeId; }
188
+
189
+    public Integer getT2Explosive() { return t2Explosive; }
190
+    public void setT2Explosive(Integer t2Explosive) { this.t2Explosive = t2Explosive; }
191
+
192
+    public Integer getT2Tool() { return t2Tool; }
193
+    public void setT2Tool(Integer t2Tool) { this.t2Tool = t2Tool; }
194
+
195
+    public Integer getT2GunAmmo() { return t2GunAmmo; }
196
+    public void setT2GunAmmo(Integer t2GunAmmo) { this.t2GunAmmo = t2GunAmmo; }
197
+
198
+    public Integer getT2Illegal() { return t2Illegal; }
199
+    public void setT2Illegal(Integer t2Illegal) { this.t2Illegal = t2Illegal; }
200
+
201
+    public Integer getT2Other() { return t2Other; }
202
+    public void setT2Other(Integer t2Other) { this.t2Other = t2Other; }
203
+}

+ 64 - 0
airport-item/src/main/java/com/sundot/airport/item/mapper/HkLargeScreenMapper.java

@@ -0,0 +1,64 @@
1
+package com.sundot.airport.item.mapper;
2
+
3
+import com.sundot.airport.item.domain.*;
4
+import org.apache.ibatis.annotations.Param;
5
+
6
+import java.util.Date;
7
+import java.util.List;
8
+
9
+public interface HkLargeScreenMapper {
10
+
11
+    // ===== 模块一:运行数据 =====
12
+
13
+    /** 运行数据汇总(5个大数字卡片) */
14
+    HkScreenOperationSummaryVO getOperationSummary(
15
+            @Param("startDate") Date startDate,
16
+            @Param("endDate") Date endDate);
17
+
18
+    /** T1旅检过检人数趋势(A区/B区) */
19
+    List<HkScreenT1PassengerTrendVO> getT1PassengerTrend(
20
+            @Param("startDate") Date startDate,
21
+            @Param("endDate") Date endDate);
22
+
23
+    /** T2旅检过检人数趋势(国内旅检/国际旅检) */
24
+    List<HkScreenT2PassengerTrendVO> getT2PassengerTrend(
25
+            @Param("startDate") Date startDate,
26
+            @Param("endDate") Date endDate);
27
+
28
+    /** 行检过检数趋势(T1行检/T2行检) */
29
+    List<HkScreenLuggageCheckTrendVO> getLuggageCheckTrend(
30
+            @Param("startDate") Date startDate,
31
+            @Param("endDate") Date endDate);
32
+
33
+    /** 货物过检数趋势(国内货站/国际货站) */
34
+    List<HkScreenCargoTrendVO> getCargoTrend(
35
+            @Param("startDate") Date startDate,
36
+            @Param("endDate") Date endDate);
37
+
38
+    /** 车辆过检数趋势(南侧车检/北侧车检) */
39
+    List<HkScreenVehicleCheckTrendVO> getVehicleCheckTrend(
40
+            @Param("startDate") Date startDate,
41
+            @Param("endDate") Date endDate);
42
+
43
+    // ===== 模块二:查获/收缴数据 =====
44
+
45
+    /** 查获数据各类别合计(T1+T2,Service 层再转为 name/total 列表) */
46
+    HkScreenSeizureTotalVO getSeizureCategoryTotal(
47
+            @Param("startDate") Date startDate,
48
+            @Param("endDate") Date endDate);
49
+
50
+    /** 各大队查获数对比(按班次+大队分组,用于3个柱状图) */
51
+    List<HkScreenBrigadeSeizureVO> getBrigadeSeizureCompare(
52
+            @Param("startDate") Date startDate,
53
+            @Param("endDate") Date endDate);
54
+
55
+    /** 不合规充电宝功能数据汇总(用于环形图) */
56
+    HkScreenPowerBankSummaryVO getPowerBankSummary(
57
+            @Param("startDate") Date startDate,
58
+            @Param("endDate") Date endDate);
59
+
60
+    /** 待检区收缴禁带物品数据汇总(用于环形图) */
61
+    HkScreenPendingConfiscateSummaryVO getPendingConfiscateSummary(
62
+            @Param("startDate") Date startDate,
63
+            @Param("endDate") Date endDate);
64
+}

+ 21 - 0
airport-item/src/main/java/com/sundot/airport/item/mapper/HkOperationDataMapper.java

@@ -0,0 +1,21 @@
1
+package com.sundot.airport.item.mapper;
2
+
3
+import com.sundot.airport.item.domain.HkOperationData;
4
+
5
+import java.util.Date;
6
+import java.util.List;
7
+
8
+public interface HkOperationDataMapper {
9
+
10
+    List<HkOperationData> selectHkOperationDataList(HkOperationData query);
11
+
12
+    HkOperationData selectHkOperationDataById(Long id);
13
+
14
+    HkOperationData selectHkOperationDataByDate(Date recordDate);
15
+
16
+    int insertHkOperationData(HkOperationData data);
17
+
18
+    int updateHkOperationData(HkOperationData data);
19
+
20
+    int deleteHkOperationDataByIds(Long[] ids);
21
+}

+ 22 - 0
airport-item/src/main/java/com/sundot/airport/item/mapper/HkPendingConfiscateMapper.java

@@ -0,0 +1,22 @@
1
+package com.sundot.airport.item.mapper;
2
+
3
+import com.sundot.airport.item.domain.HkPendingConfiscate;
4
+import org.apache.ibatis.annotations.Param;
5
+
6
+import java.util.Date;
7
+import java.util.List;
8
+
9
+public interface HkPendingConfiscateMapper {
10
+
11
+    List<HkPendingConfiscate> selectHkPendingConfiscateList(HkPendingConfiscate query);
12
+
13
+    HkPendingConfiscate selectHkPendingConfiscateById(Long id);
14
+
15
+    HkPendingConfiscate selectHkPendingConfiscateByDateAndSlot(@Param("recordDate") Date recordDate, @Param("timeSlot") String timeSlot);
16
+
17
+    int insertHkPendingConfiscate(HkPendingConfiscate data);
18
+
19
+    int updateHkPendingConfiscate(HkPendingConfiscate data);
20
+
21
+    int deleteHkPendingConfiscateByIds(Long[] ids);
22
+}

+ 22 - 0
airport-item/src/main/java/com/sundot/airport/item/mapper/HkPersuadePowerBankMapper.java

@@ -0,0 +1,22 @@
1
+package com.sundot.airport.item.mapper;
2
+
3
+import com.sundot.airport.item.domain.HkPersuadePowerBank;
4
+import org.apache.ibatis.annotations.Param;
5
+
6
+import java.util.Date;
7
+import java.util.List;
8
+
9
+public interface HkPersuadePowerBankMapper {
10
+
11
+    List<HkPersuadePowerBank> selectHkPersuadePowerBankList(HkPersuadePowerBank query);
12
+
13
+    HkPersuadePowerBank selectHkPersuadePowerBankById(Long id);
14
+
15
+    HkPersuadePowerBank selectHkPersuadePowerBankByDateAndSlot(@Param("recordDate") Date recordDate, @Param("timeSlot") String timeSlot);
16
+
17
+    int insertHkPersuadePowerBank(HkPersuadePowerBank data);
18
+
19
+    int updateHkPersuadePowerBank(HkPersuadePowerBank data);
20
+
21
+    int deleteHkPersuadePowerBankByIds(Long[] ids);
22
+}

+ 22 - 0
airport-item/src/main/java/com/sundot/airport/item/mapper/HkSeizureStatMapper.java

@@ -0,0 +1,22 @@
1
+package com.sundot.airport.item.mapper;
2
+
3
+import com.sundot.airport.item.domain.HkSeizureStat;
4
+import org.apache.ibatis.annotations.Param;
5
+
6
+import java.util.Date;
7
+import java.util.List;
8
+
9
+public interface HkSeizureStatMapper {
10
+
11
+    List<HkSeizureStat> selectHkSeizureStatList(HkSeizureStat query);
12
+
13
+    HkSeizureStat selectHkSeizureStatById(Long id);
14
+
15
+    HkSeizureStat selectHkSeizureStatByDateAndShift(@Param("recordDate") Date recordDate, @Param("shift") String shift);
16
+
17
+    int insertHkSeizureStat(HkSeizureStat data);
18
+
19
+    int updateHkSeizureStat(HkSeizureStat data);
20
+
21
+    int deleteHkSeizureStatByIds(Long[] ids);
22
+}

+ 35 - 0
airport-item/src/main/java/com/sundot/airport/item/service/IHkLargeScreenService.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.item.service;
2
+
3
+import com.sundot.airport.item.domain.*;
4
+
5
+import java.util.Date;
6
+import java.util.List;
7
+
8
+public interface IHkLargeScreenService {
9
+
10
+    // ===== 模块一:运行数据 =====
11
+
12
+    HkScreenOperationSummaryVO getOperationSummary(Date startDate, Date endDate);
13
+
14
+    List<HkScreenT1PassengerTrendVO> getT1PassengerTrend(Date startDate, Date endDate);
15
+
16
+    List<HkScreenT2PassengerTrendVO> getT2PassengerTrend(Date startDate, Date endDate);
17
+
18
+    List<HkScreenLuggageCheckTrendVO> getLuggageCheckTrend(Date startDate, Date endDate);
19
+
20
+    List<HkScreenCargoTrendVO> getCargoTrend(Date startDate, Date endDate);
21
+
22
+    List<HkScreenVehicleCheckTrendVO> getVehicleCheckTrend(Date startDate, Date endDate);
23
+
24
+    // ===== 模块二:查获/收缴数据 =====
25
+
26
+    /** 查获数据分类(转为 name/total 列表,供前端环形图使用) */
27
+    List<HkScreenSeizureCategoryVO> getSeizureCategoryList(Date startDate, Date endDate);
28
+
29
+    /** 各大队查获数对比(白班/夜班 × 大队,供3个柱状图使用) */
30
+    List<HkScreenBrigadeSeizureVO> getBrigadeSeizureCompare(Date startDate, Date endDate);
31
+
32
+    HkScreenPowerBankSummaryVO getPowerBankSummary(Date startDate, Date endDate);
33
+
34
+    HkScreenPendingConfiscateSummaryVO getPendingConfiscateSummary(Date startDate, Date endDate);
35
+}

+ 20 - 0
airport-item/src/main/java/com/sundot/airport/item/service/IHkOperationDataService.java

@@ -0,0 +1,20 @@
1
+package com.sundot.airport.item.service;
2
+
3
+import com.sundot.airport.item.domain.HkOperationData;
4
+
5
+import java.util.List;
6
+
7
+public interface IHkOperationDataService {
8
+
9
+    List<HkOperationData> selectHkOperationDataList(HkOperationData query);
10
+
11
+    HkOperationData selectHkOperationDataById(Long id);
12
+
13
+    int insertHkOperationData(HkOperationData data);
14
+
15
+    int updateHkOperationData(HkOperationData data);
16
+
17
+    int deleteHkOperationDataByIds(Long[] ids);
18
+
19
+    String importData(List<HkOperationData> list);
20
+}

+ 20 - 0
airport-item/src/main/java/com/sundot/airport/item/service/IHkPendingConfiscateService.java

@@ -0,0 +1,20 @@
1
+package com.sundot.airport.item.service;
2
+
3
+import com.sundot.airport.item.domain.HkPendingConfiscate;
4
+
5
+import java.util.List;
6
+
7
+public interface IHkPendingConfiscateService {
8
+
9
+    List<HkPendingConfiscate> selectHkPendingConfiscateList(HkPendingConfiscate query);
10
+
11
+    HkPendingConfiscate selectHkPendingConfiscateById(Long id);
12
+
13
+    int insertHkPendingConfiscate(HkPendingConfiscate data);
14
+
15
+    int updateHkPendingConfiscate(HkPendingConfiscate data);
16
+
17
+    int deleteHkPendingConfiscateByIds(Long[] ids);
18
+
19
+    String importData(List<HkPendingConfiscate> list);
20
+}

+ 20 - 0
airport-item/src/main/java/com/sundot/airport/item/service/IHkPersuadePowerBankService.java

@@ -0,0 +1,20 @@
1
+package com.sundot.airport.item.service;
2
+
3
+import com.sundot.airport.item.domain.HkPersuadePowerBank;
4
+
5
+import java.util.List;
6
+
7
+public interface IHkPersuadePowerBankService {
8
+
9
+    List<HkPersuadePowerBank> selectHkPersuadePowerBankList(HkPersuadePowerBank query);
10
+
11
+    HkPersuadePowerBank selectHkPersuadePowerBankById(Long id);
12
+
13
+    int insertHkPersuadePowerBank(HkPersuadePowerBank data);
14
+
15
+    int updateHkPersuadePowerBank(HkPersuadePowerBank data);
16
+
17
+    int deleteHkPersuadePowerBankByIds(Long[] ids);
18
+
19
+    String importData(List<HkPersuadePowerBank> list);
20
+}

+ 20 - 0
airport-item/src/main/java/com/sundot/airport/item/service/IHkSeizureStatService.java

@@ -0,0 +1,20 @@
1
+package com.sundot.airport.item.service;
2
+
3
+import com.sundot.airport.item.domain.HkSeizureStat;
4
+
5
+import java.util.List;
6
+
7
+public interface IHkSeizureStatService {
8
+
9
+    List<HkSeizureStat> selectHkSeizureStatList(HkSeizureStat query);
10
+
11
+    HkSeizureStat selectHkSeizureStatById(Long id);
12
+
13
+    int insertHkSeizureStat(HkSeizureStat data);
14
+
15
+    int updateHkSeizureStat(HkSeizureStat data);
16
+
17
+    int deleteHkSeizureStatByIds(Long[] ids);
18
+
19
+    String importData(List<HkSeizureStat> list);
20
+}

+ 93 - 0
airport-item/src/main/java/com/sundot/airport/item/service/impl/HkLargeScreenServiceImpl.java

@@ -0,0 +1,93 @@
1
+package com.sundot.airport.item.service.impl;
2
+
3
+import com.sundot.airport.item.domain.*;
4
+import com.sundot.airport.item.mapper.HkLargeScreenMapper;
5
+import com.sundot.airport.item.service.IHkLargeScreenService;
6
+import org.springframework.beans.factory.annotation.Autowired;
7
+import org.springframework.stereotype.Service;
8
+
9
+import java.util.ArrayList;
10
+import java.util.Date;
11
+import java.util.List;
12
+
13
+@Service
14
+public class HkLargeScreenServiceImpl implements IHkLargeScreenService {
15
+
16
+    @Autowired
17
+    private HkLargeScreenMapper mapper;
18
+
19
+    @Override
20
+    public HkScreenOperationSummaryVO getOperationSummary(Date startDate, Date endDate) {
21
+        HkScreenOperationSummaryVO vo = mapper.getOperationSummary(startDate, endDate);
22
+        return vo != null ? vo : new HkScreenOperationSummaryVO();
23
+    }
24
+
25
+    @Override
26
+    public List<HkScreenT1PassengerTrendVO> getT1PassengerTrend(Date startDate, Date endDate) {
27
+        return mapper.getT1PassengerTrend(startDate, endDate);
28
+    }
29
+
30
+    @Override
31
+    public List<HkScreenT2PassengerTrendVO> getT2PassengerTrend(Date startDate, Date endDate) {
32
+        return mapper.getT2PassengerTrend(startDate, endDate);
33
+    }
34
+
35
+    @Override
36
+    public List<HkScreenLuggageCheckTrendVO> getLuggageCheckTrend(Date startDate, Date endDate) {
37
+        return mapper.getLuggageCheckTrend(startDate, endDate);
38
+    }
39
+
40
+    @Override
41
+    public List<HkScreenCargoTrendVO> getCargoTrend(Date startDate, Date endDate) {
42
+        return mapper.getCargoTrend(startDate, endDate);
43
+    }
44
+
45
+    @Override
46
+    public List<HkScreenVehicleCheckTrendVO> getVehicleCheckTrend(Date startDate, Date endDate) {
47
+        return mapper.getVehicleCheckTrend(startDate, endDate);
48
+    }
49
+
50
+    @Override
51
+    public List<HkScreenSeizureCategoryVO> getSeizureCategoryList(Date startDate, Date endDate) {
52
+        HkScreenSeizureTotalVO total = mapper.getSeizureCategoryTotal(startDate, endDate);
53
+        List<HkScreenSeizureCategoryVO> list = new ArrayList<>();
54
+        if (total == null) return list;
55
+        list.add(item("火种",     total.getFireSource()));
56
+        list.add(item("刀具",     total.getKnife()));
57
+        list.add(item("警械器具", total.getPoliceWeapon()));
58
+        list.add(item("烟花爆竹", total.getFirework()));
59
+        list.add(item("活体动物", total.getLiveAnimal()));
60
+        list.add(item("腐蚀性物品", total.getCorrosive()));
61
+        list.add(item("用假冒他", total.getFakeId()));
62
+        list.add(item("爆炸装置", total.getExplosive()));
63
+        list.add(item("工具",     total.getTool()));
64
+        list.add(item("枪支弹药", total.getGunAmmo()));
65
+        list.add(item("扫黄打非", total.getIllegal()));
66
+        list.add(item("其他",     total.getOther()));
67
+        return list;
68
+    }
69
+
70
+    @Override
71
+    public List<HkScreenBrigadeSeizureVO> getBrigadeSeizureCompare(Date startDate, Date endDate) {
72
+        return mapper.getBrigadeSeizureCompare(startDate, endDate);
73
+    }
74
+
75
+    @Override
76
+    public HkScreenPowerBankSummaryVO getPowerBankSummary(Date startDate, Date endDate) {
77
+        HkScreenPowerBankSummaryVO vo = mapper.getPowerBankSummary(startDate, endDate);
78
+        return vo != null ? vo : new HkScreenPowerBankSummaryVO();
79
+    }
80
+
81
+    @Override
82
+    public HkScreenPendingConfiscateSummaryVO getPendingConfiscateSummary(Date startDate, Date endDate) {
83
+        HkScreenPendingConfiscateSummaryVO vo = mapper.getPendingConfiscateSummary(startDate, endDate);
84
+        return vo != null ? vo : new HkScreenPendingConfiscateSummaryVO();
85
+    }
86
+
87
+    private HkScreenSeizureCategoryVO item(String name, Long total) {
88
+        HkScreenSeizureCategoryVO vo = new HkScreenSeizureCategoryVO();
89
+        vo.setName(name);
90
+        vo.setTotal(total != null ? total : 0L);
91
+        return vo;
92
+    }
93
+}

+ 87 - 0
airport-item/src/main/java/com/sundot/airport/item/service/impl/HkOperationDataServiceImpl.java

@@ -0,0 +1,87 @@
1
+package com.sundot.airport.item.service.impl;
2
+
3
+import com.sundot.airport.common.utils.SecurityUtils;
4
+import com.sundot.airport.item.domain.HkOperationData;
5
+import com.sundot.airport.item.mapper.HkOperationDataMapper;
6
+import com.sundot.airport.item.service.IHkOperationDataService;
7
+import org.springframework.beans.factory.annotation.Autowired;
8
+import org.springframework.stereotype.Service;
9
+
10
+import java.util.Date;
11
+import java.util.List;
12
+
13
+@Service
14
+public class HkOperationDataServiceImpl implements IHkOperationDataService {
15
+
16
+    @Autowired
17
+    private HkOperationDataMapper mapper;
18
+
19
+    @Override
20
+    public List<HkOperationData> selectHkOperationDataList(HkOperationData query) {
21
+        return mapper.selectHkOperationDataList(query);
22
+    }
23
+
24
+    @Override
25
+    public HkOperationData selectHkOperationDataById(Long id) {
26
+        return mapper.selectHkOperationDataById(id);
27
+    }
28
+
29
+    @Override
30
+    public int insertHkOperationData(HkOperationData data) {
31
+        data.setCreateBy(SecurityUtils.getUsername());
32
+        data.setCreateTime(new Date());
33
+        return mapper.insertHkOperationData(data);
34
+    }
35
+
36
+    @Override
37
+    public int updateHkOperationData(HkOperationData data) {
38
+        data.setUpdateBy(SecurityUtils.getUsername());
39
+        data.setUpdateTime(new Date());
40
+        return mapper.updateHkOperationData(data);
41
+    }
42
+
43
+    @Override
44
+    public int deleteHkOperationDataByIds(Long[] ids) {
45
+        return mapper.deleteHkOperationDataByIds(ids);
46
+    }
47
+
48
+    @Override
49
+    public String importData(List<HkOperationData> list) {
50
+        int successNum = 0;
51
+        int updateNum = 0;
52
+        StringBuilder failureMsg = new StringBuilder();
53
+        String operator = SecurityUtils.getUsername();
54
+        Date now = new Date();
55
+
56
+        for (int i = 0; i < list.size(); i++) {
57
+            HkOperationData data = list.get(i);
58
+            int rowNum = i + 2;
59
+            if (data == null) continue;
60
+            if (data.getRecordDate() == null) {
61
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行日期不能为空");
62
+                continue;
63
+            }
64
+            try {
65
+                HkOperationData existing = mapper.selectHkOperationDataByDate(data.getRecordDate());
66
+                if (existing != null) {
67
+                    data.setId(existing.getId());
68
+                    data.setUpdateBy(operator);
69
+                    data.setUpdateTime(now);
70
+                    mapper.updateHkOperationData(data);
71
+                    updateNum++;
72
+                } else {
73
+                    data.setCreateBy(operator);
74
+                    data.setCreateTime(now);
75
+                    mapper.insertHkOperationData(data);
76
+                    successNum++;
77
+                }
78
+            } catch (Exception e) {
79
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行导入失败:").append(e.getMessage());
80
+            }
81
+        }
82
+        if (failureMsg.length() > 0) {
83
+            return "导入结果:新增 " + successNum + " 条,更新 " + updateNum + " 条,失败信息:" + failureMsg;
84
+        }
85
+        return "导入成功:新增 " + successNum + " 条,更新 " + updateNum + " 条";
86
+    }
87
+}

+ 91 - 0
airport-item/src/main/java/com/sundot/airport/item/service/impl/HkPendingConfiscateServiceImpl.java

@@ -0,0 +1,91 @@
1
+package com.sundot.airport.item.service.impl;
2
+
3
+import com.sundot.airport.common.utils.SecurityUtils;
4
+import com.sundot.airport.item.domain.HkPendingConfiscate;
5
+import com.sundot.airport.item.mapper.HkPendingConfiscateMapper;
6
+import com.sundot.airport.item.service.IHkPendingConfiscateService;
7
+import org.springframework.beans.factory.annotation.Autowired;
8
+import org.springframework.stereotype.Service;
9
+
10
+import java.util.Date;
11
+import java.util.List;
12
+
13
+@Service
14
+public class HkPendingConfiscateServiceImpl implements IHkPendingConfiscateService {
15
+
16
+    @Autowired
17
+    private HkPendingConfiscateMapper mapper;
18
+
19
+    @Override
20
+    public List<HkPendingConfiscate> selectHkPendingConfiscateList(HkPendingConfiscate query) {
21
+        return mapper.selectHkPendingConfiscateList(query);
22
+    }
23
+
24
+    @Override
25
+    public HkPendingConfiscate selectHkPendingConfiscateById(Long id) {
26
+        return mapper.selectHkPendingConfiscateById(id);
27
+    }
28
+
29
+    @Override
30
+    public int insertHkPendingConfiscate(HkPendingConfiscate data) {
31
+        data.setCreateBy(SecurityUtils.getUsername());
32
+        data.setCreateTime(new Date());
33
+        return mapper.insertHkPendingConfiscate(data);
34
+    }
35
+
36
+    @Override
37
+    public int updateHkPendingConfiscate(HkPendingConfiscate data) {
38
+        data.setUpdateBy(SecurityUtils.getUsername());
39
+        data.setUpdateTime(new Date());
40
+        return mapper.updateHkPendingConfiscate(data);
41
+    }
42
+
43
+    @Override
44
+    public int deleteHkPendingConfiscateByIds(Long[] ids) {
45
+        return mapper.deleteHkPendingConfiscateByIds(ids);
46
+    }
47
+
48
+    @Override
49
+    public String importData(List<HkPendingConfiscate> list) {
50
+        int successNum = 0;
51
+        int updateNum = 0;
52
+        StringBuilder failureMsg = new StringBuilder();
53
+        String operator = SecurityUtils.getUsername();
54
+        Date now = new Date();
55
+
56
+        for (int i = 0; i < list.size(); i++) {
57
+            HkPendingConfiscate data = list.get(i);
58
+            int rowNum = i + 2;
59
+            if (data == null) continue;
60
+            if (data.getRecordDate() == null) {
61
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行日期不能为空");
62
+                continue;
63
+            }
64
+            if (data.getTimeSlot() == null || data.getTimeSlot().isEmpty()) {
65
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行时间段不能为空");
66
+                continue;
67
+            }
68
+            try {
69
+                HkPendingConfiscate existing = mapper.selectHkPendingConfiscateByDateAndSlot(data.getRecordDate(), data.getTimeSlot());
70
+                if (existing != null) {
71
+                    data.setId(existing.getId());
72
+                    data.setUpdateBy(operator);
73
+                    data.setUpdateTime(now);
74
+                    mapper.updateHkPendingConfiscate(data);
75
+                    updateNum++;
76
+                } else {
77
+                    data.setCreateBy(operator);
78
+                    data.setCreateTime(now);
79
+                    mapper.insertHkPendingConfiscate(data);
80
+                    successNum++;
81
+                }
82
+            } catch (Exception e) {
83
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行导入失败:").append(e.getMessage());
84
+            }
85
+        }
86
+        if (failureMsg.length() > 0) {
87
+            return "导入结果:新增 " + successNum + " 条,更新 " + updateNum + " 条,失败信息:" + failureMsg;
88
+        }
89
+        return "导入成功:新增 " + successNum + " 条,更新 " + updateNum + " 条";
90
+    }
91
+}

+ 91 - 0
airport-item/src/main/java/com/sundot/airport/item/service/impl/HkPersuadePowerBankServiceImpl.java

@@ -0,0 +1,91 @@
1
+package com.sundot.airport.item.service.impl;
2
+
3
+import com.sundot.airport.common.utils.SecurityUtils;
4
+import com.sundot.airport.item.domain.HkPersuadePowerBank;
5
+import com.sundot.airport.item.mapper.HkPersuadePowerBankMapper;
6
+import com.sundot.airport.item.service.IHkPersuadePowerBankService;
7
+import org.springframework.beans.factory.annotation.Autowired;
8
+import org.springframework.stereotype.Service;
9
+
10
+import java.util.Date;
11
+import java.util.List;
12
+
13
+@Service
14
+public class HkPersuadePowerBankServiceImpl implements IHkPersuadePowerBankService {
15
+
16
+    @Autowired
17
+    private HkPersuadePowerBankMapper mapper;
18
+
19
+    @Override
20
+    public List<HkPersuadePowerBank> selectHkPersuadePowerBankList(HkPersuadePowerBank query) {
21
+        return mapper.selectHkPersuadePowerBankList(query);
22
+    }
23
+
24
+    @Override
25
+    public HkPersuadePowerBank selectHkPersuadePowerBankById(Long id) {
26
+        return mapper.selectHkPersuadePowerBankById(id);
27
+    }
28
+
29
+    @Override
30
+    public int insertHkPersuadePowerBank(HkPersuadePowerBank data) {
31
+        data.setCreateBy(SecurityUtils.getUsername());
32
+        data.setCreateTime(new Date());
33
+        return mapper.insertHkPersuadePowerBank(data);
34
+    }
35
+
36
+    @Override
37
+    public int updateHkPersuadePowerBank(HkPersuadePowerBank data) {
38
+        data.setUpdateBy(SecurityUtils.getUsername());
39
+        data.setUpdateTime(new Date());
40
+        return mapper.updateHkPersuadePowerBank(data);
41
+    }
42
+
43
+    @Override
44
+    public int deleteHkPersuadePowerBankByIds(Long[] ids) {
45
+        return mapper.deleteHkPersuadePowerBankByIds(ids);
46
+    }
47
+
48
+    @Override
49
+    public String importData(List<HkPersuadePowerBank> list) {
50
+        int successNum = 0;
51
+        int updateNum = 0;
52
+        StringBuilder failureMsg = new StringBuilder();
53
+        String operator = SecurityUtils.getUsername();
54
+        Date now = new Date();
55
+
56
+        for (int i = 0; i < list.size(); i++) {
57
+            HkPersuadePowerBank data = list.get(i);
58
+            int rowNum = i + 2;
59
+            if (data == null) continue;
60
+            if (data.getRecordDate() == null) {
61
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行日期不能为空");
62
+                continue;
63
+            }
64
+            if (data.getTimeSlot() == null || data.getTimeSlot().isEmpty()) {
65
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行时间段不能为空");
66
+                continue;
67
+            }
68
+            try {
69
+                HkPersuadePowerBank existing = mapper.selectHkPersuadePowerBankByDateAndSlot(data.getRecordDate(), data.getTimeSlot());
70
+                if (existing != null) {
71
+                    data.setId(existing.getId());
72
+                    data.setUpdateBy(operator);
73
+                    data.setUpdateTime(now);
74
+                    mapper.updateHkPersuadePowerBank(data);
75
+                    updateNum++;
76
+                } else {
77
+                    data.setCreateBy(operator);
78
+                    data.setCreateTime(now);
79
+                    mapper.insertHkPersuadePowerBank(data);
80
+                    successNum++;
81
+                }
82
+            } catch (Exception e) {
83
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行导入失败:").append(e.getMessage());
84
+            }
85
+        }
86
+        if (failureMsg.length() > 0) {
87
+            return "导入结果:新增 " + successNum + " 条,更新 " + updateNum + " 条,失败信息:" + failureMsg;
88
+        }
89
+        return "导入成功:新增 " + successNum + " 条,更新 " + updateNum + " 条";
90
+    }
91
+}

+ 91 - 0
airport-item/src/main/java/com/sundot/airport/item/service/impl/HkSeizureStatServiceImpl.java

@@ -0,0 +1,91 @@
1
+package com.sundot.airport.item.service.impl;
2
+
3
+import com.sundot.airport.common.utils.SecurityUtils;
4
+import com.sundot.airport.item.domain.HkSeizureStat;
5
+import com.sundot.airport.item.mapper.HkSeizureStatMapper;
6
+import com.sundot.airport.item.service.IHkSeizureStatService;
7
+import org.springframework.beans.factory.annotation.Autowired;
8
+import org.springframework.stereotype.Service;
9
+
10
+import java.util.Date;
11
+import java.util.List;
12
+
13
+@Service
14
+public class HkSeizureStatServiceImpl implements IHkSeizureStatService {
15
+
16
+    @Autowired
17
+    private HkSeizureStatMapper mapper;
18
+
19
+    @Override
20
+    public List<HkSeizureStat> selectHkSeizureStatList(HkSeizureStat query) {
21
+        return mapper.selectHkSeizureStatList(query);
22
+    }
23
+
24
+    @Override
25
+    public HkSeizureStat selectHkSeizureStatById(Long id) {
26
+        return mapper.selectHkSeizureStatById(id);
27
+    }
28
+
29
+    @Override
30
+    public int insertHkSeizureStat(HkSeizureStat data) {
31
+        data.setCreateBy(SecurityUtils.getUsername());
32
+        data.setCreateTime(new Date());
33
+        return mapper.insertHkSeizureStat(data);
34
+    }
35
+
36
+    @Override
37
+    public int updateHkSeizureStat(HkSeizureStat data) {
38
+        data.setUpdateBy(SecurityUtils.getUsername());
39
+        data.setUpdateTime(new Date());
40
+        return mapper.updateHkSeizureStat(data);
41
+    }
42
+
43
+    @Override
44
+    public int deleteHkSeizureStatByIds(Long[] ids) {
45
+        return mapper.deleteHkSeizureStatByIds(ids);
46
+    }
47
+
48
+    @Override
49
+    public String importData(List<HkSeizureStat> list) {
50
+        int successNum = 0;
51
+        int updateNum = 0;
52
+        StringBuilder failureMsg = new StringBuilder();
53
+        String operator = SecurityUtils.getUsername();
54
+        Date now = new Date();
55
+
56
+        for (int i = 0; i < list.size(); i++) {
57
+            HkSeizureStat data = list.get(i);
58
+            int rowNum = i + 2;
59
+            if (data == null) continue;
60
+            if (data.getRecordDate() == null) {
61
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行日期不能为空");
62
+                continue;
63
+            }
64
+            if (data.getShift() == null || data.getShift().isEmpty()) {
65
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行班次不能为空");
66
+                continue;
67
+            }
68
+            try {
69
+                HkSeizureStat existing = mapper.selectHkSeizureStatByDateAndShift(data.getRecordDate(), data.getShift());
70
+                if (existing != null) {
71
+                    data.setId(existing.getId());
72
+                    data.setUpdateBy(operator);
73
+                    data.setUpdateTime(now);
74
+                    mapper.updateHkSeizureStat(data);
75
+                    updateNum++;
76
+                } else {
77
+                    data.setCreateBy(operator);
78
+                    data.setCreateTime(now);
79
+                    mapper.insertHkSeizureStat(data);
80
+                    successNum++;
81
+                }
82
+            } catch (Exception e) {
83
+                failureMsg.append("<br/>第 ").append(rowNum).append(" 行导入失败:").append(e.getMessage());
84
+            }
85
+        }
86
+        if (failureMsg.length() > 0) {
87
+            return "导入结果:新增 " + successNum + " 条,更新 " + updateNum + " 条,失败信息:" + failureMsg;
88
+        }
89
+        return "导入成功:新增 " + successNum + " 条,更新 " + updateNum + " 条";
90
+    }
91
+}

+ 173 - 0
airport-item/src/main/resources/mapper/item/HkLargeScreenMapper.xml

@@ -0,0 +1,173 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+<mapper namespace="com.sundot.airport.item.mapper.HkLargeScreenMapper">
4
+
5
+    <!-- ============================= 模块一:运行数据 ============================= -->
6
+
7
+    <!-- 运行数据汇总(5个大数字卡片) -->
8
+    <select id="getOperationSummary" resultType="com.sundot.airport.item.domain.HkScreenOperationSummaryVO">
9
+        SELECT
10
+            SUM(a_zone + b_zone + vip + domestic_passenger + intl_passenger + vip_channel) AS passengerTotal,
11
+            SUM(t1_luggage_check + t2_luggage_check)                                       AS luggageTotal,
12
+            SUM(domestic_cargo)                                                             AS domesticCargoTotal,
13
+            SUM(intl_cargo)                                                                 AS intlCargoTotal,
14
+            SUM(south_vehicle_check + north_vehicle_check)                                  AS vehicleCheckTotal
15
+        FROM hk_operation_data
16
+        <where>
17
+            <if test="startDate != null">AND record_date >= #{startDate}</if>
18
+            <if test="endDate != null">AND record_date &lt;= #{endDate}</if>
19
+        </where>
20
+    </select>
21
+
22
+    <!-- T1旅检过检人数趋势(A区/B区) -->
23
+    <select id="getT1PassengerTrend" resultType="com.sundot.airport.item.domain.HkScreenT1PassengerTrendVO">
24
+        SELECT record_date AS recordDate,
25
+               a_zone      AS aZone,
26
+               b_zone      AS bZone
27
+        FROM hk_operation_data
28
+        <where>
29
+            <if test="startDate != null">AND record_date >= #{startDate}</if>
30
+            <if test="endDate != null">AND record_date &lt;= #{endDate}</if>
31
+        </where>
32
+        ORDER BY record_date ASC
33
+    </select>
34
+
35
+    <!-- T2旅检过检人数趋势(国内旅检/国际旅检) -->
36
+    <select id="getT2PassengerTrend" resultType="com.sundot.airport.item.domain.HkScreenT2PassengerTrendVO">
37
+        SELECT record_date        AS recordDate,
38
+               domestic_passenger AS domesticPassenger,
39
+               intl_passenger     AS intlPassenger
40
+        FROM hk_operation_data
41
+        <where>
42
+            <if test="startDate != null">AND record_date >= #{startDate}</if>
43
+            <if test="endDate != null">AND record_date &lt;= #{endDate}</if>
44
+        </where>
45
+        ORDER BY record_date ASC
46
+    </select>
47
+
48
+    <!-- 行检过检数趋势(T1行检/T2行检) -->
49
+    <select id="getLuggageCheckTrend" resultType="com.sundot.airport.item.domain.HkScreenLuggageCheckTrendVO">
50
+        SELECT record_date     AS recordDate,
51
+               t1_luggage_check AS t1LuggageCheck,
52
+               t2_luggage_check AS t2LuggageCheck
53
+        FROM hk_operation_data
54
+        <where>
55
+            <if test="startDate != null">AND record_date >= #{startDate}</if>
56
+            <if test="endDate != null">AND record_date &lt;= #{endDate}</if>
57
+        </where>
58
+        ORDER BY record_date ASC
59
+    </select>
60
+
61
+    <!-- 货物过检数趋势(国内货站/国际货站) -->
62
+    <select id="getCargoTrend" resultType="com.sundot.airport.item.domain.HkScreenCargoTrendVO">
63
+        SELECT record_date   AS recordDate,
64
+               domestic_cargo AS domesticCargo,
65
+               intl_cargo     AS intlCargo
66
+        FROM hk_operation_data
67
+        <where>
68
+            <if test="startDate != null">AND record_date >= #{startDate}</if>
69
+            <if test="endDate != null">AND record_date &lt;= #{endDate}</if>
70
+        </where>
71
+        ORDER BY record_date ASC
72
+    </select>
73
+
74
+    <!-- 车辆过检数趋势(南侧车检/北侧车检) -->
75
+    <select id="getVehicleCheckTrend" resultType="com.sundot.airport.item.domain.HkScreenVehicleCheckTrendVO">
76
+        SELECT record_date        AS recordDate,
77
+               south_vehicle_check AS southVehicleCheck,
78
+               north_vehicle_check AS northVehicleCheck
79
+        FROM hk_operation_data
80
+        <where>
81
+            <if test="startDate != null">AND record_date >= #{startDate}</if>
82
+            <if test="endDate != null">AND record_date &lt;= #{endDate}</if>
83
+        </where>
84
+        ORDER BY record_date ASC
85
+    </select>
86
+
87
+    <!-- ============================= 模块二:查获/收缴数据 ============================= -->
88
+
89
+    <!-- 查获数据各类别合计(T1+T2) -->
90
+    <select id="getSeizureCategoryTotal" resultType="com.sundot.airport.item.domain.HkScreenSeizureTotalVO">
91
+        SELECT
92
+            SUM(t1_fire_source   + t2_fire_source)   AS fireSource,
93
+            SUM(t1_knife         + t2_knife)          AS knife,
94
+            SUM(t1_police_weapon + t2_police_weapon)  AS policeWeapon,
95
+            SUM(t1_firework      + t2_firework)       AS firework,
96
+            SUM(t1_live_animal   + t2_live_animal)    AS liveAnimal,
97
+            SUM(t1_corrosive     + t2_corrosive)      AS corrosive,
98
+            SUM(t1_fake_id       + t2_fake_id)        AS fakeId,
99
+            SUM(t1_explosive     + t2_explosive)      AS explosive,
100
+            SUM(t1_tool          + t2_tool)           AS tool,
101
+            SUM(t1_gun_ammo      + t2_gun_ammo)       AS gunAmmo,
102
+            SUM(t1_illegal       + t2_illegal)        AS illegal,
103
+            SUM(t1_other         + t2_other)          AS other
104
+        FROM hk_seizure_stat
105
+        <where>
106
+            <if test="startDate != null">AND record_date >= #{startDate}</if>
107
+            <if test="endDate != null">AND record_date &lt;= #{endDate}</if>
108
+        </where>
109
+    </select>
110
+
111
+    <!-- 各大队查获数对比(按班次+大队分组)
112
+         同时提供 T1总数、T2总数、合计,支持3个柱状图:总量对比、T1对比、T2对比 -->
113
+    <select id="getBrigadeSeizureCompare" resultType="com.sundot.airport.item.domain.HkScreenBrigadeSeizureVO">
114
+        SELECT
115
+            shift,
116
+            brigade,
117
+            SUM(t1_fire_source + t1_knife + t1_police_weapon + t1_firework + t1_live_animal
118
+                + t1_corrosive + t1_fake_id + t1_explosive + t1_tool + t1_gun_ammo
119
+                + t1_illegal + t1_other) AS t1Total,
120
+            SUM(t2_fire_source + t2_knife + t2_police_weapon + t2_firework + t2_live_animal
121
+                + t2_corrosive + t2_fake_id + t2_explosive + t2_tool + t2_gun_ammo
122
+                + t2_illegal + t2_other) AS t2Total,
123
+            SUM(t1_fire_source + t1_knife + t1_police_weapon + t1_firework + t1_live_animal
124
+                + t1_corrosive + t1_fake_id + t1_explosive + t1_tool + t1_gun_ammo
125
+                + t1_illegal + t1_other
126
+                + t2_fire_source + t2_knife + t2_police_weapon + t2_firework + t2_live_animal
127
+                + t2_corrosive + t2_fake_id + t2_explosive + t2_tool + t2_gun_ammo
128
+                + t2_illegal + t2_other) AS grandTotal
129
+        FROM hk_seizure_stat
130
+        <where>
131
+            <if test="startDate != null">AND record_date >= #{startDate}</if>
132
+            <if test="endDate != null">AND record_date &lt;= #{endDate}</if>
133
+        </where>
134
+        GROUP BY shift, brigade
135
+        ORDER BY shift ASC, brigade ASC
136
+    </select>
137
+
138
+    <!-- 不合规充电宝功能数据汇总 -->
139
+    <select id="getPowerBankSummary" resultType="com.sundot.airport.item.domain.HkScreenPowerBankSummaryVO">
140
+        SELECT
141
+            SUM(t1_mail       + t2_mail)        AS mailTotal,
142
+            SUM(t1_temp_store + t2_temp_store)  AS tempStoreTotal,
143
+            SUM(t1_abandon    + t2_abandon)     AS abandonTotal,
144
+            SUM(t1_recall     + t2_recall)      AS recallTotal,
145
+            SUM(t1_no3c       + t2_no3c)        AS no3cTotal,
146
+            SUM(t1_unclear_mark + t2_unclear_mark) AS unclearMarkTotal,
147
+            SUM(t1_excess_qty + t2_excess_qty)  AS excessQtyTotal,
148
+            SUM(t1_recall + t1_no3c + t1_unclear_mark + t1_excess_qty + t1_mail + t1_abandon + t1_temp_store
149
+                + t2_recall + t2_no3c + t2_unclear_mark + t2_excess_qty + t2_mail + t2_abandon + t2_temp_store) AS bothTotal
150
+        FROM hk_persuade_power_bank
151
+        <where>
152
+            <if test="startDate != null">AND record_date >= #{startDate}</if>
153
+            <if test="endDate != null">AND record_date &lt;= #{endDate}</if>
154
+        </where>
155
+    </select>
156
+
157
+    <!-- 待检区收缴禁带物品数据汇总 -->
158
+    <select id="getPendingConfiscateSummary" resultType="com.sundot.airport.item.domain.HkScreenPendingConfiscateSummaryVO">
159
+        SELECT
160
+            SUM(t1_a_fire_source + t1_b_fire_source
161
+                + t2_domestic_fire_source + t2_intl_fire_source + t2_transit_fire_source) AS fireSourceTotal,
162
+            SUM(t1_a_liquid + t1_b_liquid
163
+                + t2_domestic_liquid + t2_intl_liquid + t2_transit_liquid)               AS liquidTotal,
164
+            SUM(t1_a_other + t1_b_other
165
+                + t2_domestic_other + t2_intl_other + t2_transit_other)                  AS otherTotal
166
+        FROM hk_pending_confiscate
167
+        <where>
168
+            <if test="startDate != null">AND record_date >= #{startDate}</if>
169
+            <if test="endDate != null">AND record_date &lt;= #{endDate}</if>
170
+        </where>
171
+    </select>
172
+
173
+</mapper>

+ 172 - 0
airport-item/src/main/resources/mapper/item/HkOperationDataMapper.xml

@@ -0,0 +1,172 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+<mapper namespace="com.sundot.airport.item.mapper.HkOperationDataMapper">
4
+
5
+    <resultMap type="HkOperationData" id="HkOperationDataResult">
6
+        <result property="id" column="id"/>
7
+        <result property="recordDate" column="record_date"/>
8
+        <result property="aZone" column="a_zone"/>
9
+        <result property="bZone" column="b_zone"/>
10
+        <result property="vip" column="vip"/>
11
+        <result property="domesticPassenger" column="domestic_passenger"/>
12
+        <result property="intlPassenger" column="intl_passenger"/>
13
+        <result property="vipChannel" column="vip_channel"/>
14
+        <result property="t1ReturnChannel" column="t1_return_channel"/>
15
+        <result property="t1LuggageCheck" column="t1_luggage_check"/>
16
+        <result property="floor1Staff" column="floor1_staff"/>
17
+        <result property="t2ReturnChannel" column="t2_return_channel"/>
18
+        <result property="t2LuggageCheck" column="t2_luggage_check"/>
19
+        <result property="floor3EastStaff" column="floor3_east_staff"/>
20
+        <result property="floor1CenterStaff" column="floor1_center_staff"/>
21
+        <result property="floorB1WestStaff" column="floor_b1_west_staff"/>
22
+        <result property="floor3WestStaff" column="floor3_west_staff"/>
23
+        <result property="domesticCargo" column="domestic_cargo"/>
24
+        <result property="domesticGate" column="domestic_gate"/>
25
+        <result property="southVehicleCheck" column="south_vehicle_check"/>
26
+        <result property="domesticBomb" column="domestic_bomb"/>
27
+        <result property="intlCargo" column="intl_cargo"/>
28
+        <result property="intlGate" column="intl_gate"/>
29
+        <result property="northVehicleCheck" column="north_vehicle_check"/>
30
+        <result property="intlBomb" column="intl_bomb"/>
31
+        <result property="createBy" column="create_by"/>
32
+        <result property="createTime" column="create_time"/>
33
+        <result property="updateBy" column="update_by"/>
34
+        <result property="updateTime" column="update_time"/>
35
+        <result property="remark" column="remark"/>
36
+    </resultMap>
37
+
38
+    <sql id="selectVo">
39
+        select id, record_date, a_zone, b_zone, vip, domestic_passenger, intl_passenger,
40
+               vip_channel, t1_return_channel, t1_luggage_check, floor1_staff,
41
+               t2_return_channel, t2_luggage_check, floor3_east_staff, floor1_center_staff,
42
+               floor_b1_west_staff, floor3_west_staff, domestic_cargo, domestic_gate,
43
+               south_vehicle_check, domestic_bomb, intl_cargo, intl_gate,
44
+               north_vehicle_check, intl_bomb,
45
+               create_by, create_time, update_by, update_time, remark
46
+        from hk_operation_data
47
+    </sql>
48
+
49
+    <select id="selectHkOperationDataList" parameterType="HkOperationData" resultMap="HkOperationDataResult">
50
+        <include refid="selectVo"/>
51
+        <where>
52
+            <if test="recordDate != null">and record_date = #{recordDate}</if>
53
+        </where>
54
+        order by record_date desc
55
+    </select>
56
+
57
+    <select id="selectHkOperationDataById" parameterType="Long" resultMap="HkOperationDataResult">
58
+        <include refid="selectVo"/>
59
+        where id = #{id}
60
+    </select>
61
+
62
+    <select id="selectHkOperationDataByDate" parameterType="Date" resultMap="HkOperationDataResult">
63
+        <include refid="selectVo"/>
64
+        where record_date = #{recordDate}
65
+    </select>
66
+
67
+    <insert id="insertHkOperationData" parameterType="HkOperationData" useGeneratedKeys="true" keyProperty="id">
68
+        insert into hk_operation_data
69
+        <trim prefix="(" suffix=")" suffixOverrides=",">
70
+            <if test="recordDate != null">record_date,</if>
71
+            <if test="aZone != null">a_zone,</if>
72
+            <if test="bZone != null">b_zone,</if>
73
+            <if test="vip != null">vip,</if>
74
+            <if test="domesticPassenger != null">domestic_passenger,</if>
75
+            <if test="intlPassenger != null">intl_passenger,</if>
76
+            <if test="vipChannel != null">vip_channel,</if>
77
+            <if test="t1ReturnChannel != null">t1_return_channel,</if>
78
+            <if test="t1LuggageCheck != null">t1_luggage_check,</if>
79
+            <if test="floor1Staff != null">floor1_staff,</if>
80
+            <if test="t2ReturnChannel != null">t2_return_channel,</if>
81
+            <if test="t2LuggageCheck != null">t2_luggage_check,</if>
82
+            <if test="floor3EastStaff != null">floor3_east_staff,</if>
83
+            <if test="floor1CenterStaff != null">floor1_center_staff,</if>
84
+            <if test="floorB1WestStaff != null">floor_b1_west_staff,</if>
85
+            <if test="floor3WestStaff != null">floor3_west_staff,</if>
86
+            <if test="domesticCargo != null">domestic_cargo,</if>
87
+            <if test="domesticGate != null">domestic_gate,</if>
88
+            <if test="southVehicleCheck != null">south_vehicle_check,</if>
89
+            <if test="domesticBomb != null">domestic_bomb,</if>
90
+            <if test="intlCargo != null">intl_cargo,</if>
91
+            <if test="intlGate != null">intl_gate,</if>
92
+            <if test="northVehicleCheck != null">north_vehicle_check,</if>
93
+            <if test="intlBomb != null">intl_bomb,</if>
94
+            <if test="createBy != null and createBy != ''">create_by,</if>
95
+            <if test="createTime != null">create_time,</if>
96
+            <if test="updateBy != null and updateBy != ''">update_by,</if>
97
+            <if test="updateTime != null">update_time,</if>
98
+            <if test="remark != null">remark,</if>
99
+        </trim>
100
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
101
+            <if test="recordDate != null">#{recordDate},</if>
102
+            <if test="aZone != null">#{aZone},</if>
103
+            <if test="bZone != null">#{bZone},</if>
104
+            <if test="vip != null">#{vip},</if>
105
+            <if test="domesticPassenger != null">#{domesticPassenger},</if>
106
+            <if test="intlPassenger != null">#{intlPassenger},</if>
107
+            <if test="vipChannel != null">#{vipChannel},</if>
108
+            <if test="t1ReturnChannel != null">#{t1ReturnChannel},</if>
109
+            <if test="t1LuggageCheck != null">#{t1LuggageCheck},</if>
110
+            <if test="floor1Staff != null">#{floor1Staff},</if>
111
+            <if test="t2ReturnChannel != null">#{t2ReturnChannel},</if>
112
+            <if test="t2LuggageCheck != null">#{t2LuggageCheck},</if>
113
+            <if test="floor3EastStaff != null">#{floor3EastStaff},</if>
114
+            <if test="floor1CenterStaff != null">#{floor1CenterStaff},</if>
115
+            <if test="floorB1WestStaff != null">#{floorB1WestStaff},</if>
116
+            <if test="floor3WestStaff != null">#{floor3WestStaff},</if>
117
+            <if test="domesticCargo != null">#{domesticCargo},</if>
118
+            <if test="domesticGate != null">#{domesticGate},</if>
119
+            <if test="southVehicleCheck != null">#{southVehicleCheck},</if>
120
+            <if test="domesticBomb != null">#{domesticBomb},</if>
121
+            <if test="intlCargo != null">#{intlCargo},</if>
122
+            <if test="intlGate != null">#{intlGate},</if>
123
+            <if test="northVehicleCheck != null">#{northVehicleCheck},</if>
124
+            <if test="intlBomb != null">#{intlBomb},</if>
125
+            <if test="createBy != null and createBy != ''">#{createBy},</if>
126
+            <if test="createTime != null">#{createTime},</if>
127
+            <if test="updateBy != null and updateBy != ''">#{updateBy},</if>
128
+            <if test="updateTime != null">#{updateTime},</if>
129
+            <if test="remark != null">#{remark},</if>
130
+        </trim>
131
+    </insert>
132
+
133
+    <update id="updateHkOperationData" parameterType="HkOperationData">
134
+        update hk_operation_data
135
+        <trim prefix="SET" suffixOverrides=",">
136
+            <if test="recordDate != null">record_date = #{recordDate},</if>
137
+            <if test="aZone != null">a_zone = #{aZone},</if>
138
+            <if test="bZone != null">b_zone = #{bZone},</if>
139
+            <if test="vip != null">vip = #{vip},</if>
140
+            <if test="domesticPassenger != null">domestic_passenger = #{domesticPassenger},</if>
141
+            <if test="intlPassenger != null">intl_passenger = #{intlPassenger},</if>
142
+            <if test="vipChannel != null">vip_channel = #{vipChannel},</if>
143
+            <if test="t1ReturnChannel != null">t1_return_channel = #{t1ReturnChannel},</if>
144
+            <if test="t1LuggageCheck != null">t1_luggage_check = #{t1LuggageCheck},</if>
145
+            <if test="floor1Staff != null">floor1_staff = #{floor1Staff},</if>
146
+            <if test="t2ReturnChannel != null">t2_return_channel = #{t2ReturnChannel},</if>
147
+            <if test="t2LuggageCheck != null">t2_luggage_check = #{t2LuggageCheck},</if>
148
+            <if test="floor3EastStaff != null">floor3_east_staff = #{floor3EastStaff},</if>
149
+            <if test="floor1CenterStaff != null">floor1_center_staff = #{floor1CenterStaff},</if>
150
+            <if test="floorB1WestStaff != null">floor_b1_west_staff = #{floorB1WestStaff},</if>
151
+            <if test="floor3WestStaff != null">floor3_west_staff = #{floor3WestStaff},</if>
152
+            <if test="domesticCargo != null">domestic_cargo = #{domesticCargo},</if>
153
+            <if test="domesticGate != null">domestic_gate = #{domesticGate},</if>
154
+            <if test="southVehicleCheck != null">south_vehicle_check = #{southVehicleCheck},</if>
155
+            <if test="domesticBomb != null">domestic_bomb = #{domesticBomb},</if>
156
+            <if test="intlCargo != null">intl_cargo = #{intlCargo},</if>
157
+            <if test="intlGate != null">intl_gate = #{intlGate},</if>
158
+            <if test="northVehicleCheck != null">north_vehicle_check = #{northVehicleCheck},</if>
159
+            <if test="intlBomb != null">intl_bomb = #{intlBomb},</if>
160
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
161
+            <if test="updateTime != null">update_time = #{updateTime},</if>
162
+            <if test="remark != null">remark = #{remark},</if>
163
+        </trim>
164
+        where id = #{id}
165
+    </update>
166
+
167
+    <delete id="deleteHkOperationDataByIds" parameterType="String">
168
+        delete from hk_operation_data where id in
169
+        <foreach item="id" collection="array" open="(" separator="," close=")">#{id}</foreach>
170
+    </delete>
171
+
172
+</mapper>

+ 145 - 0
airport-item/src/main/resources/mapper/item/HkPendingConfiscateMapper.xml

@@ -0,0 +1,145 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+<mapper namespace="com.sundot.airport.item.mapper.HkPendingConfiscateMapper">
4
+
5
+    <resultMap type="HkPendingConfiscate" id="HkPendingConfiscateResult">
6
+        <result property="id" column="id"/>
7
+        <result property="recordDate" column="record_date"/>
8
+        <result property="timeSlot" column="time_slot"/>
9
+        <result property="t1AFireSource" column="t1_a_fire_source"/>
10
+        <result property="t1ALiquid" column="t1_a_liquid"/>
11
+        <result property="t1AOther" column="t1_a_other"/>
12
+        <result property="t1BFireSource" column="t1_b_fire_source"/>
13
+        <result property="t1BLiquid" column="t1_b_liquid"/>
14
+        <result property="t1BOther" column="t1_b_other"/>
15
+        <result property="t2DomesticFireSource" column="t2_domestic_fire_source"/>
16
+        <result property="t2DomesticLiquid" column="t2_domestic_liquid"/>
17
+        <result property="t2DomesticOther" column="t2_domestic_other"/>
18
+        <result property="t2IntlFireSource" column="t2_intl_fire_source"/>
19
+        <result property="t2IntlLiquid" column="t2_intl_liquid"/>
20
+        <result property="t2IntlOther" column="t2_intl_other"/>
21
+        <result property="t2TransitFireSource" column="t2_transit_fire_source"/>
22
+        <result property="t2TransitLiquid" column="t2_transit_liquid"/>
23
+        <result property="t2TransitOther" column="t2_transit_other"/>
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
+    </resultMap>
30
+
31
+    <sql id="selectVo">
32
+        select id, record_date, time_slot,
33
+               t1_a_fire_source, t1_a_liquid, t1_a_other,
34
+               t1_b_fire_source, t1_b_liquid, t1_b_other,
35
+               t2_domestic_fire_source, t2_domestic_liquid, t2_domestic_other,
36
+               t2_intl_fire_source, t2_intl_liquid, t2_intl_other,
37
+               t2_transit_fire_source, t2_transit_liquid, t2_transit_other,
38
+               create_by, create_time, update_by, update_time, remark
39
+        from hk_pending_confiscate
40
+    </sql>
41
+
42
+    <select id="selectHkPendingConfiscateList" parameterType="HkPendingConfiscate" resultMap="HkPendingConfiscateResult">
43
+        <include refid="selectVo"/>
44
+        <where>
45
+            <if test="recordDate != null">and record_date = #{recordDate}</if>
46
+            <if test="timeSlot != null and timeSlot != ''">and time_slot = #{timeSlot}</if>
47
+        </where>
48
+        order by record_date desc, time_slot asc
49
+    </select>
50
+
51
+    <select id="selectHkPendingConfiscateById" parameterType="Long" resultMap="HkPendingConfiscateResult">
52
+        <include refid="selectVo"/>
53
+        where id = #{id}
54
+    </select>
55
+
56
+    <select id="selectHkPendingConfiscateByDateAndSlot" resultMap="HkPendingConfiscateResult">
57
+        <include refid="selectVo"/>
58
+        where record_date = #{recordDate} and time_slot = #{timeSlot}
59
+    </select>
60
+
61
+    <insert id="insertHkPendingConfiscate" parameterType="HkPendingConfiscate" useGeneratedKeys="true" keyProperty="id">
62
+        insert into hk_pending_confiscate
63
+        <trim prefix="(" suffix=")" suffixOverrides=",">
64
+            <if test="recordDate != null">record_date,</if>
65
+            <if test="timeSlot != null and timeSlot != ''">time_slot,</if>
66
+            <if test="t1AFireSource != null">t1_a_fire_source,</if>
67
+            <if test="t1ALiquid != null">t1_a_liquid,</if>
68
+            <if test="t1AOther != null">t1_a_other,</if>
69
+            <if test="t1BFireSource != null">t1_b_fire_source,</if>
70
+            <if test="t1BLiquid != null">t1_b_liquid,</if>
71
+            <if test="t1BOther != null">t1_b_other,</if>
72
+            <if test="t2DomesticFireSource != null">t2_domestic_fire_source,</if>
73
+            <if test="t2DomesticLiquid != null">t2_domestic_liquid,</if>
74
+            <if test="t2DomesticOther != null">t2_domestic_other,</if>
75
+            <if test="t2IntlFireSource != null">t2_intl_fire_source,</if>
76
+            <if test="t2IntlLiquid != null">t2_intl_liquid,</if>
77
+            <if test="t2IntlOther != null">t2_intl_other,</if>
78
+            <if test="t2TransitFireSource != null">t2_transit_fire_source,</if>
79
+            <if test="t2TransitLiquid != null">t2_transit_liquid,</if>
80
+            <if test="t2TransitOther != null">t2_transit_other,</if>
81
+            <if test="createBy != null and createBy != ''">create_by,</if>
82
+            <if test="createTime != null">create_time,</if>
83
+            <if test="updateBy != null and updateBy != ''">update_by,</if>
84
+            <if test="updateTime != null">update_time,</if>
85
+            <if test="remark != null">remark,</if>
86
+        </trim>
87
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
88
+            <if test="recordDate != null">#{recordDate},</if>
89
+            <if test="timeSlot != null and timeSlot != ''">#{timeSlot},</if>
90
+            <if test="t1AFireSource != null">#{t1AFireSource},</if>
91
+            <if test="t1ALiquid != null">#{t1ALiquid},</if>
92
+            <if test="t1AOther != null">#{t1AOther},</if>
93
+            <if test="t1BFireSource != null">#{t1BFireSource},</if>
94
+            <if test="t1BLiquid != null">#{t1BLiquid},</if>
95
+            <if test="t1BOther != null">#{t1BOther},</if>
96
+            <if test="t2DomesticFireSource != null">#{t2DomesticFireSource},</if>
97
+            <if test="t2DomesticLiquid != null">#{t2DomesticLiquid},</if>
98
+            <if test="t2DomesticOther != null">#{t2DomesticOther},</if>
99
+            <if test="t2IntlFireSource != null">#{t2IntlFireSource},</if>
100
+            <if test="t2IntlLiquid != null">#{t2IntlLiquid},</if>
101
+            <if test="t2IntlOther != null">#{t2IntlOther},</if>
102
+            <if test="t2TransitFireSource != null">#{t2TransitFireSource},</if>
103
+            <if test="t2TransitLiquid != null">#{t2TransitLiquid},</if>
104
+            <if test="t2TransitOther != null">#{t2TransitOther},</if>
105
+            <if test="createBy != null and createBy != ''">#{createBy},</if>
106
+            <if test="createTime != null">#{createTime},</if>
107
+            <if test="updateBy != null and updateBy != ''">#{updateBy},</if>
108
+            <if test="updateTime != null">#{updateTime},</if>
109
+            <if test="remark != null">#{remark},</if>
110
+        </trim>
111
+    </insert>
112
+
113
+    <update id="updateHkPendingConfiscate" parameterType="HkPendingConfiscate">
114
+        update hk_pending_confiscate
115
+        <trim prefix="SET" suffixOverrides=",">
116
+            <if test="recordDate != null">record_date = #{recordDate},</if>
117
+            <if test="timeSlot != null and timeSlot != ''">time_slot = #{timeSlot},</if>
118
+            <if test="t1AFireSource != null">t1_a_fire_source = #{t1AFireSource},</if>
119
+            <if test="t1ALiquid != null">t1_a_liquid = #{t1ALiquid},</if>
120
+            <if test="t1AOther != null">t1_a_other = #{t1AOther},</if>
121
+            <if test="t1BFireSource != null">t1_b_fire_source = #{t1BFireSource},</if>
122
+            <if test="t1BLiquid != null">t1_b_liquid = #{t1BLiquid},</if>
123
+            <if test="t1BOther != null">t1_b_other = #{t1BOther},</if>
124
+            <if test="t2DomesticFireSource != null">t2_domestic_fire_source = #{t2DomesticFireSource},</if>
125
+            <if test="t2DomesticLiquid != null">t2_domestic_liquid = #{t2DomesticLiquid},</if>
126
+            <if test="t2DomesticOther != null">t2_domestic_other = #{t2DomesticOther},</if>
127
+            <if test="t2IntlFireSource != null">t2_intl_fire_source = #{t2IntlFireSource},</if>
128
+            <if test="t2IntlLiquid != null">t2_intl_liquid = #{t2IntlLiquid},</if>
129
+            <if test="t2IntlOther != null">t2_intl_other = #{t2IntlOther},</if>
130
+            <if test="t2TransitFireSource != null">t2_transit_fire_source = #{t2TransitFireSource},</if>
131
+            <if test="t2TransitLiquid != null">t2_transit_liquid = #{t2TransitLiquid},</if>
132
+            <if test="t2TransitOther != null">t2_transit_other = #{t2TransitOther},</if>
133
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
134
+            <if test="updateTime != null">update_time = #{updateTime},</if>
135
+            <if test="remark != null">remark = #{remark},</if>
136
+        </trim>
137
+        where id = #{id}
138
+    </update>
139
+
140
+    <delete id="deleteHkPendingConfiscateByIds" parameterType="String">
141
+        delete from hk_pending_confiscate where id in
142
+        <foreach item="id" collection="array" open="(" separator="," close=")">#{id}</foreach>
143
+    </delete>
144
+
145
+</mapper>

+ 138 - 0
airport-item/src/main/resources/mapper/item/HkPersuadePowerBankMapper.xml

@@ -0,0 +1,138 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+<mapper namespace="com.sundot.airport.item.mapper.HkPersuadePowerBankMapper">
4
+
5
+    <resultMap type="HkPersuadePowerBank" id="HkPersuadePowerBankResult">
6
+        <result property="id" column="id"/>
7
+        <result property="recordDate" column="record_date"/>
8
+        <result property="timeSlot" column="time_slot"/>
9
+        <result property="t1Recall" column="t1_recall"/>
10
+        <result property="t1No3c" column="t1_no3c"/>
11
+        <result property="t1UnclearMark" column="t1_unclear_mark"/>
12
+        <result property="t1ExcessQty" column="t1_excess_qty"/>
13
+        <result property="t1Mail" column="t1_mail"/>
14
+        <result property="t1Abandon" column="t1_abandon"/>
15
+        <result property="t1TempStore" column="t1_temp_store"/>
16
+        <result property="t2Recall" column="t2_recall"/>
17
+        <result property="t2No3c" column="t2_no3c"/>
18
+        <result property="t2UnclearMark" column="t2_unclear_mark"/>
19
+        <result property="t2ExcessQty" column="t2_excess_qty"/>
20
+        <result property="t2Mail" column="t2_mail"/>
21
+        <result property="t2Abandon" column="t2_abandon"/>
22
+        <result property="t2TempStore" column="t2_temp_store"/>
23
+        <result property="createBy" column="create_by"/>
24
+        <result property="createTime" column="create_time"/>
25
+        <result property="updateBy" column="update_by"/>
26
+        <result property="updateTime" column="update_time"/>
27
+        <result property="remark" column="remark"/>
28
+    </resultMap>
29
+
30
+    <sql id="selectVo">
31
+        select id, record_date, time_slot,
32
+               t1_recall, t1_no3c, t1_unclear_mark, t1_excess_qty, t1_mail, t1_abandon, t1_temp_store,
33
+               t2_recall, t2_no3c, t2_unclear_mark, t2_excess_qty, t2_mail, t2_abandon, t2_temp_store,
34
+               create_by, create_time, update_by, update_time, remark
35
+        from hk_persuade_power_bank
36
+    </sql>
37
+
38
+    <select id="selectHkPersuadePowerBankList" parameterType="HkPersuadePowerBank" resultMap="HkPersuadePowerBankResult">
39
+        <include refid="selectVo"/>
40
+        <where>
41
+            <if test="recordDate != null">and record_date = #{recordDate}</if>
42
+            <if test="timeSlot != null and timeSlot != ''">and time_slot = #{timeSlot}</if>
43
+        </where>
44
+        order by record_date desc, time_slot asc
45
+    </select>
46
+
47
+    <select id="selectHkPersuadePowerBankById" parameterType="Long" resultMap="HkPersuadePowerBankResult">
48
+        <include refid="selectVo"/>
49
+        where id = #{id}
50
+    </select>
51
+
52
+    <select id="selectHkPersuadePowerBankByDateAndSlot" resultMap="HkPersuadePowerBankResult">
53
+        <include refid="selectVo"/>
54
+        where record_date = #{recordDate} and time_slot = #{timeSlot}
55
+    </select>
56
+
57
+    <insert id="insertHkPersuadePowerBank" parameterType="HkPersuadePowerBank" useGeneratedKeys="true" keyProperty="id">
58
+        insert into hk_persuade_power_bank
59
+        <trim prefix="(" suffix=")" suffixOverrides=",">
60
+            <if test="recordDate != null">record_date,</if>
61
+            <if test="timeSlot != null and timeSlot != ''">time_slot,</if>
62
+            <if test="t1Recall != null">t1_recall,</if>
63
+            <if test="t1No3c != null">t1_no3c,</if>
64
+            <if test="t1UnclearMark != null">t1_unclear_mark,</if>
65
+            <if test="t1ExcessQty != null">t1_excess_qty,</if>
66
+            <if test="t1Mail != null">t1_mail,</if>
67
+            <if test="t1Abandon != null">t1_abandon,</if>
68
+            <if test="t1TempStore != null">t1_temp_store,</if>
69
+            <if test="t2Recall != null">t2_recall,</if>
70
+            <if test="t2No3c != null">t2_no3c,</if>
71
+            <if test="t2UnclearMark != null">t2_unclear_mark,</if>
72
+            <if test="t2ExcessQty != null">t2_excess_qty,</if>
73
+            <if test="t2Mail != null">t2_mail,</if>
74
+            <if test="t2Abandon != null">t2_abandon,</if>
75
+            <if test="t2TempStore != null">t2_temp_store,</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
+        </trim>
82
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
83
+            <if test="recordDate != null">#{recordDate},</if>
84
+            <if test="timeSlot != null and timeSlot != ''">#{timeSlot},</if>
85
+            <if test="t1Recall != null">#{t1Recall},</if>
86
+            <if test="t1No3c != null">#{t1No3c},</if>
87
+            <if test="t1UnclearMark != null">#{t1UnclearMark},</if>
88
+            <if test="t1ExcessQty != null">#{t1ExcessQty},</if>
89
+            <if test="t1Mail != null">#{t1Mail},</if>
90
+            <if test="t1Abandon != null">#{t1Abandon},</if>
91
+            <if test="t1TempStore != null">#{t1TempStore},</if>
92
+            <if test="t2Recall != null">#{t2Recall},</if>
93
+            <if test="t2No3c != null">#{t2No3c},</if>
94
+            <if test="t2UnclearMark != null">#{t2UnclearMark},</if>
95
+            <if test="t2ExcessQty != null">#{t2ExcessQty},</if>
96
+            <if test="t2Mail != null">#{t2Mail},</if>
97
+            <if test="t2Abandon != null">#{t2Abandon},</if>
98
+            <if test="t2TempStore != null">#{t2TempStore},</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
+        </trim>
105
+    </insert>
106
+
107
+    <update id="updateHkPersuadePowerBank" parameterType="HkPersuadePowerBank">
108
+        update hk_persuade_power_bank
109
+        <trim prefix="SET" suffixOverrides=",">
110
+            <if test="recordDate != null">record_date = #{recordDate},</if>
111
+            <if test="timeSlot != null and timeSlot != ''">time_slot = #{timeSlot},</if>
112
+            <if test="t1Recall != null">t1_recall = #{t1Recall},</if>
113
+            <if test="t1No3c != null">t1_no3c = #{t1No3c},</if>
114
+            <if test="t1UnclearMark != null">t1_unclear_mark = #{t1UnclearMark},</if>
115
+            <if test="t1ExcessQty != null">t1_excess_qty = #{t1ExcessQty},</if>
116
+            <if test="t1Mail != null">t1_mail = #{t1Mail},</if>
117
+            <if test="t1Abandon != null">t1_abandon = #{t1Abandon},</if>
118
+            <if test="t1TempStore != null">t1_temp_store = #{t1TempStore},</if>
119
+            <if test="t2Recall != null">t2_recall = #{t2Recall},</if>
120
+            <if test="t2No3c != null">t2_no3c = #{t2No3c},</if>
121
+            <if test="t2UnclearMark != null">t2_unclear_mark = #{t2UnclearMark},</if>
122
+            <if test="t2ExcessQty != null">t2_excess_qty = #{t2ExcessQty},</if>
123
+            <if test="t2Mail != null">t2_mail = #{t2Mail},</if>
124
+            <if test="t2Abandon != null">t2_abandon = #{t2Abandon},</if>
125
+            <if test="t2TempStore != null">t2_temp_store = #{t2TempStore},</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="deleteHkPersuadePowerBankByIds" parameterType="String">
134
+        delete from hk_persuade_power_bank where id in
135
+        <foreach item="id" collection="array" open="(" separator="," close=")">#{id}</foreach>
136
+    </delete>
137
+
138
+</mapper>

+ 185 - 0
airport-item/src/main/resources/mapper/item/HkSeizureStatMapper.xml

@@ -0,0 +1,185 @@
1
+<?xml version="1.0" encoding="UTF-8" ?>
2
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
3
+<mapper namespace="com.sundot.airport.item.mapper.HkSeizureStatMapper">
4
+
5
+    <resultMap type="HkSeizureStat" id="HkSeizureStatResult">
6
+        <result property="id" column="id"/>
7
+        <result property="recordDate" column="record_date"/>
8
+        <result property="shift" column="shift"/>
9
+        <result property="brigade" column="brigade"/>
10
+        <result property="t1FireSource" column="t1_fire_source"/>
11
+        <result property="t1Knife" column="t1_knife"/>
12
+        <result property="t1PoliceWeapon" column="t1_police_weapon"/>
13
+        <result property="t1Firework" column="t1_firework"/>
14
+        <result property="t1LiveAnimal" column="t1_live_animal"/>
15
+        <result property="t1Corrosive" column="t1_corrosive"/>
16
+        <result property="t1FakeId" column="t1_fake_id"/>
17
+        <result property="t1Explosive" column="t1_explosive"/>
18
+        <result property="t1Tool" column="t1_tool"/>
19
+        <result property="t1GunAmmo" column="t1_gun_ammo"/>
20
+        <result property="t1Illegal" column="t1_illegal"/>
21
+        <result property="t1Other" column="t1_other"/>
22
+        <result property="t2FireSource" column="t2_fire_source"/>
23
+        <result property="t2Knife" column="t2_knife"/>
24
+        <result property="t2PoliceWeapon" column="t2_police_weapon"/>
25
+        <result property="t2Firework" column="t2_firework"/>
26
+        <result property="t2LiveAnimal" column="t2_live_animal"/>
27
+        <result property="t2Corrosive" column="t2_corrosive"/>
28
+        <result property="t2FakeId" column="t2_fake_id"/>
29
+        <result property="t2Explosive" column="t2_explosive"/>
30
+        <result property="t2Tool" column="t2_tool"/>
31
+        <result property="t2GunAmmo" column="t2_gun_ammo"/>
32
+        <result property="t2Illegal" column="t2_illegal"/>
33
+        <result property="t2Other" column="t2_other"/>
34
+        <result property="createBy" column="create_by"/>
35
+        <result property="createTime" column="create_time"/>
36
+        <result property="updateBy" column="update_by"/>
37
+        <result property="updateTime" column="update_time"/>
38
+        <result property="remark" column="remark"/>
39
+    </resultMap>
40
+
41
+    <sql id="selectVo">
42
+        select id, record_date, shift, brigade,
43
+               t1_fire_source, t1_knife, t1_police_weapon, t1_firework, t1_live_animal,
44
+               t1_corrosive, t1_fake_id, t1_explosive, t1_tool, t1_gun_ammo, t1_illegal, t1_other,
45
+               t2_fire_source, t2_knife, t2_police_weapon, t2_firework, t2_live_animal,
46
+               t2_corrosive, t2_fake_id, t2_explosive, t2_tool, t2_gun_ammo, t2_illegal, t2_other,
47
+               create_by, create_time, update_by, update_time, remark
48
+        from hk_seizure_stat
49
+    </sql>
50
+
51
+    <select id="selectHkSeizureStatList" parameterType="HkSeizureStat" resultMap="HkSeizureStatResult">
52
+        <include refid="selectVo"/>
53
+        <where>
54
+            <if test="recordDate != null">and record_date = #{recordDate}</if>
55
+            <if test="shift != null and shift != ''">and shift = #{shift}</if>
56
+            <if test="brigade != null and brigade != ''">and brigade = #{brigade}</if>
57
+        </where>
58
+        order by record_date desc, shift asc
59
+    </select>
60
+
61
+    <select id="selectHkSeizureStatById" parameterType="Long" resultMap="HkSeizureStatResult">
62
+        <include refid="selectVo"/>
63
+        where id = #{id}
64
+    </select>
65
+
66
+    <select id="selectHkSeizureStatByDateAndShift" resultMap="HkSeizureStatResult">
67
+        <include refid="selectVo"/>
68
+        where record_date = #{recordDate} and shift = #{shift}
69
+    </select>
70
+
71
+    <insert id="insertHkSeizureStat" parameterType="HkSeizureStat" useGeneratedKeys="true" keyProperty="id">
72
+        insert into hk_seizure_stat
73
+        <trim prefix="(" suffix=")" suffixOverrides=",">
74
+            <if test="recordDate != null">record_date,</if>
75
+            <if test="shift != null and shift != ''">shift,</if>
76
+            <if test="brigade != null and brigade != ''">brigade,</if>
77
+            <if test="t1FireSource != null">t1_fire_source,</if>
78
+            <if test="t1Knife != null">t1_knife,</if>
79
+            <if test="t1PoliceWeapon != null">t1_police_weapon,</if>
80
+            <if test="t1Firework != null">t1_firework,</if>
81
+            <if test="t1LiveAnimal != null">t1_live_animal,</if>
82
+            <if test="t1Corrosive != null">t1_corrosive,</if>
83
+            <if test="t1FakeId != null">t1_fake_id,</if>
84
+            <if test="t1Explosive != null">t1_explosive,</if>
85
+            <if test="t1Tool != null">t1_tool,</if>
86
+            <if test="t1GunAmmo != null">t1_gun_ammo,</if>
87
+            <if test="t1Illegal != null">t1_illegal,</if>
88
+            <if test="t1Other != null">t1_other,</if>
89
+            <if test="t2FireSource != null">t2_fire_source,</if>
90
+            <if test="t2Knife != null">t2_knife,</if>
91
+            <if test="t2PoliceWeapon != null">t2_police_weapon,</if>
92
+            <if test="t2Firework != null">t2_firework,</if>
93
+            <if test="t2LiveAnimal != null">t2_live_animal,</if>
94
+            <if test="t2Corrosive != null">t2_corrosive,</if>
95
+            <if test="t2FakeId != null">t2_fake_id,</if>
96
+            <if test="t2Explosive != null">t2_explosive,</if>
97
+            <if test="t2Tool != null">t2_tool,</if>
98
+            <if test="t2GunAmmo != null">t2_gun_ammo,</if>
99
+            <if test="t2Illegal != null">t2_illegal,</if>
100
+            <if test="t2Other != null">t2_other,</if>
101
+            <if test="createBy != null and createBy != ''">create_by,</if>
102
+            <if test="createTime != null">create_time,</if>
103
+            <if test="updateBy != null and updateBy != ''">update_by,</if>
104
+            <if test="updateTime != null">update_time,</if>
105
+            <if test="remark != null">remark,</if>
106
+        </trim>
107
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
108
+            <if test="recordDate != null">#{recordDate},</if>
109
+            <if test="shift != null and shift != ''">#{shift},</if>
110
+            <if test="brigade != null and brigade != ''">#{brigade},</if>
111
+            <if test="t1FireSource != null">#{t1FireSource},</if>
112
+            <if test="t1Knife != null">#{t1Knife},</if>
113
+            <if test="t1PoliceWeapon != null">#{t1PoliceWeapon},</if>
114
+            <if test="t1Firework != null">#{t1Firework},</if>
115
+            <if test="t1LiveAnimal != null">#{t1LiveAnimal},</if>
116
+            <if test="t1Corrosive != null">#{t1Corrosive},</if>
117
+            <if test="t1FakeId != null">#{t1FakeId},</if>
118
+            <if test="t1Explosive != null">#{t1Explosive},</if>
119
+            <if test="t1Tool != null">#{t1Tool},</if>
120
+            <if test="t1GunAmmo != null">#{t1GunAmmo},</if>
121
+            <if test="t1Illegal != null">#{t1Illegal},</if>
122
+            <if test="t1Other != null">#{t1Other},</if>
123
+            <if test="t2FireSource != null">#{t2FireSource},</if>
124
+            <if test="t2Knife != null">#{t2Knife},</if>
125
+            <if test="t2PoliceWeapon != null">#{t2PoliceWeapon},</if>
126
+            <if test="t2Firework != null">#{t2Firework},</if>
127
+            <if test="t2LiveAnimal != null">#{t2LiveAnimal},</if>
128
+            <if test="t2Corrosive != null">#{t2Corrosive},</if>
129
+            <if test="t2FakeId != null">#{t2FakeId},</if>
130
+            <if test="t2Explosive != null">#{t2Explosive},</if>
131
+            <if test="t2Tool != null">#{t2Tool},</if>
132
+            <if test="t2GunAmmo != null">#{t2GunAmmo},</if>
133
+            <if test="t2Illegal != null">#{t2Illegal},</if>
134
+            <if test="t2Other != null">#{t2Other},</if>
135
+            <if test="createBy != null and createBy != ''">#{createBy},</if>
136
+            <if test="createTime != null">#{createTime},</if>
137
+            <if test="updateBy != null and updateBy != ''">#{updateBy},</if>
138
+            <if test="updateTime != null">#{updateTime},</if>
139
+            <if test="remark != null">#{remark},</if>
140
+        </trim>
141
+    </insert>
142
+
143
+    <update id="updateHkSeizureStat" parameterType="HkSeizureStat">
144
+        update hk_seizure_stat
145
+        <trim prefix="SET" suffixOverrides=",">
146
+            <if test="recordDate != null">record_date = #{recordDate},</if>
147
+            <if test="shift != null and shift != ''">shift = #{shift},</if>
148
+            <if test="brigade != null and brigade != ''">brigade = #{brigade},</if>
149
+            <if test="t1FireSource != null">t1_fire_source = #{t1FireSource},</if>
150
+            <if test="t1Knife != null">t1_knife = #{t1Knife},</if>
151
+            <if test="t1PoliceWeapon != null">t1_police_weapon = #{t1PoliceWeapon},</if>
152
+            <if test="t1Firework != null">t1_firework = #{t1Firework},</if>
153
+            <if test="t1LiveAnimal != null">t1_live_animal = #{t1LiveAnimal},</if>
154
+            <if test="t1Corrosive != null">t1_corrosive = #{t1Corrosive},</if>
155
+            <if test="t1FakeId != null">t1_fake_id = #{t1FakeId},</if>
156
+            <if test="t1Explosive != null">t1_explosive = #{t1Explosive},</if>
157
+            <if test="t1Tool != null">t1_tool = #{t1Tool},</if>
158
+            <if test="t1GunAmmo != null">t1_gun_ammo = #{t1GunAmmo},</if>
159
+            <if test="t1Illegal != null">t1_illegal = #{t1Illegal},</if>
160
+            <if test="t1Other != null">t1_other = #{t1Other},</if>
161
+            <if test="t2FireSource != null">t2_fire_source = #{t2FireSource},</if>
162
+            <if test="t2Knife != null">t2_knife = #{t2Knife},</if>
163
+            <if test="t2PoliceWeapon != null">t2_police_weapon = #{t2PoliceWeapon},</if>
164
+            <if test="t2Firework != null">t2_firework = #{t2Firework},</if>
165
+            <if test="t2LiveAnimal != null">t2_live_animal = #{t2LiveAnimal},</if>
166
+            <if test="t2Corrosive != null">t2_corrosive = #{t2Corrosive},</if>
167
+            <if test="t2FakeId != null">t2_fake_id = #{t2FakeId},</if>
168
+            <if test="t2Explosive != null">t2_explosive = #{t2Explosive},</if>
169
+            <if test="t2Tool != null">t2_tool = #{t2Tool},</if>
170
+            <if test="t2GunAmmo != null">t2_gun_ammo = #{t2GunAmmo},</if>
171
+            <if test="t2Illegal != null">t2_illegal = #{t2Illegal},</if>
172
+            <if test="t2Other != null">t2_other = #{t2Other},</if>
173
+            <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
174
+            <if test="updateTime != null">update_time = #{updateTime},</if>
175
+            <if test="remark != null">remark = #{remark},</if>
176
+        </trim>
177
+        where id = #{id}
178
+    </update>
179
+
180
+    <delete id="deleteHkSeizureStatByIds" parameterType="String">
181
+        delete from hk_seizure_stat where id in
182
+        <foreach item="id" collection="array" open="(" separator="," close=")">#{id}</foreach>
183
+    </delete>
184
+
185
+</mapper>