Browse Source

feat: 新增台账管理与配分体系模块

- 新增 airport-ledger 模块:15张台账的领域对象、Mapper、Service、Controller
- 新增台账一键导入(单类型 EasyExcel + 合并多Sheet POI)
- 新增配分维度/指标/事项/推送配置 CRUD 接口
- 新增台账同步服务(LedgerSyncServiceImpl),将台账数据转换为配分事项
- 新增雷达图大屏接口(班组列表从 sys_dept 读取)
- 新增台账同步 Controller(/ledger/sync)
- 补充 sql/ledger.sql、sql/score.sql(含128条指标数据)
- 补充菜单权限 SQL(台账管理、配分管理、大屏)
simonlll 2 days ago
parent
commit
3c5cc110ae
100 changed files with 5804 additions and 0 deletions
  1. 80 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerBannerLetterController.java
  2. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerChannelPassRateController.java
  3. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerComplaintController.java
  4. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerExamScoreController.java
  5. 281 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerImportController.java
  6. 80 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerLeaveSpecialController.java
  7. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerPatrolInspectionController.java
  8. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerRealtimeInterceptionController.java
  9. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerRewardApprovalController.java
  10. 82 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerRewardPenaltyController.java
  11. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerSecurityTestController.java
  12. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerSeizureStatsController.java
  13. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerServicePatrolController.java
  14. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerSupervisionProblemController.java
  15. 60 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerSyncController.java
  16. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerTerminalBonusController.java
  17. 50 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerUnsafeEventController.java
  18. 85 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/score/ScoreDimensionController.java
  19. 112 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/score/ScoreEventController.java
  20. 85 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/score/ScoreIndicatorController.java
  21. 64 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/score/ScorePushConfigController.java
  22. 33 0
      airport-admin/src/main/java/com/sundot/airport/web/controller/score/ScoreRadarController.java
  23. 36 0
      airport-ledger/pom.xml
  24. 91 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerBannerLetter.java
  25. 85 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerChannelPassRate.java
  26. 109 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerComplaint.java
  27. 91 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerExamScore.java
  28. 86 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerLeaveSpecial.java
  29. 139 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerPatrolInspection.java
  30. 169 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerRealtimeInterception.java
  31. 85 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerRewardApproval.java
  32. 91 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerRewardPenalty.java
  33. 139 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerSecurityTest.java
  34. 157 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerSeizureStats.java
  35. 133 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerServicePatrol.java
  36. 139 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerSupervisionProblem.java
  37. 85 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerTerminalBonus.java
  38. 97 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerUnsafeEvent.java
  39. 53 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/ScoreDimension.java
  40. 146 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/ScoreEvent.java
  41. 94 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/ScoreIndicator.java
  42. 71 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/ScorePushConfig.java
  43. 69 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/vo/MemberScoreVO.java
  44. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerBannerLetterMapper.java
  45. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerChannelPassRateMapper.java
  46. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerComplaintMapper.java
  47. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerExamScoreMapper.java
  48. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerLeaveSpecialMapper.java
  49. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerPatrolInspectionMapper.java
  50. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerRealtimeInterceptionMapper.java
  51. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerRewardApprovalMapper.java
  52. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerRewardPenaltyMapper.java
  53. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerSecurityTestMapper.java
  54. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerSeizureStatsMapper.java
  55. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerServicePatrolMapper.java
  56. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerSupervisionProblemMapper.java
  57. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerTerminalBonusMapper.java
  58. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerUnsafeEventMapper.java
  59. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/ScoreDimensionMapper.java
  60. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/ScoreEventMapper.java
  61. 11 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/ScoreIndicatorMapper.java
  62. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/ScorePushConfigMapper.java
  63. 9 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerBannerLetterService.java
  64. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerChannelPassRateService.java
  65. 22 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerCombinedImportService.java
  66. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerComplaintService.java
  67. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerExamScoreService.java
  68. 9 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerLeaveSpecialService.java
  69. 13 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerPatrolInspectionService.java
  70. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerRealtimeInterceptionService.java
  71. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerRewardApprovalService.java
  72. 9 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerRewardPenaltyService.java
  73. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerSecurityTestService.java
  74. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerSeizureStatsService.java
  75. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerServicePatrolService.java
  76. 13 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerSupervisionProblemService.java
  77. 29 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerSyncService.java
  78. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerTerminalBonusService.java
  79. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerUnsafeEventService.java
  80. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScoreDimensionService.java
  81. 11 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScoreEventService.java
  82. 12 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScoreIndicatorService.java
  83. 10 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScorePushConfigService.java
  84. 17 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScoreRadarService.java
  85. 28 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerBannerLetterServiceImpl.java
  86. 35 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerChannelPassRateServiceImpl.java
  87. 617 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerCombinedImportServiceImpl.java
  88. 35 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerComplaintServiceImpl.java
  89. 35 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerExamScoreServiceImpl.java
  90. 28 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerLeaveSpecialServiceImpl.java
  91. 35 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerPatrolInspectionServiceImpl.java
  92. 35 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerRealtimeInterceptionServiceImpl.java
  93. 35 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerRewardApprovalServiceImpl.java
  94. 28 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerRewardPenaltyServiceImpl.java
  95. 35 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSecurityTestServiceImpl.java
  96. 35 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSeizureStatsServiceImpl.java
  97. 35 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerServicePatrolServiceImpl.java
  98. 35 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSupervisionProblemServiceImpl.java
  99. 541 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSyncServiceImpl.java
  100. 0 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerTerminalBonusServiceImpl.java

+ 80 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerBannerLetterController.java

@@ -0,0 +1,80 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.DateUtils;
12
+import com.sundot.airport.common.utils.poi.ExcelUtil;
13
+import com.sundot.airport.ledger.domain.LedgerBannerLetter;
14
+import com.sundot.airport.ledger.service.ILedgerBannerLetterService;
15
+import org.springframework.beans.factory.annotation.Autowired;
16
+import org.springframework.security.access.prepost.PreAuthorize;
17
+import org.springframework.validation.annotation.Validated;
18
+import org.springframework.web.bind.annotation.*;
19
+
20
+/**
21
+ * 锦旗及感谢信记录Controller(页面录入,支持增删改查)
22
+ */
23
+@RestController
24
+@RequestMapping("/ledger/bannerLetter")
25
+public class LedgerBannerLetterController extends BaseController {
26
+
27
+    @Autowired
28
+    private ILedgerBannerLetterService service;
29
+
30
+    @PreAuthorize("@ss.hasPermi('ledger:bannerLetter:list')")
31
+    @GetMapping("/list")
32
+    public TableDataInfo list(LedgerBannerLetter query) {
33
+        startPage();
34
+        List<LedgerBannerLetter> list = service.selectList(query);
35
+        return getDataTable(list);
36
+    }
37
+
38
+    @PreAuthorize("@ss.hasPermi('ledger:bannerLetter:export')")
39
+    @Log(title = "锦旗及感谢信记录", businessType = BusinessType.EXPORT)
40
+    @PostMapping("/export")
41
+    public void export(HttpServletResponse response, LedgerBannerLetter query) {
42
+        List<LedgerBannerLetter> list = service.selectList(query);
43
+        ExcelUtil<LedgerBannerLetter> util = new ExcelUtil<>(LedgerBannerLetter.class);
44
+        util.exportExcel(response, list, "锦旗及感谢信记录");
45
+    }
46
+
47
+    @PreAuthorize("@ss.hasPermi('ledger:bannerLetter:query')")
48
+    @GetMapping("/{id}")
49
+    public AjaxResult getInfo(@PathVariable Long id) {
50
+        return AjaxResult.success(service.getById(id));
51
+    }
52
+
53
+    @PreAuthorize("@ss.hasPermi('ledger:bannerLetter:add')")
54
+    @Log(title = "锦旗及感谢信记录", businessType = BusinessType.INSERT)
55
+    @PostMapping
56
+    public AjaxResult add(@Validated @RequestBody LedgerBannerLetter entity) {
57
+        entity.setCreateBy(getUsername());
58
+        entity.setCreateTime(DateUtils.getNowDate());
59
+        return toAjax(service.save(entity));
60
+    }
61
+
62
+    @PreAuthorize("@ss.hasPermi('ledger:bannerLetter:edit')")
63
+    @Log(title = "锦旗及感谢信记录", businessType = BusinessType.UPDATE)
64
+    @PutMapping
65
+    public AjaxResult edit(@Validated @RequestBody LedgerBannerLetter entity) {
66
+        entity.setUpdateBy(getUsername());
67
+        entity.setUpdateTime(DateUtils.getNowDate());
68
+        return toAjax(service.updateById(entity));
69
+    }
70
+
71
+    @PreAuthorize("@ss.hasPermi('ledger:bannerLetter:remove')")
72
+    @Log(title = "锦旗及感谢信记录", businessType = BusinessType.DELETE)
73
+    @DeleteMapping("/{ids}")
74
+    public AjaxResult remove(@PathVariable Long[] ids) {
75
+        for (Long id : ids) {
76
+            service.removeById(id);
77
+        }
78
+        return AjaxResult.success();
79
+    }
80
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerChannelPassRateController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerChannelPassRate;
13
+import com.sundot.airport.ledger.service.ILedgerChannelPassRateService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 通道过检率记录Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/channelPassRate")
23
+public class LedgerChannelPassRateController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerChannelPassRateService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:channelPassRate:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerChannelPassRate query) {
31
+        startPage();
32
+        List<LedgerChannelPassRate> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:channelPassRate:export')")
37
+    @Log(title = "通道过检率记录", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerChannelPassRate query) {
40
+        List<LedgerChannelPassRate> list = service.selectList(query);
41
+        ExcelUtil<LedgerChannelPassRate> util = new ExcelUtil<>(LedgerChannelPassRate.class);
42
+        util.exportExcel(response, list, "通道过检率记录");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:channelPassRate:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerComplaintController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerComplaint;
13
+import com.sundot.airport.ledger.service.ILedgerComplaintService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 投诉情况记录Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/complaint")
23
+public class LedgerComplaintController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerComplaintService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:complaint:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerComplaint query) {
31
+        startPage();
32
+        List<LedgerComplaint> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:complaint:export')")
37
+    @Log(title = "投诉情况记录", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerComplaint query) {
40
+        List<LedgerComplaint> list = service.selectList(query);
41
+        ExcelUtil<LedgerComplaint> util = new ExcelUtil<>(LedgerComplaint.class);
42
+        util.exportExcel(response, list, "投诉情况记录");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:complaint:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerExamScoreController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerExamScore;
13
+import com.sundot.airport.ledger.service.ILedgerExamScoreService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 成绩收集Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/examScore")
23
+public class LedgerExamScoreController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerExamScoreService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:examScore:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerExamScore query) {
31
+        startPage();
32
+        List<LedgerExamScore> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:examScore:export')")
37
+    @Log(title = "成绩收集", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerExamScore query) {
40
+        List<LedgerExamScore> list = service.selectList(query);
41
+        ExcelUtil<LedgerExamScore> util = new ExcelUtil<>(LedgerExamScore.class);
42
+        util.exportExcel(response, list, "成绩收集");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:examScore:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 281 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerImportController.java

@@ -0,0 +1,281 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import com.alibaba.excel.EasyExcel;
4
+import com.alibaba.excel.context.AnalysisContext;
5
+import com.alibaba.excel.event.AnalysisEventListener;
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.enums.BusinessType;
10
+import com.sundot.airport.common.utils.DateUtils;
11
+import com.sundot.airport.ledger.domain.*;
12
+import com.sundot.airport.ledger.service.*;
13
+import com.sundot.airport.ledger.service.ILedgerCombinedImportService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+import org.springframework.web.multipart.MultipartFile;
18
+
19
+import java.util.ArrayList;
20
+import java.util.List;
21
+import java.util.Map;
22
+import java.util.UUID;
23
+
24
+/**
25
+ * 台账一键导入Controller
26
+ * 提供所有台账类型的 Excel 批量上传接口
27
+ */
28
+@RestController
29
+@RequestMapping("/ledger/import")
30
+public class LedgerImportController extends BaseController {
31
+
32
+    @Autowired private ILedgerSupervisionProblemService supervisionProblemService;
33
+    @Autowired private ILedgerPatrolInspectionService patrolInspectionService;
34
+    @Autowired private ILedgerRealtimeInterceptionService realtimeInterceptionService;
35
+    @Autowired private ILedgerServicePatrolService servicePatrolService;
36
+    @Autowired private ILedgerComplaintService complaintService;
37
+    @Autowired private ILedgerSecurityTestService securityTestService;
38
+    @Autowired private ILedgerChannelPassRateService channelPassRateService;
39
+    @Autowired private ILedgerUnsafeEventService unsafeEventService;
40
+    @Autowired private ILedgerSeizureStatsService seizureStatsService;
41
+    @Autowired private ILedgerTerminalBonusService terminalBonusService;
42
+    @Autowired private ILedgerExamScoreService examScoreService;
43
+    @Autowired private ILedgerRewardApprovalService rewardApprovalService;
44
+    @Autowired private ILedgerCombinedImportService combinedImportService;
45
+
46
+    private String generateBatchNo() {
47
+        return DateUtils.dateTimeNow("yyyyMMddHHmmss") + UUID.randomUUID().toString().substring(0, 6).toUpperCase();
48
+    }
49
+
50
+    @PreAuthorize("@ss.hasPermi('ledger:import:supervision')")
51
+    @Log(title = "台账导入-部门监察问题", businessType = BusinessType.IMPORT)
52
+    @PostMapping("/supervisionProblem")
53
+    public AjaxResult importSupervisionProblem(@RequestParam("file") MultipartFile file) throws Exception {
54
+        String batchNo = generateBatchNo();
55
+        List<LedgerSupervisionProblem> list = new ArrayList<>();
56
+        EasyExcel.read(file.getInputStream(), LedgerSupervisionProblem.class,
57
+                new SimpleListener<>(list)).sheet().doRead();
58
+        list.forEach(item -> {
59
+            item.setImportBatch(batchNo);
60
+            item.setSourceType("1");
61
+            item.setCreateBy(getUsername());
62
+        });
63
+        supervisionProblemService.batchInsert(list);
64
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
65
+    }
66
+
67
+    @PreAuthorize("@ss.hasPermi('ledger:import:patrol')")
68
+    @Log(title = "台账导入-队室三级质控巡查", businessType = BusinessType.IMPORT)
69
+    @PostMapping("/patrolInspection")
70
+    public AjaxResult importPatrolInspection(@RequestParam("file") MultipartFile file) throws Exception {
71
+        String batchNo = generateBatchNo();
72
+        List<LedgerPatrolInspection> list = new ArrayList<>();
73
+        EasyExcel.read(file.getInputStream(), LedgerPatrolInspection.class,
74
+                new SimpleListener<>(list)).sheet().doRead();
75
+        list.forEach(item -> {
76
+            item.setImportBatch(batchNo);
77
+            item.setSourceType("1");
78
+            item.setCreateBy(getUsername());
79
+        });
80
+        patrolInspectionService.batchInsert(list);
81
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
82
+    }
83
+
84
+    @PreAuthorize("@ss.hasPermi('ledger:import:interception')")
85
+    @Log(title = "台账导入-实时质控拦截", businessType = BusinessType.IMPORT)
86
+    @PostMapping("/realtimeInterception")
87
+    public AjaxResult importRealtimeInterception(@RequestParam("file") MultipartFile file) throws Exception {
88
+        String batchNo = generateBatchNo();
89
+        List<LedgerRealtimeInterception> list = new ArrayList<>();
90
+        EasyExcel.read(file.getInputStream(), LedgerRealtimeInterception.class,
91
+                new SimpleListener<>(list)).sheet().doRead();
92
+        list.forEach(item -> {
93
+            item.setImportBatch(batchNo);
94
+            item.setSourceType("1");
95
+            item.setCreateBy(getUsername());
96
+        });
97
+        realtimeInterceptionService.batchInsert(list);
98
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
99
+    }
100
+
101
+    @PreAuthorize("@ss.hasPermi('ledger:import:servicePatrol')")
102
+    @Log(title = "台账导入-服务巡查", businessType = BusinessType.IMPORT)
103
+    @PostMapping("/servicePatrol")
104
+    public AjaxResult importServicePatrol(@RequestParam("file") MultipartFile file) throws Exception {
105
+        String batchNo = generateBatchNo();
106
+        List<LedgerServicePatrol> list = new ArrayList<>();
107
+        EasyExcel.read(file.getInputStream(), LedgerServicePatrol.class,
108
+                new SimpleListener<>(list)).sheet().doRead();
109
+        list.forEach(item -> {
110
+            item.setImportBatch(batchNo);
111
+            item.setSourceType("1");
112
+            item.setCreateBy(getUsername());
113
+        });
114
+        servicePatrolService.batchInsert(list);
115
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
116
+    }
117
+
118
+    @PreAuthorize("@ss.hasPermi('ledger:import:complaint')")
119
+    @Log(title = "台账导入-投诉情况", businessType = BusinessType.IMPORT)
120
+    @PostMapping("/complaint")
121
+    public AjaxResult importComplaint(@RequestParam("file") MultipartFile file) throws Exception {
122
+        String batchNo = generateBatchNo();
123
+        List<LedgerComplaint> list = new ArrayList<>();
124
+        EasyExcel.read(file.getInputStream(), LedgerComplaint.class,
125
+                new SimpleListener<>(list)).sheet().doRead();
126
+        list.forEach(item -> {
127
+            item.setImportBatch(batchNo);
128
+            item.setSourceType("1");
129
+            item.setCreateBy(getUsername());
130
+        });
131
+        complaintService.batchInsert(list);
132
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
133
+    }
134
+
135
+    @PreAuthorize("@ss.hasPermi('ledger:import:securityTest')")
136
+    @Log(title = "台账导入-安保测试", businessType = BusinessType.IMPORT)
137
+    @PostMapping("/securityTest")
138
+    public AjaxResult importSecurityTest(@RequestParam("file") MultipartFile file) throws Exception {
139
+        String batchNo = generateBatchNo();
140
+        List<LedgerSecurityTest> list = new ArrayList<>();
141
+        EasyExcel.read(file.getInputStream(), LedgerSecurityTest.class,
142
+                new SimpleListener<>(list)).sheet().doRead();
143
+        list.forEach(item -> {
144
+            item.setImportBatch(batchNo);
145
+            item.setSourceType("1");
146
+            item.setCreateBy(getUsername());
147
+        });
148
+        securityTestService.batchInsert(list);
149
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
150
+    }
151
+
152
+    @PreAuthorize("@ss.hasPermi('ledger:import:channelPassRate')")
153
+    @Log(title = "台账导入-通道过检率", businessType = BusinessType.IMPORT)
154
+    @PostMapping("/channelPassRate")
155
+    public AjaxResult importChannelPassRate(@RequestParam("file") MultipartFile file) throws Exception {
156
+        String batchNo = generateBatchNo();
157
+        List<LedgerChannelPassRate> list = new ArrayList<>();
158
+        EasyExcel.read(file.getInputStream(), LedgerChannelPassRate.class,
159
+                new SimpleListener<>(list)).sheet().doRead();
160
+        list.forEach(item -> {
161
+            item.setImportBatch(batchNo);
162
+            item.setSourceType("1");
163
+            item.setCreateBy(getUsername());
164
+        });
165
+        channelPassRateService.batchInsert(list);
166
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
167
+    }
168
+
169
+    @PreAuthorize("@ss.hasPermi('ledger:import:unsafeEvent')")
170
+    @Log(title = "台账导入-不安全事件", businessType = BusinessType.IMPORT)
171
+    @PostMapping("/unsafeEvent")
172
+    public AjaxResult importUnsafeEvent(@RequestParam("file") MultipartFile file) throws Exception {
173
+        String batchNo = generateBatchNo();
174
+        List<LedgerUnsafeEvent> list = new ArrayList<>();
175
+        EasyExcel.read(file.getInputStream(), LedgerUnsafeEvent.class,
176
+                new SimpleListener<>(list)).sheet().doRead();
177
+        list.forEach(item -> {
178
+            item.setImportBatch(batchNo);
179
+            item.setSourceType("1");
180
+            item.setCreateBy(getUsername());
181
+        });
182
+        unsafeEventService.batchInsert(list);
183
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
184
+    }
185
+
186
+    @PreAuthorize("@ss.hasPermi('ledger:import:seizureStats')")
187
+    @Log(title = "台账导入-查获违规品统计", businessType = BusinessType.IMPORT)
188
+    @PostMapping("/seizureStats")
189
+    public AjaxResult importSeizureStats(@RequestParam("file") MultipartFile file) throws Exception {
190
+        String batchNo = generateBatchNo();
191
+        List<LedgerSeizureStats> list = new ArrayList<>();
192
+        EasyExcel.read(file.getInputStream(), LedgerSeizureStats.class,
193
+                new SimpleListener<>(list)).sheet().doRead();
194
+        list.forEach(item -> {
195
+            item.setImportBatch(batchNo);
196
+            item.setSourceType("1");
197
+            item.setCreateBy(getUsername());
198
+        });
199
+        seizureStatsService.batchInsert(list);
200
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
201
+    }
202
+
203
+    @PreAuthorize("@ss.hasPermi('ledger:import:terminalBonus')")
204
+    @Log(title = "台账导入-航站楼加分", businessType = BusinessType.IMPORT)
205
+    @PostMapping("/terminalBonus")
206
+    public AjaxResult importTerminalBonus(@RequestParam("file") MultipartFile file) throws Exception {
207
+        String batchNo = generateBatchNo();
208
+        List<LedgerTerminalBonus> list = new ArrayList<>();
209
+        EasyExcel.read(file.getInputStream(), LedgerTerminalBonus.class,
210
+                new SimpleListener<>(list)).sheet().doRead();
211
+        list.forEach(item -> {
212
+            item.setImportBatch(batchNo);
213
+            item.setSourceType("1");
214
+            item.setCreateBy(getUsername());
215
+        });
216
+        terminalBonusService.batchInsert(list);
217
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
218
+    }
219
+
220
+    @PreAuthorize("@ss.hasPermi('ledger:import:examScore')")
221
+    @Log(title = "台账导入-成绩收集", businessType = BusinessType.IMPORT)
222
+    @PostMapping("/examScore")
223
+    public AjaxResult importExamScore(@RequestParam("file") MultipartFile file) throws Exception {
224
+        String batchNo = generateBatchNo();
225
+        List<LedgerExamScore> list = new ArrayList<>();
226
+        EasyExcel.read(file.getInputStream(), LedgerExamScore.class,
227
+                new SimpleListener<>(list)).sheet().doRead();
228
+        list.forEach(item -> {
229
+            item.setImportBatch(batchNo);
230
+            item.setSourceType("1");
231
+            item.setCreateBy(getUsername());
232
+        });
233
+        examScoreService.batchInsert(list);
234
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
235
+    }
236
+
237
+    @PreAuthorize("@ss.hasPermi('ledger:import:rewardApproval')")
238
+    @Log(title = "台账导入-小额奖励审批单", businessType = BusinessType.IMPORT)
239
+    @PostMapping("/rewardApproval")
240
+    public AjaxResult importRewardApproval(@RequestParam("file") MultipartFile file) throws Exception {
241
+        String batchNo = generateBatchNo();
242
+        List<LedgerRewardApproval> list = new ArrayList<>();
243
+        EasyExcel.read(file.getInputStream(), LedgerRewardApproval.class,
244
+                new SimpleListener<>(list)).sheet().doRead();
245
+        list.forEach(item -> {
246
+            item.setImportBatch(batchNo);
247
+            item.setSourceType("1");
248
+            item.setCreateBy(getUsername());
249
+        });
250
+        rewardApprovalService.batchInsert(list);
251
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
252
+    }
253
+
254
+    /**
255
+     * 一键全量导入 - 解析多Sheet合并Excel(旅检三部"三三"数字管理平台.xlsx)
256
+     */
257
+    @PreAuthorize("@ss.hasPermi('ledger:import:combined')")
258
+    @Log(title = "台账导入-一键全量导入", businessType = BusinessType.IMPORT)
259
+    @PostMapping("/combined")
260
+    public AjaxResult importCombined(@RequestParam("file") MultipartFile file) throws Exception {
261
+        String batchNo = generateBatchNo();
262
+        Map<String, String> result = combinedImportService.importAll(file, batchNo, getUsername());
263
+        return AjaxResult.success(result);
264
+    }
265
+
266
+    /**
267
+     * 通用 EasyExcel 监听器 - 简单收集行到列表
268
+     */
269
+    private static class SimpleListener<T> extends AnalysisEventListener<T> {
270
+        private final List<T> list;
271
+        SimpleListener(List<T> list) { this.list = list; }
272
+
273
+        @Override
274
+        public void invoke(T data, AnalysisContext context) {
275
+            list.add(data);
276
+        }
277
+
278
+        @Override
279
+        public void doAfterAllAnalysed(AnalysisContext context) {}
280
+    }
281
+}

+ 80 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerLeaveSpecialController.java

@@ -0,0 +1,80 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.DateUtils;
12
+import com.sundot.airport.common.utils.poi.ExcelUtil;
13
+import com.sundot.airport.ledger.domain.LedgerLeaveSpecial;
14
+import com.sundot.airport.ledger.service.ILedgerLeaveSpecialService;
15
+import org.springframework.beans.factory.annotation.Autowired;
16
+import org.springframework.security.access.prepost.PreAuthorize;
17
+import org.springframework.validation.annotation.Validated;
18
+import org.springframework.web.bind.annotation.*;
19
+
20
+/**
21
+ * 请休假记录(特殊)Controller(页面录入,支持增删改查)
22
+ */
23
+@RestController
24
+@RequestMapping("/ledger/leaveSpecial")
25
+public class LedgerLeaveSpecialController extends BaseController {
26
+
27
+    @Autowired
28
+    private ILedgerLeaveSpecialService service;
29
+
30
+    @PreAuthorize("@ss.hasPermi('ledger:leaveSpecial:list')")
31
+    @GetMapping("/list")
32
+    public TableDataInfo list(LedgerLeaveSpecial query) {
33
+        startPage();
34
+        List<LedgerLeaveSpecial> list = service.selectList(query);
35
+        return getDataTable(list);
36
+    }
37
+
38
+    @PreAuthorize("@ss.hasPermi('ledger:leaveSpecial:export')")
39
+    @Log(title = "请休假记录(特殊)", businessType = BusinessType.EXPORT)
40
+    @PostMapping("/export")
41
+    public void export(HttpServletResponse response, LedgerLeaveSpecial query) {
42
+        List<LedgerLeaveSpecial> list = service.selectList(query);
43
+        ExcelUtil<LedgerLeaveSpecial> util = new ExcelUtil<>(LedgerLeaveSpecial.class);
44
+        util.exportExcel(response, list, "请休假记录(特殊)");
45
+    }
46
+
47
+    @PreAuthorize("@ss.hasPermi('ledger:leaveSpecial:query')")
48
+    @GetMapping("/{id}")
49
+    public AjaxResult getInfo(@PathVariable Long id) {
50
+        return AjaxResult.success(service.getById(id));
51
+    }
52
+
53
+    @PreAuthorize("@ss.hasPermi('ledger:leaveSpecial:add')")
54
+    @Log(title = "请休假记录(特殊)", businessType = BusinessType.INSERT)
55
+    @PostMapping
56
+    public AjaxResult add(@Validated @RequestBody LedgerLeaveSpecial entity) {
57
+        entity.setCreateBy(getUsername());
58
+        entity.setCreateTime(DateUtils.getNowDate());
59
+        return toAjax(service.save(entity));
60
+    }
61
+
62
+    @PreAuthorize("@ss.hasPermi('ledger:leaveSpecial:edit')")
63
+    @Log(title = "请休假记录(特殊)", businessType = BusinessType.UPDATE)
64
+    @PutMapping
65
+    public AjaxResult edit(@Validated @RequestBody LedgerLeaveSpecial entity) {
66
+        entity.setUpdateBy(getUsername());
67
+        entity.setUpdateTime(DateUtils.getNowDate());
68
+        return toAjax(service.updateById(entity));
69
+    }
70
+
71
+    @PreAuthorize("@ss.hasPermi('ledger:leaveSpecial:remove')")
72
+    @Log(title = "请休假记录(特殊)", businessType = BusinessType.DELETE)
73
+    @DeleteMapping("/{ids}")
74
+    public AjaxResult remove(@PathVariable Long[] ids) {
75
+        for (Long id : ids) {
76
+            service.removeById(id);
77
+        }
78
+        return AjaxResult.success();
79
+    }
80
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerPatrolInspectionController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerPatrolInspection;
13
+import com.sundot.airport.ledger.service.ILedgerPatrolInspectionService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 队室三级质控巡查记录Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/patrolInspection")
23
+public class LedgerPatrolInspectionController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerPatrolInspectionService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:patrolInspection:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerPatrolInspection query) {
31
+        startPage();
32
+        List<LedgerPatrolInspection> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:patrolInspection:export')")
37
+    @Log(title = "队室三级质控巡查记录", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerPatrolInspection query) {
40
+        List<LedgerPatrolInspection> list = service.selectList(query);
41
+        ExcelUtil<LedgerPatrolInspection> util = new ExcelUtil<>(LedgerPatrolInspection.class);
42
+        util.exportExcel(response, list, "队室三级质控巡查记录");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:patrolInspection:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerRealtimeInterceptionController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerRealtimeInterception;
13
+import com.sundot.airport.ledger.service.ILedgerRealtimeInterceptionService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 部门实时质控拦截记录Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/realtimeInterception")
23
+public class LedgerRealtimeInterceptionController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerRealtimeInterceptionService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:realtimeInterception:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerRealtimeInterception query) {
31
+        startPage();
32
+        List<LedgerRealtimeInterception> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:realtimeInterception:export')")
37
+    @Log(title = "部门实时质控拦截记录", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerRealtimeInterception query) {
40
+        List<LedgerRealtimeInterception> list = service.selectList(query);
41
+        ExcelUtil<LedgerRealtimeInterception> util = new ExcelUtil<>(LedgerRealtimeInterception.class);
42
+        util.exportExcel(response, list, "部门实时质控拦截记录");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:realtimeInterception:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerRewardApprovalController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerRewardApproval;
13
+import com.sundot.airport.ledger.service.ILedgerRewardApprovalService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 小额奖励审批单Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/rewardApproval")
23
+public class LedgerRewardApprovalController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerRewardApprovalService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:rewardApproval:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerRewardApproval query) {
31
+        startPage();
32
+        List<LedgerRewardApproval> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:rewardApproval:export')")
37
+    @Log(title = "小额奖励审批单", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerRewardApproval query) {
40
+        List<LedgerRewardApproval> list = service.selectList(query);
41
+        ExcelUtil<LedgerRewardApproval> util = new ExcelUtil<>(LedgerRewardApproval.class);
42
+        util.exportExcel(response, list, "小额奖励审批单");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:rewardApproval:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 82 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerRewardPenaltyController.java

@@ -0,0 +1,82 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.DateUtils;
12
+import com.sundot.airport.common.utils.poi.ExcelUtil;
13
+import com.sundot.airport.ledger.domain.LedgerRewardPenalty;
14
+import com.sundot.airport.ledger.service.ILedgerRewardPenaltyService;
15
+import org.springframework.beans.factory.annotation.Autowired;
16
+import org.springframework.security.access.prepost.PreAuthorize;
17
+import org.springframework.validation.annotation.Validated;
18
+import org.springframework.web.bind.annotation.*;
19
+
20
+/**
21
+ * 部门奖惩记录Controller(页面录入,支持增删改查)
22
+ */
23
+@RestController
24
+@RequestMapping("/ledger/rewardPenalty")
25
+public class LedgerRewardPenaltyController extends BaseController {
26
+
27
+    @Autowired
28
+    private ILedgerRewardPenaltyService service;
29
+
30
+    @PreAuthorize("@ss.hasPermi('ledger:rewardPenalty:list')")
31
+    @GetMapping("/list")
32
+    public TableDataInfo list(LedgerRewardPenalty query) {
33
+        startPage();
34
+        List<LedgerRewardPenalty> list = service.selectList(query);
35
+        return getDataTable(list);
36
+    }
37
+
38
+    @PreAuthorize("@ss.hasPermi('ledger:rewardPenalty:export')")
39
+    @Log(title = "部门奖惩记录", businessType = BusinessType.EXPORT)
40
+    @PostMapping("/export")
41
+    public void export(HttpServletResponse response, LedgerRewardPenalty query) {
42
+        List<LedgerRewardPenalty> list = service.selectList(query);
43
+        ExcelUtil<LedgerRewardPenalty> util = new ExcelUtil<>(LedgerRewardPenalty.class);
44
+        util.exportExcel(response, list, "部门奖惩记录");
45
+    }
46
+
47
+    @PreAuthorize("@ss.hasPermi('ledger:rewardPenalty:query')")
48
+    @GetMapping("/{id}")
49
+    public AjaxResult getInfo(@PathVariable Long id) {
50
+        return AjaxResult.success(service.getById(id));
51
+    }
52
+
53
+    @PreAuthorize("@ss.hasPermi('ledger:rewardPenalty:add')")
54
+    @Log(title = "部门奖惩记录", businessType = BusinessType.INSERT)
55
+    @PostMapping
56
+    public AjaxResult add(@Validated @RequestBody LedgerRewardPenalty entity) {
57
+        entity.setCreateBy(getUsername());
58
+        entity.setCreateTime(DateUtils.getNowDate());
59
+        return toAjax(service.save(entity));
60
+    }
61
+
62
+    @PreAuthorize("@ss.hasPermi('ledger:rewardPenalty:edit')")
63
+    @Log(title = "部门奖惩记录", businessType = BusinessType.UPDATE)
64
+    @PutMapping
65
+    public AjaxResult edit(@Validated @RequestBody LedgerRewardPenalty entity) {
66
+        entity.setUpdateBy(getUsername());
67
+        entity.setUpdateTime(DateUtils.getNowDate());
68
+        return toAjax(service.updateById(entity));
69
+    }
70
+
71
+    @PreAuthorize("@ss.hasPermi('ledger:rewardPenalty:remove')")
72
+    @Log(title = "部门奖惩记录", businessType = BusinessType.DELETE)
73
+    @DeleteMapping("/{ids}")
74
+    public AjaxResult remove(@PathVariable Long[] ids) {
75
+        for (Long id : ids) {
76
+            LedgerRewardPenalty entity = new LedgerRewardPenalty();
77
+            entity.setId(id);
78
+            service.removeById(id);
79
+        }
80
+        return AjaxResult.success();
81
+    }
82
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerSecurityTestController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerSecurityTest;
13
+import com.sundot.airport.ledger.service.ILedgerSecurityTestService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 安保测试记录Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/securityTest")
23
+public class LedgerSecurityTestController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerSecurityTestService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:securityTest:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerSecurityTest query) {
31
+        startPage();
32
+        List<LedgerSecurityTest> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:securityTest:export')")
37
+    @Log(title = "安保测试记录", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerSecurityTest query) {
40
+        List<LedgerSecurityTest> list = service.selectList(query);
41
+        ExcelUtil<LedgerSecurityTest> util = new ExcelUtil<>(LedgerSecurityTest.class);
42
+        util.exportExcel(response, list, "安保测试记录");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:securityTest:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerSeizureStatsController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerSeizureStats;
13
+import com.sundot.airport.ledger.service.ILedgerSeizureStatsService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 查获违规品统计Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/seizureStats")
23
+public class LedgerSeizureStatsController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerSeizureStatsService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:seizureStats:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerSeizureStats query) {
31
+        startPage();
32
+        List<LedgerSeizureStats> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:seizureStats:export')")
37
+    @Log(title = "查获违规品统计", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerSeizureStats query) {
40
+        List<LedgerSeizureStats> list = service.selectList(query);
41
+        ExcelUtil<LedgerSeizureStats> util = new ExcelUtil<>(LedgerSeizureStats.class);
42
+        util.exportExcel(response, list, "查获违规品统计");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:seizureStats:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerServicePatrolController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerServicePatrol;
13
+import com.sundot.airport.ledger.service.ILedgerServicePatrolService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 服务巡查记录Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/servicePatrol")
23
+public class LedgerServicePatrolController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerServicePatrolService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:servicePatrol:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerServicePatrol query) {
31
+        startPage();
32
+        List<LedgerServicePatrol> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:servicePatrol:export')")
37
+    @Log(title = "服务巡查记录", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerServicePatrol query) {
40
+        List<LedgerServicePatrol> list = service.selectList(query);
41
+        ExcelUtil<LedgerServicePatrol> util = new ExcelUtil<>(LedgerServicePatrol.class);
42
+        util.exportExcel(response, list, "服务巡查记录");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:servicePatrol:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerSupervisionProblemController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerSupervisionProblem;
13
+import com.sundot.airport.ledger.service.ILedgerSupervisionProblemService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 部门监察问题记录Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/supervisionProblem")
23
+public class LedgerSupervisionProblemController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerSupervisionProblemService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:supervisionProblem:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerSupervisionProblem query) {
31
+        startPage();
32
+        List<LedgerSupervisionProblem> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:supervisionProblem:export')")
37
+    @Log(title = "部门监察问题记录", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerSupervisionProblem query) {
40
+        List<LedgerSupervisionProblem> list = service.selectList(query);
41
+        ExcelUtil<LedgerSupervisionProblem> util = new ExcelUtil<>(LedgerSupervisionProblem.class);
42
+        util.exportExcel(response, list, "部门监察问题记录");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:supervisionProblem:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 60 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerSyncController.java

@@ -0,0 +1,60 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import com.sundot.airport.common.core.controller.BaseController;
4
+import com.sundot.airport.common.core.domain.AjaxResult;
5
+import com.sundot.airport.ledger.service.ILedgerSyncService;
6
+import org.springframework.beans.factory.annotation.Autowired;
7
+import org.springframework.security.access.prepost.PreAuthorize;
8
+import org.springframework.web.bind.annotation.PathVariable;
9
+import org.springframework.web.bind.annotation.PostMapping;
10
+import org.springframework.web.bind.annotation.RequestMapping;
11
+import org.springframework.web.bind.annotation.RestController;
12
+
13
+import java.util.LinkedHashMap;
14
+import java.util.Map;
15
+
16
+/**
17
+ * 台账 → 配分事项 同步触发接口
18
+ */
19
+@RestController
20
+@RequestMapping("/ledger/sync")
21
+public class LedgerSyncController extends BaseController {
22
+
23
+    @Autowired
24
+    private ILedgerSyncService ledgerSyncService;
25
+
26
+    /**
27
+     * 全量同步所有台账到配分事项
28
+     * POST /ledger/sync/all
29
+     */
30
+    @PreAuthorize("@ss.hasPermi('ledger:sync:all')")
31
+    @PostMapping("/all")
32
+    public AjaxResult syncAll() {
33
+        ILedgerSyncService.SyncResult result = ledgerSyncService.syncAll();
34
+        return AjaxResult.success(buildResultMap(result));
35
+    }
36
+
37
+    /**
38
+     * 按台账类型同步(支持单表重跑)
39
+     * POST /ledger/sync/{type}
40
+     *
41
+     * type 可选值:
42
+     *   supervisionProblem / realtimeInterception / securityTest / unsafeEvent /
43
+     *   seizureStats / rewardApproval / servicePatrol / complaint / terminalBonus /
44
+     *   bannerLetter / examScore / rewardPenalty / leaveSpecial
45
+     */
46
+    @PreAuthorize("@ss.hasPermi('ledger:sync:all')")
47
+    @PostMapping("/{type}")
48
+    public AjaxResult syncByType(@PathVariable String type) {
49
+        ILedgerSyncService.SyncResult result = ledgerSyncService.syncByType(type);
50
+        return AjaxResult.success(buildResultMap(result));
51
+    }
52
+
53
+    private Map<String, Object> buildResultMap(ILedgerSyncService.SyncResult result) {
54
+        Map<String, Object> map = new LinkedHashMap<>();
55
+        map.put("inserted", result.getTotalInserted());
56
+        map.put("skipped", result.getTotalSkipped());
57
+        map.put("detail", result.getDetail());
58
+        return map;
59
+    }
60
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerTerminalBonusController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerTerminalBonus;
13
+import com.sundot.airport.ledger.service.ILedgerTerminalBonusService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 航站楼加分记录Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/terminalBonus")
23
+public class LedgerTerminalBonusController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerTerminalBonusService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:terminalBonus:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerTerminalBonus query) {
31
+        startPage();
32
+        List<LedgerTerminalBonus> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:terminalBonus:export')")
37
+    @Log(title = "航站楼加分记录", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerTerminalBonus query) {
40
+        List<LedgerTerminalBonus> list = service.selectList(query);
41
+        ExcelUtil<LedgerTerminalBonus> util = new ExcelUtil<>(LedgerTerminalBonus.class);
42
+        util.exportExcel(response, list, "航站楼加分记录");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:terminalBonus:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 50 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerUnsafeEventController.java

@@ -0,0 +1,50 @@
1
+package com.sundot.airport.web.controller.ledger;
2
+
3
+import java.util.List;
4
+import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.poi.ExcelUtil;
12
+import com.sundot.airport.ledger.domain.LedgerUnsafeEvent;
13
+import com.sundot.airport.ledger.service.ILedgerUnsafeEventService;
14
+import org.springframework.beans.factory.annotation.Autowired;
15
+import org.springframework.security.access.prepost.PreAuthorize;
16
+import org.springframework.web.bind.annotation.*;
17
+
18
+/**
19
+ * 不安全事件记录Controller
20
+ */
21
+@RestController
22
+@RequestMapping("/ledger/unsafeEvent")
23
+public class LedgerUnsafeEventController extends BaseController {
24
+
25
+    @Autowired
26
+    private ILedgerUnsafeEventService service;
27
+
28
+    @PreAuthorize("@ss.hasPermi('ledger:unsafeEvent:list')")
29
+    @GetMapping("/list")
30
+    public TableDataInfo list(LedgerUnsafeEvent query) {
31
+        startPage();
32
+        List<LedgerUnsafeEvent> list = service.selectList(query);
33
+        return getDataTable(list);
34
+    }
35
+
36
+    @PreAuthorize("@ss.hasPermi('ledger:unsafeEvent:export')")
37
+    @Log(title = "不安全事件记录", businessType = BusinessType.EXPORT)
38
+    @PostMapping("/export")
39
+    public void export(HttpServletResponse response, LedgerUnsafeEvent query) {
40
+        List<LedgerUnsafeEvent> list = service.selectList(query);
41
+        ExcelUtil<LedgerUnsafeEvent> util = new ExcelUtil<>(LedgerUnsafeEvent.class);
42
+        util.exportExcel(response, list, "不安全事件记录");
43
+    }
44
+
45
+    @PreAuthorize("@ss.hasPermi('ledger:unsafeEvent:query')")
46
+    @GetMapping("/{id}")
47
+    public AjaxResult getInfo(@PathVariable Long id) {
48
+        return AjaxResult.success(service.getById(id));
49
+    }
50
+}

+ 85 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/score/ScoreDimensionController.java

@@ -0,0 +1,85 @@
1
+package com.sundot.airport.web.controller.score;
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.utils.DateUtils;
9
+import com.sundot.airport.common.utils.poi.ExcelUtil;
10
+import com.sundot.airport.ledger.domain.ScoreDimension;
11
+import com.sundot.airport.ledger.service.IScoreDimensionService;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.security.access.prepost.PreAuthorize;
14
+import org.springframework.validation.annotation.Validated;
15
+import org.springframework.web.bind.annotation.*;
16
+
17
+import javax.servlet.http.HttpServletResponse;
18
+import java.util.List;
19
+
20
+/**
21
+ * 评分维度管理
22
+ */
23
+@RestController
24
+@RequestMapping("/score/dimension")
25
+public class ScoreDimensionController extends BaseController {
26
+
27
+    @Autowired
28
+    private IScoreDimensionService service;
29
+
30
+    @PreAuthorize("@ss.hasPermi('score:dimension:list')")
31
+    @GetMapping("/list")
32
+    public TableDataInfo list(ScoreDimension query) {
33
+        startPage();
34
+        return getDataTable(service.selectList(query));
35
+    }
36
+
37
+    /** 不分页列表,用于前端下拉选择 */
38
+    @PreAuthorize("@ss.hasPermi('score:dimension:list')")
39
+    @GetMapping("/all")
40
+    public AjaxResult all() {
41
+        ScoreDimension query = new ScoreDimension();
42
+        query.setStatus("0");
43
+        return AjaxResult.success(service.selectList(query));
44
+    }
45
+
46
+    @PreAuthorize("@ss.hasPermi('score:dimension:export')")
47
+    @Log(title = "评分维度", businessType = BusinessType.EXPORT)
48
+    @PostMapping("/export")
49
+    public void export(HttpServletResponse response, ScoreDimension query) {
50
+        List<ScoreDimension> list = service.selectList(query);
51
+        new ExcelUtil<>(ScoreDimension.class).exportExcel(response, list, "评分维度");
52
+    }
53
+
54
+    @PreAuthorize("@ss.hasPermi('score:dimension:query')")
55
+    @GetMapping("/{id}")
56
+    public AjaxResult getInfo(@PathVariable Long id) {
57
+        return AjaxResult.success(service.getById(id));
58
+    }
59
+
60
+    @PreAuthorize("@ss.hasPermi('score:dimension:add')")
61
+    @Log(title = "评分维度", businessType = BusinessType.INSERT)
62
+    @PostMapping
63
+    public AjaxResult add(@Validated @RequestBody ScoreDimension entity) {
64
+        entity.setCreateBy(getUsername());
65
+        entity.setCreateTime(DateUtils.getNowDate());
66
+        return toAjax(service.save(entity));
67
+    }
68
+
69
+    @PreAuthorize("@ss.hasPermi('score:dimension:edit')")
70
+    @Log(title = "评分维度", businessType = BusinessType.UPDATE)
71
+    @PutMapping
72
+    public AjaxResult edit(@Validated @RequestBody ScoreDimension entity) {
73
+        entity.setUpdateBy(getUsername());
74
+        entity.setUpdateTime(DateUtils.getNowDate());
75
+        return toAjax(service.updateById(entity));
76
+    }
77
+
78
+    @PreAuthorize("@ss.hasPermi('score:dimension:remove')")
79
+    @Log(title = "评分维度", businessType = BusinessType.DELETE)
80
+    @DeleteMapping("/{ids}")
81
+    public AjaxResult remove(@PathVariable Long[] ids) {
82
+        for (Long id : ids) service.removeById(id);
83
+        return AjaxResult.success();
84
+    }
85
+}

+ 112 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/score/ScoreEventController.java

@@ -0,0 +1,112 @@
1
+package com.sundot.airport.web.controller.score;
2
+
3
+import com.alibaba.excel.EasyExcel;
4
+import com.alibaba.excel.context.AnalysisContext;
5
+import com.alibaba.excel.event.AnalysisEventListener;
6
+import com.sundot.airport.common.annotation.Log;
7
+import com.sundot.airport.common.core.controller.BaseController;
8
+import com.sundot.airport.common.core.domain.AjaxResult;
9
+import com.sundot.airport.common.core.page.TableDataInfo;
10
+import com.sundot.airport.common.enums.BusinessType;
11
+import com.sundot.airport.common.utils.DateUtils;
12
+import com.sundot.airport.common.utils.poi.ExcelUtil;
13
+import com.sundot.airport.ledger.domain.ScoreEvent;
14
+import com.sundot.airport.ledger.service.IScoreEventService;
15
+import org.springframework.beans.factory.annotation.Autowired;
16
+import org.springframework.security.access.prepost.PreAuthorize;
17
+import org.springframework.validation.annotation.Validated;
18
+import org.springframework.web.bind.annotation.*;
19
+import org.springframework.web.multipart.MultipartFile;
20
+
21
+import javax.servlet.http.HttpServletResponse;
22
+import java.math.BigDecimal;
23
+import java.util.ArrayList;
24
+import java.util.List;
25
+import java.util.UUID;
26
+
27
+/**
28
+ * 配分事项管理(手动录入 + Excel导入)
29
+ */
30
+@RestController
31
+@RequestMapping("/score/event")
32
+public class ScoreEventController extends BaseController {
33
+
34
+    @Autowired
35
+    private IScoreEventService service;
36
+
37
+    @PreAuthorize("@ss.hasPermi('score:event:list')")
38
+    @GetMapping("/list")
39
+    public TableDataInfo list(ScoreEvent query) {
40
+        startPage();
41
+        return getDataTable(service.selectList(query));
42
+    }
43
+
44
+    @PreAuthorize("@ss.hasPermi('score:event:export')")
45
+    @Log(title = "配分事项", businessType = BusinessType.EXPORT)
46
+    @PostMapping("/export")
47
+    public void export(HttpServletResponse response, ScoreEvent query) {
48
+        List<ScoreEvent> list = service.selectList(query);
49
+        new ExcelUtil<>(ScoreEvent.class).exportExcel(response, list, "配分事项");
50
+    }
51
+
52
+    @PreAuthorize("@ss.hasPermi('score:event:query')")
53
+    @GetMapping("/{id}")
54
+    public AjaxResult getInfo(@PathVariable Long id) {
55
+        return AjaxResult.success(service.getById(id));
56
+    }
57
+
58
+    @PreAuthorize("@ss.hasPermi('score:event:add')")
59
+    @Log(title = "配分事项", businessType = BusinessType.INSERT)
60
+    @PostMapping
61
+    public AjaxResult add(@Validated @RequestBody ScoreEvent entity) {
62
+        entity.setSourceType("1");
63
+        entity.setCreateBy(getUsername());
64
+        entity.setCreateTime(DateUtils.getNowDate());
65
+        // 计算 totalScore
66
+        BigDecimal score = entity.getScoreValue() != null ? entity.getScoreValue() : BigDecimal.ZERO;
67
+        BigDecimal cascade = entity.getCascadeScore() != null ? entity.getCascadeScore() : BigDecimal.ZERO;
68
+        entity.setTotalScore(score.add(cascade));
69
+        return toAjax(service.save(entity));
70
+    }
71
+
72
+    @PreAuthorize("@ss.hasPermi('score:event:edit')")
73
+    @Log(title = "配分事项", businessType = BusinessType.UPDATE)
74
+    @PutMapping
75
+    public AjaxResult edit(@Validated @RequestBody ScoreEvent entity) {
76
+        entity.setUpdateBy(getUsername());
77
+        entity.setUpdateTime(DateUtils.getNowDate());
78
+        BigDecimal score = entity.getScoreValue() != null ? entity.getScoreValue() : BigDecimal.ZERO;
79
+        BigDecimal cascade = entity.getCascadeScore() != null ? entity.getCascadeScore() : BigDecimal.ZERO;
80
+        entity.setTotalScore(score.add(cascade));
81
+        return toAjax(service.updateById(entity));
82
+    }
83
+
84
+    @PreAuthorize("@ss.hasPermi('score:event:remove')")
85
+    @Log(title = "配分事项", businessType = BusinessType.DELETE)
86
+    @DeleteMapping("/{ids}")
87
+    public AjaxResult remove(@PathVariable Long[] ids) {
88
+        for (Long id : ids) service.removeById(id);
89
+        return AjaxResult.success();
90
+    }
91
+
92
+    @PreAuthorize("@ss.hasPermi('score:event:import')")
93
+    @Log(title = "配分事项导入", businessType = BusinessType.IMPORT)
94
+    @PostMapping("/import")
95
+    public AjaxResult importData(@RequestParam("file") MultipartFile file) throws Exception {
96
+        String batchNo = UUID.randomUUID().toString().replace("-", "").substring(0, 16);
97
+        List<ScoreEvent> list = new ArrayList<>();
98
+        EasyExcel.read(file.getInputStream(), ScoreEvent.class, new AnalysisEventListener<ScoreEvent>() {
99
+            @Override
100
+            public void invoke(ScoreEvent data, AnalysisContext ctx) { list.add(data); }
101
+            @Override
102
+            public void doAfterAllAnalysed(AnalysisContext ctx) {}
103
+        }).sheet().doRead();
104
+        list.forEach(item -> {
105
+            item.setSourceType("1");
106
+            item.setImportBatch(batchNo);
107
+            item.setCreateBy(getUsername());
108
+        });
109
+        service.batchInsert(list);
110
+        return AjaxResult.success("导入成功,共" + list.size() + "条");
111
+    }
112
+}

+ 85 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/score/ScoreIndicatorController.java

@@ -0,0 +1,85 @@
1
+package com.sundot.airport.web.controller.score;
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.utils.DateUtils;
9
+import com.sundot.airport.common.utils.poi.ExcelUtil;
10
+import com.sundot.airport.ledger.domain.ScoreIndicator;
11
+import com.sundot.airport.ledger.service.IScoreIndicatorService;
12
+import org.springframework.beans.factory.annotation.Autowired;
13
+import org.springframework.security.access.prepost.PreAuthorize;
14
+import org.springframework.validation.annotation.Validated;
15
+import org.springframework.web.bind.annotation.*;
16
+
17
+import javax.servlet.http.HttpServletResponse;
18
+import java.util.List;
19
+
20
+/**
21
+ * 评分指标管理(二/三/四级)
22
+ */
23
+@RestController
24
+@RequestMapping("/score/indicator")
25
+public class ScoreIndicatorController extends BaseController {
26
+
27
+    @Autowired
28
+    private IScoreIndicatorService service;
29
+
30
+    @PreAuthorize("@ss.hasPermi('score:indicator:list')")
31
+    @GetMapping("/list")
32
+    public TableDataInfo list(ScoreIndicator query) {
33
+        startPage();
34
+        return getDataTable(service.selectList(query));
35
+    }
36
+
37
+    /**
38
+     * 获取指定维度下的指标树(无分页),前端树形表格用
39
+     */
40
+    @PreAuthorize("@ss.hasPermi('score:indicator:list')")
41
+    @GetMapping("/tree")
42
+    public AjaxResult tree(Long dimensionId) {
43
+        return AjaxResult.success(service.selectTree(dimensionId));
44
+    }
45
+
46
+    @PreAuthorize("@ss.hasPermi('score:indicator:export')")
47
+    @Log(title = "评分指标", businessType = BusinessType.EXPORT)
48
+    @PostMapping("/export")
49
+    public void export(HttpServletResponse response, ScoreIndicator query) {
50
+        List<ScoreIndicator> list = service.selectList(query);
51
+        new ExcelUtil<>(ScoreIndicator.class).exportExcel(response, list, "评分指标");
52
+    }
53
+
54
+    @PreAuthorize("@ss.hasPermi('score:indicator:query')")
55
+    @GetMapping("/{id}")
56
+    public AjaxResult getInfo(@PathVariable Long id) {
57
+        return AjaxResult.success(service.getById(id));
58
+    }
59
+
60
+    @PreAuthorize("@ss.hasPermi('score:indicator:add')")
61
+    @Log(title = "评分指标", businessType = BusinessType.INSERT)
62
+    @PostMapping
63
+    public AjaxResult add(@Validated @RequestBody ScoreIndicator entity) {
64
+        entity.setCreateBy(getUsername());
65
+        entity.setCreateTime(DateUtils.getNowDate());
66
+        return toAjax(service.save(entity));
67
+    }
68
+
69
+    @PreAuthorize("@ss.hasPermi('score:indicator:edit')")
70
+    @Log(title = "评分指标", businessType = BusinessType.UPDATE)
71
+    @PutMapping
72
+    public AjaxResult edit(@Validated @RequestBody ScoreIndicator entity) {
73
+        entity.setUpdateBy(getUsername());
74
+        entity.setUpdateTime(DateUtils.getNowDate());
75
+        return toAjax(service.updateById(entity));
76
+    }
77
+
78
+    @PreAuthorize("@ss.hasPermi('score:indicator:remove')")
79
+    @Log(title = "评分指标", businessType = BusinessType.DELETE)
80
+    @DeleteMapping("/{ids}")
81
+    public AjaxResult remove(@PathVariable Long[] ids) {
82
+        for (Long id : ids) service.removeById(id);
83
+        return AjaxResult.success();
84
+    }
85
+}

+ 64 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/score/ScorePushConfigController.java

@@ -0,0 +1,64 @@
1
+package com.sundot.airport.web.controller.score;
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.utils.DateUtils;
9
+import com.sundot.airport.ledger.domain.ScorePushConfig;
10
+import com.sundot.airport.ledger.service.IScorePushConfigService;
11
+import org.springframework.beans.factory.annotation.Autowired;
12
+import org.springframework.security.access.prepost.PreAuthorize;
13
+import org.springframework.validation.annotation.Validated;
14
+import org.springframework.web.bind.annotation.*;
15
+
16
+/**
17
+ * 推送配置管理
18
+ */
19
+@RestController
20
+@RequestMapping("/score/pushConfig")
21
+public class ScorePushConfigController extends BaseController {
22
+
23
+    @Autowired
24
+    private IScorePushConfigService service;
25
+
26
+    @PreAuthorize("@ss.hasPermi('score:pushConfig:list')")
27
+    @GetMapping("/list")
28
+    public TableDataInfo list(ScorePushConfig query) {
29
+        startPage();
30
+        return getDataTable(service.selectList(query));
31
+    }
32
+
33
+    @PreAuthorize("@ss.hasPermi('score:pushConfig:query')")
34
+    @GetMapping("/{id}")
35
+    public AjaxResult getInfo(@PathVariable Long id) {
36
+        return AjaxResult.success(service.getById(id));
37
+    }
38
+
39
+    @PreAuthorize("@ss.hasPermi('score:pushConfig:add')")
40
+    @Log(title = "推送配置", businessType = BusinessType.INSERT)
41
+    @PostMapping
42
+    public AjaxResult add(@Validated @RequestBody ScorePushConfig entity) {
43
+        entity.setCreateBy(getUsername());
44
+        entity.setCreateTime(DateUtils.getNowDate());
45
+        return toAjax(service.save(entity));
46
+    }
47
+
48
+    @PreAuthorize("@ss.hasPermi('score:pushConfig:edit')")
49
+    @Log(title = "推送配置", businessType = BusinessType.UPDATE)
50
+    @PutMapping
51
+    public AjaxResult edit(@Validated @RequestBody ScorePushConfig entity) {
52
+        entity.setUpdateBy(getUsername());
53
+        entity.setUpdateTime(DateUtils.getNowDate());
54
+        return toAjax(service.updateById(entity));
55
+    }
56
+
57
+    @PreAuthorize("@ss.hasPermi('score:pushConfig:remove')")
58
+    @Log(title = "推送配置", businessType = BusinessType.DELETE)
59
+    @DeleteMapping("/{ids}")
60
+    public AjaxResult remove(@PathVariable Long[] ids) {
61
+        for (Long id : ids) service.removeById(id);
62
+        return AjaxResult.success();
63
+    }
64
+}

+ 33 - 0
airport-admin/src/main/java/com/sundot/airport/web/controller/score/ScoreRadarController.java

@@ -0,0 +1,33 @@
1
+package com.sundot.airport.web.controller.score;
2
+
3
+import com.sundot.airport.common.core.controller.BaseController;
4
+import com.sundot.airport.common.core.domain.AjaxResult;
5
+import com.sundot.airport.ledger.service.IScoreRadarService;
6
+import org.springframework.beans.factory.annotation.Autowired;
7
+import org.springframework.web.bind.annotation.GetMapping;
8
+import org.springframework.web.bind.annotation.RequestMapping;
9
+import org.springframework.web.bind.annotation.RequestParam;
10
+import org.springframework.web.bind.annotation.RestController;
11
+
12
+/**
13
+ * 六维度雷达图大屏数据接口
14
+ */
15
+@RestController
16
+@RequestMapping("/score/radar")
17
+public class ScoreRadarController extends BaseController {
18
+
19
+    @Autowired
20
+    private IScoreRadarService radarService;
21
+
22
+    /** 获取所有班组列表(用于顶部下拉) */
23
+    @GetMapping("/teamList")
24
+    public AjaxResult teamList() {
25
+        return AjaxResult.success(radarService.selectTeamList());
26
+    }
27
+
28
+    /** 获取指定班组全员六维度得分(雷达图数据) */
29
+    @GetMapping("/memberScores")
30
+    public AjaxResult memberScores(@RequestParam String teamName) {
31
+        return AjaxResult.success(radarService.selectMemberScores(teamName));
32
+    }
33
+}

+ 36 - 0
airport-ledger/pom.xml

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

+ 91 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerBannerLetter.java

@@ -0,0 +1,91 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 锦旗及感谢信记录对象(页面录入)ledger_banner_letter
15
+ */
16
+@TableName("ledger_banner_letter")
17
+public class LedgerBannerLetter extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "记录日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "姓名")
34
+    private String personName;
35
+
36
+    private Long personUserId;
37
+
38
+    @Excel(name = "类型", readConverterExp = "1=锦旗,2=感谢信")
39
+    private String type;
40
+
41
+    @Excel(name = "赠予方")
42
+    private String giver;
43
+
44
+    @Excel(name = "内容描述")
45
+    private String contentDesc;
46
+
47
+    @Excel(name = "加分")
48
+    private BigDecimal addScore;
49
+
50
+    @Excel(name = "佐证附件")
51
+    private String evidenceFile;
52
+
53
+    @Excel(name = "备注")
54
+    private String remark;
55
+
56
+    public Long getId() { return id; }
57
+    public void setId(Long id) { this.id = id; }
58
+
59
+    public Date getRecordDate() { return recordDate; }
60
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
61
+
62
+    public String getDeptName() { return deptName; }
63
+    public void setDeptName(String deptName) { this.deptName = deptName; }
64
+
65
+    public String getTeamName() { return teamName; }
66
+    public void setTeamName(String teamName) { this.teamName = teamName; }
67
+
68
+    public String getPersonName() { return personName; }
69
+    public void setPersonName(String personName) { this.personName = personName; }
70
+
71
+    public Long getPersonUserId() { return personUserId; }
72
+    public void setPersonUserId(Long personUserId) { this.personUserId = personUserId; }
73
+
74
+    public String getType() { return type; }
75
+    public void setType(String type) { this.type = type; }
76
+
77
+    public String getGiver() { return giver; }
78
+    public void setGiver(String giver) { this.giver = giver; }
79
+
80
+    public String getContentDesc() { return contentDesc; }
81
+    public void setContentDesc(String contentDesc) { this.contentDesc = contentDesc; }
82
+
83
+    public BigDecimal getAddScore() { return addScore; }
84
+    public void setAddScore(BigDecimal addScore) { this.addScore = addScore; }
85
+
86
+    public String getEvidenceFile() { return evidenceFile; }
87
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
88
+
89
+    public String getRemark() { return remark; }
90
+    public void setRemark(String remark) { this.remark = remark; }
91
+}

+ 85 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerChannelPassRate.java

@@ -0,0 +1,85 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 通道过检率记录对象 ledger_channel_pass_rate
15
+ */
16
+@TableName("ledger_channel_pass_rate")
17
+public class LedgerChannelPassRate extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "记录日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "通道号")
34
+    private String channelNo;
35
+
36
+    @Excel(name = "总过检人数")
37
+    private Integer totalCount;
38
+
39
+    @Excel(name = "过检人数")
40
+    private Integer passCount;
41
+
42
+    @Excel(name = "过检率(%)")
43
+    private BigDecimal passRate;
44
+
45
+    @Excel(name = "备注")
46
+    private String remark;
47
+
48
+    private String importBatch;
49
+
50
+    @Excel(name = "数据来源")
51
+    private String sourceType;
52
+
53
+    public Long getId() { return id; }
54
+    public void setId(Long id) { this.id = id; }
55
+
56
+    public Date getRecordDate() { return recordDate; }
57
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
58
+
59
+    public String getDeptName() { return deptName; }
60
+    public void setDeptName(String deptName) { this.deptName = deptName; }
61
+
62
+    public String getTeamName() { return teamName; }
63
+    public void setTeamName(String teamName) { this.teamName = teamName; }
64
+
65
+    public String getChannelNo() { return channelNo; }
66
+    public void setChannelNo(String channelNo) { this.channelNo = channelNo; }
67
+
68
+    public Integer getTotalCount() { return totalCount; }
69
+    public void setTotalCount(Integer totalCount) { this.totalCount = totalCount; }
70
+
71
+    public Integer getPassCount() { return passCount; }
72
+    public void setPassCount(Integer passCount) { this.passCount = passCount; }
73
+
74
+    public BigDecimal getPassRate() { return passRate; }
75
+    public void setPassRate(BigDecimal passRate) { this.passRate = passRate; }
76
+
77
+    public String getRemark() { return remark; }
78
+    public void setRemark(String remark) { this.remark = remark; }
79
+
80
+    public String getImportBatch() { return importBatch; }
81
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
82
+
83
+    public String getSourceType() { return sourceType; }
84
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
85
+}

+ 109 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerComplaint.java

@@ -0,0 +1,109 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 投诉情况记录对象 ledger_complaint
15
+ */
16
+@TableName("ledger_complaint")
17
+public class LedgerComplaint extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "记录日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "责任人")
34
+    private String responsibleName;
35
+
36
+    @Excel(name = "航班号")
37
+    private String flightNo;
38
+
39
+    @Excel(name = "旅客姓名")
40
+    private String passengerName;
41
+
42
+    @Excel(name = "投诉类型")
43
+    private String complaintType;
44
+
45
+    @Excel(name = "投诉内容")
46
+    private String complaintDesc;
47
+
48
+    @Excel(name = "处理结果")
49
+    private String resultHandling;
50
+
51
+    @Excel(name = "扣分")
52
+    private BigDecimal deductScore;
53
+
54
+    @Excel(name = "佐证附件")
55
+    private String evidenceFile;
56
+
57
+    @Excel(name = "备注")
58
+    private String remark;
59
+
60
+    private String importBatch;
61
+
62
+    @Excel(name = "数据来源")
63
+    private String sourceType;
64
+
65
+    public Long getId() { return id; }
66
+    public void setId(Long id) { this.id = id; }
67
+
68
+    public Date getRecordDate() { return recordDate; }
69
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
70
+
71
+    public String getDeptName() { return deptName; }
72
+    public void setDeptName(String deptName) { this.deptName = deptName; }
73
+
74
+    public String getTeamName() { return teamName; }
75
+    public void setTeamName(String teamName) { this.teamName = teamName; }
76
+
77
+    public String getResponsibleName() { return responsibleName; }
78
+    public void setResponsibleName(String responsibleName) { this.responsibleName = responsibleName; }
79
+
80
+    public String getFlightNo() { return flightNo; }
81
+    public void setFlightNo(String flightNo) { this.flightNo = flightNo; }
82
+
83
+    public String getPassengerName() { return passengerName; }
84
+    public void setPassengerName(String passengerName) { this.passengerName = passengerName; }
85
+
86
+    public String getComplaintType() { return complaintType; }
87
+    public void setComplaintType(String complaintType) { this.complaintType = complaintType; }
88
+
89
+    public String getComplaintDesc() { return complaintDesc; }
90
+    public void setComplaintDesc(String complaintDesc) { this.complaintDesc = complaintDesc; }
91
+
92
+    public String getResultHandling() { return resultHandling; }
93
+    public void setResultHandling(String resultHandling) { this.resultHandling = resultHandling; }
94
+
95
+    public BigDecimal getDeductScore() { return deductScore; }
96
+    public void setDeductScore(BigDecimal deductScore) { this.deductScore = deductScore; }
97
+
98
+    public String getEvidenceFile() { return evidenceFile; }
99
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
100
+
101
+    public String getRemark() { return remark; }
102
+    public void setRemark(String remark) { this.remark = remark; }
103
+
104
+    public String getImportBatch() { return importBatch; }
105
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
106
+
107
+    public String getSourceType() { return sourceType; }
108
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
109
+}

+ 91 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerExamScore.java

@@ -0,0 +1,91 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 成绩收集对象 ledger_exam_score
15
+ */
16
+@TableName("ledger_exam_score")
17
+public class LedgerExamScore extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "考试日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date examDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "小组")
34
+    private String groupName;
35
+
36
+    @Excel(name = "用户名称")
37
+    private String personName;
38
+
39
+    @Excel(name = "类别")
40
+    private String examCategory;
41
+
42
+    @Excel(name = "期数")
43
+    private String examPeriod;
44
+
45
+    @Excel(name = "成绩")
46
+    private BigDecimal score;
47
+
48
+    @Excel(name = "备注")
49
+    private String remark;
50
+
51
+    private String importBatch;
52
+
53
+    @Excel(name = "数据来源")
54
+    private String sourceType;
55
+
56
+    public Long getId() { return id; }
57
+    public void setId(Long id) { this.id = id; }
58
+
59
+    public Date getExamDate() { return examDate; }
60
+    public void setExamDate(Date examDate) { this.examDate = examDate; }
61
+
62
+    public String getDeptName() { return deptName; }
63
+    public void setDeptName(String deptName) { this.deptName = deptName; }
64
+
65
+    public String getTeamName() { return teamName; }
66
+    public void setTeamName(String teamName) { this.teamName = teamName; }
67
+
68
+    public String getGroupName() { return groupName; }
69
+    public void setGroupName(String groupName) { this.groupName = groupName; }
70
+
71
+    public String getPersonName() { return personName; }
72
+    public void setPersonName(String personName) { this.personName = personName; }
73
+
74
+    public String getExamCategory() { return examCategory; }
75
+    public void setExamCategory(String examCategory) { this.examCategory = examCategory; }
76
+
77
+    public String getExamPeriod() { return examPeriod; }
78
+    public void setExamPeriod(String examPeriod) { this.examPeriod = examPeriod; }
79
+
80
+    public BigDecimal getScore() { return score; }
81
+    public void setScore(BigDecimal score) { this.score = score; }
82
+
83
+    public String getRemark() { return remark; }
84
+    public void setRemark(String remark) { this.remark = remark; }
85
+
86
+    public String getImportBatch() { return importBatch; }
87
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
88
+
89
+    public String getSourceType() { return sourceType; }
90
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
91
+}

+ 86 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerLeaveSpecial.java

@@ -0,0 +1,86 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 请休假记录(特殊)对象(页面录入)ledger_leave_special
15
+ */
16
+@TableName("ledger_leave_special")
17
+public class LedgerLeaveSpecial extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @Excel(name = "部门名称")
24
+    private String deptName;
25
+
26
+    @Excel(name = "队室/班组")
27
+    private String teamName;
28
+
29
+    @Excel(name = "姓名")
30
+    private String personName;
31
+
32
+    private Long personUserId;
33
+
34
+    @Excel(name = "假期类型")
35
+    private String leaveType;
36
+
37
+    @JsonFormat(pattern = "yyyy-MM-dd")
38
+    @Excel(name = "开始日期", width = 20, dateFormat = "yyyy-MM-dd")
39
+    private Date startDate;
40
+
41
+    @JsonFormat(pattern = "yyyy-MM-dd")
42
+    @Excel(name = "结束日期", width = 20, dateFormat = "yyyy-MM-dd")
43
+    private Date endDate;
44
+
45
+    @Excel(name = "天数")
46
+    private BigDecimal days;
47
+
48
+    @Excel(name = "扣分")
49
+    private BigDecimal deductScore;
50
+
51
+    @Excel(name = "备注")
52
+    private String remark;
53
+
54
+    public Long getId() { return id; }
55
+    public void setId(Long id) { this.id = id; }
56
+
57
+    public String getDeptName() { return deptName; }
58
+    public void setDeptName(String deptName) { this.deptName = deptName; }
59
+
60
+    public String getTeamName() { return teamName; }
61
+    public void setTeamName(String teamName) { this.teamName = teamName; }
62
+
63
+    public String getPersonName() { return personName; }
64
+    public void setPersonName(String personName) { this.personName = personName; }
65
+
66
+    public Long getPersonUserId() { return personUserId; }
67
+    public void setPersonUserId(Long personUserId) { this.personUserId = personUserId; }
68
+
69
+    public String getLeaveType() { return leaveType; }
70
+    public void setLeaveType(String leaveType) { this.leaveType = leaveType; }
71
+
72
+    public Date getStartDate() { return startDate; }
73
+    public void setStartDate(Date startDate) { this.startDate = startDate; }
74
+
75
+    public Date getEndDate() { return endDate; }
76
+    public void setEndDate(Date endDate) { this.endDate = endDate; }
77
+
78
+    public BigDecimal getDays() { return days; }
79
+    public void setDays(BigDecimal days) { this.days = days; }
80
+
81
+    public BigDecimal getDeductScore() { return deductScore; }
82
+    public void setDeductScore(BigDecimal deductScore) { this.deductScore = deductScore; }
83
+
84
+    public String getRemark() { return remark; }
85
+    public void setRemark(String remark) { this.remark = remark; }
86
+}

+ 139 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerPatrolInspection.java

@@ -0,0 +1,139 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 队室三级质控巡查记录对象 ledger_patrol_inspection
15
+ */
16
+@TableName("ledger_patrol_inspection")
17
+public class LedgerPatrolInspection extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "巡查日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "小组")
34
+    private String groupName;
35
+
36
+    @Excel(name = "巡查人")
37
+    private String inspectorName;
38
+
39
+    @Excel(name = "被查人")
40
+    private String inspectedName;
41
+
42
+    @Excel(name = "巡查类型")
43
+    private String patrolType;
44
+
45
+    @Excel(name = "巡查项目")
46
+    private String patrolItem;
47
+
48
+    @Excel(name = "问题描述")
49
+    private String problemDesc;
50
+
51
+    @Excel(name = "巡查地点")
52
+    private String location;
53
+
54
+    @Excel(name = "通道号")
55
+    private String channelNo;
56
+
57
+    @Excel(name = "处理结果")
58
+    private String resultHandling;
59
+
60
+    @Excel(name = "扣分")
61
+    private BigDecimal deductScore;
62
+
63
+    @Excel(name = "评分维度")
64
+    private String scoreDimension;
65
+
66
+    @Excel(name = "评分指标")
67
+    private String scoreIndicator;
68
+
69
+    @Excel(name = "佐证附件")
70
+    private String evidenceFile;
71
+
72
+    @Excel(name = "备注")
73
+    private String remark;
74
+
75
+    private String importBatch;
76
+
77
+    @Excel(name = "数据来源")
78
+    private String sourceType;
79
+
80
+    public Long getId() { return id; }
81
+    public void setId(Long id) { this.id = id; }
82
+
83
+    public Date getRecordDate() { return recordDate; }
84
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
85
+
86
+    public String getDeptName() { return deptName; }
87
+    public void setDeptName(String deptName) { this.deptName = deptName; }
88
+
89
+    public String getTeamName() { return teamName; }
90
+    public void setTeamName(String teamName) { this.teamName = teamName; }
91
+
92
+    public String getGroupName() { return groupName; }
93
+    public void setGroupName(String groupName) { this.groupName = groupName; }
94
+
95
+    public String getInspectorName() { return inspectorName; }
96
+    public void setInspectorName(String inspectorName) { this.inspectorName = inspectorName; }
97
+
98
+    public String getInspectedName() { return inspectedName; }
99
+    public void setInspectedName(String inspectedName) { this.inspectedName = inspectedName; }
100
+
101
+    public String getPatrolType() { return patrolType; }
102
+    public void setPatrolType(String patrolType) { this.patrolType = patrolType; }
103
+
104
+    public String getPatrolItem() { return patrolItem; }
105
+    public void setPatrolItem(String patrolItem) { this.patrolItem = patrolItem; }
106
+
107
+    public String getProblemDesc() { return problemDesc; }
108
+    public void setProblemDesc(String problemDesc) { this.problemDesc = problemDesc; }
109
+
110
+    public String getLocation() { return location; }
111
+    public void setLocation(String location) { this.location = location; }
112
+
113
+    public String getChannelNo() { return channelNo; }
114
+    public void setChannelNo(String channelNo) { this.channelNo = channelNo; }
115
+
116
+    public String getResultHandling() { return resultHandling; }
117
+    public void setResultHandling(String resultHandling) { this.resultHandling = resultHandling; }
118
+
119
+    public BigDecimal getDeductScore() { return deductScore; }
120
+    public void setDeductScore(BigDecimal deductScore) { this.deductScore = deductScore; }
121
+
122
+    public String getScoreDimension() { return scoreDimension; }
123
+    public void setScoreDimension(String scoreDimension) { this.scoreDimension = scoreDimension; }
124
+
125
+    public String getScoreIndicator() { return scoreIndicator; }
126
+    public void setScoreIndicator(String scoreIndicator) { this.scoreIndicator = scoreIndicator; }
127
+
128
+    public String getEvidenceFile() { return evidenceFile; }
129
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
130
+
131
+    public String getRemark() { return remark; }
132
+    public void setRemark(String remark) { this.remark = remark; }
133
+
134
+    public String getImportBatch() { return importBatch; }
135
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
136
+
137
+    public String getSourceType() { return sourceType; }
138
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
139
+}

+ 169 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerRealtimeInterception.java

@@ -0,0 +1,169 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 部门实时质控拦截记录对象 ledger_realtime_interception
15
+ */
16
+@TableName("ledger_realtime_interception")
17
+public class LedgerRealtimeInterception extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "记录日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "记录时间")
28
+    private String recordTime;
29
+
30
+    @Excel(name = "部门名称")
31
+    private String deptName;
32
+
33
+    @Excel(name = "队室/班组")
34
+    private String teamName;
35
+
36
+    @Excel(name = "小组")
37
+    private String groupName;
38
+
39
+    @Excel(name = "查获人")
40
+    private String inspectorName;
41
+
42
+    @Excel(name = "通道号")
43
+    private String channelNo;
44
+
45
+    @Excel(name = "旅客姓名")
46
+    private String passengerName;
47
+
48
+    @Excel(name = "证件号码")
49
+    private String idCardNo;
50
+
51
+    @Excel(name = "航班号")
52
+    private String flightNo;
53
+
54
+    @Excel(name = "物品类别")
55
+    private String itemCategory;
56
+
57
+    @Excel(name = "物品名称")
58
+    private String itemName;
59
+
60
+    @Excel(name = "数量")
61
+    private Integer itemQuantity;
62
+
63
+    @Excel(name = "重量(kg)")
64
+    private BigDecimal itemWeight;
65
+
66
+    @Excel(name = "处置方式")
67
+    private String handlingMethod;
68
+
69
+    @Excel(name = "处理结果")
70
+    private String resultHandling;
71
+
72
+    @Excel(name = "扣分")
73
+    private BigDecimal deductScore;
74
+
75
+    @Excel(name = "加分")
76
+    private BigDecimal addScore;
77
+
78
+    @Excel(name = "评分维度")
79
+    private String scoreDimension;
80
+
81
+    @Excel(name = "评分指标")
82
+    private String scoreIndicator;
83
+
84
+    @Excel(name = "佐证附件")
85
+    private String evidenceFile;
86
+
87
+    @Excel(name = "备注")
88
+    private String remark;
89
+
90
+    private String importBatch;
91
+
92
+    @Excel(name = "数据来源")
93
+    private String sourceType;
94
+
95
+    public Long getId() { return id; }
96
+    public void setId(Long id) { this.id = id; }
97
+
98
+    public Date getRecordDate() { return recordDate; }
99
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
100
+
101
+    public String getRecordTime() { return recordTime; }
102
+    public void setRecordTime(String recordTime) { this.recordTime = recordTime; }
103
+
104
+    public String getDeptName() { return deptName; }
105
+    public void setDeptName(String deptName) { this.deptName = deptName; }
106
+
107
+    public String getTeamName() { return teamName; }
108
+    public void setTeamName(String teamName) { this.teamName = teamName; }
109
+
110
+    public String getGroupName() { return groupName; }
111
+    public void setGroupName(String groupName) { this.groupName = groupName; }
112
+
113
+    public String getInspectorName() { return inspectorName; }
114
+    public void setInspectorName(String inspectorName) { this.inspectorName = inspectorName; }
115
+
116
+    public String getChannelNo() { return channelNo; }
117
+    public void setChannelNo(String channelNo) { this.channelNo = channelNo; }
118
+
119
+    public String getPassengerName() { return passengerName; }
120
+    public void setPassengerName(String passengerName) { this.passengerName = passengerName; }
121
+
122
+    public String getIdCardNo() { return idCardNo; }
123
+    public void setIdCardNo(String idCardNo) { this.idCardNo = idCardNo; }
124
+
125
+    public String getFlightNo() { return flightNo; }
126
+    public void setFlightNo(String flightNo) { this.flightNo = flightNo; }
127
+
128
+    public String getItemCategory() { return itemCategory; }
129
+    public void setItemCategory(String itemCategory) { this.itemCategory = itemCategory; }
130
+
131
+    public String getItemName() { return itemName; }
132
+    public void setItemName(String itemName) { this.itemName = itemName; }
133
+
134
+    public Integer getItemQuantity() { return itemQuantity; }
135
+    public void setItemQuantity(Integer itemQuantity) { this.itemQuantity = itemQuantity; }
136
+
137
+    public BigDecimal getItemWeight() { return itemWeight; }
138
+    public void setItemWeight(BigDecimal itemWeight) { this.itemWeight = itemWeight; }
139
+
140
+    public String getHandlingMethod() { return handlingMethod; }
141
+    public void setHandlingMethod(String handlingMethod) { this.handlingMethod = handlingMethod; }
142
+
143
+    public String getResultHandling() { return resultHandling; }
144
+    public void setResultHandling(String resultHandling) { this.resultHandling = resultHandling; }
145
+
146
+    public BigDecimal getDeductScore() { return deductScore; }
147
+    public void setDeductScore(BigDecimal deductScore) { this.deductScore = deductScore; }
148
+
149
+    public BigDecimal getAddScore() { return addScore; }
150
+    public void setAddScore(BigDecimal addScore) { this.addScore = addScore; }
151
+
152
+    public String getScoreDimension() { return scoreDimension; }
153
+    public void setScoreDimension(String scoreDimension) { this.scoreDimension = scoreDimension; }
154
+
155
+    public String getScoreIndicator() { return scoreIndicator; }
156
+    public void setScoreIndicator(String scoreIndicator) { this.scoreIndicator = scoreIndicator; }
157
+
158
+    public String getEvidenceFile() { return evidenceFile; }
159
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
160
+
161
+    public String getRemark() { return remark; }
162
+    public void setRemark(String remark) { this.remark = remark; }
163
+
164
+    public String getImportBatch() { return importBatch; }
165
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
166
+
167
+    public String getSourceType() { return sourceType; }
168
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
169
+}

+ 85 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerRewardApproval.java

@@ -0,0 +1,85 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 小额奖励审批单对象 ledger_reward_approval
15
+ */
16
+@TableName("ledger_reward_approval")
17
+public class LedgerRewardApproval extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "审批日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date approveDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "姓名")
34
+    private String personName;
35
+
36
+    @Excel(name = "奖励类型")
37
+    private String rewardType;
38
+
39
+    @Excel(name = "奖励金额")
40
+    private BigDecimal rewardAmount;
41
+
42
+    @Excel(name = "审批状态")
43
+    private String approvalStatus;
44
+
45
+    @Excel(name = "备注")
46
+    private String remark;
47
+
48
+    private String importBatch;
49
+
50
+    @Excel(name = "数据来源")
51
+    private String sourceType;
52
+
53
+    public Long getId() { return id; }
54
+    public void setId(Long id) { this.id = id; }
55
+
56
+    public Date getApproveDate() { return approveDate; }
57
+    public void setApproveDate(Date approveDate) { this.approveDate = approveDate; }
58
+
59
+    public String getDeptName() { return deptName; }
60
+    public void setDeptName(String deptName) { this.deptName = deptName; }
61
+
62
+    public String getTeamName() { return teamName; }
63
+    public void setTeamName(String teamName) { this.teamName = teamName; }
64
+
65
+    public String getPersonName() { return personName; }
66
+    public void setPersonName(String personName) { this.personName = personName; }
67
+
68
+    public String getRewardType() { return rewardType; }
69
+    public void setRewardType(String rewardType) { this.rewardType = rewardType; }
70
+
71
+    public BigDecimal getRewardAmount() { return rewardAmount; }
72
+    public void setRewardAmount(BigDecimal rewardAmount) { this.rewardAmount = rewardAmount; }
73
+
74
+    public String getApprovalStatus() { return approvalStatus; }
75
+    public void setApprovalStatus(String approvalStatus) { this.approvalStatus = approvalStatus; }
76
+
77
+    public String getRemark() { return remark; }
78
+    public void setRemark(String remark) { this.remark = remark; }
79
+
80
+    public String getImportBatch() { return importBatch; }
81
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
82
+
83
+    public String getSourceType() { return sourceType; }
84
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
85
+}

+ 91 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerRewardPenalty.java

@@ -0,0 +1,91 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 部门奖惩记录对象(页面录入)ledger_reward_penalty
15
+ */
16
+@TableName("ledger_reward_penalty")
17
+public class LedgerRewardPenalty extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "记录日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "姓名")
34
+    private String personName;
35
+
36
+    private Long personUserId;
37
+
38
+    @Excel(name = "类型", readConverterExp = "1=奖励,2=惩处")
39
+    private String type;
40
+
41
+    @Excel(name = "事件描述")
42
+    private String eventDesc;
43
+
44
+    @Excel(name = "分值变动")
45
+    private BigDecimal scoreChange;
46
+
47
+    @Excel(name = "评分维度")
48
+    private String scoreDimension;
49
+
50
+    @Excel(name = "佐证附件")
51
+    private String evidenceFile;
52
+
53
+    @Excel(name = "备注")
54
+    private String remark;
55
+
56
+    public Long getId() { return id; }
57
+    public void setId(Long id) { this.id = id; }
58
+
59
+    public Date getRecordDate() { return recordDate; }
60
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
61
+
62
+    public String getDeptName() { return deptName; }
63
+    public void setDeptName(String deptName) { this.deptName = deptName; }
64
+
65
+    public String getTeamName() { return teamName; }
66
+    public void setTeamName(String teamName) { this.teamName = teamName; }
67
+
68
+    public String getPersonName() { return personName; }
69
+    public void setPersonName(String personName) { this.personName = personName; }
70
+
71
+    public Long getPersonUserId() { return personUserId; }
72
+    public void setPersonUserId(Long personUserId) { this.personUserId = personUserId; }
73
+
74
+    public String getType() { return type; }
75
+    public void setType(String type) { this.type = type; }
76
+
77
+    public String getEventDesc() { return eventDesc; }
78
+    public void setEventDesc(String eventDesc) { this.eventDesc = eventDesc; }
79
+
80
+    public BigDecimal getScoreChange() { return scoreChange; }
81
+    public void setScoreChange(BigDecimal scoreChange) { this.scoreChange = scoreChange; }
82
+
83
+    public String getScoreDimension() { return scoreDimension; }
84
+    public void setScoreDimension(String scoreDimension) { this.scoreDimension = scoreDimension; }
85
+
86
+    public String getEvidenceFile() { return evidenceFile; }
87
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
88
+
89
+    public String getRemark() { return remark; }
90
+    public void setRemark(String remark) { this.remark = remark; }
91
+}

+ 139 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerSecurityTest.java

@@ -0,0 +1,139 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 安保测试记录对象 ledger_security_test
15
+ */
16
+@TableName("ledger_security_test")
17
+public class LedgerSecurityTest extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "测试日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "小组")
34
+    private String groupName;
35
+
36
+    @Excel(name = "测试人")
37
+    private String testerName;
38
+
39
+    @Excel(name = "被测人")
40
+    private String testedName;
41
+
42
+    @Excel(name = "测试类型")
43
+    private String testType;
44
+
45
+    @Excel(name = "测试项目")
46
+    private String testItem;
47
+
48
+    @Excel(name = "测试结果")
49
+    private String testResult;
50
+
51
+    @Excel(name = "问题描述")
52
+    private String problemDesc;
53
+
54
+    @Excel(name = "处理结果")
55
+    private String resultHandling;
56
+
57
+    @Excel(name = "扣分")
58
+    private BigDecimal deductScore;
59
+
60
+    @Excel(name = "加分")
61
+    private BigDecimal addScore;
62
+
63
+    @Excel(name = "评分维度")
64
+    private String scoreDimension;
65
+
66
+    @Excel(name = "评分指标")
67
+    private String scoreIndicator;
68
+
69
+    @Excel(name = "佐证附件")
70
+    private String evidenceFile;
71
+
72
+    @Excel(name = "备注")
73
+    private String remark;
74
+
75
+    private String importBatch;
76
+
77
+    @Excel(name = "数据来源")
78
+    private String sourceType;
79
+
80
+    public Long getId() { return id; }
81
+    public void setId(Long id) { this.id = id; }
82
+
83
+    public Date getRecordDate() { return recordDate; }
84
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
85
+
86
+    public String getDeptName() { return deptName; }
87
+    public void setDeptName(String deptName) { this.deptName = deptName; }
88
+
89
+    public String getTeamName() { return teamName; }
90
+    public void setTeamName(String teamName) { this.teamName = teamName; }
91
+
92
+    public String getGroupName() { return groupName; }
93
+    public void setGroupName(String groupName) { this.groupName = groupName; }
94
+
95
+    public String getTesterName() { return testerName; }
96
+    public void setTesterName(String testerName) { this.testerName = testerName; }
97
+
98
+    public String getTestedName() { return testedName; }
99
+    public void setTestedName(String testedName) { this.testedName = testedName; }
100
+
101
+    public String getTestType() { return testType; }
102
+    public void setTestType(String testType) { this.testType = testType; }
103
+
104
+    public String getTestItem() { return testItem; }
105
+    public void setTestItem(String testItem) { this.testItem = testItem; }
106
+
107
+    public String getTestResult() { return testResult; }
108
+    public void setTestResult(String testResult) { this.testResult = testResult; }
109
+
110
+    public String getProblemDesc() { return problemDesc; }
111
+    public void setProblemDesc(String problemDesc) { this.problemDesc = problemDesc; }
112
+
113
+    public String getResultHandling() { return resultHandling; }
114
+    public void setResultHandling(String resultHandling) { this.resultHandling = resultHandling; }
115
+
116
+    public BigDecimal getDeductScore() { return deductScore; }
117
+    public void setDeductScore(BigDecimal deductScore) { this.deductScore = deductScore; }
118
+
119
+    public BigDecimal getAddScore() { return addScore; }
120
+    public void setAddScore(BigDecimal addScore) { this.addScore = addScore; }
121
+
122
+    public String getScoreDimension() { return scoreDimension; }
123
+    public void setScoreDimension(String scoreDimension) { this.scoreDimension = scoreDimension; }
124
+
125
+    public String getScoreIndicator() { return scoreIndicator; }
126
+    public void setScoreIndicator(String scoreIndicator) { this.scoreIndicator = scoreIndicator; }
127
+
128
+    public String getEvidenceFile() { return evidenceFile; }
129
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
130
+
131
+    public String getRemark() { return remark; }
132
+    public void setRemark(String remark) { this.remark = remark; }
133
+
134
+    public String getImportBatch() { return importBatch; }
135
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
136
+
137
+    public String getSourceType() { return sourceType; }
138
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
139
+}

+ 157 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerSeizureStats.java

@@ -0,0 +1,157 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 查获违规品统计对象 ledger_seizure_stats
15
+ */
16
+@TableName("ledger_seizure_stats")
17
+public class LedgerSeizureStats extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "查获日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "小组")
34
+    private String groupName;
35
+
36
+    @Excel(name = "查获人")
37
+    private String inspectorName;
38
+
39
+    @Excel(name = "通道号")
40
+    private String channelNo;
41
+
42
+    @Excel(name = "旅客姓名")
43
+    private String passengerName;
44
+
45
+    @Excel(name = "航班号")
46
+    private String flightNo;
47
+
48
+    @Excel(name = "违规品类别")
49
+    private String itemCategory;
50
+
51
+    @Excel(name = "违规品名称")
52
+    private String itemName;
53
+
54
+    @Excel(name = "数量")
55
+    private Integer itemQuantity;
56
+
57
+    @Excel(name = "藏匿部位")
58
+    private String concealmentPart;
59
+
60
+    @Excel(name = "检查方式")
61
+    private String checkMethod;
62
+
63
+    @Excel(name = "处置方式")
64
+    private String handlingMethod;
65
+
66
+    @Excel(name = "加分")
67
+    private BigDecimal addScore;
68
+
69
+    @Excel(name = "叠加分")
70
+    private BigDecimal stackedScore;
71
+
72
+    @Excel(name = "评分维度")
73
+    private String scoreDimension;
74
+
75
+    @Excel(name = "评分指标")
76
+    private String scoreIndicator;
77
+
78
+    @Excel(name = "佐证附件")
79
+    private String evidenceFile;
80
+
81
+    @Excel(name = "备注")
82
+    private String remark;
83
+
84
+    private String importBatch;
85
+
86
+    @Excel(name = "数据来源")
87
+    private String sourceType;
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 getDeptName() { return deptName; }
96
+    public void setDeptName(String deptName) { this.deptName = deptName; }
97
+
98
+    public String getTeamName() { return teamName; }
99
+    public void setTeamName(String teamName) { this.teamName = teamName; }
100
+
101
+    public String getGroupName() { return groupName; }
102
+    public void setGroupName(String groupName) { this.groupName = groupName; }
103
+
104
+    public String getInspectorName() { return inspectorName; }
105
+    public void setInspectorName(String inspectorName) { this.inspectorName = inspectorName; }
106
+
107
+    public String getChannelNo() { return channelNo; }
108
+    public void setChannelNo(String channelNo) { this.channelNo = channelNo; }
109
+
110
+    public String getPassengerName() { return passengerName; }
111
+    public void setPassengerName(String passengerName) { this.passengerName = passengerName; }
112
+
113
+    public String getFlightNo() { return flightNo; }
114
+    public void setFlightNo(String flightNo) { this.flightNo = flightNo; }
115
+
116
+    public String getItemCategory() { return itemCategory; }
117
+    public void setItemCategory(String itemCategory) { this.itemCategory = itemCategory; }
118
+
119
+    public String getItemName() { return itemName; }
120
+    public void setItemName(String itemName) { this.itemName = itemName; }
121
+
122
+    public Integer getItemQuantity() { return itemQuantity; }
123
+    public void setItemQuantity(Integer itemQuantity) { this.itemQuantity = itemQuantity; }
124
+
125
+    public String getConcealmentPart() { return concealmentPart; }
126
+    public void setConcealmentPart(String concealmentPart) { this.concealmentPart = concealmentPart; }
127
+
128
+    public String getCheckMethod() { return checkMethod; }
129
+    public void setCheckMethod(String checkMethod) { this.checkMethod = checkMethod; }
130
+
131
+    public String getHandlingMethod() { return handlingMethod; }
132
+    public void setHandlingMethod(String handlingMethod) { this.handlingMethod = handlingMethod; }
133
+
134
+    public BigDecimal getAddScore() { return addScore; }
135
+    public void setAddScore(BigDecimal addScore) { this.addScore = addScore; }
136
+
137
+    public BigDecimal getStackedScore() { return stackedScore; }
138
+    public void setStackedScore(BigDecimal stackedScore) { this.stackedScore = stackedScore; }
139
+
140
+    public String getScoreDimension() { return scoreDimension; }
141
+    public void setScoreDimension(String scoreDimension) { this.scoreDimension = scoreDimension; }
142
+
143
+    public String getScoreIndicator() { return scoreIndicator; }
144
+    public void setScoreIndicator(String scoreIndicator) { this.scoreIndicator = scoreIndicator; }
145
+
146
+    public String getEvidenceFile() { return evidenceFile; }
147
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
148
+
149
+    public String getRemark() { return remark; }
150
+    public void setRemark(String remark) { this.remark = remark; }
151
+
152
+    public String getImportBatch() { return importBatch; }
153
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
154
+
155
+    public String getSourceType() { return sourceType; }
156
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
157
+}

+ 133 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerServicePatrol.java

@@ -0,0 +1,133 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 服务巡查记录对象 ledger_service_patrol
15
+ */
16
+@TableName("ledger_service_patrol")
17
+public class LedgerServicePatrol extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "巡查日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "小组")
34
+    private String groupName;
35
+
36
+    @Excel(name = "巡查人")
37
+    private String inspectorName;
38
+
39
+    @Excel(name = "被查人")
40
+    private String inspectedName;
41
+
42
+    @Excel(name = "服务类型")
43
+    private String serviceType;
44
+
45
+    @Excel(name = "问题描述")
46
+    private String problemDesc;
47
+
48
+    @Excel(name = "巡查地点")
49
+    private String location;
50
+
51
+    @Excel(name = "处理结果")
52
+    private String resultHandling;
53
+
54
+    @Excel(name = "扣分")
55
+    private BigDecimal deductScore;
56
+
57
+    @Excel(name = "加分")
58
+    private BigDecimal addScore;
59
+
60
+    @Excel(name = "评分维度")
61
+    private String scoreDimension;
62
+
63
+    @Excel(name = "评分指标")
64
+    private String scoreIndicator;
65
+
66
+    @Excel(name = "佐证附件")
67
+    private String evidenceFile;
68
+
69
+    @Excel(name = "备注")
70
+    private String remark;
71
+
72
+    private String importBatch;
73
+
74
+    @Excel(name = "数据来源")
75
+    private String sourceType;
76
+
77
+    public Long getId() { return id; }
78
+    public void setId(Long id) { this.id = id; }
79
+
80
+    public Date getRecordDate() { return recordDate; }
81
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
82
+
83
+    public String getDeptName() { return deptName; }
84
+    public void setDeptName(String deptName) { this.deptName = deptName; }
85
+
86
+    public String getTeamName() { return teamName; }
87
+    public void setTeamName(String teamName) { this.teamName = teamName; }
88
+
89
+    public String getGroupName() { return groupName; }
90
+    public void setGroupName(String groupName) { this.groupName = groupName; }
91
+
92
+    public String getInspectorName() { return inspectorName; }
93
+    public void setInspectorName(String inspectorName) { this.inspectorName = inspectorName; }
94
+
95
+    public String getInspectedName() { return inspectedName; }
96
+    public void setInspectedName(String inspectedName) { this.inspectedName = inspectedName; }
97
+
98
+    public String getServiceType() { return serviceType; }
99
+    public void setServiceType(String serviceType) { this.serviceType = serviceType; }
100
+
101
+    public String getProblemDesc() { return problemDesc; }
102
+    public void setProblemDesc(String problemDesc) { this.problemDesc = problemDesc; }
103
+
104
+    public String getLocation() { return location; }
105
+    public void setLocation(String location) { this.location = location; }
106
+
107
+    public String getResultHandling() { return resultHandling; }
108
+    public void setResultHandling(String resultHandling) { this.resultHandling = resultHandling; }
109
+
110
+    public BigDecimal getDeductScore() { return deductScore; }
111
+    public void setDeductScore(BigDecimal deductScore) { this.deductScore = deductScore; }
112
+
113
+    public BigDecimal getAddScore() { return addScore; }
114
+    public void setAddScore(BigDecimal addScore) { this.addScore = addScore; }
115
+
116
+    public String getScoreDimension() { return scoreDimension; }
117
+    public void setScoreDimension(String scoreDimension) { this.scoreDimension = scoreDimension; }
118
+
119
+    public String getScoreIndicator() { return scoreIndicator; }
120
+    public void setScoreIndicator(String scoreIndicator) { this.scoreIndicator = scoreIndicator; }
121
+
122
+    public String getEvidenceFile() { return evidenceFile; }
123
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
124
+
125
+    public String getRemark() { return remark; }
126
+    public void setRemark(String remark) { this.remark = remark; }
127
+
128
+    public String getImportBatch() { return importBatch; }
129
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
130
+
131
+    public String getSourceType() { return sourceType; }
132
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
133
+}

+ 139 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerSupervisionProblem.java

@@ -0,0 +1,139 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 部门监察问题记录对象 ledger_supervision_problem
15
+ */
16
+@TableName("ledger_supervision_problem")
17
+public class LedgerSupervisionProblem extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "记录日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "小组")
34
+    private String groupName;
35
+
36
+    @Excel(name = "巡查人")
37
+    private String inspectorName;
38
+
39
+    @Excel(name = "被查人")
40
+    private String inspectedName;
41
+
42
+    @Excel(name = "问题类型")
43
+    private String problemType;
44
+
45
+    @Excel(name = "问题描述")
46
+    private String problemDesc;
47
+
48
+    @Excel(name = "问题地点")
49
+    private String location;
50
+
51
+    @Excel(name = "通道号")
52
+    private String channelNo;
53
+
54
+    @Excel(name = "处理结果")
55
+    private String resultHandling;
56
+
57
+    @Excel(name = "扣分")
58
+    private BigDecimal deductScore;
59
+
60
+    @Excel(name = "加分")
61
+    private BigDecimal addScore;
62
+
63
+    @Excel(name = "评分维度")
64
+    private String scoreDimension;
65
+
66
+    @Excel(name = "评分指标")
67
+    private String scoreIndicator;
68
+
69
+    @Excel(name = "佐证附件")
70
+    private String evidenceFile;
71
+
72
+    @Excel(name = "备注")
73
+    private String remark;
74
+
75
+    private String importBatch;
76
+
77
+    @Excel(name = "数据来源")
78
+    private String sourceType;
79
+
80
+    public Long getId() { return id; }
81
+    public void setId(Long id) { this.id = id; }
82
+
83
+    public Date getRecordDate() { return recordDate; }
84
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
85
+
86
+    public String getDeptName() { return deptName; }
87
+    public void setDeptName(String deptName) { this.deptName = deptName; }
88
+
89
+    public String getTeamName() { return teamName; }
90
+    public void setTeamName(String teamName) { this.teamName = teamName; }
91
+
92
+    public String getGroupName() { return groupName; }
93
+    public void setGroupName(String groupName) { this.groupName = groupName; }
94
+
95
+    public String getInspectorName() { return inspectorName; }
96
+    public void setInspectorName(String inspectorName) { this.inspectorName = inspectorName; }
97
+
98
+    public String getInspectedName() { return inspectedName; }
99
+    public void setInspectedName(String inspectedName) { this.inspectedName = inspectedName; }
100
+
101
+    public String getProblemType() { return problemType; }
102
+    public void setProblemType(String problemType) { this.problemType = problemType; }
103
+
104
+    public String getProblemDesc() { return problemDesc; }
105
+    public void setProblemDesc(String problemDesc) { this.problemDesc = problemDesc; }
106
+
107
+    public String getLocation() { return location; }
108
+    public void setLocation(String location) { this.location = location; }
109
+
110
+    public String getChannelNo() { return channelNo; }
111
+    public void setChannelNo(String channelNo) { this.channelNo = channelNo; }
112
+
113
+    public String getResultHandling() { return resultHandling; }
114
+    public void setResultHandling(String resultHandling) { this.resultHandling = resultHandling; }
115
+
116
+    public BigDecimal getDeductScore() { return deductScore; }
117
+    public void setDeductScore(BigDecimal deductScore) { this.deductScore = deductScore; }
118
+
119
+    public BigDecimal getAddScore() { return addScore; }
120
+    public void setAddScore(BigDecimal addScore) { this.addScore = addScore; }
121
+
122
+    public String getScoreDimension() { return scoreDimension; }
123
+    public void setScoreDimension(String scoreDimension) { this.scoreDimension = scoreDimension; }
124
+
125
+    public String getScoreIndicator() { return scoreIndicator; }
126
+    public void setScoreIndicator(String scoreIndicator) { this.scoreIndicator = scoreIndicator; }
127
+
128
+    public String getEvidenceFile() { return evidenceFile; }
129
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
130
+
131
+    public String getRemark() { return remark; }
132
+    public void setRemark(String remark) { this.remark = remark; }
133
+
134
+    public String getImportBatch() { return importBatch; }
135
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
136
+
137
+    public String getSourceType() { return sourceType; }
138
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
139
+}

+ 85 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerTerminalBonus.java

@@ -0,0 +1,85 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 航站楼加分记录对象 ledger_terminal_bonus
15
+ */
16
+@TableName("ledger_terminal_bonus")
17
+public class LedgerTerminalBonus extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "审核日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date approveDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "姓名")
34
+    private String personName;
35
+
36
+    @Excel(name = "加分类型")
37
+    private String bonusType;
38
+
39
+    @Excel(name = "加分")
40
+    private BigDecimal addScore;
41
+
42
+    @Excel(name = "佐证附件")
43
+    private String evidenceFile;
44
+
45
+    @Excel(name = "备注")
46
+    private String remark;
47
+
48
+    private String importBatch;
49
+
50
+    @Excel(name = "数据来源")
51
+    private String sourceType;
52
+
53
+    public Long getId() { return id; }
54
+    public void setId(Long id) { this.id = id; }
55
+
56
+    public Date getApproveDate() { return approveDate; }
57
+    public void setApproveDate(Date approveDate) { this.approveDate = approveDate; }
58
+
59
+    public String getDeptName() { return deptName; }
60
+    public void setDeptName(String deptName) { this.deptName = deptName; }
61
+
62
+    public String getTeamName() { return teamName; }
63
+    public void setTeamName(String teamName) { this.teamName = teamName; }
64
+
65
+    public String getPersonName() { return personName; }
66
+    public void setPersonName(String personName) { this.personName = personName; }
67
+
68
+    public String getBonusType() { return bonusType; }
69
+    public void setBonusType(String bonusType) { this.bonusType = bonusType; }
70
+
71
+    public BigDecimal getAddScore() { return addScore; }
72
+    public void setAddScore(BigDecimal addScore) { this.addScore = addScore; }
73
+
74
+    public String getEvidenceFile() { return evidenceFile; }
75
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
76
+
77
+    public String getRemark() { return remark; }
78
+    public void setRemark(String remark) { this.remark = remark; }
79
+
80
+    public String getImportBatch() { return importBatch; }
81
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
82
+
83
+    public String getSourceType() { return sourceType; }
84
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
85
+}

+ 97 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/LedgerUnsafeEvent.java

@@ -0,0 +1,97 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 不安全事件记录对象 ledger_unsafe_event
15
+ */
16
+@TableName("ledger_unsafe_event")
17
+public class LedgerUnsafeEvent extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @JsonFormat(pattern = "yyyy-MM-dd")
24
+    @Excel(name = "事件日期", width = 20, dateFormat = "yyyy-MM-dd")
25
+    private Date recordDate;
26
+
27
+    @Excel(name = "部门名称")
28
+    private String deptName;
29
+
30
+    @Excel(name = "队室/班组")
31
+    private String teamName;
32
+
33
+    @Excel(name = "责任人")
34
+    private String responsibleName;
35
+
36
+    @Excel(name = "事件类型")
37
+    private String eventType;
38
+
39
+    @Excel(name = "事件描述")
40
+    private String eventDesc;
41
+
42
+    @Excel(name = "处理结果")
43
+    private String resultHandling;
44
+
45
+    @Excel(name = "扣分")
46
+    private BigDecimal deductScore;
47
+
48
+    @Excel(name = "佐证附件")
49
+    private String evidenceFile;
50
+
51
+    @Excel(name = "备注")
52
+    private String remark;
53
+
54
+    private String importBatch;
55
+
56
+    @Excel(name = "数据来源")
57
+    private String sourceType;
58
+
59
+    public Long getId() { return id; }
60
+    public void setId(Long id) { this.id = id; }
61
+
62
+    public Date getRecordDate() { return recordDate; }
63
+    public void setRecordDate(Date recordDate) { this.recordDate = recordDate; }
64
+
65
+    public String getDeptName() { return deptName; }
66
+    public void setDeptName(String deptName) { this.deptName = deptName; }
67
+
68
+    public String getTeamName() { return teamName; }
69
+    public void setTeamName(String teamName) { this.teamName = teamName; }
70
+
71
+    public String getResponsibleName() { return responsibleName; }
72
+    public void setResponsibleName(String responsibleName) { this.responsibleName = responsibleName; }
73
+
74
+    public String getEventType() { return eventType; }
75
+    public void setEventType(String eventType) { this.eventType = eventType; }
76
+
77
+    public String getEventDesc() { return eventDesc; }
78
+    public void setEventDesc(String eventDesc) { this.eventDesc = eventDesc; }
79
+
80
+    public String getResultHandling() { return resultHandling; }
81
+    public void setResultHandling(String resultHandling) { this.resultHandling = resultHandling; }
82
+
83
+    public BigDecimal getDeductScore() { return deductScore; }
84
+    public void setDeductScore(BigDecimal deductScore) { this.deductScore = deductScore; }
85
+
86
+    public String getEvidenceFile() { return evidenceFile; }
87
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
88
+
89
+    public String getRemark() { return remark; }
90
+    public void setRemark(String remark) { this.remark = remark; }
91
+
92
+    public String getImportBatch() { return importBatch; }
93
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
94
+
95
+    public String getSourceType() { return sourceType; }
96
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
97
+}

+ 53 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/ScoreDimension.java

@@ -0,0 +1,53 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+
5
+import com.baomidou.mybatisplus.annotation.IdType;
6
+import com.baomidou.mybatisplus.annotation.TableId;
7
+import com.baomidou.mybatisplus.annotation.TableName;
8
+import com.sundot.airport.common.annotation.Excel;
9
+import com.sundot.airport.common.core.domain.BaseEntity;
10
+
11
+/**
12
+ * 评分维度 score_dimension
13
+ */
14
+@TableName("score_dimension")
15
+public class ScoreDimension extends BaseEntity {
16
+    private static final long serialVersionUID = 1L;
17
+
18
+    @TableId(type = IdType.AUTO)
19
+    private Long id;
20
+
21
+    @Excel(name = "维度名称")
22
+    private String name;
23
+
24
+    @Excel(name = "权重(%)")
25
+    private BigDecimal weight;
26
+
27
+    @Excel(name = "基础分")
28
+    private BigDecimal baseScore;
29
+
30
+    @Excel(name = "排序")
31
+    private Integer sortOrder;
32
+
33
+    @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
34
+    private String status;
35
+
36
+    public Long getId() { return id; }
37
+    public void setId(Long id) { this.id = id; }
38
+
39
+    public String getName() { return name; }
40
+    public void setName(String name) { this.name = name; }
41
+
42
+    public BigDecimal getWeight() { return weight; }
43
+    public void setWeight(BigDecimal weight) { this.weight = weight; }
44
+
45
+    public BigDecimal getBaseScore() { return baseScore; }
46
+    public void setBaseScore(BigDecimal baseScore) { this.baseScore = baseScore; }
47
+
48
+    public Integer getSortOrder() { return sortOrder; }
49
+    public void setSortOrder(Integer sortOrder) { this.sortOrder = sortOrder; }
50
+
51
+    public String getStatus() { return status; }
52
+    public void setStatus(String status) { this.status = status; }
53
+}

+ 146 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/ScoreEvent.java

@@ -0,0 +1,146 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.Date;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableId;
8
+import com.baomidou.mybatisplus.annotation.TableName;
9
+import com.fasterxml.jackson.annotation.JsonFormat;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 配分事项(手动录入 + 台账同步)score_event
15
+ */
16
+@TableName("score_event")
17
+public class ScoreEvent extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @Excel(name = "维度ID")
24
+    private Long dimensionId;
25
+
26
+    @Excel(name = "维度名称")
27
+    private String dimensionName;
28
+
29
+    @Excel(name = "末级指标ID")
30
+    private Long indicatorId;
31
+
32
+    @Excel(name = "二级指标")
33
+    private String level2Name;
34
+
35
+    @Excel(name = "三级指标")
36
+    private String level3Name;
37
+
38
+    @Excel(name = "四级指标")
39
+    private String level4Name;
40
+
41
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
42
+    @Excel(name = "事件时间", width = 20, dateFormat = "yyyy-MM-dd HH:mm:ss")
43
+    private Date eventTime;
44
+
45
+    @Excel(name = "位置")
46
+    private String location;
47
+
48
+    @Excel(name = "责任人")
49
+    private String personName;
50
+
51
+    @Excel(name = "部门名称")
52
+    private String deptName;
53
+
54
+    @Excel(name = "队室/班组")
55
+    private String teamName;
56
+
57
+    @Excel(name = "小组")
58
+    private String groupName;
59
+
60
+    @Excel(name = "基础分值")
61
+    private BigDecimal scoreValue;
62
+
63
+    @Excel(name = "叠加分值")
64
+    private BigDecimal cascadeScore;
65
+
66
+    @Excel(name = "总分值")
67
+    private BigDecimal totalScore;
68
+
69
+    @Excel(name = "事件描述")
70
+    private String eventDesc;
71
+
72
+    /** 来源:1=手动录入 2=台账同步 */
73
+    @Excel(name = "数据来源", readConverterExp = "1=手动录入,2=台账同步")
74
+    private String sourceType;
75
+
76
+    @Excel(name = "来源台账")
77
+    private String sourceLedger;
78
+
79
+    private String importBatch;
80
+
81
+    @Excel(name = "附件")
82
+    private String evidenceFile;
83
+
84
+    public Long getId() { return id; }
85
+    public void setId(Long id) { this.id = id; }
86
+
87
+    public Long getDimensionId() { return dimensionId; }
88
+    public void setDimensionId(Long dimensionId) { this.dimensionId = dimensionId; }
89
+
90
+    public String getDimensionName() { return dimensionName; }
91
+    public void setDimensionName(String dimensionName) { this.dimensionName = dimensionName; }
92
+
93
+    public Long getIndicatorId() { return indicatorId; }
94
+    public void setIndicatorId(Long indicatorId) { this.indicatorId = indicatorId; }
95
+
96
+    public String getLevel2Name() { return level2Name; }
97
+    public void setLevel2Name(String level2Name) { this.level2Name = level2Name; }
98
+
99
+    public String getLevel3Name() { return level3Name; }
100
+    public void setLevel3Name(String level3Name) { this.level3Name = level3Name; }
101
+
102
+    public String getLevel4Name() { return level4Name; }
103
+    public void setLevel4Name(String level4Name) { this.level4Name = level4Name; }
104
+
105
+    public Date getEventTime() { return eventTime; }
106
+    public void setEventTime(Date eventTime) { this.eventTime = eventTime; }
107
+
108
+    public String getLocation() { return location; }
109
+    public void setLocation(String location) { this.location = location; }
110
+
111
+    public String getPersonName() { return personName; }
112
+    public void setPersonName(String personName) { this.personName = personName; }
113
+
114
+    public String getDeptName() { return deptName; }
115
+    public void setDeptName(String deptName) { this.deptName = deptName; }
116
+
117
+    public String getTeamName() { return teamName; }
118
+    public void setTeamName(String teamName) { this.teamName = teamName; }
119
+
120
+    public String getGroupName() { return groupName; }
121
+    public void setGroupName(String groupName) { this.groupName = groupName; }
122
+
123
+    public BigDecimal getScoreValue() { return scoreValue; }
124
+    public void setScoreValue(BigDecimal scoreValue) { this.scoreValue = scoreValue; }
125
+
126
+    public BigDecimal getCascadeScore() { return cascadeScore; }
127
+    public void setCascadeScore(BigDecimal cascadeScore) { this.cascadeScore = cascadeScore; }
128
+
129
+    public BigDecimal getTotalScore() { return totalScore; }
130
+    public void setTotalScore(BigDecimal totalScore) { this.totalScore = totalScore; }
131
+
132
+    public String getEventDesc() { return eventDesc; }
133
+    public void setEventDesc(String eventDesc) { this.eventDesc = eventDesc; }
134
+
135
+    public String getSourceType() { return sourceType; }
136
+    public void setSourceType(String sourceType) { this.sourceType = sourceType; }
137
+
138
+    public String getSourceLedger() { return sourceLedger; }
139
+    public void setSourceLedger(String sourceLedger) { this.sourceLedger = sourceLedger; }
140
+
141
+    public String getImportBatch() { return importBatch; }
142
+    public void setImportBatch(String importBatch) { this.importBatch = importBatch; }
143
+
144
+    public String getEvidenceFile() { return evidenceFile; }
145
+    public void setEvidenceFile(String evidenceFile) { this.evidenceFile = evidenceFile; }
146
+}

+ 94 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/ScoreIndicator.java

@@ -0,0 +1,94 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.List;
5
+
6
+import com.baomidou.mybatisplus.annotation.IdType;
7
+import com.baomidou.mybatisplus.annotation.TableField;
8
+import com.baomidou.mybatisplus.annotation.TableId;
9
+import com.baomidou.mybatisplus.annotation.TableName;
10
+import com.sundot.airport.common.annotation.Excel;
11
+import com.sundot.airport.common.core.domain.BaseEntity;
12
+
13
+/**
14
+ * 评分指标(二/三/四级)score_indicator
15
+ */
16
+@TableName("score_indicator")
17
+public class ScoreIndicator extends BaseEntity {
18
+    private static final long serialVersionUID = 1L;
19
+
20
+    @TableId(type = IdType.AUTO)
21
+    private Long id;
22
+
23
+    @Excel(name = "维度ID")
24
+    private Long dimensionId;
25
+
26
+    /** 父级指标ID,0=直属维度下(二级指标) */
27
+    private Long parentId;
28
+
29
+    @Excel(name = "层级(2/3/4)")
30
+    private Integer level;
31
+
32
+    @Excel(name = "指标名称")
33
+    private String name;
34
+
35
+    /** 类型:1=加分 2=扣分 3=纯记录 */
36
+    @Excel(name = "类型", readConverterExp = "1=加分,2=扣分,3=纯记录")
37
+    private String type;
38
+
39
+    @Excel(name = "分值")
40
+    private BigDecimal scoreValue;
41
+
42
+    @Excel(name = "叠加规则")
43
+    private String cascadeRule;
44
+
45
+    @Excel(name = "排序")
46
+    private Integer sortOrder;
47
+
48
+    @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
49
+    private String status;
50
+
51
+    /** 子节点,不存入DB,用于树形渲染 */
52
+    @TableField(exist = false)
53
+    private List<ScoreIndicator> children;
54
+
55
+    /** 维度名称,查询用(不存DB) */
56
+    @TableField(exist = false)
57
+    private String dimensionName;
58
+
59
+    public Long getId() { return id; }
60
+    public void setId(Long id) { this.id = id; }
61
+
62
+    public Long getDimensionId() { return dimensionId; }
63
+    public void setDimensionId(Long dimensionId) { this.dimensionId = dimensionId; }
64
+
65
+    public Long getParentId() { return parentId; }
66
+    public void setParentId(Long parentId) { this.parentId = parentId; }
67
+
68
+    public Integer getLevel() { return level; }
69
+    public void setLevel(Integer level) { this.level = level; }
70
+
71
+    public String getName() { return name; }
72
+    public void setName(String name) { this.name = name; }
73
+
74
+    public String getType() { return type; }
75
+    public void setType(String type) { this.type = type; }
76
+
77
+    public BigDecimal getScoreValue() { return scoreValue; }
78
+    public void setScoreValue(BigDecimal scoreValue) { this.scoreValue = scoreValue; }
79
+
80
+    public String getCascadeRule() { return cascadeRule; }
81
+    public void setCascadeRule(String cascadeRule) { this.cascadeRule = cascadeRule; }
82
+
83
+    public Integer getSortOrder() { return sortOrder; }
84
+    public void setSortOrder(Integer sortOrder) { this.sortOrder = sortOrder; }
85
+
86
+    public String getStatus() { return status; }
87
+    public void setStatus(String status) { this.status = status; }
88
+
89
+    public List<ScoreIndicator> getChildren() { return children; }
90
+    public void setChildren(List<ScoreIndicator> children) { this.children = children; }
91
+
92
+    public String getDimensionName() { return dimensionName; }
93
+    public void setDimensionName(String dimensionName) { this.dimensionName = dimensionName; }
94
+}

+ 71 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/ScorePushConfig.java

@@ -0,0 +1,71 @@
1
+package com.sundot.airport.ledger.domain;
2
+
3
+import java.math.BigDecimal;
4
+
5
+import com.baomidou.mybatisplus.annotation.IdType;
6
+import com.baomidou.mybatisplus.annotation.TableId;
7
+import com.baomidou.mybatisplus.annotation.TableName;
8
+import com.sundot.airport.common.annotation.Excel;
9
+import com.sundot.airport.common.core.domain.BaseEntity;
10
+
11
+/**
12
+ * 推送配置 score_push_config
13
+ */
14
+@TableName("score_push_config")
15
+public class ScorePushConfig extends BaseEntity {
16
+    private static final long serialVersionUID = 1L;
17
+
18
+    @TableId(type = IdType.AUTO)
19
+    private Long id;
20
+
21
+    @Excel(name = "维度ID")
22
+    private Long dimensionId;
23
+
24
+    @Excel(name = "维度名称")
25
+    private String dimensionName;
26
+
27
+    @Excel(name = "部门ID")
28
+    private Long deptId;
29
+
30
+    @Excel(name = "部门名称")
31
+    private String deptName;
32
+
33
+    @Excel(name = "预警阈值")
34
+    private BigDecimal warnThreshold;
35
+
36
+    /** 推送人员ID列表,逗号分隔 */
37
+    private String pushUserIds;
38
+
39
+    @Excel(name = "推送人员")
40
+    private String pushUserNames;
41
+
42
+    @Excel(name = "状态", readConverterExp = "0=启用,1=停用")
43
+    private String status;
44
+
45
+    public Long getId() { return id; }
46
+    public void setId(Long id) { this.id = id; }
47
+
48
+    public Long getDimensionId() { return dimensionId; }
49
+    public void setDimensionId(Long dimensionId) { this.dimensionId = dimensionId; }
50
+
51
+    public String getDimensionName() { return dimensionName; }
52
+    public void setDimensionName(String dimensionName) { this.dimensionName = dimensionName; }
53
+
54
+    public Long getDeptId() { return deptId; }
55
+    public void setDeptId(Long deptId) { this.deptId = deptId; }
56
+
57
+    public String getDeptName() { return deptName; }
58
+    public void setDeptName(String deptName) { this.deptName = deptName; }
59
+
60
+    public BigDecimal getWarnThreshold() { return warnThreshold; }
61
+    public void setWarnThreshold(BigDecimal warnThreshold) { this.warnThreshold = warnThreshold; }
62
+
63
+    public String getPushUserIds() { return pushUserIds; }
64
+    public void setPushUserIds(String pushUserIds) { this.pushUserIds = pushUserIds; }
65
+
66
+    public String getPushUserNames() { return pushUserNames; }
67
+    public void setPushUserNames(String pushUserNames) { this.pushUserNames = pushUserNames; }
68
+
69
+    public String getStatus() { return status; }
70
+    public void setStatus(String status) { this.status = status; }
71
+}

+ 69 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/vo/MemberScoreVO.java

@@ -0,0 +1,69 @@
1
+package com.sundot.airport.ledger.domain.vo;
2
+
3
+import java.math.BigDecimal;
4
+import java.util.List;
5
+
6
+/**
7
+ * 班组成员六维度评分 VO(用于雷达图大屏)
8
+ */
9
+public class MemberScoreVO {
10
+
11
+    /** 姓名 */
12
+    private String personName;
13
+
14
+    /** 班组 */
15
+    private String teamName;
16
+
17
+    /** 综合得分(加权汇总) */
18
+    private BigDecimal totalScore;
19
+
20
+    /** 六维度得分明细 */
21
+    private List<DimScore> dimensions;
22
+
23
+    public String getPersonName() { return personName; }
24
+    public void setPersonName(String personName) { this.personName = personName; }
25
+
26
+    public String getTeamName() { return teamName; }
27
+    public void setTeamName(String teamName) { this.teamName = teamName; }
28
+
29
+    public BigDecimal getTotalScore() { return totalScore; }
30
+    public void setTotalScore(BigDecimal totalScore) { this.totalScore = totalScore; }
31
+
32
+    public List<DimScore> getDimensions() { return dimensions; }
33
+    public void setDimensions(List<DimScore> dimensions) { this.dimensions = dimensions; }
34
+
35
+    // ── 内部类 ──────────────────────────────────────
36
+    public static class DimScore {
37
+        private Long dimensionId;
38
+        private String dimensionName;
39
+        private BigDecimal weight;
40
+        private BigDecimal baseScore;
41
+        /** 事件加减分合计(可正可负) */
42
+        private BigDecimal eventScore;
43
+        /** 最终维度得分 = baseScore + eventScore */
44
+        private BigDecimal score;
45
+        /** 加权贡献值 = score * weight / 100,用于雷达图显示 */
46
+        private BigDecimal contribution;
47
+
48
+        public Long getDimensionId() { return dimensionId; }
49
+        public void setDimensionId(Long dimensionId) { this.dimensionId = dimensionId; }
50
+
51
+        public String getDimensionName() { return dimensionName; }
52
+        public void setDimensionName(String dimensionName) { this.dimensionName = dimensionName; }
53
+
54
+        public BigDecimal getWeight() { return weight; }
55
+        public void setWeight(BigDecimal weight) { this.weight = weight; }
56
+
57
+        public BigDecimal getBaseScore() { return baseScore; }
58
+        public void setBaseScore(BigDecimal baseScore) { this.baseScore = baseScore; }
59
+
60
+        public BigDecimal getEventScore() { return eventScore; }
61
+        public void setEventScore(BigDecimal eventScore) { this.eventScore = eventScore; }
62
+
63
+        public BigDecimal getScore() { return score; }
64
+        public void setScore(BigDecimal score) { this.score = score; }
65
+
66
+        public BigDecimal getContribution() { return contribution; }
67
+        public void setContribution(BigDecimal contribution) { this.contribution = contribution; }
68
+    }
69
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerBannerLetterMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerBannerLetter;
6
+
7
+/**
8
+ * 锦旗及感谢信记录Mapper接口
9
+ */
10
+public interface LedgerBannerLetterMapper extends BaseMapper<LedgerBannerLetter> {
11
+    List<LedgerBannerLetter> selectList(LedgerBannerLetter query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerChannelPassRateMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerChannelPassRate;
6
+
7
+/**
8
+ * 通道过检率记录Mapper接口
9
+ */
10
+public interface LedgerChannelPassRateMapper extends BaseMapper<LedgerChannelPassRate> {
11
+    List<LedgerChannelPassRate> selectList(LedgerChannelPassRate query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerComplaintMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerComplaint;
6
+
7
+/**
8
+ * 投诉情况记录Mapper接口
9
+ */
10
+public interface LedgerComplaintMapper extends BaseMapper<LedgerComplaint> {
11
+    List<LedgerComplaint> selectList(LedgerComplaint query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerExamScoreMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerExamScore;
6
+
7
+/**
8
+ * 成绩收集Mapper接口
9
+ */
10
+public interface LedgerExamScoreMapper extends BaseMapper<LedgerExamScore> {
11
+    List<LedgerExamScore> selectList(LedgerExamScore query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerLeaveSpecialMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerLeaveSpecial;
6
+
7
+/**
8
+ * 请休假记录(特殊)Mapper接口
9
+ */
10
+public interface LedgerLeaveSpecialMapper extends BaseMapper<LedgerLeaveSpecial> {
11
+    List<LedgerLeaveSpecial> selectList(LedgerLeaveSpecial query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerPatrolInspectionMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerPatrolInspection;
6
+
7
+/**
8
+ * 队室三级质控巡查记录Mapper接口
9
+ */
10
+public interface LedgerPatrolInspectionMapper extends BaseMapper<LedgerPatrolInspection> {
11
+    List<LedgerPatrolInspection> selectList(LedgerPatrolInspection query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerRealtimeInterceptionMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerRealtimeInterception;
6
+
7
+/**
8
+ * 部门实时质控拦截记录Mapper接口
9
+ */
10
+public interface LedgerRealtimeInterceptionMapper extends BaseMapper<LedgerRealtimeInterception> {
11
+    List<LedgerRealtimeInterception> selectList(LedgerRealtimeInterception query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerRewardApprovalMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerRewardApproval;
6
+
7
+/**
8
+ * 小额奖励审批单Mapper接口
9
+ */
10
+public interface LedgerRewardApprovalMapper extends BaseMapper<LedgerRewardApproval> {
11
+    List<LedgerRewardApproval> selectList(LedgerRewardApproval query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerRewardPenaltyMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerRewardPenalty;
6
+
7
+/**
8
+ * 部门奖惩记录Mapper接口
9
+ */
10
+public interface LedgerRewardPenaltyMapper extends BaseMapper<LedgerRewardPenalty> {
11
+    List<LedgerRewardPenalty> selectList(LedgerRewardPenalty query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerSecurityTestMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerSecurityTest;
6
+
7
+/**
8
+ * 安保测试记录Mapper接口
9
+ */
10
+public interface LedgerSecurityTestMapper extends BaseMapper<LedgerSecurityTest> {
11
+    List<LedgerSecurityTest> selectList(LedgerSecurityTest query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerSeizureStatsMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerSeizureStats;
6
+
7
+/**
8
+ * 查获违规品统计Mapper接口
9
+ */
10
+public interface LedgerSeizureStatsMapper extends BaseMapper<LedgerSeizureStats> {
11
+    List<LedgerSeizureStats> selectList(LedgerSeizureStats query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerServicePatrolMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerServicePatrol;
6
+
7
+/**
8
+ * 服务巡查记录Mapper接口
9
+ */
10
+public interface LedgerServicePatrolMapper extends BaseMapper<LedgerServicePatrol> {
11
+    List<LedgerServicePatrol> selectList(LedgerServicePatrol query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerSupervisionProblemMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerSupervisionProblem;
6
+
7
+/**
8
+ * 部门监察问题记录Mapper接口
9
+ */
10
+public interface LedgerSupervisionProblemMapper extends BaseMapper<LedgerSupervisionProblem> {
11
+    List<LedgerSupervisionProblem> selectList(LedgerSupervisionProblem query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerTerminalBonusMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerTerminalBonus;
6
+
7
+/**
8
+ * 航站楼加分记录Mapper接口
9
+ */
10
+public interface LedgerTerminalBonusMapper extends BaseMapper<LedgerTerminalBonus> {
11
+    List<LedgerTerminalBonus> selectList(LedgerTerminalBonus query);
12
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/LedgerUnsafeEventMapper.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5
+import com.sundot.airport.ledger.domain.LedgerUnsafeEvent;
6
+
7
+/**
8
+ * 不安全事件记录Mapper接口
9
+ */
10
+public interface LedgerUnsafeEventMapper extends BaseMapper<LedgerUnsafeEvent> {
11
+    List<LedgerUnsafeEvent> selectList(LedgerUnsafeEvent query);
12
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/ScoreDimensionMapper.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.sundot.airport.ledger.domain.ScoreDimension;
5
+
6
+import java.util.List;
7
+
8
+public interface ScoreDimensionMapper extends BaseMapper<ScoreDimension> {
9
+    List<ScoreDimension> selectList(ScoreDimension query);
10
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/ScoreEventMapper.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.sundot.airport.ledger.domain.ScoreEvent;
5
+
6
+import java.util.List;
7
+
8
+public interface ScoreEventMapper extends BaseMapper<ScoreEvent> {
9
+    List<ScoreEvent> selectList(ScoreEvent query);
10
+}

+ 11 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/ScoreIndicatorMapper.java

@@ -0,0 +1,11 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.sundot.airport.ledger.domain.ScoreIndicator;
5
+
6
+import java.util.List;
7
+
8
+public interface ScoreIndicatorMapper extends BaseMapper<ScoreIndicator> {
9
+    List<ScoreIndicator> selectList(ScoreIndicator query);
10
+    List<ScoreIndicator> selectByDimensionId(Long dimensionId);
11
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/ScorePushConfigMapper.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.mapper;
2
+
3
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
4
+import com.sundot.airport.ledger.domain.ScorePushConfig;
5
+
6
+import java.util.List;
7
+
8
+public interface ScorePushConfigMapper extends BaseMapper<ScorePushConfig> {
9
+    List<ScorePushConfig> selectList(ScorePushConfig query);
10
+}

+ 9 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerBannerLetterService.java

@@ -0,0 +1,9 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerBannerLetter;
6
+
7
+public interface ILedgerBannerLetterService extends IService<LedgerBannerLetter> {
8
+    List<LedgerBannerLetter> selectList(LedgerBannerLetter query);
9
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerChannelPassRateService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerChannelPassRate;
6
+
7
+public interface ILedgerChannelPassRateService extends IService<LedgerChannelPassRate> {
8
+    List<LedgerChannelPassRate> selectList(LedgerChannelPassRate query);
9
+    int batchInsert(List<LedgerChannelPassRate> list);
10
+}

+ 22 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerCombinedImportService.java

@@ -0,0 +1,22 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import org.springframework.web.multipart.MultipartFile;
4
+
5
+import java.util.Map;
6
+
7
+/**
8
+ * 台账合并Excel一键全量导入服务
9
+ * 支持 旅检三部"三三"数字管理平台.xlsx(15个Sheet)
10
+ */
11
+public interface ILedgerCombinedImportService {
12
+
13
+    /**
14
+     * 解析多Sheet Excel,按Sheet名分发到对应台账表
15
+     *
16
+     * @param file     上传的Excel文件
17
+     * @param batchNo  本次导入批次号
18
+     * @param username 操作人
19
+     * @return Map<Sheet名, 导入结果描述>
20
+     */
21
+    Map<String, String> importAll(MultipartFile file, String batchNo, String username) throws Exception;
22
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerComplaintService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerComplaint;
6
+
7
+public interface ILedgerComplaintService extends IService<LedgerComplaint> {
8
+    List<LedgerComplaint> selectList(LedgerComplaint query);
9
+    int batchInsert(List<LedgerComplaint> list);
10
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerExamScoreService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerExamScore;
6
+
7
+public interface ILedgerExamScoreService extends IService<LedgerExamScore> {
8
+    List<LedgerExamScore> selectList(LedgerExamScore query);
9
+    int batchInsert(List<LedgerExamScore> list);
10
+}

+ 9 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerLeaveSpecialService.java

@@ -0,0 +1,9 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerLeaveSpecial;
6
+
7
+public interface ILedgerLeaveSpecialService extends IService<LedgerLeaveSpecial> {
8
+    List<LedgerLeaveSpecial> selectList(LedgerLeaveSpecial query);
9
+}

+ 13 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerPatrolInspectionService.java

@@ -0,0 +1,13 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerPatrolInspection;
6
+
7
+/**
8
+ * 队室三级质控巡查记录Service接口
9
+ */
10
+public interface ILedgerPatrolInspectionService extends IService<LedgerPatrolInspection> {
11
+    List<LedgerPatrolInspection> selectList(LedgerPatrolInspection query);
12
+    int batchInsert(List<LedgerPatrolInspection> list);
13
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerRealtimeInterceptionService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerRealtimeInterception;
6
+
7
+public interface ILedgerRealtimeInterceptionService extends IService<LedgerRealtimeInterception> {
8
+    List<LedgerRealtimeInterception> selectList(LedgerRealtimeInterception query);
9
+    int batchInsert(List<LedgerRealtimeInterception> list);
10
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerRewardApprovalService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerRewardApproval;
6
+
7
+public interface ILedgerRewardApprovalService extends IService<LedgerRewardApproval> {
8
+    List<LedgerRewardApproval> selectList(LedgerRewardApproval query);
9
+    int batchInsert(List<LedgerRewardApproval> list);
10
+}

+ 9 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerRewardPenaltyService.java

@@ -0,0 +1,9 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerRewardPenalty;
6
+
7
+public interface ILedgerRewardPenaltyService extends IService<LedgerRewardPenalty> {
8
+    List<LedgerRewardPenalty> selectList(LedgerRewardPenalty query);
9
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerSecurityTestService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerSecurityTest;
6
+
7
+public interface ILedgerSecurityTestService extends IService<LedgerSecurityTest> {
8
+    List<LedgerSecurityTest> selectList(LedgerSecurityTest query);
9
+    int batchInsert(List<LedgerSecurityTest> list);
10
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerSeizureStatsService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerSeizureStats;
6
+
7
+public interface ILedgerSeizureStatsService extends IService<LedgerSeizureStats> {
8
+    List<LedgerSeizureStats> selectList(LedgerSeizureStats query);
9
+    int batchInsert(List<LedgerSeizureStats> list);
10
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerServicePatrolService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerServicePatrol;
6
+
7
+public interface ILedgerServicePatrolService extends IService<LedgerServicePatrol> {
8
+    List<LedgerServicePatrol> selectList(LedgerServicePatrol query);
9
+    int batchInsert(List<LedgerServicePatrol> list);
10
+}

+ 13 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerSupervisionProblemService.java

@@ -0,0 +1,13 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerSupervisionProblem;
6
+
7
+/**
8
+ * 部门监察问题记录Service接口
9
+ */
10
+public interface ILedgerSupervisionProblemService extends IService<LedgerSupervisionProblem> {
11
+    List<LedgerSupervisionProblem> selectList(LedgerSupervisionProblem query);
12
+    int batchInsert(List<LedgerSupervisionProblem> list);
13
+}

+ 29 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerSyncService.java

@@ -0,0 +1,29 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+/**
4
+ * 台账 → score_event 同步服务
5
+ */
6
+public interface ILedgerSyncService {
7
+
8
+    /** 全量同步所有台账(手动触发 / 定时任务调用) */
9
+    SyncResult syncAll();
10
+
11
+    /** 按台账类型同步(支持单表重跑) */
12
+    SyncResult syncByType(String ledgerType);
13
+
14
+    /** 同步结果 */
15
+    class SyncResult {
16
+        private int totalInserted;
17
+        private int totalSkipped;
18
+        private String detail;
19
+
20
+        public SyncResult(int inserted, int skipped, String detail) {
21
+            this.totalInserted = inserted;
22
+            this.totalSkipped = skipped;
23
+            this.detail = detail;
24
+        }
25
+        public int getTotalInserted() { return totalInserted; }
26
+        public int getTotalSkipped() { return totalSkipped; }
27
+        public String getDetail() { return detail; }
28
+    }
29
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerTerminalBonusService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerTerminalBonus;
6
+
7
+public interface ILedgerTerminalBonusService extends IService<LedgerTerminalBonus> {
8
+    List<LedgerTerminalBonus> selectList(LedgerTerminalBonus query);
9
+    int batchInsert(List<LedgerTerminalBonus> list);
10
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerUnsafeEventService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.IService;
5
+import com.sundot.airport.ledger.domain.LedgerUnsafeEvent;
6
+
7
+public interface ILedgerUnsafeEventService extends IService<LedgerUnsafeEvent> {
8
+    List<LedgerUnsafeEvent> selectList(LedgerUnsafeEvent query);
9
+    int batchInsert(List<LedgerUnsafeEvent> list);
10
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScoreDimensionService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.sundot.airport.ledger.domain.ScoreDimension;
5
+
6
+import java.util.List;
7
+
8
+public interface IScoreDimensionService extends IService<ScoreDimension> {
9
+    List<ScoreDimension> selectList(ScoreDimension query);
10
+}

+ 11 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScoreEventService.java

@@ -0,0 +1,11 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.sundot.airport.ledger.domain.ScoreEvent;
5
+
6
+import java.util.List;
7
+
8
+public interface IScoreEventService extends IService<ScoreEvent> {
9
+    List<ScoreEvent> selectList(ScoreEvent query);
10
+    int batchInsert(List<ScoreEvent> list);
11
+}

+ 12 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScoreIndicatorService.java

@@ -0,0 +1,12 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.sundot.airport.ledger.domain.ScoreIndicator;
5
+
6
+import java.util.List;
7
+
8
+public interface IScoreIndicatorService extends IService<ScoreIndicator> {
9
+    List<ScoreIndicator> selectList(ScoreIndicator query);
10
+    /** 返回指定维度下的指标树(带 children 嵌套) */
11
+    List<ScoreIndicator> selectTree(Long dimensionId);
12
+}

+ 10 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScorePushConfigService.java

@@ -0,0 +1,10 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import com.baomidou.mybatisplus.extension.service.IService;
4
+import com.sundot.airport.ledger.domain.ScorePushConfig;
5
+
6
+import java.util.List;
7
+
8
+public interface IScorePushConfigService extends IService<ScorePushConfig> {
9
+    List<ScorePushConfig> selectList(ScorePushConfig query);
10
+}

+ 17 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScoreRadarService.java

@@ -0,0 +1,17 @@
1
+package com.sundot.airport.ledger.service;
2
+
3
+import com.sundot.airport.ledger.domain.vo.MemberScoreVO;
4
+
5
+import java.util.List;
6
+
7
+/**
8
+ * 雷达图大屏服务
9
+ */
10
+public interface IScoreRadarService {
11
+
12
+    /** 获取所有班组名称列表 */
13
+    List<String> selectTeamList();
14
+
15
+    /** 获取指定班组所有成员的六维度得分,按综合得分降序 */
16
+    List<MemberScoreVO> selectMemberScores(String teamName);
17
+}

+ 28 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerBannerLetterServiceImpl.java

@@ -0,0 +1,28 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerBannerLetter;
7
+import com.sundot.airport.ledger.mapper.LedgerBannerLetterMapper;
8
+import com.sundot.airport.ledger.service.ILedgerBannerLetterService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+
12
+
13
+/**
14
+ * 锦旗及感谢信记录Service实现
15
+ */
16
+@Service
17
+public class LedgerBannerLetterServiceImpl extends ServiceImpl<LedgerBannerLetterMapper, LedgerBannerLetter>
18
+        implements ILedgerBannerLetterService {
19
+
20
+    @Autowired
21
+    private LedgerBannerLetterMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerBannerLetter> selectList(LedgerBannerLetter query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+}

+ 35 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerChannelPassRateServiceImpl.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerChannelPassRate;
7
+import com.sundot.airport.ledger.mapper.LedgerChannelPassRateMapper;
8
+import com.sundot.airport.ledger.service.ILedgerChannelPassRateService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+/**
14
+ * 通道过检率记录Service实现
15
+ */
16
+@Service
17
+public class LedgerChannelPassRateServiceImpl extends ServiceImpl<LedgerChannelPassRateMapper, LedgerChannelPassRate>
18
+        implements ILedgerChannelPassRateService {
19
+
20
+    @Autowired
21
+    private LedgerChannelPassRateMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerChannelPassRate> selectList(LedgerChannelPassRate query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+    @Override
29
+    @Transactional(rollbackFor = Exception.class)
30
+    public int batchInsert(List<LedgerChannelPassRate> list) {
31
+        list.forEach(item -> item.setCreateTime(DateUtils.getNowDate()));
32
+        saveBatch(list);
33
+        return list.size();
34
+    }
35
+}

+ 617 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerCombinedImportServiceImpl.java

@@ -0,0 +1,617 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import com.sundot.airport.ledger.domain.*;
4
+import com.sundot.airport.ledger.service.*;
5
+import org.apache.poi.ss.usermodel.*;
6
+import org.springframework.beans.factory.annotation.Autowired;
7
+import org.springframework.stereotype.Service;
8
+import org.springframework.transaction.annotation.Transactional;
9
+import org.springframework.web.multipart.MultipartFile;
10
+
11
+import java.math.BigDecimal;
12
+import java.text.SimpleDateFormat;
13
+import java.util.*;
14
+import java.util.regex.Matcher;
15
+import java.util.regex.Pattern;
16
+
17
+/**
18
+ * 台账合并Excel一键全量导入实现
19
+ * 列索引映射完全复刻 excel_to_sql.py 逻辑
20
+ */
21
+@Service
22
+public class LedgerCombinedImportServiceImpl implements ILedgerCombinedImportService {
23
+
24
+    @Autowired private ILedgerSupervisionProblemService supervisionProblemService;
25
+    @Autowired private ILedgerPatrolInspectionService patrolInspectionService;
26
+    @Autowired private ILedgerRealtimeInterceptionService realtimeInterceptionService;
27
+    @Autowired private ILedgerServicePatrolService servicePatrolService;
28
+    @Autowired private ILedgerComplaintService complaintService;
29
+    @Autowired private ILedgerSecurityTestService securityTestService;
30
+    @Autowired private ILedgerChannelPassRateService channelPassRateService;
31
+    @Autowired private ILedgerUnsafeEventService unsafeEventService;
32
+    @Autowired private ILedgerSeizureStatsService seizureStatsService;
33
+    @Autowired private ILedgerTerminalBonusService terminalBonusService;
34
+    @Autowired private ILedgerExamScoreService examScoreService;
35
+    @Autowired private ILedgerRewardApprovalService rewardApprovalService;
36
+    @Autowired private ILedgerRewardPenaltyService rewardPenaltyService;
37
+    @Autowired private ILedgerLeaveSpecialService leaveSpecialService;
38
+    @Autowired private ILedgerBannerLetterService bannerLetterService;
39
+
40
+    // ── Sheet 名称 → 处理方法路由表 ──────────────────────────────────
41
+    private static final Map<String, String> SHEET_ROUTE = new LinkedHashMap<>();
42
+    static {
43
+        SHEET_ROUTE.put("部门监察问题记录表",        "supervisionProblem");
44
+        SHEET_ROUTE.put("队室三级质控巡查记录表",     "patrolInspection");
45
+        SHEET_ROUTE.put("部门实时质控拦截情况记录表", "realtimeInterception");
46
+        SHEET_ROUTE.put("服务巡查",                  "servicePatrol");
47
+        SHEET_ROUTE.put("投诉情况",                  "complaint");
48
+        SHEET_ROUTE.put("安保测试记录表(部门)",      "securityTest");
49
+        SHEET_ROUTE.put("通道过检率",                "channelPassRate");
50
+        SHEET_ROUTE.put("不安全事件",                "unsafeEvent");
51
+        SHEET_ROUTE.put("2026查获违规品统计",        "seizureStats");
52
+        SHEET_ROUTE.put("航站楼加分",               "terminalBonus");
53
+        SHEET_ROUTE.put("成绩收集",                 "examScore");
54
+        SHEET_ROUTE.put("小额奖励审批单-安检-质控",   "rewardApproval");
55
+        SHEET_ROUTE.put("部门奖惩记录表",            "rewardPenalty");
56
+        SHEET_ROUTE.put("请、休假记录表(特殊)",     "leaveSpecial");
57
+        SHEET_ROUTE.put("锦旗及感谢信",              "bannerLetter");
58
+    }
59
+
60
+    private final DataFormatter formatter = new DataFormatter();
61
+
62
+    // ════════════════════════════════════════════════════════════════
63
+    //  入口
64
+    // ════════════════════════════════════════════════════════════════
65
+
66
+    @Override
67
+    @Transactional(rollbackFor = Exception.class)
68
+    public Map<String, String> importAll(MultipartFile file, String batchNo, String username) throws Exception {
69
+        Map<String, String> result = new LinkedHashMap<>();
70
+        try (Workbook wb = WorkbookFactory.create(file.getInputStream())) {
71
+            for (Map.Entry<String, String> entry : SHEET_ROUTE.entrySet()) {
72
+                String sheetName = entry.getKey();
73
+                String handler   = entry.getValue();
74
+                Sheet sheet = wb.getSheet(sheetName);
75
+                if (sheet == null) {
76
+                    result.put(sheetName, "未找到该Sheet,跳过");
77
+                    continue;
78
+                }
79
+                try {
80
+                    int count = dispatch(sheet, handler, batchNo, username);
81
+                    result.put(sheetName, "导入 " + count + " 条");
82
+                } catch (Exception e) {
83
+                    result.put(sheetName, "错误: " + e.getMessage());
84
+                }
85
+            }
86
+        }
87
+        return result;
88
+    }
89
+
90
+    private int dispatch(Sheet sheet, String handler, String batchNo, String username) {
91
+        switch (handler) {
92
+            case "supervisionProblem":    return doSupervisionProblem(sheet, batchNo, username);
93
+            case "patrolInspection":      return doPatrolInspection(sheet, batchNo, username);
94
+            case "realtimeInterception":  return doRealtimeInterception(sheet, batchNo, username);
95
+            case "servicePatrol":         return doServicePatrol(sheet, batchNo, username);
96
+            case "complaint":             return doComplaint(sheet, batchNo, username);
97
+            case "securityTest":          return doSecurityTest(sheet, batchNo, username);
98
+            case "channelPassRate":       return doChannelPassRate(sheet, batchNo, username);
99
+            case "unsafeEvent":           return doUnsafeEvent(sheet, batchNo, username);
100
+            case "seizureStats":          return doSeizureStats(sheet, batchNo, username);
101
+            case "terminalBonus":         return doTerminalBonus(sheet, batchNo, username);
102
+            case "examScore":             return doExamScore(sheet, batchNo, username);
103
+            case "rewardApproval":        return doRewardApproval(sheet, batchNo, username);
104
+            case "rewardPenalty":         return doRewardPenalty(sheet, username);
105
+            case "leaveSpecial":          return doLeaveSpecial(sheet, username);
106
+            case "bannerLetter":          return doBannerLetter(sheet, username);
107
+            default: return 0;
108
+        }
109
+    }
110
+
111
+    // ════════════════════════════════════════════════════════════════
112
+    //  各 Sheet 处理方法
113
+    // ════════════════════════════════════════════════════════════════
114
+
115
+    /** 1. 部门监察问题记录表 → ledger_supervision_problem
116
+     * R2: 时间(0) 区域(1) 工作点(2) 岗位(3) 责任人(4) 问题描述(5)
117
+     *     问题类型(6) 整改措施(7) 依据(8) 问题层级(9) 班组(10)
118
+     *     队室质控员(11) ... 附件(13)
119
+     */
120
+    private int doSupervisionProblem(Sheet sheet, String batchNo, String username) {
121
+        List<LedgerSupervisionProblem> list = new ArrayList<>();
122
+        for (Object[] c : dataRows(sheet, 2)) {
123
+            LedgerSupervisionProblem o = new LedgerSupervisionProblem();
124
+            o.setRecordDate(date(c, 0));
125
+            o.setLocation(str(c, 1));
126
+            o.setChannelNo(str(c, 2));
127
+            o.setInspectedName(str(c, 4));
128
+            o.setProblemDesc(str(c, 5));
129
+            o.setProblemType(str(c, 6));
130
+            o.setResultHandling(str(c, 7));
131
+            o.setRemark(str(c, 8));
132
+            o.setTeamName(str(c, 10));
133
+            o.setInspectorName(str(c, 11));
134
+            o.setEvidenceFile(str(c, 13));
135
+            o.setImportBatch(batchNo);
136
+            o.setSourceType("1");
137
+            o.setCreateBy(username);
138
+            list.add(o);
139
+        }
140
+        supervisionProblemService.batchInsert(list);
141
+        return list.size();
142
+    }
143
+
144
+    /** 2. 队室三级质控巡查记录表 → ledger_patrol_inspection
145
+     * R2: 巡查日期(0) 区域(1) 工作点(2) 时间段(3) 巡查岗位(4)
146
+     *     被检查人员(5) 有无问题(6) 检查情况描述(7) 类型(8) 整改措施(9)
147
+     *     附件(10) 整改情况(11) 佐证材料(12) 班组(13) 责任组长(14)
148
+     */
149
+    private int doPatrolInspection(Sheet sheet, String batchNo, String username) {
150
+        List<LedgerPatrolInspection> list = new ArrayList<>();
151
+        for (Object[] c : dataRows(sheet, 2)) {
152
+            LedgerPatrolInspection o = new LedgerPatrolInspection();
153
+            o.setRecordDate(date(c, 0));
154
+            o.setLocation(str(c, 1));
155
+            o.setChannelNo(str(c, 2));
156
+            o.setInspectedName(str(c, 5));
157
+            o.setPatrolType(str(c, 8));
158
+            o.setPatrolItem(str(c, 4));
159
+            o.setProblemDesc(str(c, 7));
160
+            o.setResultHandling(str(c, 9));
161
+            o.setEvidenceFile(str(c, 10));
162
+            o.setTeamName(str(c, 13));
163
+            o.setInspectorName(str(c, 14));
164
+            o.setImportBatch(batchNo);
165
+            o.setSourceType("1");
166
+            o.setCreateBy(username);
167
+            list.add(o);
168
+        }
169
+        patrolInspectionService.batchInsert(list);
170
+        return list.size();
171
+    }
172
+
173
+    /** 3. 部门实时质控拦截情况记录表 → ledger_realtime_interception
174
+     * R2: 时间(0) 区域(1) 工作点(2) 岗位(3) 责任人(4) 拦截物品(5)
175
+     *     个数(6) 问题类型(7) 整改措施(8) 问题层级(9) 班组(10)
176
+     *     附件(11) 问题类别(12)
177
+     */
178
+    private int doRealtimeInterception(Sheet sheet, String batchNo, String username) {
179
+        List<LedgerRealtimeInterception> list = new ArrayList<>();
180
+        for (Object[] c : dataRows(sheet, 2)) {
181
+            LedgerRealtimeInterception o = new LedgerRealtimeInterception();
182
+            o.setRecordDate(date(c, 0));
183
+            o.setRecordTime(timeStr(c, 0));
184
+            o.setChannelNo(str(c, 2));
185
+            o.setInspectorName(str(c, 4));
186
+            o.setItemName(str(c, 5));
187
+            o.setItemQuantity(integer(c, 6));
188
+            o.setItemCategory(str(c, 7));
189
+            o.setHandlingMethod(str(c, 8));
190
+            o.setTeamName(str(c, 10));
191
+            o.setEvidenceFile(str(c, 11));
192
+            o.setRemark(str(c, 12));
193
+            o.setImportBatch(batchNo);
194
+            o.setSourceType("1");
195
+            o.setCreateBy(username);
196
+            list.add(o);
197
+        }
198
+        realtimeInterceptionService.batchInsert(list);
199
+        return list.size();
200
+    }
201
+
202
+    /** 4. 服务巡查 → ledger_service_patrol
203
+     * R2: 时间(0) 区域(1) 工作点(2) 岗位(3) 责任人(4) 问题描述(5)
204
+     *     问题类型(6) 整改措施(7) 班组(8) ... 附件(12) ... 检查人员(17)
205
+     */
206
+    private int doServicePatrol(Sheet sheet, String batchNo, String username) {
207
+        List<LedgerServicePatrol> list = new ArrayList<>();
208
+        for (Object[] c : dataRows(sheet, 2)) {
209
+            LedgerServicePatrol o = new LedgerServicePatrol();
210
+            o.setRecordDate(date(c, 0));
211
+            o.setLocation(str(c, 1));
212
+            o.setInspectedName(str(c, 4));
213
+            o.setProblemDesc(str(c, 5));
214
+            o.setServiceType(str(c, 6));
215
+            o.setResultHandling(str(c, 7));
216
+            o.setTeamName(str(c, 8));
217
+            o.setEvidenceFile(str(c, 12));
218
+            o.setInspectorName(str(c, 17));
219
+            o.setImportBatch(batchNo);
220
+            o.setSourceType("1");
221
+            o.setCreateBy(username);
222
+            list.add(o);
223
+        }
224
+        servicePatrolService.batchInsert(list);
225
+        return list.size();
226
+    }
227
+
228
+    /** 5. 投诉情况 → ledger_complaint
229
+     * R2: 时间(0) 航班号(1) 旅客姓名(2) 班组(3) 责任人(4)
230
+     *     投诉情况(5) 旅客诉求(6) 类别(7) 渠道来源(8) 是否有责(9)
231
+     *     处理进度(10)
232
+     */
233
+    private int doComplaint(Sheet sheet, String batchNo, String username) {
234
+        List<LedgerComplaint> list = new ArrayList<>();
235
+        for (Object[] c : dataRows(sheet, 2)) {
236
+            LedgerComplaint o = new LedgerComplaint();
237
+            o.setRecordDate(date(c, 0));
238
+            o.setFlightNo(str(c, 1));
239
+            o.setPassengerName(str(c, 2));
240
+            o.setTeamName(str(c, 3));
241
+            o.setResponsibleName(str(c, 4));
242
+            o.setComplaintDesc(str(c, 5));
243
+            o.setComplaintType(str(c, 7));
244
+            o.setResultHandling(str(c, 10));
245
+            o.setRemark(str(c, 8));
246
+            o.setImportBatch(batchNo);
247
+            o.setSourceType("1");
248
+            o.setCreateBy(username);
249
+            list.add(o);
250
+        }
251
+        complaintService.batchInsert(list);
252
+        return list.size();
253
+    }
254
+
255
+    /** 6. 安保测试记录表(部门)→ ledger_security_test
256
+     * R2: 时间(0) 区域→deptName(1) 通道→groupName(2) 测试项目(3) 被测人员(4) 被测岗位→testType(5)
257
+     *     测试物品→problemDesc(6) 图片→evidenceFile(7) 是否通过→testResult(8) 层级→scoreIndicator(9)
258
+     *     整改措施→resultHandling(10) 扣分(11) 整改材料→remark(12) 班组(13)
259
+     */
260
+    private int doSecurityTest(Sheet sheet, String batchNo, String username) {
261
+        List<LedgerSecurityTest> list = new ArrayList<>();
262
+        for (Object[] c : dataRows(sheet, 2)) {
263
+            LedgerSecurityTest o = new LedgerSecurityTest();
264
+            o.setRecordDate(date(c, 0));
265
+            o.setDeptName(str(c, 1));
266
+            o.setGroupName(str(c, 2));
267
+            o.setTestItem(str(c, 3));
268
+            o.setTestedName(str(c, 4));
269
+            o.setTestType(str(c, 5));
270
+            o.setProblemDesc(str(c, 6));
271
+            o.setEvidenceFile(str(c, 7));
272
+            o.setTestResult(str(c, 8));
273
+            o.setScoreIndicator(str(c, 9));
274
+            o.setResultHandling(str(c, 10));
275
+            o.setDeductScore(decimal(c, 11));
276
+            o.setRemark(str(c, 12));
277
+            o.setTeamName(str(c, 13));
278
+            o.setImportBatch(batchNo);
279
+            o.setSourceType("1");
280
+            o.setCreateBy(username);
281
+            list.add(o);
282
+        }
283
+        securityTestService.batchInsert(list);
284
+        return list.size();
285
+    }
286
+
287
+    /** 7. 通道过检率(pivot表)→ ledger_channel_pass_rate
288
+     * R1: 大标题行
289
+     * R2: 组长(0) 班组(1) 内勤(2) 2026年1月平均过检率(3) 2026年2月...(4) ...
290
+     * 每行展开为多条(每月一条)
291
+     */
292
+    private int doChannelPassRate(Sheet sheet, String batchNo, String username) {
293
+        // 读第2行表头(POI 0-indexed = row index 1)
294
+        Row headerRow = sheet.getRow(1);
295
+        if (headerRow == null) return 0;
296
+
297
+        // 找月份列(从列3开始)
298
+        List<int[]> monthCols = new ArrayList<>(); // [colIndex, parsedDateMs]
299
+        Pattern p = Pattern.compile("(\\d{4})年(\\d{1,2})月");
300
+        for (int ci = 3; ci <= headerRow.getLastCellNum(); ci++) {
301
+            Cell cell = headerRow.getCell(ci);
302
+            if (cell == null) continue;
303
+            String label = formatter.formatCellValue(cell).trim();
304
+            Matcher m = p.matcher(label);
305
+            if (m.find()) {
306
+                int year  = Integer.parseInt(m.group(1));
307
+                int month = Integer.parseInt(m.group(2));
308
+                Calendar cal = Calendar.getInstance();
309
+                cal.set(year, month - 1, 1, 0, 0, 0);
310
+                cal.set(Calendar.MILLISECOND, 0);
311
+                monthCols.add(new int[]{ci, (int)(cal.getTimeInMillis() / 1000)});
312
+            }
313
+        }
314
+
315
+        List<LedgerChannelPassRate> list = new ArrayList<>();
316
+        for (Object[] c : dataRows(sheet, 2)) {
317
+            String teamName = str(c, 1);
318
+            for (int[] mc : monthCols) {
319
+                int ci = mc[0];
320
+                BigDecimal rate = decimal(c, ci);
321
+                if (rate == null) continue;
322
+                LedgerChannelPassRate o = new LedgerChannelPassRate();
323
+                o.setTeamName(teamName);
324
+                o.setPassRate(rate);
325
+                // 用时间戳还原日期
326
+                Calendar cal = Calendar.getInstance();
327
+                cal.setTimeInMillis((long) mc[1] * 1000);
328
+                o.setRecordDate(cal.getTime());
329
+                o.setImportBatch(batchNo);
330
+                o.setSourceType("1");
331
+                o.setCreateBy(username);
332
+                list.add(o);
333
+            }
334
+        }
335
+        channelPassRateService.batchInsert(list);
336
+        return list.size();
337
+    }
338
+
339
+    /** 8. 不安全事件 → ledger_unsafe_event
340
+     * R2: 时间(0) 事件描述(1) 类别(2) 航班号(3) 责任人(4)
341
+     *     涉及班组(5) 涉及物品(6) 岗位(7) 区域(8) 通道号(9) 图像(10)
342
+     */
343
+    private int doUnsafeEvent(Sheet sheet, String batchNo, String username) {
344
+        List<LedgerUnsafeEvent> list = new ArrayList<>();
345
+        for (Object[] c : dataRows(sheet, 2)) {
346
+            LedgerUnsafeEvent o = new LedgerUnsafeEvent();
347
+            o.setRecordDate(date(c, 0));
348
+            o.setEventDesc(str(c, 1));
349
+            o.setEventType(str(c, 2));
350
+            o.setResponsibleName(str(c, 4));
351
+            o.setTeamName(str(c, 5));
352
+            o.setEvidenceFile(str(c, 10));
353
+            o.setRemark(str(c, 8));
354
+            o.setImportBatch(batchNo);
355
+            o.setSourceType("1");
356
+            o.setCreateBy(username);
357
+            list.add(o);
358
+        }
359
+        unsafeEventService.batchInsert(list);
360
+        return list.size();
361
+    }
362
+
363
+    /** 9. 2026查获违规品统计 → ledger_seizure_stats
364
+     * R2: 查获时间(0) ...(1,2) 部门/队室(3) 区域(4) 安检员(5) ...
365
+     *     航班号(8) ... 旅客姓名(12) ... 违规类别(16) 物品种类(17) ...(18) 数量(19)
366
+     */
367
+    private int doSeizureStats(Sheet sheet, String batchNo, String username) {
368
+        List<LedgerSeizureStats> list = new ArrayList<>();
369
+        for (Object[] c : dataRows(sheet, 2)) {
370
+            LedgerSeizureStats o = new LedgerSeizureStats();
371
+            o.setRecordDate(date(c, 0));
372
+            o.setTeamName(str(c, 3));
373
+            o.setInspectorName(str(c, 5));
374
+            o.setFlightNo(str(c, 8));
375
+            o.setPassengerName(str(c, 12));
376
+            o.setItemCategory(str(c, 16));
377
+            o.setItemName(str(c, 17));
378
+            o.setItemQuantity(integer(c, 19));
379
+            o.setImportBatch(batchNo);
380
+            o.setSourceType("1");
381
+            o.setCreateBy(username);
382
+            list.add(o);
383
+        }
384
+        seizureStatsService.batchInsert(list);
385
+        return list.size();
386
+    }
387
+
388
+    /** 10. 航站楼加分 → ledger_terminal_bonus
389
+     * R2: 审核日期(0) 姓名(1) 班组(2) 加分分数(3) 队室内勤(4)
390
+     */
391
+    private int doTerminalBonus(Sheet sheet, String batchNo, String username) {
392
+        List<LedgerTerminalBonus> list = new ArrayList<>();
393
+        for (Object[] c : dataRows(sheet, 2)) {
394
+            LedgerTerminalBonus o = new LedgerTerminalBonus();
395
+            o.setApproveDate(date(c, 0) != null ? new java.sql.Date(date(c, 0).getTime()) : null);
396
+            o.setPersonName(str(c, 1));
397
+            o.setTeamName(str(c, 2));
398
+            o.setAddScore(decimal(c, 3) != null ? decimal(c, 3) : BigDecimal.ZERO);
399
+            o.setRemark(str(c, 4));
400
+            o.setImportBatch(batchNo);
401
+            o.setSourceType("1");
402
+            o.setCreateBy(username);
403
+            list.add(o);
404
+        }
405
+        terminalBonusService.batchInsert(list);
406
+        return list.size();
407
+    }
408
+
409
+    /** 11. 成绩收集 → ledger_exam_score
410
+     * R2: 类别(0) 期数(1) 考试人员(2) 理论成绩(3) 图像成绩(4) 班组(5) 分类(6) 备注(7)
411
+     */
412
+    private int doExamScore(Sheet sheet, String batchNo, String username) {
413
+        List<LedgerExamScore> list = new ArrayList<>();
414
+        for (Object[] c : dataRows(sheet, 2)) {
415
+            LedgerExamScore o = new LedgerExamScore();
416
+            o.setExamCategory(str(c, 0));
417
+            o.setExamPeriod(str(c, 1));
418
+            o.setPersonName(str(c, 2));
419
+            o.setScore(decimal(c, 3));
420
+            o.setTeamName(str(c, 5));
421
+            o.setRemark(str(c, 7));
422
+            o.setImportBatch(batchNo);
423
+            o.setSourceType("1");
424
+            o.setCreateBy(username);
425
+            list.add(o);
426
+        }
427
+        examScoreService.batchInsert(list);
428
+        return list.size();
429
+    }
430
+
431
+    /** 12. 小额奖励审批单-安检-质控 → ledger_reward_approval
432
+     * 特殊:只有1行表头(headerRow=1)
433
+     * R1: 员工编码(0) 姓名(1) 查获时间(2) 奖励类别(3) 查获物品(4)
434
+     *     类别(5) 奖励事由(6) 人员类别(7) 主要事由简述(8)
435
+     */
436
+    private int doRewardApproval(Sheet sheet, String batchNo, String username) {
437
+        List<LedgerRewardApproval> list = new ArrayList<>();
438
+        for (Object[] c : dataRows(sheet, 1)) {  // 只跳1行表头
439
+            LedgerRewardApproval o = new LedgerRewardApproval();
440
+            o.setApproveDate(date(c, 2) != null ? new java.sql.Date(date(c, 2).getTime()) : null);
441
+            o.setPersonName(str(c, 1));
442
+            o.setRewardType(str(c, 3));
443
+            o.setApprovalStatus("待审批");
444
+            o.setRemark(str(c, 8));
445
+            o.setImportBatch(batchNo);
446
+            o.setSourceType("1");
447
+            o.setCreateBy(username);
448
+            list.add(o);
449
+        }
450
+        rewardApprovalService.batchInsert(list);
451
+        return list.size();
452
+    }
453
+
454
+    /** 13. 部门奖惩记录表 → ledger_reward_penalty
455
+     * R2: 姓名(0) 班组(1) 事由(2) 扣罚金额(3) 最后更新时间(4)
456
+     */
457
+    private int doRewardPenalty(Sheet sheet, String username) {
458
+        List<LedgerRewardPenalty> list = new ArrayList<>();
459
+        for (Object[] c : dataRows(sheet, 2)) {
460
+            LedgerRewardPenalty o = new LedgerRewardPenalty();
461
+            o.setPersonName(str(c, 0));
462
+            o.setTeamName(str(c, 1));
463
+            o.setEventDesc(str(c, 2));
464
+            BigDecimal amt = decimal(c, 3);
465
+            o.setScoreChange(amt != null ? amt.negate() : null);
466
+            o.setType("2");  // 扣罚
467
+            o.setRecordDate(date(c, 4));
468
+            o.setCreateBy(username);
469
+            list.add(o);
470
+        }
471
+        rewardPenaltyService.saveBatch(list);
472
+        return list.size();
473
+    }
474
+
475
+    /** 14. 请、休假记录表(特殊)→ ledger_leave_special
476
+     * R2: 姓名(0) 班组(1) 时间(起)(2) 时间(止)(3) 休假类别(4) 天数/时长(5)
477
+     */
478
+    private int doLeaveSpecial(Sheet sheet, String username) {
479
+        List<LedgerLeaveSpecial> list = new ArrayList<>();
480
+        for (Object[] c : dataRows(sheet, 2)) {
481
+            LedgerLeaveSpecial o = new LedgerLeaveSpecial();
482
+            o.setPersonName(str(c, 0));
483
+            o.setTeamName(str(c, 1));
484
+            o.setLeaveType(str(c, 4));
485
+            o.setStartDate(date(c, 2));
486
+            o.setEndDate(date(c, 3));
487
+            o.setDays(decimal(c, 5));
488
+            o.setCreateBy(username);
489
+            list.add(o);
490
+        }
491
+        leaveSpecialService.saveBatch(list);
492
+        return list.size();
493
+    }
494
+
495
+    /** 15. 锦旗及感谢信 → ledger_banner_letter
496
+     * R2: 时间(0) 姓名(1) 内容(2) 类别(3) 图片附件(4) 班组(5) 队室内勤(6)
497
+     * 类别: 锦旗→'1', 其他→'2'
498
+     */
499
+    private int doBannerLetter(Sheet sheet, String username) {
500
+        List<LedgerBannerLetter> list = new ArrayList<>();
501
+        for (Object[] c : dataRows(sheet, 2)) {
502
+            LedgerBannerLetter o = new LedgerBannerLetter();
503
+            o.setRecordDate(date(c, 0));
504
+            o.setPersonName(str(c, 1));
505
+            o.setContentDesc(str(c, 2));
506
+            String typeStr = str(c, 3);
507
+            o.setType("锦旗".equals(typeStr) ? "1" : "2");
508
+            o.setEvidenceFile(str(c, 4));
509
+            o.setTeamName(str(c, 5));
510
+            o.setRemark(str(c, 6));
511
+            o.setCreateBy(username);
512
+            list.add(o);
513
+        }
514
+        bannerLetterService.saveBatch(list);
515
+        return list.size();
516
+    }
517
+
518
+    // ════════════════════════════════════════════════════════════════
519
+    //  POI 工具方法
520
+    // ════════════════════════════════════════════════════════════════
521
+
522
+    /**
523
+     * 读取数据行(跳过前 headerRows 行),忽略全空行
524
+     * 返回 Object[],每个元素是原始 Cell 值(已转 Java 类型)
525
+     */
526
+    private List<Object[]> dataRows(Sheet sheet, int headerRows) {
527
+        List<Object[]> result = new ArrayList<>();
528
+        int lastRow = sheet.getLastRowNum();
529
+        for (int r = headerRows; r <= lastRow; r++) {
530
+            Row row = sheet.getRow(r);
531
+            if (row == null) continue;
532
+            int lastCol = row.getLastCellNum();
533
+            if (lastCol < 0) continue;
534
+            Object[] cells = new Object[lastCol];
535
+            boolean allEmpty = true;
536
+            for (int ci = 0; ci < lastCol; ci++) {
537
+                Cell cell = row.getCell(ci);
538
+                Object val = rawValue(cell);
539
+                cells[ci] = val;
540
+                if (val != null) allEmpty = false;
541
+            }
542
+            if (!allEmpty) result.add(cells);
543
+        }
544
+        return result;
545
+    }
546
+
547
+    /** 从 POI Cell 提取原始 Java 值 */
548
+    private Object rawValue(Cell cell) {
549
+        if (cell == null) return null;
550
+        switch (cell.getCellType()) {
551
+            case NUMERIC:
552
+                if (DateUtil.isCellDateFormatted(cell)) return cell.getDateCellValue();
553
+                return cell.getNumericCellValue();
554
+            case STRING:
555
+                String s = cell.getStringCellValue().trim();
556
+                return s.isEmpty() ? null : s;
557
+            case BOOLEAN:
558
+                return cell.getBooleanCellValue();
559
+            case FORMULA:
560
+                try {
561
+                    if (DateUtil.isCellDateFormatted(cell)) return cell.getDateCellValue();
562
+                    return cell.getNumericCellValue();
563
+                } catch (Exception e) {
564
+                    String fs = cell.getStringCellValue().trim();
565
+                    return fs.isEmpty() ? null : fs;
566
+                }
567
+            default:
568
+                return null;
569
+        }
570
+    }
571
+
572
+    private String str(Object[] c, int idx) {
573
+        if (idx >= c.length || c[idx] == null) return null;
574
+        String s = c[idx].toString().trim();
575
+        return s.isEmpty() ? null : s;
576
+    }
577
+
578
+    private Date date(Object[] c, int idx) {
579
+        if (idx >= c.length || c[idx] == null) return null;
580
+        Object v = c[idx];
581
+        if (v instanceof Date) return (Date) v;
582
+        // numeric from POI = Excel serial date
583
+        if (v instanceof Double) return DateUtil.getJavaDate((Double) v);
584
+        // try parse string
585
+        String s = v.toString().trim();
586
+        for (String fmt : new String[]{"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM-dd", "yyyy/MM/dd"}) {
587
+            try {
588
+                return new SimpleDateFormat(fmt).parse(s.substring(0, Math.min(s.length(), fmt.length())));
589
+            } catch (Exception ignore) {}
590
+        }
591
+        return null;
592
+    }
593
+
594
+    /** 提取时间部分为 HH:mm:ss 字符串 */
595
+    private String timeStr(Object[] c, int idx) {
596
+        Date d = date(c, idx);
597
+        if (d == null) return null;
598
+        return new SimpleDateFormat("HH:mm:ss").format(d);
599
+    }
600
+
601
+    private BigDecimal decimal(Object[] c, int idx) {
602
+        if (idx >= c.length || c[idx] == null) return null;
603
+        Object v = c[idx];
604
+        if (v instanceof Double) {
605
+            double d = (Double) v;
606
+            return BigDecimal.valueOf(d);
607
+        }
608
+        String s = v.toString().trim().replace("¥", "").replace(",", "");
609
+        if (s.isEmpty()) return null;
610
+        try { return new BigDecimal(s); } catch (Exception e) { return null; }
611
+    }
612
+
613
+    private Integer integer(Object[] c, int idx) {
614
+        BigDecimal d = decimal(c, idx);
615
+        return d == null ? null : d.intValue();
616
+    }
617
+}

+ 35 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerComplaintServiceImpl.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerComplaint;
7
+import com.sundot.airport.ledger.mapper.LedgerComplaintMapper;
8
+import com.sundot.airport.ledger.service.ILedgerComplaintService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+/**
14
+ * 投诉情况记录Service实现
15
+ */
16
+@Service
17
+public class LedgerComplaintServiceImpl extends ServiceImpl<LedgerComplaintMapper, LedgerComplaint>
18
+        implements ILedgerComplaintService {
19
+
20
+    @Autowired
21
+    private LedgerComplaintMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerComplaint> selectList(LedgerComplaint query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+    @Override
29
+    @Transactional(rollbackFor = Exception.class)
30
+    public int batchInsert(List<LedgerComplaint> list) {
31
+        list.forEach(item -> item.setCreateTime(DateUtils.getNowDate()));
32
+        saveBatch(list);
33
+        return list.size();
34
+    }
35
+}

+ 35 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerExamScoreServiceImpl.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerExamScore;
7
+import com.sundot.airport.ledger.mapper.LedgerExamScoreMapper;
8
+import com.sundot.airport.ledger.service.ILedgerExamScoreService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+/**
14
+ * 成绩收集Service实现
15
+ */
16
+@Service
17
+public class LedgerExamScoreServiceImpl extends ServiceImpl<LedgerExamScoreMapper, LedgerExamScore>
18
+        implements ILedgerExamScoreService {
19
+
20
+    @Autowired
21
+    private LedgerExamScoreMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerExamScore> selectList(LedgerExamScore query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+    @Override
29
+    @Transactional(rollbackFor = Exception.class)
30
+    public int batchInsert(List<LedgerExamScore> list) {
31
+        list.forEach(item -> item.setCreateTime(DateUtils.getNowDate()));
32
+        saveBatch(list);
33
+        return list.size();
34
+    }
35
+}

+ 28 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerLeaveSpecialServiceImpl.java

@@ -0,0 +1,28 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerLeaveSpecial;
7
+import com.sundot.airport.ledger.mapper.LedgerLeaveSpecialMapper;
8
+import com.sundot.airport.ledger.service.ILedgerLeaveSpecialService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+
12
+
13
+/**
14
+ * 请休假记录特殊Service实现
15
+ */
16
+@Service
17
+public class LedgerLeaveSpecialServiceImpl extends ServiceImpl<LedgerLeaveSpecialMapper, LedgerLeaveSpecial>
18
+        implements ILedgerLeaveSpecialService {
19
+
20
+    @Autowired
21
+    private LedgerLeaveSpecialMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerLeaveSpecial> selectList(LedgerLeaveSpecial query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+}

+ 35 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerPatrolInspectionServiceImpl.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerPatrolInspection;
7
+import com.sundot.airport.ledger.mapper.LedgerPatrolInspectionMapper;
8
+import com.sundot.airport.ledger.service.ILedgerPatrolInspectionService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+/**
14
+ * 队室三级质控巡查记录Service实现
15
+ */
16
+@Service
17
+public class LedgerPatrolInspectionServiceImpl extends ServiceImpl<LedgerPatrolInspectionMapper, LedgerPatrolInspection>
18
+        implements ILedgerPatrolInspectionService {
19
+
20
+    @Autowired
21
+    private LedgerPatrolInspectionMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerPatrolInspection> selectList(LedgerPatrolInspection query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+    @Override
29
+    @Transactional(rollbackFor = Exception.class)
30
+    public int batchInsert(List<LedgerPatrolInspection> list) {
31
+        list.forEach(item -> item.setCreateTime(DateUtils.getNowDate()));
32
+        saveBatch(list);
33
+        return list.size();
34
+    }
35
+}

+ 35 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerRealtimeInterceptionServiceImpl.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerRealtimeInterception;
7
+import com.sundot.airport.ledger.mapper.LedgerRealtimeInterceptionMapper;
8
+import com.sundot.airport.ledger.service.ILedgerRealtimeInterceptionService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+/**
14
+ * 部门实时质控拦截记录Service实现
15
+ */
16
+@Service
17
+public class LedgerRealtimeInterceptionServiceImpl extends ServiceImpl<LedgerRealtimeInterceptionMapper, LedgerRealtimeInterception>
18
+        implements ILedgerRealtimeInterceptionService {
19
+
20
+    @Autowired
21
+    private LedgerRealtimeInterceptionMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerRealtimeInterception> selectList(LedgerRealtimeInterception query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+    @Override
29
+    @Transactional(rollbackFor = Exception.class)
30
+    public int batchInsert(List<LedgerRealtimeInterception> list) {
31
+        list.forEach(item -> item.setCreateTime(DateUtils.getNowDate()));
32
+        saveBatch(list);
33
+        return list.size();
34
+    }
35
+}

+ 35 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerRewardApprovalServiceImpl.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerRewardApproval;
7
+import com.sundot.airport.ledger.mapper.LedgerRewardApprovalMapper;
8
+import com.sundot.airport.ledger.service.ILedgerRewardApprovalService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+/**
14
+ * 小额奖励审批单Service实现
15
+ */
16
+@Service
17
+public class LedgerRewardApprovalServiceImpl extends ServiceImpl<LedgerRewardApprovalMapper, LedgerRewardApproval>
18
+        implements ILedgerRewardApprovalService {
19
+
20
+    @Autowired
21
+    private LedgerRewardApprovalMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerRewardApproval> selectList(LedgerRewardApproval query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+    @Override
29
+    @Transactional(rollbackFor = Exception.class)
30
+    public int batchInsert(List<LedgerRewardApproval> list) {
31
+        list.forEach(item -> item.setCreateTime(DateUtils.getNowDate()));
32
+        saveBatch(list);
33
+        return list.size();
34
+    }
35
+}

+ 28 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerRewardPenaltyServiceImpl.java

@@ -0,0 +1,28 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerRewardPenalty;
7
+import com.sundot.airport.ledger.mapper.LedgerRewardPenaltyMapper;
8
+import com.sundot.airport.ledger.service.ILedgerRewardPenaltyService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+
12
+
13
+/**
14
+ * 部门奖惩记录Service实现
15
+ */
16
+@Service
17
+public class LedgerRewardPenaltyServiceImpl extends ServiceImpl<LedgerRewardPenaltyMapper, LedgerRewardPenalty>
18
+        implements ILedgerRewardPenaltyService {
19
+
20
+    @Autowired
21
+    private LedgerRewardPenaltyMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerRewardPenalty> selectList(LedgerRewardPenalty query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+}

+ 35 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSecurityTestServiceImpl.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerSecurityTest;
7
+import com.sundot.airport.ledger.mapper.LedgerSecurityTestMapper;
8
+import com.sundot.airport.ledger.service.ILedgerSecurityTestService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+/**
14
+ * 安保测试记录Service实现
15
+ */
16
+@Service
17
+public class LedgerSecurityTestServiceImpl extends ServiceImpl<LedgerSecurityTestMapper, LedgerSecurityTest>
18
+        implements ILedgerSecurityTestService {
19
+
20
+    @Autowired
21
+    private LedgerSecurityTestMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerSecurityTest> selectList(LedgerSecurityTest query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+    @Override
29
+    @Transactional(rollbackFor = Exception.class)
30
+    public int batchInsert(List<LedgerSecurityTest> list) {
31
+        list.forEach(item -> item.setCreateTime(DateUtils.getNowDate()));
32
+        saveBatch(list);
33
+        return list.size();
34
+    }
35
+}

+ 35 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSeizureStatsServiceImpl.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerSeizureStats;
7
+import com.sundot.airport.ledger.mapper.LedgerSeizureStatsMapper;
8
+import com.sundot.airport.ledger.service.ILedgerSeizureStatsService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+/**
14
+ * 查获违规品统计Service实现
15
+ */
16
+@Service
17
+public class LedgerSeizureStatsServiceImpl extends ServiceImpl<LedgerSeizureStatsMapper, LedgerSeizureStats>
18
+        implements ILedgerSeizureStatsService {
19
+
20
+    @Autowired
21
+    private LedgerSeizureStatsMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerSeizureStats> selectList(LedgerSeizureStats query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+    @Override
29
+    @Transactional(rollbackFor = Exception.class)
30
+    public int batchInsert(List<LedgerSeizureStats> list) {
31
+        list.forEach(item -> item.setCreateTime(DateUtils.getNowDate()));
32
+        saveBatch(list);
33
+        return list.size();
34
+    }
35
+}

+ 35 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerServicePatrolServiceImpl.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerServicePatrol;
7
+import com.sundot.airport.ledger.mapper.LedgerServicePatrolMapper;
8
+import com.sundot.airport.ledger.service.ILedgerServicePatrolService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+/**
14
+ * 服务巡查记录Service实现
15
+ */
16
+@Service
17
+public class LedgerServicePatrolServiceImpl extends ServiceImpl<LedgerServicePatrolMapper, LedgerServicePatrol>
18
+        implements ILedgerServicePatrolService {
19
+
20
+    @Autowired
21
+    private LedgerServicePatrolMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerServicePatrol> selectList(LedgerServicePatrol query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+    @Override
29
+    @Transactional(rollbackFor = Exception.class)
30
+    public int batchInsert(List<LedgerServicePatrol> list) {
31
+        list.forEach(item -> item.setCreateTime(DateUtils.getNowDate()));
32
+        saveBatch(list);
33
+        return list.size();
34
+    }
35
+}

+ 35 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSupervisionProblemServiceImpl.java

@@ -0,0 +1,35 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import java.util.List;
4
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5
+import com.sundot.airport.common.utils.DateUtils;
6
+import com.sundot.airport.ledger.domain.LedgerSupervisionProblem;
7
+import com.sundot.airport.ledger.mapper.LedgerSupervisionProblemMapper;
8
+import com.sundot.airport.ledger.service.ILedgerSupervisionProblemService;
9
+import org.springframework.beans.factory.annotation.Autowired;
10
+import org.springframework.stereotype.Service;
11
+import org.springframework.transaction.annotation.Transactional;
12
+
13
+/**
14
+ * 部门监察问题记录Service实现
15
+ */
16
+@Service
17
+public class LedgerSupervisionProblemServiceImpl extends ServiceImpl<LedgerSupervisionProblemMapper, LedgerSupervisionProblem>
18
+        implements ILedgerSupervisionProblemService {
19
+
20
+    @Autowired
21
+    private LedgerSupervisionProblemMapper mapper;
22
+
23
+    @Override
24
+    public List<LedgerSupervisionProblem> selectList(LedgerSupervisionProblem query) {
25
+        return mapper.selectList(query);
26
+    }
27
+
28
+    @Override
29
+    @Transactional(rollbackFor = Exception.class)
30
+    public int batchInsert(List<LedgerSupervisionProblem> list) {
31
+        list.forEach(item -> item.setCreateTime(DateUtils.getNowDate()));
32
+        saveBatch(list);
33
+        return list.size();
34
+    }
35
+}

+ 541 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSyncServiceImpl.java

@@ -0,0 +1,541 @@
1
+package com.sundot.airport.ledger.service.impl;
2
+
3
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
4
+import com.sundot.airport.common.utils.DateUtils;
5
+import com.sundot.airport.ledger.domain.*;
6
+import com.sundot.airport.ledger.mapper.*;
7
+import com.sundot.airport.ledger.service.ILedgerSyncService;
8
+import org.springframework.beans.factory.annotation.Autowired;
9
+import org.springframework.stereotype.Service;
10
+import org.springframework.transaction.annotation.Transactional;
11
+import org.springframework.util.StringUtils;
12
+
13
+import java.math.BigDecimal;
14
+import java.util.*;
15
+
16
+/**
17
+ * 台账 → score_event 同步引擎
18
+ *
19
+ * 映射规则(indicator ID 固定,与 indicator_init.sql 一致):
20
+ * ─────────────────────────────────────────────────────────
21
+ * supervision_problem   → dim1 / 1001(L2) / 1101(L3, -1)
22
+ * realtime_interception → dim1 / 1002(L2) / 1104(L3, -1)
23
+ * security_test(未通过) → dim1 / 1004(L2) / 1113(L3, -0.5)
24
+ * unsafe_event          → dim1 / 1003(L2) / 1110(L3, -2)
25
+ * seizure_stats         → dim1 / 1005(L2) / 1114~1116(L3, +)
26
+ * reward_approval       → dim1 / 1005(L2) / 1114~1116(L3, +)
27
+ * service_patrol        → dim2 / 1011(L2) / 1123(L3, -0.8)
28
+ * complaint             → dim2 / 1010(L2) / 1120(L3, -2)
29
+ * terminal_bonus        → dim2 / 1012(L2)  (使用台账 add_score)
30
+ * banner_letter         → dim2 / 1012(L2) / 1126锦旗 | 1124感谢信
31
+ * exam_score(≥98)       → dim3 / 1024(L2) / 1146(L3, +5)
32
+ * reward_penalty        → dim4 / 1033减|1035加(L2) / score_change
33
+ * leave_special         → dim6 / 1050(L2) / 1220(L3, 0, 仅记录)
34
+ */
35
+@Service
36
+public class LedgerSyncServiceImpl implements ILedgerSyncService {
37
+
38
+    // ── Ledger Mappers ────────────────────────────────────────
39
+    @Autowired private LedgerSupervisionProblemMapper supervisionMapper;
40
+    @Autowired private LedgerRealtimeInterceptionMapper interceptionMapper;
41
+    @Autowired private LedgerSecurityTestMapper securityTestMapper;
42
+    @Autowired private LedgerUnsafeEventMapper unsafeEventMapper;
43
+    @Autowired private LedgerSeizureStatsMapper seizureMapper;
44
+    @Autowired private LedgerRewardApprovalMapper rewardApprovalMapper;
45
+    @Autowired private LedgerServicePatrolMapper servicePatrolMapper;
46
+    @Autowired private LedgerComplaintMapper complaintMapper;
47
+    @Autowired private LedgerTerminalBonusMapper terminalBonusMapper;
48
+    @Autowired private LedgerBannerLetterMapper bannerLetterMapper;
49
+    @Autowired private LedgerExamScoreMapper examScoreMapper;
50
+    @Autowired private LedgerRewardPenaltyMapper rewardPenaltyMapper;
51
+    @Autowired private LedgerLeaveSpecialMapper leaveSpecialMapper;
52
+
53
+    // ── Score Mappers ─────────────────────────────────────────
54
+    @Autowired private ScoreEventMapper scoreEventMapper;
55
+    @Autowired private ScoreDimensionMapper dimensionMapper;
56
+    @Autowired private ScoreIndicatorMapper indicatorMapper;
57
+
58
+    // ── Dimension ID cache (loaded once) ─────────────────────
59
+    private final Map<String, Long> dimCache = new HashMap<>();
60
+
61
+    // ── Constants: Indicator IDs (from indicator_init.sql) ───
62
+    // dim1 安全防控能力
63
+    private static final long IND_SUPERVISION_L2   = 1001L; // 员工规范化操作
64
+    private static final long IND_SUPERVISION_L3   = 1101L; // 站层级质控 -1
65
+    private static final long IND_INTERCEPT_L2     = 1002L; // 后台实时质控
66
+    private static final long IND_INTERCEPT_L3     = 1104L; // 站层级(实时拦截)-1
67
+    private static final long IND_UNSAFE_L2        = 1003L; // 不安全事件
68
+    private static final long IND_UNSAFE_L3        = 1110L; // 禁带锐器等 -2 (default)
69
+    private static final long IND_SECTEST_L2       = 1004L; // 安保测试未通过
70
+    private static final long IND_SECTEST_L3       = 1113L; // 站层级 -0.5
71
+    private static final long IND_SEIZURE_L2       = 1005L; // 典型案例查获
72
+    private static final long IND_SEIZURE_L3_A     = 1114L; // 一类查获 +1
73
+    private static final long IND_SEIZURE_L3_B     = 1115L; // 二类查获 +0.5
74
+    private static final long IND_SEIZURE_L3_C     = 1116L; // 特殊物品 +0.15
75
+    // dim2 服务响应能力
76
+    private static final long IND_COMPLAINT_L2     = 1010L; // 旅客服务投诉
77
+    private static final long IND_COMPLAINT_L3     = 1120L; // 未按服务质量手册 -2
78
+    private static final long IND_SVCPATROL_L2     = 1011L; // 服务监察
79
+    private static final long IND_SVCPATROL_L3     = 1123L; // 部门层级 -0.8
80
+    private static final long IND_TYPCASE_L2       = 1012L; // 典型服务案例
81
+    private static final long IND_TYPCASE_LETTER   = 1124L; // 表扬信/感谢信 +0.7
82
+    private static final long IND_TYPCASE_BANNER   = 1126L; // 锦旗 +1
83
+    // dim3 业务实操能力
84
+    private static final long IND_EXAM_L2          = 1024L; // 考试成绩
85
+    private static final long IND_EXAM_L3_THEORY   = 1146L; // 季度理论≥98 +5
86
+    private static final long IND_EXAM_L3_MACHINE  = 1147L; // 季度开机员≥98 +5
87
+    // dim4 作风践行能力
88
+    private static final long IND_PENALTY_L2       = 1033L; // 形象维护(减)
89
+    private static final long IND_REWARD_L2        = 1035L; // 形象维护(加)
90
+    // dim6 身心调节能力
91
+    private static final long IND_LEAVE_L2         = 1050L; // 病假(仅记录)
92
+    private static final long IND_LEAVE_L3         = 1220L; // 病假(不扣分)
93
+
94
+    // ── Score defaults ────────────────────────────────────────
95
+    private static final BigDecimal NEG_ONE   = BigDecimal.valueOf(-1.00);
96
+    private static final BigDecimal NEG_HALF  = BigDecimal.valueOf(-0.50);
97
+    private static final BigDecimal NEG_08    = BigDecimal.valueOf(-0.80);
98
+    private static final BigDecimal NEG_TWO   = BigDecimal.valueOf(-2.00);
99
+    private static final BigDecimal POS_ONE   = BigDecimal.valueOf(1.00);
100
+    private static final BigDecimal POS_HALF  = BigDecimal.valueOf(0.50);
101
+    private static final BigDecimal POS_015   = BigDecimal.valueOf(0.15);
102
+    private static final BigDecimal POS_07    = BigDecimal.valueOf(0.70);
103
+    private static final BigDecimal POS_FIVE  = BigDecimal.valueOf(5.00);
104
+    private static final BigDecimal ZERO      = BigDecimal.ZERO;
105
+
106
+    // ═════════════════════════════════════════════════════════
107
+    //  Public API
108
+    // ═════════════════════════════════════════════════════════
109
+
110
+    @Override
111
+    @Transactional(rollbackFor = Exception.class)
112
+    public SyncResult syncAll() {
113
+        loadDimCache();
114
+        StringBuilder sb = new StringBuilder();
115
+        int totalIns = 0, totalSkip = 0;
116
+        for (String type : Arrays.asList(
117
+                "supervision_problem", "realtime_interception", "security_test",
118
+                "unsafe_event", "seizure_stats", "reward_approval",
119
+                "service_patrol", "complaint", "terminal_bonus", "banner_letter",
120
+                "exam_score", "reward_penalty", "leave_special")) {
121
+            SyncResult r = doSync(type);
122
+            sb.append(type).append(":+").append(r.getTotalInserted())
123
+              .append("/skip").append(r.getTotalSkipped()).append("  ");
124
+            totalIns += r.getTotalInserted();
125
+            totalSkip += r.getTotalSkipped();
126
+        }
127
+        return new SyncResult(totalIns, totalSkip, sb.toString());
128
+    }
129
+
130
+    @Override
131
+    @Transactional(rollbackFor = Exception.class)
132
+    public SyncResult syncByType(String ledgerType) {
133
+        loadDimCache();
134
+        return doSync(ledgerType);
135
+    }
136
+
137
+    // ═════════════════════════════════════════════════════════
138
+    //  Router
139
+    // ═════════════════════════════════════════════════════════
140
+
141
+    private SyncResult doSync(String type) {
142
+        switch (type) {
143
+            case "supervision_problem":   return syncSupervisionProblem();
144
+            case "realtime_interception": return syncRealtimeInterception();
145
+            case "security_test":         return syncSecurityTest();
146
+            case "unsafe_event":          return syncUnsafeEvent();
147
+            case "seizure_stats":         return syncSeizureStats();
148
+            case "reward_approval":       return syncRewardApproval();
149
+            case "service_patrol":        return syncServicePatrol();
150
+            case "complaint":             return syncComplaint();
151
+            case "terminal_bonus":        return syncTerminalBonus();
152
+            case "banner_letter":         return syncBannerLetter();
153
+            case "exam_score":            return syncExamScore();
154
+            case "reward_penalty":        return syncRewardPenalty();
155
+            case "leave_special":         return syncLeaveSpecial();
156
+            default: return new SyncResult(0, 0, "unknown type: " + type);
157
+        }
158
+    }
159
+
160
+    // ═════════════════════════════════════════════════════════
161
+    //  Per-table sync methods
162
+    // ═════════════════════════════════════════════════════════
163
+
164
+    /** 1. 部门监察问题记录 → 安全防控能力/员工规范化操作 */
165
+    private SyncResult syncSupervisionProblem() {
166
+        List<LedgerSupervisionProblem> list = supervisionMapper.selectList(new LedgerSupervisionProblem());
167
+        Long dimId = dimCache.get("安全防控能力");
168
+        ScoreIndicator lv2 = getIndicator(IND_SUPERVISION_L2);
169
+        ScoreIndicator lv3 = getIndicator(IND_SUPERVISION_L3);
170
+        int ins = 0, skip = 0;
171
+        for (LedgerSupervisionProblem row : list) {
172
+            String src = "supervision_problem:" + row.getId();
173
+            if (existsBySrc(src)) { skip++; continue; }
174
+            if (!hasName(row.getInspectedName())) { skip++; continue; }
175
+            BigDecimal sv = row.getDeductScore() != null
176
+                    ? row.getDeductScore().negate() : NEG_ONE;
177
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getInspectedName(),
178
+                    row.getTeamName(), row.getRecordDate(),
179
+                    row.getLocation(), sv, ZERO,
180
+                    row.getProblemDesc(), src, row.getEvidenceFile());
181
+            scoreEventMapper.insert(e);
182
+            ins++;
183
+        }
184
+        return new SyncResult(ins, skip, "");
185
+    }
186
+
187
+    /** 2. 实时质控拦截 → 安全防控能力/后台实时质控拦截 */
188
+    private SyncResult syncRealtimeInterception() {
189
+        List<LedgerRealtimeInterception> list = interceptionMapper.selectList(new LedgerRealtimeInterception());
190
+        Long dimId = dimCache.get("安全防控能力");
191
+        ScoreIndicator lv2 = getIndicator(IND_INTERCEPT_L2);
192
+        ScoreIndicator lv3 = getIndicator(IND_INTERCEPT_L3);
193
+        int ins = 0, skip = 0;
194
+        for (LedgerRealtimeInterception row : list) {
195
+            String src = "realtime_interception:" + row.getId();
196
+            if (existsBySrc(src)) { skip++; continue; }
197
+            if (!hasName(row.getInspectorName())) { skip++; continue; }
198
+            // 实时拦截是负分(被拦截到问题)
199
+            BigDecimal sv = row.getDeductScore() != null
200
+                    ? row.getDeductScore().negate() : NEG_ONE;
201
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getInspectorName(),
202
+                    row.getTeamName(), row.getRecordDate(),
203
+                    row.getChannelNo(), sv, ZERO,
204
+                    row.getItemName(), src, row.getEvidenceFile());
205
+            scoreEventMapper.insert(e);
206
+            ins++;
207
+        }
208
+        return new SyncResult(ins, skip, "");
209
+    }
210
+
211
+    /** 3. 安保测试(仅"未通过"才计分) */
212
+    private SyncResult syncSecurityTest() {
213
+        List<LedgerSecurityTest> list = securityTestMapper.selectList(new LedgerSecurityTest());
214
+        Long dimId = dimCache.get("安全防控能力");
215
+        ScoreIndicator lv2 = getIndicator(IND_SECTEST_L2);
216
+        ScoreIndicator lv3 = getIndicator(IND_SECTEST_L3);
217
+        int ins = 0, skip = 0;
218
+        for (LedgerSecurityTest row : list) {
219
+            String src = "security_test:" + row.getId();
220
+            if (existsBySrc(src)) { skip++; continue; }
221
+            if (!"未通过".equals(row.getTestResult())) { skip++; continue; }
222
+            if (!hasName(row.getTestedName())) { skip++; continue; }
223
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getTestedName(),
224
+                    row.getTeamName(), row.getRecordDate(),
225
+                    null, NEG_HALF, ZERO,
226
+                    row.getTestItem(), src, row.getEvidenceFile());
227
+            scoreEventMapper.insert(e);
228
+            ins++;
229
+        }
230
+        return new SyncResult(ins, skip, "");
231
+    }
232
+
233
+    /** 4. 不安全事件 */
234
+    private SyncResult syncUnsafeEvent() {
235
+        List<LedgerUnsafeEvent> list = unsafeEventMapper.selectList(new LedgerUnsafeEvent());
236
+        Long dimId = dimCache.get("安全防控能力");
237
+        ScoreIndicator lv2 = getIndicator(IND_UNSAFE_L2);
238
+        ScoreIndicator lv3 = getIndicator(IND_UNSAFE_L3);
239
+        int ins = 0, skip = 0;
240
+        for (LedgerUnsafeEvent row : list) {
241
+            String src = "unsafe_event:" + row.getId();
242
+            if (existsBySrc(src)) { skip++; continue; }
243
+            if (!hasName(row.getResponsibleName())) { skip++; continue; }
244
+            BigDecimal sv = row.getDeductScore() != null
245
+                    ? row.getDeductScore().negate() : NEG_TWO;
246
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getResponsibleName(),
247
+                    row.getTeamName(), row.getRecordDate(),
248
+                    null, sv, ZERO,
249
+                    row.getEventDesc(), src, row.getEvidenceFile());
250
+            scoreEventMapper.insert(e);
251
+            ins++;
252
+        }
253
+        return new SyncResult(ins, skip, "");
254
+    }
255
+
256
+    /** 5. 查获违规品统计(加分) */
257
+    private SyncResult syncSeizureStats() {
258
+        List<LedgerSeizureStats> list = seizureMapper.selectList(new LedgerSeizureStats());
259
+        Long dimId = dimCache.get("安全防控能力");
260
+        ScoreIndicator lv2 = getIndicator(IND_SEIZURE_L2);
261
+        int ins = 0, skip = 0;
262
+        for (LedgerSeizureStats row : list) {
263
+            String src = "seizure_stats:" + row.getId();
264
+            if (existsBySrc(src)) { skip++; continue; }
265
+            if (!hasName(row.getInspectorName())) { skip++; continue; }
266
+            // 按类别确定指标和分值
267
+            String cat = row.getItemCategory() != null ? row.getItemCategory() : "";
268
+            long l3Id; BigDecimal sv;
269
+            if (cat.contains("一类")) { l3Id = IND_SEIZURE_L3_A; sv = POS_ONE; }
270
+            else if (cat.contains("二类")) { l3Id = IND_SEIZURE_L3_B; sv = POS_HALF; }
271
+            else { l3Id = IND_SEIZURE_L3_C; sv = POS_015; }
272
+            // 叠加分
273
+            BigDecimal cascade = row.getStackedScore() != null ? row.getStackedScore() : ZERO;
274
+            ScoreIndicator lv3 = getIndicator(l3Id);
275
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getInspectorName(),
276
+                    row.getTeamName(), row.getRecordDate(),
277
+                    null, sv, cascade,
278
+                    row.getItemName(), src, row.getEvidenceFile());
279
+            scoreEventMapper.insert(e);
280
+            ins++;
281
+        }
282
+        return new SyncResult(ins, skip, "");
283
+    }
284
+
285
+    /** 6. 小额奖励审批单(安全类查获加分) */
286
+    private SyncResult syncRewardApproval() {
287
+        List<LedgerRewardApproval> list = rewardApprovalMapper.selectList(new LedgerRewardApproval());
288
+        Long dimId = dimCache.get("安全防控能力");
289
+        ScoreIndicator lv2 = getIndicator(IND_SEIZURE_L2);
290
+        int ins = 0, skip = 0;
291
+        for (LedgerRewardApproval row : list) {
292
+            String src = "reward_approval:" + row.getId();
293
+            if (existsBySrc(src)) { skip++; continue; }
294
+            if (!hasName(row.getPersonName())) { skip++; continue; }
295
+            // 奖励类别
296
+            String cat = row.getRewardType() != null ? row.getRewardType() : "";
297
+            long l3Id; BigDecimal sv;
298
+            if ("一类".equals(cat) || cat.contains("一类")) { l3Id = IND_SEIZURE_L3_A; sv = POS_ONE; }
299
+            else if ("二类".equals(cat) || cat.contains("二类")) { l3Id = IND_SEIZURE_L3_B; sv = POS_HALF; }
300
+            else { l3Id = IND_SEIZURE_L3_C; sv = POS_015; }
301
+            ScoreIndicator lv3 = getIndicator(l3Id);
302
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getPersonName(),
303
+                    row.getTeamName(), row.getApproveDate() != null ? new java.util.Date(row.getApproveDate().getTime()) : null,
304
+                    null, sv, ZERO,
305
+                    row.getRemark(), src, null);
306
+            scoreEventMapper.insert(e);
307
+            ins++;
308
+        }
309
+        return new SyncResult(ins, skip, "");
310
+    }
311
+
312
+    /** 7. 服务巡查 → 服务响应能力/服务监察 */
313
+    private SyncResult syncServicePatrol() {
314
+        List<LedgerServicePatrol> list = servicePatrolMapper.selectList(new LedgerServicePatrol());
315
+        Long dimId = dimCache.get("服务响应能力");
316
+        ScoreIndicator lv2 = getIndicator(IND_SVCPATROL_L2);
317
+        ScoreIndicator lv3 = getIndicator(IND_SVCPATROL_L3);
318
+        int ins = 0, skip = 0;
319
+        for (LedgerServicePatrol row : list) {
320
+            String src = "service_patrol:" + row.getId();
321
+            if (existsBySrc(src)) { skip++; continue; }
322
+            if (!hasName(row.getInspectedName())) { skip++; continue; }
323
+            BigDecimal sv = row.getDeductScore() != null
324
+                    ? row.getDeductScore().negate() : NEG_08;
325
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getInspectedName(),
326
+                    row.getTeamName(), row.getRecordDate(),
327
+                    row.getLocation(), sv, ZERO,
328
+                    row.getProblemDesc(), src, row.getEvidenceFile());
329
+            scoreEventMapper.insert(e);
330
+            ins++;
331
+        }
332
+        return new SyncResult(ins, skip, "");
333
+    }
334
+
335
+    /** 8. 投诉情况(有责任人才计分) */
336
+    private SyncResult syncComplaint() {
337
+        List<LedgerComplaint> list = complaintMapper.selectList(new LedgerComplaint());
338
+        Long dimId = dimCache.get("服务响应能力");
339
+        ScoreIndicator lv2 = getIndicator(IND_COMPLAINT_L2);
340
+        ScoreIndicator lv3 = getIndicator(IND_COMPLAINT_L3);
341
+        int ins = 0, skip = 0;
342
+        for (LedgerComplaint row : list) {
343
+            String src = "complaint:" + row.getId();
344
+            if (existsBySrc(src)) { skip++; continue; }
345
+            if (!hasName(row.getResponsibleName())) { skip++; continue; }
346
+            BigDecimal sv = row.getDeductScore() != null
347
+                    ? row.getDeductScore().negate() : NEG_TWO;
348
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getResponsibleName(),
349
+                    row.getTeamName(), row.getRecordDate(),
350
+                    null, sv, ZERO,
351
+                    row.getComplaintDesc(), src, row.getEvidenceFile());
352
+            scoreEventMapper.insert(e);
353
+            ins++;
354
+        }
355
+        return new SyncResult(ins, skip, "");
356
+    }
357
+
358
+    /** 9. 航站楼加分 */
359
+    private SyncResult syncTerminalBonus() {
360
+        List<LedgerTerminalBonus> list = terminalBonusMapper.selectList(new LedgerTerminalBonus());
361
+        Long dimId = dimCache.get("服务响应能力");
362
+        ScoreIndicator lv2 = getIndicator(IND_TYPCASE_L2);
363
+        ScoreIndicator lv3 = getIndicator(IND_TYPCASE_LETTER);  // 默认表扬信
364
+        int ins = 0, skip = 0;
365
+        for (LedgerTerminalBonus row : list) {
366
+            String src = "terminal_bonus:" + row.getId();
367
+            if (existsBySrc(src)) { skip++; continue; }
368
+            if (!hasName(row.getPersonName())) { skip++; continue; }
369
+            BigDecimal sv = row.getAddScore() != null ? row.getAddScore() : POS_07;
370
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getPersonName(),
371
+                    row.getTeamName(), row.getApproveDate() != null ? new java.util.Date(row.getApproveDate().getTime()) : null,
372
+                    null, sv, ZERO,
373
+                    "航站楼加分", src, null);
374
+            scoreEventMapper.insert(e);
375
+            ins++;
376
+        }
377
+        return new SyncResult(ins, skip, "");
378
+    }
379
+
380
+    /** 10. 锦旗及感谢信 */
381
+    private SyncResult syncBannerLetter() {
382
+        List<LedgerBannerLetter> list = bannerLetterMapper.selectList(new LedgerBannerLetter());
383
+        Long dimId = dimCache.get("服务响应能力");
384
+        ScoreIndicator lv2 = getIndicator(IND_TYPCASE_L2);
385
+        int ins = 0, skip = 0;
386
+        for (LedgerBannerLetter row : list) {
387
+            String src = "banner_letter:" + row.getId();
388
+            if (existsBySrc(src)) { skip++; continue; }
389
+            if (!hasName(row.getPersonName())) { skip++; continue; }
390
+            boolean isBanner = "1".equals(row.getType());
391
+            long l3Id = isBanner ? IND_TYPCASE_BANNER : IND_TYPCASE_LETTER;
392
+            BigDecimal sv = row.getAddScore() != null ? row.getAddScore()
393
+                    : (isBanner ? POS_ONE : POS_07);
394
+            ScoreIndicator lv3 = getIndicator(l3Id);
395
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getPersonName(),
396
+                    row.getTeamName(), row.getRecordDate(),
397
+                    null, sv, ZERO,
398
+                    row.getContentDesc(), src, row.getEvidenceFile());
399
+            scoreEventMapper.insert(e);
400
+            ins++;
401
+        }
402
+        return new SyncResult(ins, skip, "");
403
+    }
404
+
405
+    /** 11. 成绩收集(≥98加5分,其余仅记录) */
406
+    private SyncResult syncExamScore() {
407
+        List<LedgerExamScore> list = examScoreMapper.selectList(new LedgerExamScore());
408
+        Long dimId = dimCache.get("业务实操能力");
409
+        ScoreIndicator lv2 = getIndicator(IND_EXAM_L2);
410
+        int ins = 0, skip = 0;
411
+        for (LedgerExamScore row : list) {
412
+            String src = "exam_score:" + row.getId();
413
+            if (existsBySrc(src)) { skip++; continue; }
414
+            if (!hasName(row.getPersonName())) { skip++; continue; }
415
+            if (row.getScore() == null) { skip++; continue; }
416
+            double score = row.getScore().doubleValue();
417
+            // ≥98 → 加分;<60 → 扣分(补考);其余仅记录
418
+            BigDecimal sv;
419
+            ScoreIndicator lv3;
420
+            if (score >= 98) {
421
+                sv = POS_FIVE;
422
+                lv3 = getIndicator(IND_EXAM_L3_THEORY);
423
+            } else if (score < 60) {
424
+                sv = BigDecimal.valueOf(-2.00);
425
+                lv3 = getIndicator(1140L); // 补考(阶梯递增)
426
+            } else {
427
+                skip++; continue; // 60~97 仅记录,不影响得分
428
+            }
429
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getPersonName(),
430
+                    row.getTeamName(), null,
431
+                    null, sv, ZERO,
432
+                    row.getExamCategory() + " " + row.getExamPeriod(), src, null);
433
+            scoreEventMapper.insert(e);
434
+            ins++;
435
+        }
436
+        return new SyncResult(ins, skip, "");
437
+    }
438
+
439
+    /** 12. 部门奖惩记录 */
440
+    private SyncResult syncRewardPenalty() {
441
+        List<LedgerRewardPenalty> list = rewardPenaltyMapper.selectList(new LedgerRewardPenalty());
442
+        Long dimId = dimCache.get("作风践行能力");
443
+        int ins = 0, skip = 0;
444
+        for (LedgerRewardPenalty row : list) {
445
+            String src = "reward_penalty:" + row.getId();
446
+            if (existsBySrc(src)) { skip++; continue; }
447
+            if (!hasName(row.getPersonName())) { skip++; continue; }
448
+            boolean isPenalty = "2".equals(row.getType());
449
+            ScoreIndicator lv2 = getIndicator(isPenalty ? IND_PENALTY_L2 : IND_REWARD_L2);
450
+            BigDecimal sv = row.getScoreChange() != null ? row.getScoreChange()
451
+                    : (isPenalty ? NEG_TWO : POS_ONE);
452
+            ScoreEvent e = buildEvent(dimId, lv2, null, row.getPersonName(),
453
+                    row.getTeamName(), row.getRecordDate(),
454
+                    null, sv, ZERO,
455
+                    row.getEventDesc(), src, row.getEvidenceFile());
456
+            scoreEventMapper.insert(e);
457
+            ins++;
458
+        }
459
+        return new SyncResult(ins, skip, "");
460
+    }
461
+
462
+    /** 13. 请休假记录(仅记录,不计分) */
463
+    private SyncResult syncLeaveSpecial() {
464
+        List<LedgerLeaveSpecial> list = leaveSpecialMapper.selectList(new LedgerLeaveSpecial());
465
+        Long dimId = dimCache.get("身心调节能力");
466
+        ScoreIndicator lv2 = getIndicator(IND_LEAVE_L2);
467
+        ScoreIndicator lv3 = getIndicator(IND_LEAVE_L3);
468
+        int ins = 0, skip = 0;
469
+        for (LedgerLeaveSpecial row : list) {
470
+            String src = "leave_special:" + row.getId();
471
+            if (existsBySrc(src)) { skip++; continue; }
472
+            if (!hasName(row.getPersonName())) { skip++; continue; }
473
+            ScoreEvent e = buildEvent(dimId, lv2, lv3, row.getPersonName(),
474
+                    row.getTeamName(), null,
475
+                    null, ZERO, ZERO,
476
+                    row.getLeaveType(), src, null);
477
+            scoreEventMapper.insert(e);
478
+            ins++;
479
+        }
480
+        return new SyncResult(ins, skip, "");
481
+    }
482
+
483
+    // ═════════════════════════════════════════════════════════
484
+    //  Helpers
485
+    // ═════════════════════════════════════════════════════════
486
+
487
+    private void loadDimCache() {
488
+        if (!dimCache.isEmpty()) return;
489
+        dimensionMapper.selectList(new ScoreDimension()).forEach(d -> dimCache.put(d.getName(), d.getId()));
490
+    }
491
+
492
+    private final Map<Long, ScoreIndicator> indCache = new HashMap<>();
493
+    private ScoreIndicator getIndicator(long id) {
494
+        return indCache.computeIfAbsent(id, indicatorMapper::selectById);
495
+    }
496
+
497
+    private boolean existsBySrc(String sourceLedger) {
498
+        return scoreEventMapper.selectCount(
499
+                new LambdaQueryWrapper<ScoreEvent>()
500
+                        .eq(ScoreEvent::getSourceLedger, sourceLedger)) > 0;
501
+    }
502
+
503
+    private boolean hasName(String name) {
504
+        return StringUtils.hasText(name);
505
+    }
506
+
507
+    private ScoreEvent buildEvent(Long dimId, ScoreIndicator lv2, ScoreIndicator lv3,
508
+                                  String personName, String teamName, java.util.Date eventDate,
509
+                                  String location, BigDecimal sv, BigDecimal cascade,
510
+                                  String desc, String sourceLedger, String evidenceFile) {
511
+        ScoreEvent e = new ScoreEvent();
512
+        e.setDimensionId(dimId);
513
+        e.setDimensionName(dimId != null ? dimCache.entrySet().stream()
514
+                .filter(x -> x.getValue().equals(dimId)).map(Map.Entry::getKey).findFirst().orElse("") : "");
515
+        if (lv2 != null) {
516
+            e.setLevel2Name(lv2.getName());
517
+            // lv3 作为末级指标 ID
518
+        }
519
+        if (lv3 != null) {
520
+            e.setIndicatorId(lv3.getId());
521
+            e.setLevel3Name(lv3.getName());
522
+        } else if (lv2 != null) {
523
+            e.setIndicatorId(lv2.getId());
524
+        }
525
+        if (eventDate != null) e.setEventTime(eventDate);
526
+        else e.setEventTime(DateUtils.getNowDate());
527
+        e.setLocation(location);
528
+        e.setPersonName(personName);
529
+        e.setTeamName(teamName);
530
+        e.setScoreValue(sv != null ? sv : ZERO);
531
+        e.setCascadeScore(cascade != null ? cascade : ZERO);
532
+        e.setTotalScore(e.getScoreValue().add(e.getCascadeScore()));
533
+        e.setEventDesc(desc != null && desc.length() > 500 ? desc.substring(0, 500) : desc);
534
+        e.setSourceType("2"); // 台账同步
535
+        e.setSourceLedger(sourceLedger);
536
+        e.setEvidenceFile(evidenceFile);
537
+        e.setCreateBy("system");
538
+        e.setCreateTime(DateUtils.getNowDate());
539
+        return e;
540
+    }
541
+}

+ 0 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerTerminalBonusServiceImpl.java


Some files were not shown because too many files changed in this diff