wangxx преди 3 седмици
родител
ревизия
57adfa383e
променени са 13 файла, в които са добавени 340 реда и са изтрити 60 реда
  1. 3 8
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerSeizureStatsController.java
  2. 12 1
      airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/ScoreEmployeeAdditionalController.java
  3. 44 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/vo/DailyDeptStatisticsVO.java
  4. 67 0
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/vo/EmployeeAdditionalScoreVO.java
  5. 0 24
      airport-ledger/src/main/java/com/sundot/airport/ledger/domain/vo/SeizeTotalAndItemVO.java
  6. 12 1
      airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/ScoreEmployeeAdditionalMapper.java
  7. 2 7
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerSeizureStatsService.java
  8. 10 1
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScoreEmployeeAdditionalService.java
  9. 141 13
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSeizureStatsServiceImpl.java
  10. 7 1
      airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/ScoreEmployeeAdditionalServiceImpl.java
  11. 4 0
      airport-ledger/src/main/resources/mapper/ledger/LedgerSeizureStatsMapper.xml
  12. 3 3
      airport-ledger/src/main/resources/mapper/ledger/OperationLanePeakThroughputMapper.xml
  13. 35 1
      airport-ledger/src/main/resources/mapper/ledger/ScoreEmployeeAdditionalMapper.xml

+ 3 - 8
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/LedgerSeizureStatsController.java

@@ -10,12 +10,7 @@ import com.sundot.airport.common.core.page.TableDataInfo;
10 10
 import com.sundot.airport.common.enums.BusinessType;
11 11
 import com.sundot.airport.common.utils.poi.ExcelUtil;
12 12
 import com.sundot.airport.ledger.domain.LedgerSeizureStats;
13
-import com.sundot.airport.ledger.domain.vo.CountQueryReqVO;
14
-import com.sundot.airport.ledger.domain.vo.CountSeizureSingleQuantityResVO;
15
-import com.sundot.airport.ledger.domain.vo.CountSeizureTotalQuantityResVO;
16
-import com.sundot.airport.ledger.domain.vo.SeizeCategoryQuantityVO;
17
-import com.sundot.airport.ledger.domain.vo.SeizeTotalAndItemVO;
18
-import com.sundot.airport.ledger.domain.vo.SeizureAreaVO;
13
+import com.sundot.airport.ledger.domain.vo.*;
19 14
 import com.sundot.airport.ledger.service.ILedgerSeizureStatsService;
20 15
 import org.springframework.beans.factory.annotation.Autowired;
21 16
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -95,8 +90,8 @@ public class LedgerSeizureStatsController extends BaseController {
95 90
      */
96 91
     @PostMapping("/countSeizureInfoItem")
97 92
     public AjaxResult countSeizureInfoItem(@RequestBody CountQueryReqVO countQueryReq) {
98
-        SeizeTotalAndItemVO seizeTotalAndItem = service.getTimeRangeStats(countQueryReq);
99
-        return AjaxResult.success(seizeTotalAndItem);
93
+        DailyDeptStatisticsVO dailyDeptStatisticsVO = service.getTimeRangeStats(countQueryReq);
94
+        return AjaxResult.success(dailyDeptStatisticsVO);
100 95
     }
101 96
 
102 97
     /**

+ 12 - 1
airport-admin/src/main/java/com/sundot/airport/web/controller/ledger/ScoreEmployeeAdditionalController.java

@@ -2,6 +2,8 @@ package com.sundot.airport.web.controller.ledger;
2 2
 
3 3
 import java.util.List;
4 4
 import javax.servlet.http.HttpServletResponse;
5
+
6
+import com.sundot.airport.ledger.domain.vo.EmployeeAdditionalScoreVO;
5 7
 import org.springframework.security.access.prepost.PreAuthorize;
6 8
 import org.springframework.beans.factory.annotation.Autowired;
7 9
 import org.springframework.web.bind.annotation.GetMapping;
@@ -105,4 +107,13 @@ public class ScoreEmployeeAdditionalController extends BaseController {
105 107
         List<ScoreEmployeeAdditional> list = scoreEmployeeAdditionalService.selectScoreEmployeeAdditionalList(scoreEmployeeAdditional);
106 108
         return success(list);
107 109
     }
108
-}
110
+
111
+    /**
112
+     * 按员工分组获取每个员工下的附加总分
113
+     */
114
+    @GetMapping("/getTotalScoreByEmployee")
115
+    public AjaxResult getTotalScoreByEmployee(ScoreEmployeeAdditional scoreEmployeeAdditional) {
116
+        List<EmployeeAdditionalScoreVO> result = scoreEmployeeAdditionalService.selectTotalScoreByEmployee(scoreEmployeeAdditional);
117
+        return success(result);
118
+    }
119
+}

+ 44 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/vo/DailyDeptStatisticsVO.java

@@ -0,0 +1,44 @@
1
+package com.sundot.airport.ledger.domain.vo;
2
+
3
+import lombok.Data;
4
+
5
+import java.io.Serializable;
6
+import java.util.Date;
7
+import java.util.List;
8
+
9
+/**
10
+ * 功能描述:每日部门统计数据 VO,适用于折线图展示
11
+ *
12
+ * @author Assistant
13
+ * @date 2026/5/25
14
+ */
15
+@Data
16
+public class DailyDeptStatisticsVO implements Serializable {
17
+    /**
18
+     * 总查获数
19
+     */
20
+    private Integer totalSeizeNum;
21
+    
22
+    /**
23
+     * 每日部门统计数据项列表
24
+     */
25
+    private List<DailyDeptItemVO> itemList;
26
+    
27
+    @Data
28
+    public static class DailyDeptItemVO implements Serializable {
29
+        /**
30
+         * 部门名称
31
+         */
32
+        private String deptName;
33
+        
34
+        /**
35
+         * 日期
36
+         */
37
+        private Date date;
38
+        
39
+        /**
40
+         * 查获数量
41
+         */
42
+        private Integer seizeNum;
43
+    }
44
+}

+ 67 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/vo/EmployeeAdditionalScoreVO.java

@@ -0,0 +1,67 @@
1
+package com.sundot.airport.ledger.domain.vo;
2
+
3
+import com.fasterxml.jackson.annotation.JsonProperty;
4
+import lombok.Data;
5
+
6
+import java.math.BigDecimal;
7
+
8
+/**
9
+ * 员工附加分统计结果VO
10
+ */
11
+@Data
12
+public class EmployeeAdditionalScoreVO {
13
+
14
+    /**
15
+     * 员工ID
16
+     */
17
+    @JsonProperty("userId")
18
+    private Long userId;
19
+
20
+    /**
21
+     * 员工姓名
22
+     */
23
+    @JsonProperty("userName")
24
+    private String userName;
25
+
26
+    /**
27
+     * 部门ID
28
+     */
29
+    @JsonProperty("deptId")
30
+    private Long deptId;
31
+
32
+    /**
33
+     * 部门名称
34
+     */
35
+    @JsonProperty("deptName")
36
+    private String deptName;
37
+
38
+    /**
39
+     * 队室/班组ID
40
+     */
41
+    @JsonProperty("teamId")
42
+    private Long teamId;
43
+
44
+    /**
45
+     * 队室/班组
46
+     */
47
+    @JsonProperty("teamName")
48
+    private String teamName;
49
+
50
+    /**
51
+     * 通道/小组ID
52
+     */
53
+    @JsonProperty("groupId")
54
+    private Long groupId;
55
+
56
+    /**
57
+     * 通道/小组
58
+     */
59
+    @JsonProperty("groupName")
60
+    private String groupName;
61
+
62
+    /**
63
+     * 总分
64
+     */
65
+    @JsonProperty("totalScore")
66
+    private BigDecimal totalScore;
67
+}

+ 0 - 24
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/vo/SeizeTotalAndItemVO.java

@@ -1,24 +0,0 @@
1
-package com.sundot.airport.ledger.domain.vo;
2
-
3
-import lombok.Data;
4
-
5
-import java.io.Serializable;
6
-import java.util.List;
7
-
8
-/**
9
- * 功能描述:查获信息展示-总数和项目信息
10
- *
11
- * @author PanHu Sun
12
- * @date 2026/5/20 13:36
13
- */
14
-@Data
15
-public class SeizeTotalAndItemVO implements Serializable {
16
-    /**
17
-     * 总查获数(左侧大数字)
18
-     */
19
-    private Integer totalSeizeNum;
20
-    /**
21
-     * 柱状图明细列表(右侧)
22
-     */
23
-    private List<SeizeItemVO> itemList;
24
-}

+ 12 - 1
airport-ledger/src/main/java/com/sundot/airport/ledger/mapper/ScoreEmployeeAdditionalMapper.java

@@ -1,8 +1,11 @@
1 1
 package com.sundot.airport.ledger.mapper;
2 2
 
3 3
 import java.util.List;
4
+import java.util.Map;
5
+
4 6
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 7
 import com.sundot.airport.ledger.domain.ScoreEmployeeAdditional;
8
+import com.sundot.airport.ledger.domain.vo.EmployeeAdditionalScoreVO;
6 9
 
7 10
 /**
8 11
  * 员工附加分Mapper接口
@@ -15,4 +18,12 @@ public interface ScoreEmployeeAdditionalMapper extends BaseMapper<ScoreEmployeeA
15 18
      * @return 员工附加分集合
16 19
      */
17 20
     List<ScoreEmployeeAdditional> selectScoreEmployeeAdditionalList(ScoreEmployeeAdditional scoreEmployeeAdditional);
18
-}
21
+
22
+    /**
23
+     * 按员工分组统计附加总分
24
+     *
25
+     * @param scoreEmployeeAdditional 查询条件
26
+     * @return 员工及对应总分列表
27
+     */
28
+    List<EmployeeAdditionalScoreVO> selectTotalScoreByEmployee(ScoreEmployeeAdditional scoreEmployeeAdditional);
29
+}

+ 2 - 7
airport-ledger/src/main/java/com/sundot/airport/ledger/service/ILedgerSeizureStatsService.java

@@ -3,12 +3,7 @@ package com.sundot.airport.ledger.service;
3 3
 import java.util.List;
4 4
 import com.baomidou.mybatisplus.extension.service.IService;
5 5
 import com.sundot.airport.ledger.domain.LedgerSeizureStats;
6
-import com.sundot.airport.ledger.domain.vo.CountQueryReqVO;
7
-import com.sundot.airport.ledger.domain.vo.CountSeizureSingleQuantityResVO;
8
-import com.sundot.airport.ledger.domain.vo.CountSeizureTotalQuantityResVO;
9
-import com.sundot.airport.ledger.domain.vo.SeizeCategoryQuantityVO;
10
-import com.sundot.airport.ledger.domain.vo.SeizeTotalAndItemVO;
11
-import com.sundot.airport.ledger.domain.vo.SeizureAreaVO;
6
+import com.sundot.airport.ledger.domain.vo.*;
12 7
 
13 8
 public interface ILedgerSeizureStatsService extends IService<LedgerSeizureStats> {
14 9
     List<LedgerSeizureStats> selectList(LedgerSeizureStats query);
@@ -45,7 +40,7 @@ public interface ILedgerSeizureStatsService extends IService<LedgerSeizureStats>
45 40
      * @author PanHu Sun
46 41
      * @date 2026/5/20 13:43
47 42
      */
48
-    SeizeTotalAndItemVO getTimeRangeStats(CountQueryReqVO countQueryReq);
43
+    DailyDeptStatisticsVO getTimeRangeStats(CountQueryReqVO countQueryReq);
49 44
 
50 45
     /**
51 46
      * 功能描述:查获物品分布

+ 10 - 1
airport-ledger/src/main/java/com/sundot/airport/ledger/service/IScoreEmployeeAdditionalService.java

@@ -3,6 +3,7 @@ package com.sundot.airport.ledger.service;
3 3
 import java.util.List;
4 4
 import com.baomidou.mybatisplus.extension.service.IService;
5 5
 import com.sundot.airport.ledger.domain.ScoreEmployeeAdditional;
6
+import com.sundot.airport.ledger.domain.vo.EmployeeAdditionalScoreVO;
6 7
 
7 8
 /**
8 9
  * 员工附加分Service接口
@@ -47,4 +48,12 @@ public interface IScoreEmployeeAdditionalService extends IService<ScoreEmployeeA
47 48
      * @return 结果
48 49
      */
49 50
     int deleteScoreEmployeeAdditionalById(Long id);
50
-}
51
+
52
+    /**
53
+     * 按员工分组统计附加总分
54
+     *
55
+     * @param scoreEmployeeAdditional 查询条件
56
+     * @return 员工及对应总分列表
57
+     */
58
+    List<EmployeeAdditionalScoreVO> selectTotalScoreByEmployee(ScoreEmployeeAdditional scoreEmployeeAdditional);
59
+}

+ 141 - 13
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSeizureStatsServiceImpl.java

@@ -3,23 +3,20 @@ package com.sundot.airport.ledger.service.impl;
3 3
 import cn.hutool.core.collection.CollUtil;
4 4
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5 5
 import com.google.common.collect.Lists;
6
+import com.sundot.airport.common.core.domain.entity.SysDept;
7
+import com.sundot.airport.common.enums.DeptTypeEnum;
6 8
 import com.sundot.airport.common.utils.DateUtils;
7 9
 import com.sundot.airport.ledger.domain.LedgerSeizureStats;
8
-import com.sundot.airport.ledger.domain.vo.CountQueryReqVO;
9
-import com.sundot.airport.ledger.domain.vo.CountSeizureSingleQuantityResVO;
10
-import com.sundot.airport.ledger.domain.vo.CountSeizureTotalQuantityResVO;
11
-import com.sundot.airport.ledger.domain.vo.LaneThroughputResVO;
12
-import com.sundot.airport.ledger.domain.vo.SeizeCategoryQuantityVO;
13
-import com.sundot.airport.ledger.domain.vo.SeizeItemVO;
14
-import com.sundot.airport.ledger.domain.vo.SeizeTotalAndItemVO;
15
-import com.sundot.airport.ledger.domain.vo.SeizureAreaVO;
10
+import com.sundot.airport.ledger.domain.vo.*;
16 11
 import com.sundot.airport.ledger.mapper.LedgerSeizureStatsMapper;
17 12
 import com.sundot.airport.ledger.service.ILedgerSeizureStatsService;
13
+import com.sundot.airport.system.service.ISysDeptService;
18 14
 import lombok.extern.slf4j.Slf4j;
19 15
 import org.springframework.beans.factory.annotation.Autowired;
20 16
 import org.springframework.stereotype.Service;
21 17
 import org.springframework.transaction.annotation.Transactional;
22 18
 
19
+import java.util.Calendar;
23 20
 import java.util.Date;
24 21
 import java.util.List;
25 22
 import java.util.Map;
@@ -35,6 +32,10 @@ public class LedgerSeizureStatsServiceImpl extends ServiceImpl<LedgerSeizureStat
35 32
     @Autowired
36 33
     private LedgerSeizureStatsMapper mapper;
37 34
 
35
+    @Autowired
36
+    private ISysDeptService sysDeptService;
37
+
38
+
38 39
     @Override
39 40
     public List<LedgerSeizureStats> selectList(LedgerSeizureStats query) {
40 41
         return mapper.selectList(query);
@@ -160,18 +161,145 @@ public class LedgerSeizureStatsServiceImpl extends ServiceImpl<LedgerSeizureStat
160 161
      * @date 2026/5/20 13:43
161 162
      */
162 163
     @Override
163
-    public SeizeTotalAndItemVO getTimeRangeStats(CountQueryReqVO countQueryReq) {
164
-        SeizeTotalAndItemVO result = new SeizeTotalAndItemVO();
164
+    public DailyDeptStatisticsVO getTimeRangeStats(CountQueryReqVO countQueryReq) {
165
+        DailyDeptStatisticsVO result = new DailyDeptStatisticsVO();
165 166
         // 总查获数
166 167
         Integer total = this.baseMapper.statsTimeRangeTotal(countQueryReq);
167 168
         result.setTotalSeizeNum(total);
168
-        // 柱状明细
169
-        List<SeizeItemVO> itemList = this.baseMapper.statsTimeRangeItem(countQueryReq);
169
+
170
+        List<DailyDeptStatisticsVO.DailyDeptItemVO> itemList = getDetailedStatsByLevel(countQueryReq);
171
+        
172
+        // 每日部门统计数据
170 173
         result.setItemList(itemList);
171 174
         return result;
172 175
     }
173 176
 
174 177
     /**
178
+     * 获取详细统计数据(每天每个部门/班组/小组的数据)
179
+     *
180
+     */
181
+    private List<DailyDeptStatisticsVO.DailyDeptItemVO> getDetailedStatsByLevel(CountQueryReqVO countQueryReq) {
182
+        List<DailyDeptStatisticsVO.DailyDeptItemVO> result = Lists.newArrayList();
183
+        
184
+        // 生成时间范围内的所有日期列表
185
+        List<Date> dateRange = generateDateRange(countQueryReq.getStartDate(), countQueryReq.getEndDate());
186
+        
187
+        // 判断查询类型
188
+        if (countQueryReq.getDeptId() == null && countQueryReq.getTeamId() == null && countQueryReq.getGroupId() == null) {
189
+            // 站级别查询:获取所有大队的数据
190
+            SysDept dept = new SysDept();
191
+            dept.setStatus("0");
192
+            dept.setDeptType("BRIGADE");
193
+            List<SysDept> brigadeList = sysDeptService.selectDeptList(dept);
194
+            
195
+            if (CollUtil.isNotEmpty(brigadeList)) {
196
+                for (SysDept brigade : brigadeList) {
197
+                    processDepartmentData(countQueryReq, dateRange, brigade.getDeptName(), brigade.getDeptId(), "DEPT", result);
198
+                }
199
+            }
200
+        } else {
201
+            // 部门/班组/小组级别查询
202
+            String displayName = "";
203
+            Long targetId = null;
204
+            String levelType = "";
205
+            if (countQueryReq.getGroupId() != null) {
206
+                SysDept dept = sysDeptService.selectDeptById(countQueryReq.getGroupId());
207
+                displayName = (dept != null) ? dept.getDeptName() : "小组" + countQueryReq.getDeptId();;
208
+                targetId = countQueryReq.getGroupId();
209
+                levelType = DeptTypeEnum.TEAMS.getCode();
210
+            }else if (countQueryReq.getTeamId() != null) {
211
+                SysDept dept = sysDeptService.selectDeptById(countQueryReq.getTeamId());
212
+                displayName = (dept != null) ? dept.getDeptName() : "班组" + countQueryReq.getDeptId();
213
+                targetId = countQueryReq.getTeamId();
214
+                levelType =DeptTypeEnum.MANAGER.getCode();
215
+            } else if (countQueryReq.getDeptId() != null) {
216
+                SysDept dept = sysDeptService.selectDeptById(countQueryReq.getDeptId());
217
+                displayName = (dept != null) ? dept.getDeptName() : "部门" + countQueryReq.getDeptId();
218
+                targetId = countQueryReq.getDeptId();
219
+                levelType =DeptTypeEnum.BRIGADE.getCode();
220
+            }
221
+            
222
+            processDepartmentData(countQueryReq, dateRange, displayName, targetId, levelType, result);
223
+        }
224
+        
225
+        return result;
226
+    }
227
+    
228
+    /**
229
+     * 处理单个部门/团队/小组的数据
230
+     */
231
+    private void processDepartmentData(CountQueryReqVO countQueryReq, List<Date> dateRange, String deptName, Long targetId, String levelType, List<DailyDeptStatisticsVO.DailyDeptItemVO> result) {
232
+        CountQueryReqVO req = new CountQueryReqVO();
233
+        req.setStartDate(countQueryReq.getStartDate());
234
+        req.setEndDate(countQueryReq.getEndDate());
235
+        
236
+        // 根据层级类型设置查询参数
237
+        switch (levelType) {
238
+            case "BRIGADE":
239
+                req.setDeptId(targetId);
240
+                break;
241
+            case "MANAGER":
242
+                req.setTeamId(targetId);
243
+                break;
244
+            case "TEAMS":
245
+                req.setGroupId(targetId);
246
+                break;
247
+        }
248
+        
249
+        // 获取统计数据
250
+        List<CountSeizureSingleQuantityResVO> dailyData = this.baseMapper.countSeizureSingleQuantity(req);
251
+        
252
+        // 创建日期到统计数据的映射
253
+        Map<String, CountSeizureSingleQuantityResVO> dataMap = dailyData.stream()
254
+                .collect(Collectors.toMap(
255
+                        item -> DateUtils.formatDateKey(item.getRecordDate()),
256
+                        item -> item,
257
+                        (existing, replacement) -> existing
258
+                ));
259
+        
260
+        // 没有数据的补0
261
+        for (Date date : dateRange) {
262
+            String dateKey = DateUtils.formatDateKey(date);
263
+            if (dataMap.containsKey(dateKey)) {
264
+                // 有数据,使用实际数据
265
+                CountSeizureSingleQuantityResVO dailyStat = dataMap.get(dateKey);
266
+                DailyDeptStatisticsVO.DailyDeptItemVO item = new DailyDeptStatisticsVO.DailyDeptItemVO();
267
+                item.setDeptName(deptName);
268
+                item.setDate(dailyStat.getRecordDate());
269
+                item.setSeizeNum(dailyStat.getSeizeQuantity());
270
+                result.add(item);
271
+            } else {
272
+                // 没有数据,补0
273
+                DailyDeptStatisticsVO.DailyDeptItemVO item = new DailyDeptStatisticsVO.DailyDeptItemVO();
274
+                item.setDeptName(deptName);
275
+                item.setDate(date);
276
+                item.setSeizeNum(0);
277
+                result.add(item);
278
+            }
279
+        }
280
+    }
281
+
282
+    /**
283
+     * 生成日期范围列表
284
+     */
285
+    private List<Date> generateDateRange(Date startDate, Date endDate) {
286
+        List<Date> dateList = Lists.newArrayList();
287
+
288
+        Calendar startCal = Calendar.getInstance();
289
+        startCal.setTime(startDate);
290
+
291
+        Calendar endCal = Calendar.getInstance();
292
+        endCal.setTime(endDate);
293
+
294
+        while (!startCal.getTime().after(endCal.getTime())) {
295
+            dateList.add(startCal.getTime());
296
+            startCal.add(Calendar.DAY_OF_MONTH, 1);
297
+        }
298
+
299
+        return dateList;
300
+    }
301
+
302
+    /**
175 303
      * 功能描述:查获物品分布
176 304
      *
177 305
      * @param countQueryReq 查询参数
@@ -202,4 +330,4 @@ public class LedgerSeizureStatsServiceImpl extends ServiceImpl<LedgerSeizureStat
202 330
         List<SeizureAreaVO> seizureAreaList = this.baseMapper.countSeizeAreaQuantity(countQueryReq);
203 331
         return CollUtil.emptyIfNull(seizureAreaList);
204 332
     }
205
-}
333
+}

+ 7 - 1
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/ScoreEmployeeAdditionalServiceImpl.java

@@ -4,6 +4,7 @@ import java.util.List;
4 4
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
5 5
 import com.sundot.airport.common.utils.DateUtils;
6 6
 import com.sundot.airport.ledger.domain.ScoreEmployeeAdditional;
7
+import com.sundot.airport.ledger.domain.vo.EmployeeAdditionalScoreVO;
7 8
 import com.sundot.airport.ledger.mapper.ScoreEmployeeAdditionalMapper;
8 9
 import com.sundot.airport.ledger.service.IScoreEmployeeAdditionalService;
9 10
 import org.springframework.beans.factory.annotation.Autowired;
@@ -80,4 +81,9 @@ public class ScoreEmployeeAdditionalServiceImpl extends ServiceImpl<ScoreEmploye
80 81
     public int deleteScoreEmployeeAdditionalById(Long id) {
81 82
         return scoreEmployeeAdditionalMapper.deleteById(id);
82 83
     }
83
-}
84
+
85
+    @Override
86
+    public List<EmployeeAdditionalScoreVO> selectTotalScoreByEmployee(ScoreEmployeeAdditional scoreEmployeeAdditional) {
87
+        return scoreEmployeeAdditionalMapper.selectTotalScoreByEmployee(scoreEmployeeAdditional);
88
+    }
89
+}

+ 4 - 0
airport-ledger/src/main/resources/mapper/ledger/LedgerSeizureStatsMapper.xml

@@ -222,5 +222,9 @@
222 222
         <if test="deptId != null">AND dept_id = #{deptId}</if>
223 223
         <if test="teamId != null">AND team_id = #{teamId}</if>
224 224
         <if test="groupId != null">AND group_id = #{groupId}</if>
225
+        <!-- 筛选空值 -->
226
+        AND dept_id IS NOT NULL AND dept_id != ''
227
+        AND team_id IS NOT NULL AND team_id != ''
228
+        AND inspector_id IS NOT NULL AND inspector_id != ''
225 229
     </sql>
226 230
 </mapper>

+ 3 - 3
airport-ledger/src/main/resources/mapper/ledger/OperationLanePeakThroughputMapper.xml

@@ -60,8 +60,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
60 60
             </choose>,
61 61
             SUM(throughput) AS totalThroughput,
62 62
             COUNT(*) AS totalRecord,
63
-            <!-- 过检率:分母0返回0.0,保留1位小数 -->
64
-            ROUND(IF(COUNT(*) = 0, 0, SUM(throughput) / COUNT(*)), 1) AS throughputRate
63
+            <!-- 过检率:分母0返回0.0,保留1位小数,使用总人数/不重复小时数来计算平均每小时过检人数 -->
64
+            ROUND(IF(COUNT(DISTINCT hour_of_day) = 0, 0, SUM(throughput) / COUNT(DISTINCT hour_of_day)), 1) AS throughputRate
65 65
         FROM operation_lane_peak_throughput
66 66
         WHERE
67 67
             del_flag = '0'
@@ -83,4 +83,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
83 83
         ORDER BY record_date ASC
84 84
     </select>
85 85
 
86
-</mapper>
86
+</mapper>

+ 35 - 1
airport-ledger/src/main/resources/mapper/ledger/ScoreEmployeeAdditionalMapper.xml

@@ -50,4 +50,38 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
50 50
         order by create_time desc
51 51
     </select>
52 52
 
53
-</mapper>
53
+    <select id="selectTotalScoreByEmployee" parameterType="ScoreEmployeeAdditional" resultType="com.sundot.airport.ledger.domain.vo.EmployeeAdditionalScoreVO">
54
+        select 
55
+            user_id as userId,
56
+            user_name as userName,
57
+            dept_id as deptId,
58
+            dept_name as deptName,
59
+            team_id as teamId,
60
+            team_name as teamName,
61
+            group_id as groupId,
62
+            group_name as groupName,
63
+            sum(
64
+                case 
65
+                    when type = 1 then score 
66
+                    when type = 2 then -score 
67
+                    else 0 
68
+                end
69
+            ) as totalScore
70
+        from score_employee_additional
71
+        <where>
72
+            del_flag = '0'
73
+            <if test="deptId != null "> and dept_id = #{deptId}</if>
74
+            <if test="deptName != null  and deptName != ''"> and dept_name like concat('%', #{deptName}, '%')</if>
75
+            <if test="teamId != null "> and team_id = #{teamId}</if>
76
+            <if test="teamName != null  and teamName != ''"> and team_name like concat('%', #{teamName}, '%')</if>
77
+            <if test="groupId != null "> and group_id = #{groupId}</if>
78
+            <if test="groupName != null  and groupName != ''"> and group_name like concat('%', #{groupName}, '%')</if>
79
+            <if test="userId != null "> and user_id = #{userId}</if>
80
+            <if test="userName != null  and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
81
+            <if test="monthOfRecord != null  and monthOfRecord != ''"> and month_of_record = #{monthOfRecord}</if>
82
+            <if test="type != null "> and type = #{type}</if>
83
+        </where>
84
+        group by user_id, user_name, dept_id, dept_name, team_id, team_name, group_id, group_name
85
+        order by totalScore desc
86
+    </select>
87
+</mapper>