wangxx 3 週間 前
コミット
c902f2bfe6

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

@@ -75,7 +75,7 @@ public class LedgerSeizureStatsController extends BaseController {
75 75
      */
76 76
     @PostMapping("/countSeizureSingleQuantity")
77 77
     public AjaxResult countSeizureSingleQuantity(@RequestBody CountQueryReqVO countQueryReq) {
78
-        List<CountSeizureSingleQuantityResVO> seizureQuantityList = service.countSeizureSingleQuantity(countQueryReq);
78
+        List<CountSeizureSingleQuantityDateResVO> seizureQuantityList = service.countSeizureSingleQuantity(countQueryReq);
79 79
         return AjaxResult.success(seizureQuantityList);
80 80
     }
81 81
 

+ 42 - 0
airport-ledger/src/main/java/com/sundot/airport/ledger/domain/vo/CountSeizureSingleQuantityDateResVO.java

@@ -0,0 +1,42 @@
1
+package com.sundot.airport.ledger.domain.vo;
2
+
3
+import com.fasterxml.jackson.annotation.JsonFormat;
4
+import lombok.Data;
5
+
6
+import java.io.Serializable;
7
+import java.util.Date;
8
+import java.util.List;
9
+
10
+@Data
11
+public class CountSeizureSingleQuantityDateResVO {
12
+    /**
13
+     * 日期
14
+     */
15
+    @JsonFormat(pattern = "yyyy-MM-dd")
16
+    private Date recordDate;
17
+
18
+    /**
19
+     * 该日期下的查获数量明细列表
20
+     */
21
+    private List<CountSeizureSingleQuantityDateResVO.SeizureItem> items;
22
+
23
+    @Data
24
+    public static class SeizureItem implements Serializable {
25
+        /**
26
+         * 维度名称:员工名/小组名/班组名/部门名
27
+         */
28
+        private String groupName;
29
+
30
+        /**
31
+         * 当日查获数量
32
+         */
33
+        private Integer seizeQuantity;
34
+
35
+        public SeizureItem() {}
36
+
37
+        public SeizureItem(String groupName, Integer seizeQuantity) {
38
+            this.groupName = groupName;
39
+            this.seizeQuantity = seizeQuantity;
40
+        }
41
+    }
42
+}

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

@@ -29,7 +29,7 @@ public interface ILedgerSeizureStatsService extends IService<LedgerSeizureStats>
29 29
      * @author PanHu Sun
30 30
      * @date 2026/5/20 10:43
31 31
      */
32
-    List<CountSeizureSingleQuantityResVO> countSeizureSingleQuantity(CountQueryReqVO countQueryReq);
32
+    List<CountSeizureSingleQuantityDateResVO> countSeizureSingleQuantity(CountQueryReqVO countQueryReq);
33 33
 
34 34
     /**
35 35
      * 功能描述:查获信息展示

+ 230 - 128
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/LedgerSeizureStatsServiceImpl.java

@@ -4,6 +4,7 @@ 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 6
 import com.sundot.airport.common.core.domain.entity.SysDept;
7
+import com.sundot.airport.common.core.domain.entity.SysUser;
7 8
 import com.sundot.airport.common.enums.DeptTypeEnum;
8 9
 import com.sundot.airport.common.utils.DateUtils;
9 10
 import com.sundot.airport.ledger.domain.LedgerSeizureStats;
@@ -11,6 +12,7 @@ import com.sundot.airport.ledger.domain.vo.*;
11 12
 import com.sundot.airport.ledger.mapper.LedgerSeizureStatsMapper;
12 13
 import com.sundot.airport.ledger.service.ILedgerSeizureStatsService;
13 14
 import com.sundot.airport.system.service.ISysDeptService;
15
+import com.sundot.airport.system.service.ISysUserService;
14 16
 import lombok.extern.slf4j.Slf4j;
15 17
 import org.springframework.beans.factory.annotation.Autowired;
16 18
 import org.springframework.stereotype.Service;
@@ -35,6 +37,10 @@ public class LedgerSeizureStatsServiceImpl extends ServiceImpl<LedgerSeizureStat
35 37
     @Autowired
36 38
     private ISysDeptService sysDeptService;
37 39
 
40
+    @Autowired
41
+    private ISysUserService sysUserService;
42
+
43
+
38 44
 
39 45
     @Override
40 46
     public List<LedgerSeizureStats> selectList(LedgerSeizureStats query) {
@@ -110,173 +116,269 @@ public class LedgerSeizureStatsServiceImpl extends ServiceImpl<LedgerSeizureStat
110 116
      * @date 2026/5/20 10:43
111 117
      */
112 118
     @Override
113
-    public List<CountSeizureSingleQuantityResVO> countSeizureSingleQuantity(CountQueryReqVO countQueryReq) {
114
-        List<CountSeizureSingleQuantityResVO> seizureQuantityResList = this.baseMapper.countSeizureSingleQuantity(countQueryReq);
115
-        seizureQuantityResList = CollUtil.emptyIfNull(seizureQuantityResList);
119
+    public List<CountSeizureSingleQuantityDateResVO> countSeizureSingleQuantity(CountQueryReqVO countQueryReq) {
120
+        List<CountSeizureSingleQuantityResVO> allData =  Lists.newArrayList();;
121
+        List<Date> dateRange = generateDateRange(countQueryReq.getStartDate(), countQueryReq.getEndDate());
122
+        
123
+        if (countQueryReq.getGroupId() != null) {
124
+            allData = handleGroupLevelQuery(countQueryReq, dateRange);
125
+        } else if (countQueryReq.getTeamId() != null) {
126
+            allData = handleTeamLevelQuery(countQueryReq, dateRange);
127
+        } else if (countQueryReq.getDeptId() != null) {
128
+            allData = handleDeptLevelQuery(countQueryReq, dateRange);
129
+        } else {
130
+            allData = handleStationLevelQuery(countQueryReq, dateRange);
131
+        }
116 132
 
117
-        log.info("SQL查询返回数据条数: {}", seizureQuantityResList.size());
133
+        // 按日期分组
134
+        Map<String, List<CountSeizureSingleQuantityResVO>> groupedByDate = allData.stream()
135
+                .collect(Collectors.groupingBy(vo -> DateUtils.formatDateKey(vo.getRecordDate())));
118 136
 
119
-        // 生成近30天的日期列表
120
-        List<Date> last30Days = DateUtils.generateLast30Days();
137
+        // 构建返回结果:每个日期对应一个对象,包含该日期下所有维度的查获数量
138
+        List<CountSeizureSingleQuantityDateResVO> resultList = Lists.newArrayList();
139
+        for (Date date : dateRange) {
140
+            String dateKey = DateUtils.formatDateKey(date);
141
+            CountSeizureSingleQuantityDateResVO dateResult = new CountSeizureSingleQuantityDateResVO();
142
+            dateResult.setRecordDate(date);
121 143
 
122
-        // 将查询结果按日期建立映射(只比较日期部分,忽略时间)
123
-        Map<String, CountSeizureSingleQuantityResVO> dataMap = seizureQuantityResList.stream()
144
+            List<CountSeizureSingleQuantityResVO> dayData = groupedByDate.get(dateKey);
145
+            if (CollUtil.isNotEmpty(dayData)) {
146
+                List<CountSeizureSingleQuantityDateResVO.SeizureItem> items = dayData.stream()
147
+                        .map(vo -> new CountSeizureSingleQuantityDateResVO.SeizureItem(vo.getGroupName(), vo.getSeizeQuantity()))
148
+                        .collect(Collectors.toList());
149
+                dateResult.setItems(items);
150
+            } else {
151
+                dateResult.setItems(Lists.newArrayList());
152
+            }
153
+            resultList.add(dateResult);
154
+        }
155
+
156
+        return resultList;
157
+    }
158
+    
159
+    /**
160
+     * 小组级别查询:获取小组下的人,按时间返回人的查获数
161
+     */
162
+    private List<CountSeizureSingleQuantityResVO> handleGroupLevelQuery(CountQueryReqVO countQueryReq, List<Date> dateRange) {
163
+        List<CountSeizureSingleQuantityResVO> resultList = Lists.newArrayList();
164
+        
165
+        SysDept groupDept = sysDeptService.selectDeptById(countQueryReq.getGroupId());
166
+        String groupName = (groupDept != null) ? groupDept.getDeptName() : "小组" + countQueryReq.getGroupId();
167
+        
168
+        List<SysUser> members = sysUserService.selectUserByDeptId(countQueryReq.getGroupId());
169
+        if (CollUtil.isEmpty(members)) {
170
+            for (Date date : dateRange) {
171
+                resultList.add(new CountSeizureSingleQuantityResVO(date, groupName));
172
+            }
173
+            return resultList;
174
+        }
175
+
176
+        CountQueryReqVO queryReq = new CountQueryReqVO();
177
+        queryReq.setStartDate(countQueryReq.getStartDate());
178
+        queryReq.setEndDate(countQueryReq.getEndDate());
179
+        queryReq.setGroupId(countQueryReq.getGroupId());
180
+        List<CountSeizureSingleQuantityResVO> memberData = this.baseMapper.countSeizureSingleQuantity(queryReq);
181
+        Map<String, CountSeizureSingleQuantityResVO> dataMap = memberData.stream()
124 182
                 .collect(Collectors.toMap(
125
-                        vo -> DateUtils.formatDateKey(vo.getRecordDate()),
183
+                        vo -> (DateUtils.formatDateKey(vo.getRecordDate())+"_"+vo.getGroupName()),
126 184
                         vo -> vo,
127 185
                         (existing, replacement) -> existing
128 186
                 ));
129
-
130
-        log.info("数据Map中的日期键: {}", dataMap.keySet());
131
-
132
-        // 获取小组名称
133
-        String groupName = "";
134
-        if (CollUtil.isNotEmpty(seizureQuantityResList)) {
135
-            groupName = seizureQuantityResList.get(0).getGroupName();
136
-        }
137
-
138
-        // 补齐缺失的日期数据
139
-        List<CountSeizureSingleQuantityResVO> resultList = Lists.newArrayList();
140
-        for (Date date : last30Days) {
141
-            String dateKey = DateUtils.formatDateKey(date);
142
-            if (dataMap.containsKey(dateKey)) {
143
-                // 存在的日期,使用查询结果
144
-                resultList.add(dataMap.get(dateKey));
145
-            } else {
146
-                // 缺失的日期,补充0数据
147
-                CountSeizureSingleQuantityResVO countSeizureTotalQuantity = new CountSeizureSingleQuantityResVO(date, groupName);
148
-                resultList.add(countSeizureTotalQuantity);
187
+        for (SysUser member : members) {
188
+            memberData = CollUtil.emptyIfNull(memberData);
189
+            for (Date date : dateRange) {
190
+                String dateKey = DateUtils.formatDateKey(date)+"_"+member.getNickName();
191
+                if (dataMap.containsKey(dateKey)) {
192
+                    CountSeizureSingleQuantityResVO vo = dataMap.get(dateKey);
193
+                    vo.setGroupName(member.getNickName());
194
+                    resultList.add(vo);
195
+                } else {
196
+                    resultList.add(new CountSeizureSingleQuantityResVO(date, member.getNickName()));
197
+                }
149 198
             }
150 199
         }
200
+        
151 201
         return resultList;
152 202
     }
153
-
203
+    
154 204
     /**
155
-     * 功能描述:查获信息展示
156
-     *
157
-     * @param countQueryReq 查询参数
158
-     * @return SeizeTotalAndItemVO
159
-     * @method getTimeRangeStats
160
-     * @author PanHu Sun
161
-     * @date 2026/5/20 13:43
205
+     * 班组级别查询:获取班组下的小组,按时间返回小组的查获数
162 206
      */
163
-    @Override
164
-    public SeizeTotalAndItemVO getTimeRangeStats(CountQueryReqVO countQueryReq) {
165
-        SeizeTotalAndItemVO result = new SeizeTotalAndItemVO();
166
-        // 总查获数
167
-        Integer total = this.baseMapper.statsTimeRangeTotal(countQueryReq);
168
-        result.setTotalSeizeNum(total);
169
-        // 柱状明细
170
-        List<SeizeItemVO> itemList = this.baseMapper.statsTimeRangeItem(countQueryReq);
171
-        result.setItemList(itemList);
172
-        return result;
173
-    }
207
+    private List<CountSeizureSingleQuantityResVO> handleTeamLevelQuery(CountQueryReqVO countQueryReq, List<Date> dateRange) {
208
+        List<CountSeizureSingleQuantityResVO> resultList = Lists.newArrayList();
209
+        
210
+        SysDept teamDept = sysDeptService.selectDeptById(countQueryReq.getTeamId());
211
+        String teamName = (teamDept != null) ? teamDept.getDeptName() : "班组" + countQueryReq.getTeamId();
212
+        
213
+        List<SysDept> groups = sysDeptService.selectChildrenDeptById(countQueryReq.getTeamId());
214
+        if (CollUtil.isEmpty(groups)) {
215
+            for (Date date : dateRange) {
216
+                resultList.add(new CountSeizureSingleQuantityResVO(date, teamName));
217
+            }
218
+            return resultList;
219
+        }
220
+        groups = groups.stream().filter(team -> DeptTypeEnum.TEAMS.getCode().equals(team.getDeptType())).collect(Collectors.toList());
174 221
 
222
+        CountQueryReqVO queryReq = new CountQueryReqVO();
223
+        queryReq.setStartDate(countQueryReq.getStartDate());
224
+        queryReq.setEndDate(countQueryReq.getEndDate());
225
+        queryReq.setTeamId(countQueryReq.getTeamId());
226
+        List<CountSeizureSingleQuantityResVO> groupData = this.baseMapper.countSeizureSingleQuantity(queryReq);
227
+        groupData = CollUtil.emptyIfNull(groupData);
228
+        Map<String, CountSeizureSingleQuantityResVO> dataMap = groupData.stream()
229
+                .collect(Collectors.toMap(
230
+                        vo -> (DateUtils.formatDateKey(vo.getRecordDate())+"_"+vo.getGroupName()),
231
+                        vo -> vo,
232
+                        (existing, replacement) -> existing
233
+                ));
234
+        
235
+        for (SysDept group : groups) {
236
+            for (Date date : dateRange) {
237
+                String dateKey = DateUtils.formatDateKey(date)+"_"+group.getDeptName();
238
+                if (dataMap.containsKey(dateKey)) {
239
+                    CountSeizureSingleQuantityResVO vo = dataMap.get(dateKey);
240
+                    vo.setGroupName(group.getDeptName());
241
+                    resultList.add(vo);
242
+                } else {
243
+                    resultList.add(new CountSeizureSingleQuantityResVO(date, group.getDeptName()));
244
+                }
245
+            }
246
+        }
247
+        
248
+        return resultList;
249
+    }
250
+    
175 251
     /**
176
-     * 获取详细统计数据(每天每个部门/班组/小组的数据)
177
-     *
252
+     * 部门级别查询:获取部门下的班组,按时间返回班组的查获数
178 253
      */
179
-    private List<DailyDeptStatisticsVO.DailyDeptItemVO> getDetailedStatsByLevel(CountQueryReqVO countQueryReq) {
180
-        List<DailyDeptStatisticsVO.DailyDeptItemVO> result = Lists.newArrayList();
254
+    private List<CountSeizureSingleQuantityResVO> handleDeptLevelQuery(CountQueryReqVO countQueryReq, List<Date> dateRange) {
255
+        List<CountSeizureSingleQuantityResVO> resultList = Lists.newArrayList();
181 256
         
182
-        // 生成时间范围内的所有日期列表
183
-        List<Date> dateRange = generateDateRange(countQueryReq.getStartDate(), countQueryReq.getEndDate());
257
+        SysDept dept = sysDeptService.selectDeptById(countQueryReq.getDeptId());
258
+        String deptName = (dept != null) ? dept.getDeptName() : "部门" + countQueryReq.getDeptId();
184 259
         
185
-        // 判断查询类型
186
-        if (countQueryReq.getDeptId() == null && countQueryReq.getTeamId() == null && countQueryReq.getGroupId() == null) {
187
-            // 站级别查询:获取所有大队的数据
188
-            SysDept dept = new SysDept();
189
-            dept.setStatus("0");
190
-            dept.setDeptType("BRIGADE");
191
-            List<SysDept> brigadeList = sysDeptService.selectDeptList(dept);
260
+        List<SysDept> teams = sysDeptService.selectChildrenDeptById(countQueryReq.getDeptId());
261
+        if (CollUtil.isEmpty(teams)) {
262
+            for (Date date : dateRange) {
263
+                resultList.add(new CountSeizureSingleQuantityResVO(date, deptName));
264
+            }
265
+            return resultList;
266
+        }
267
+        //部门只要班组的
268
+        teams = teams.stream().filter(team -> DeptTypeEnum.MANAGER.getCode().equals(team.getDeptType())).collect(Collectors.toList());
269
+        CountQueryReqVO queryReq = new CountQueryReqVO();
270
+        queryReq.setStartDate(countQueryReq.getStartDate());
271
+        queryReq.setEndDate(countQueryReq.getEndDate());
272
+        queryReq.setDeptId(countQueryReq.getDeptId());
273
+        List<CountSeizureSingleQuantityResVO> teamData = this.baseMapper.countSeizureSingleQuantity(queryReq);
274
+        for (SysDept team : teams) {
275
+            teamData = CollUtil.emptyIfNull(teamData);
276
+            Map<String, CountSeizureSingleQuantityResVO> dataMap = teamData.stream()
277
+                    .collect(Collectors.toMap(
278
+                            vo -> (DateUtils.formatDateKey(vo.getRecordDate())+"_"+vo.getGroupName()),
279
+                            vo -> vo,
280
+                            (existing, replacement) -> existing
281
+                    ));
192 282
             
193
-            if (CollUtil.isNotEmpty(brigadeList)) {
194
-                for (SysDept brigade : brigadeList) {
195
-                    processDepartmentData(countQueryReq, dateRange, brigade.getDeptName(), brigade.getDeptId(), "DEPT", result);
283
+            for (Date date : dateRange) {
284
+                String dateKey = DateUtils.formatDateKey(date)+"_"+team.getDeptName();
285
+                if (dataMap.containsKey(dateKey)) {
286
+                    CountSeizureSingleQuantityResVO vo = dataMap.get(dateKey);
287
+                    vo.setGroupName(team.getDeptName());
288
+                    resultList.add(vo);
289
+                } else {
290
+                    resultList.add(new CountSeizureSingleQuantityResVO(date, team.getDeptName()));
196 291
                 }
197 292
             }
198
-        } else {
199
-            // 部门/班组/小组级别查询
200
-            String displayName = "";
201
-            Long targetId = null;
202
-            String levelType = "";
203
-            if (countQueryReq.getGroupId() != null) {
204
-                SysDept dept = sysDeptService.selectDeptById(countQueryReq.getGroupId());
205
-                displayName = (dept != null) ? dept.getDeptName() : "小组" + countQueryReq.getDeptId();;
206
-                targetId = countQueryReq.getGroupId();
207
-                levelType = DeptTypeEnum.TEAMS.getCode();
208
-            }else if (countQueryReq.getTeamId() != null) {
209
-                SysDept dept = sysDeptService.selectDeptById(countQueryReq.getTeamId());
210
-                displayName = (dept != null) ? dept.getDeptName() : "班组" + countQueryReq.getDeptId();
211
-                targetId = countQueryReq.getTeamId();
212
-                levelType =DeptTypeEnum.MANAGER.getCode();
213
-            } else if (countQueryReq.getDeptId() != null) {
214
-                SysDept dept = sysDeptService.selectDeptById(countQueryReq.getDeptId());
215
-                displayName = (dept != null) ? dept.getDeptName() : "部门" + countQueryReq.getDeptId();
216
-                targetId = countQueryReq.getDeptId();
217
-                levelType =DeptTypeEnum.BRIGADE.getCode();
218
-            }
219
-            
220
-            processDepartmentData(countQueryReq, dateRange, displayName, targetId, levelType, result);
221 293
         }
222 294
         
223
-        return result;
295
+        return resultList;
224 296
     }
225 297
     
226 298
     /**
227
-     * 处理单个部门/团队/小组的数据
299
+     * 站级别查询:获取站下的大队,按时间返回大队的查获数
228 300
      */
229
-    private void processDepartmentData(CountQueryReqVO countQueryReq, List<Date> dateRange, String deptName, Long targetId, String levelType, List<DailyDeptStatisticsVO.DailyDeptItemVO> result) {
230
-        CountQueryReqVO req = new CountQueryReqVO();
231
-        req.setStartDate(countQueryReq.getStartDate());
232
-        req.setEndDate(countQueryReq.getEndDate());
301
+    private List<CountSeizureSingleQuantityResVO> handleStationLevelQuery(CountQueryReqVO countQueryReq, List<Date> dateRange) {
302
+        List<CountSeizureSingleQuantityResVO> resultList = Lists.newArrayList();
303
+        
304
+        SysDept stationDept = new SysDept();
305
+        stationDept.setStatus("0");
306
+        stationDept.setDeptType("STATION");
307
+        List<SysDept> stationList = sysDeptService.selectDeptList(stationDept);
233 308
         
234
-        // 根据层级类型设置查询参数
235
-        switch (levelType) {
236
-            case "BRIGADE":
237
-                req.setDeptId(targetId);
238
-                break;
239
-            case "MANAGER":
240
-                req.setTeamId(targetId);
241
-                break;
242
-            case "TEAMS":
243
-                req.setGroupId(targetId);
244
-                break;
309
+        if (CollUtil.isEmpty(stationList)) {
310
+            return resultList;
245 311
         }
246 312
         
247
-        // 获取统计数据
248
-        List<CountSeizureSingleQuantityResVO> dailyData = this.baseMapper.countSeizureSingleQuantity(req);
313
+        SysDept station = stationList.get(0);
314
+        
315
+        SysDept brigadeDept = new SysDept();
316
+        brigadeDept.setStatus("0");
317
+        brigadeDept.setDeptType("BRIGADE");
318
+        List<SysDept> allBrigades = sysDeptService.selectDeptList(brigadeDept);
319
+        
320
+        List<SysDept> brigades = allBrigades.stream()
321
+                .filter(b -> b.getParentId() != null && b.getParentId().equals(station.getDeptId()))
322
+                .collect(Collectors.toList());
249 323
         
250
-        // 创建日期到统计数据的映射
251
-        Map<String, CountSeizureSingleQuantityResVO> dataMap = dailyData.stream()
324
+        if (CollUtil.isEmpty(brigades)) {
325
+            for (Date date : dateRange) {
326
+                resultList.add(new CountSeizureSingleQuantityResVO(date, "站"));
327
+            }
328
+            return resultList;
329
+        }
330
+
331
+        CountQueryReqVO queryReq = new CountQueryReqVO();
332
+        queryReq.setStartDate(countQueryReq.getStartDate());
333
+        queryReq.setEndDate(countQueryReq.getEndDate());
334
+        List<CountSeizureSingleQuantityResVO> brigadeData = this.baseMapper.countSeizureSingleQuantity(queryReq);
335
+        brigadeData = CollUtil.emptyIfNull(brigadeData);
336
+
337
+        Map<String, CountSeizureSingleQuantityResVO> dataMap = brigadeData.stream()
252 338
                 .collect(Collectors.toMap(
253
-                        item -> DateUtils.formatDateKey(item.getRecordDate()),
254
-                        item -> item,
339
+                        vo -> DateUtils.formatDateKey(vo.getRecordDate()) + "_" + vo.getGroupName(),
340
+                        vo -> vo,
255 341
                         (existing, replacement) -> existing
256 342
                 ));
257 343
         
258
-        // 没有数据的补0
259
-        for (Date date : dateRange) {
260
-            String dateKey = DateUtils.formatDateKey(date);
261
-            if (dataMap.containsKey(dateKey)) {
262
-                // 有数据,使用实际数据
263
-                CountSeizureSingleQuantityResVO dailyStat = dataMap.get(dateKey);
264
-                DailyDeptStatisticsVO.DailyDeptItemVO item = new DailyDeptStatisticsVO.DailyDeptItemVO();
265
-                item.setDeptName(deptName);
266
-                item.setDate(dailyStat.getRecordDate());
267
-                item.setSeizeNum(dailyStat.getSeizeQuantity());
268
-                result.add(item);
269
-            } else {
270
-                // 没有数据,补0
271
-                DailyDeptStatisticsVO.DailyDeptItemVO item = new DailyDeptStatisticsVO.DailyDeptItemVO();
272
-                item.setDeptName(deptName);
273
-                item.setDate(date);
274
-                item.setSeizeNum(0);
275
-                result.add(item);
344
+        for (SysDept brigade : brigades) {
345
+            for (Date date : dateRange) {
346
+                String dateKey = DateUtils.formatDateKey(date) + "_" + brigade.getDeptName();
347
+                if (dataMap.containsKey(dateKey)) {
348
+                    CountSeizureSingleQuantityResVO vo = dataMap.get(dateKey);
349
+                    vo.setGroupName(brigade.getDeptName());
350
+                    resultList.add(vo);
351
+                } else {
352
+                    resultList.add(new CountSeizureSingleQuantityResVO(date, brigade.getDeptName()));
353
+                }
276 354
             }
277 355
         }
356
+        
357
+        return resultList;
358
+    }
359
+
360
+    /**
361
+     * 功能描述:查获信息展示
362
+     *
363
+     * @param countQueryReq 查询参数
364
+     * @return SeizeTotalAndItemVO
365
+     * @method getTimeRangeStats
366
+     * @author PanHu Sun
367
+     * @date 2026/5/20 13:43
368
+     */
369
+    @Override
370
+    public SeizeTotalAndItemVO getTimeRangeStats(CountQueryReqVO countQueryReq) {
371
+        SeizeTotalAndItemVO result = new SeizeTotalAndItemVO();
372
+        // 总查获数
373
+        Integer total = this.baseMapper.statsTimeRangeTotal(countQueryReq);
374
+        result.setTotalSeizeNum(total);
375
+        // 柱状明细
376
+        List<SeizeItemVO> itemList = this.baseMapper.statsTimeRangeItem(countQueryReq);
377
+        result.setItemList(itemList);
378
+        return result;
278 379
     }
279 380
 
381
+
280 382
     /**
281 383
      * 生成日期范围列表
282 384
      */