浏览代码

代码优化

fuyuchuan 5 天之前
父节点
当前提交
d65ae2a099

+ 8 - 7
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/DemFireAccidentDescController.java

@@ -8,6 +8,7 @@ import com.usky.common.log.annotation.Log;
 import com.usky.common.log.enums.BusinessType;
 import com.usky.fire.domain.DemFileLabel;
 import com.usky.fire.service.DemFireStatisticsService;
+import com.usky.fire.service.vo.DemFireStatisticsDTO;
 import com.usky.fire.service.vo.DemFireStatisticsExportVO;
 import com.usky.fire.service.vo.DemFireStatisticsVo;
 import com.usky.fire.service.vo.ParameterVo;
@@ -44,12 +45,12 @@ public class DemFireAccidentDescController {
      * @return
      */
     @GetMapping("fireAccidentStatistic")
-    public ApiResult<CommonPage<Object>> fireAccidentStatistic(@RequestParam(value = "fireNumber", required = false) String fireNumber,
-                                                               @RequestParam(value = "labelId", required = false) Integer labelId,
-                                                               @RequestParam(value = "classifyId", required = false, defaultValue = "0") Integer classifyId,
-                                                               @RequestParam(value = "id", required = false, defaultValue = "0") Integer id,
-                                                               @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
-                                                               @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
+    public ApiResult<CommonPage<DemFireStatisticsDTO>> fireAccidentStatistic(@RequestParam(value = "fireNumber", required = false) String fireNumber,
+                                                                             @RequestParam(value = "labelId", required = false) Integer labelId,
+                                                                             @RequestParam(value = "classifyId", required = false, defaultValue = "0") Integer classifyId,
+                                                                             @RequestParam(value = "id", required = false, defaultValue = "0") Integer id,
+                                                                             @RequestParam(value = "pageNum", required = false, defaultValue = "1") Integer pageNum,
+                                                                             @RequestParam(value = "pageSize", required = false, defaultValue = "10") Integer pageSize) {
         return ApiResult.success(demFireStatisticsService.fireAccidentStatistic(fireNumber, labelId, classifyId, id, pageNum, pageSize));
     }
 
@@ -70,7 +71,7 @@ public class DemFireAccidentDescController {
                        @RequestParam(value = "exportTitle") String exportTitle) throws IOException {
         List<DemFireStatisticsExportVO> list = demFireStatisticsService.fireAccidentStatisticExport(fireNumber, labelId, classifyId);
         ExcelUtil<DemFireStatisticsExportVO> util = new ExcelUtil<DemFireStatisticsExportVO>(DemFireStatisticsExportVO.class);
-        util.exportExcel(response,list,exportTitle,exportTitle);
+        util.exportExcel(response, list, exportTitle, exportTitle);
     }
 
     /**

+ 1 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/DemFireStatisticsService.java

@@ -34,7 +34,7 @@ public interface DemFireStatisticsService extends CrudService<DemFireStatistics>
      * @param pageSize   每页条数
      * @return
      */
-    CommonPage<Object> fireAccidentStatistic(String fireNumber, Integer labelId, Integer classifyId, Integer id, Integer pageNum, Integer pageSize);
+    CommonPage<DemFireStatisticsDTO> fireAccidentStatistic(String fireNumber, Integer labelId, Integer classifyId, Integer id, Integer pageNum, Integer pageSize);
 
     /**
      * 火灾数据管理-列表查询-导出

+ 11 - 9
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/config/pdf/MyHeaderFooter.java

@@ -9,6 +9,7 @@ public class MyHeaderFooter extends PdfPageEventHelper {
     // 总页数
     PdfTemplate totalPage;
     Font hfFont;
+
     {
         try {
             hfFont = new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 8, Font.NORMAL);
@@ -21,37 +22,38 @@ public class MyHeaderFooter extends PdfPageEventHelper {
 
     // 打开文档时,创建一个总页数的模版
     public void onOpenDocument(PdfWriter writer, Document document) {
-        PdfContentByte cb =writer.getDirectContent();
+        PdfContentByte cb = writer.getDirectContent();
         totalPage = cb.createTemplate(30, 16);
     }
+
     // 一页加载完成触发,写入页眉和页脚
     public void onEndPage(PdfWriter writer, Document document) {
         PdfPTable table = new PdfPTable(3);
         try {
             table.setTotalWidth(PageSize.A4.getWidth() - 100);
-            table.setWidths(new int[] { 24, 24, 3});
+            table.setWidths(new int[]{24, 24, 3});
             table.setLockedWidth(true);
             table.getDefaultCell().setFixedHeight(-10);
             table.getDefaultCell().setBorder(Rectangle.BOTTOM);
 
-            table.addCell(new Paragraph("我是页眉/页脚", hfFont));// 可以直接使用addCell(str),不过不能指定字体,中文无法显示
+            // table.addCell(new Paragraph("我是页眉/页脚", hfFont));// 可以直接使用addCell(str),不过不能指定字体,中文无法显示
             table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_RIGHT);
             table.addCell(new Paragraph("第" + writer.getPageNumber() + "页/", hfFont));
-// 总页数
+            // 总页数
             PdfPCell cell = new PdfPCell(Image.getInstance(totalPage));
             cell.setBorder(Rectangle.BOTTOM);
             table.addCell(cell);
-// 将页眉写到document中,位置可以指定,指定到下面就是页脚
-            table.writeSelectedRows(0, -1, 50,PageSize.A4.getHeight() - 20, writer.getDirectContent());
+            // 将页眉写到document中,位置可以指定,指定到下面就是页脚
+            table.writeSelectedRows(0, -1, 50, PageSize.A4.getHeight() - 20, writer.getDirectContent());
         } catch (Exception de) {
             throw new ExceptionConverter(de);
         }
     }
 
     // 全部完成后,将总页数的pdf模版写到指定位置
-    public void onCloseDocument(PdfWriter writer,Document document) {
-        String text = "总" + (writer.getPageNumber()-1) + "页";
-        ColumnText.showTextAligned(totalPage, Element.ALIGN_LEFT, new Paragraph(text,hfFont), 2, 2, 0);
+    public void onCloseDocument(PdfWriter writer, Document document) {
+        String text = "总" + (writer.getPageNumber() - 1) + "页";
+        ColumnText.showTextAligned(totalPage, Element.ALIGN_LEFT, new Paragraph(text, hfFont), 2, 2, 0);
     }
 
 }

+ 62 - 33
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BaseCompanyPersonServiceImpl.java

@@ -23,6 +23,8 @@ import org.springframework.stereotype.Service;
 import java.text.SimpleDateFormat;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -42,54 +44,80 @@ public class BaseCompanyPersonServiceImpl extends AbstractCrudService<BaseCompan
     private BaseCompanyMapper baseCompanyMapper;
 
     @Override
-    public CommonPage<BaseCompanyPerson> baseCompanyPersonList(String companyCode, String companyName, Integer pageNum, Integer pageSize) {
-//        IPage<BaseCompany> page1 = new Page<>(pageNum, pageSize);
-        IPage<BaseCompanyPerson> page = new Page<>(pageNum, pageSize);
-        LambdaQueryWrapper<BaseCompany> queryWrapper1 = Wrappers.lambdaQuery();
-        queryWrapper1.select(BaseCompany::getCompanyId)
-                .eq(BaseCompany::getEnable,0)
-                .eq(BaseCompany::getCompanyType,"1")
+    public CommonPage<BaseCompanyPerson> baseCompanyPersonList(String companyCode,
+                                                               String companyName,
+                                                               Integer pageNum,
+                                                               Integer pageSize) {
+
+        /* 1. 先查符合条件的公司 */
+        LambdaQueryWrapper<BaseCompany> qwCompany = Wrappers.lambdaQuery();
+        qwCompany.select(BaseCompany::getCompanyId, BaseCompany::getCompanyName, BaseCompany::getCompanyCode)
+                .eq(BaseCompany::getEnable, 0)
+                .eq(BaseCompany::getCompanyType, "1")
                 .like(StringUtils.isNotBlank(companyCode), BaseCompany::getCompanyCode, companyCode)
                 .like(StringUtils.isNotBlank(companyName), BaseCompany::getCompanyName, companyName)
                 .orderByDesc(BaseCompany::getId);
-        List<BaseCompany> baseCompanies = baseCompanyMapper.selectList(queryWrapper1);
-        if (CollectionUtils.isNotEmpty(baseCompanies)){
-            List<String> companyIdList = new ArrayList<>();
-            for (int i = 0; i < baseCompanies.size(); i++) {
-                companyIdList.add(baseCompanies.get(i).getCompanyId());
-            }
-            LambdaQueryWrapper<BaseCompanyPerson> queryWrapper = Wrappers.lambdaQuery();
-            queryWrapper.in(BaseCompanyPerson::getCompanyId, companyIdList)
-                    .orderByDesc(BaseCompanyPerson::getId);
-            page = this.page(page, queryWrapper);
-            if (page.getTotal() > 0) {
-                List<BaseCompanyPerson> baseCompanyPeople = mhPostInspectMapper.inspectStatistics(null);
-                for (int i = 0; i < page.getRecords().size(); i++) {
-                    for (int j = 0; j < baseCompanyPeople.size(); j++) {
-                        if (page.getRecords().get(i).getCompanyId().equals(baseCompanyPeople.get(j).getCompanyId())) {
-                            page.getRecords().get(i).setInspectCount(baseCompanyPeople.get(j).getInspectCount());
-                            page.getRecords().get(i).setAnswerCount(baseCompanyPeople.get(j).getAnswerCount());
-                            page.getRecords().get(i).setInspectTime(baseCompanyPeople.get(j).getInspectTime());
-                        }
-                    }
-                }
-            }
 
+        List<BaseCompany> companyList = baseCompanyMapper.selectList(qwCompany);
+        if (CollectionUtils.isEmpty(companyList)) {
+            return new CommonPage<>(Collections.emptyList(), 0L, pageSize, pageNum);
+        }
+
+        /* 2. 构造 companyId -> 公司 的映射,后续 O(1) 取值 */
+        Map<String, BaseCompany> companyMap = companyList.stream()
+                .collect(Collectors.toMap(BaseCompany::getCompanyId, Function.identity()));
+
+        /* 3. 根据公司 ID 分页查人 */
+        List<String> companyIds = companyList.stream()
+                .map(BaseCompany::getCompanyId)
+                .collect(Collectors.toList());
+
+        Page<BaseCompanyPerson> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<BaseCompanyPerson> qwPerson = Wrappers.lambdaQuery();
+        qwPerson.in(BaseCompanyPerson::getCompanyId, companyIds)
+                .orderByDesc(BaseCompanyPerson::getId);
+
+        page = this.page(page, qwPerson);
+
+        /* 4. 给人补公司字段 + 巡检统计 */
+        if (page.getRecords().size() > 0) {
+            // 4.1 巡检统计一次性查回来
+            List<BaseCompanyPerson> inspectList = mhPostInspectMapper.inspectStatistics(null);
+            Map<String, BaseCompanyPerson> inspectMap = inspectList.stream()
+                    .collect(Collectors.toMap(BaseCompanyPerson::getCompanyId, Function.identity(), (a, b) -> a));
+
+            // 4.2 遍历补齐
+            page.getRecords().forEach(p -> {
+                // 补公司信息
+                BaseCompany c = companyMap.get(p.getCompanyId());
+                if (c != null) {   // 兜底,防止数据不一致
+                    p.setCompanyName(c.getCompanyName());
+                    p.setCompanyCode(c.getCompanyCode());
+                }
+                // 补巡检信息
+                BaseCompanyPerson ins = inspectMap.get(p.getCompanyId());
+                if (ins != null) {
+                    p.setInspectCount(ins.getInspectCount());
+                    p.setAnswerCount(ins.getAnswerCount());
+                    p.setInspectTime(ins.getInspectTime());
+                }
+            });
         }
+
         return new CommonPage<>(page.getRecords(), page.getTotal(), pageSize, pageNum);
     }
 
     @Override
-    public List<BaseCompanyPersonVO> baseCompanyPersonListExport(String companyCode,String companyName){
+    public List<BaseCompanyPersonVO> baseCompanyPersonListExport(String companyCode, String companyName) {
         LambdaQueryWrapper<BaseCompany> queryWrapper1 = Wrappers.lambdaQuery();
         queryWrapper1.select(BaseCompany::getCompanyId)
-                .eq(BaseCompany::getEnable,0)
+                .eq(BaseCompany::getEnable, 0)
                 .like(StringUtils.isNotBlank(companyCode), BaseCompany::getCompanyCode, companyCode)
                 .like(StringUtils.isNotBlank(companyName), BaseCompany::getCompanyName, companyName)
                 .orderByDesc(BaseCompany::getId);
         List<BaseCompany> baseCompanies = baseCompanyMapper.selectList(queryWrapper1);
         List<BaseCompanyPersonVO> list = new ArrayList<>();
-        if (CollectionUtils.isNotEmpty(baseCompanies)){
+        if (CollectionUtils.isNotEmpty(baseCompanies)) {
             List<String> companyIdList = new ArrayList<>();
             for (int i = 0; i < baseCompanies.size(); i++) {
                 companyIdList.add(baseCompanies.get(i).getCompanyId());
@@ -154,8 +182,9 @@ public class BaseCompanyPersonServiceImpl extends AbstractCrudService<BaseCompan
         map.put("notAnsweredCount", notAnsweredCount);
         return map;
     }
+
     @Override
-    public List<BaseCompanyPerson> baseCompanyPersonByCompanyId(String companyId){
+    public List<BaseCompanyPerson> baseCompanyPersonByCompanyId(String companyId) {
         LambdaQueryWrapper<BaseCompanyPerson> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.select(BaseCompanyPerson::getFireManageName)
                 .eq(BaseCompanyPerson::getCompanyId, companyId);

+ 81 - 95
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/DemFireStatisticsServiceImpl.java

@@ -35,6 +35,7 @@ import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -58,18 +59,21 @@ public class DemFireStatisticsServiceImpl extends AbstractCrudService<DemFireSta
     private DemFireLabelAttributeService demFireLabelAttributeService;
 
     @Override
-    public CommonPage<Object> fireAccidentStatistic(String fireNumber, Integer labelId, Integer classifyId, Integer id, Integer pageNum, Integer pageSize) {
-        Integer type1 = 0;
-        Integer type2 = 0;
-        Integer type3 = 0;
-        Integer type4 = 0;
-        Integer type5 = 0;
+    public CommonPage<DemFireStatisticsDTO> fireAccidentStatistic(String fireNumber,
+                                                                  Integer labelId,
+                                                                  Integer classifyId,
+                                                                  Integer id,
+                                                                  Integer pageNum,
+                                                                  Integer pageSize) {
+
+        /* ====== 1. 解析 label -> type1~5  ====== */
+        int type1 = 0, type2 = 0, type3 = 0, type4 = 0, type5 = 0;
         if (labelId != null && labelId != 0) {
-            LambdaQueryWrapper<DemFireLabelAttribute> queryWrapper1 = Wrappers.lambdaQuery();
-            queryWrapper1.eq(DemFireLabelAttribute::getLabelId, labelId);
-            List<DemFireLabelAttribute> list1 = demFireLabelAttributeService.list(queryWrapper1);
-            if (list1.size() > 0) {
-                switch (list1.get(0).getAttribute()) {
+            DemFireLabelAttribute attr = demFireLabelAttributeService.lambdaQuery()
+                    .eq(DemFireLabelAttribute::getLabelId, labelId)
+                    .one();
+            if (attr != null) {
+                switch (attr.getAttribute()) {
                     case "typeName1":
                         type1 = classifyId;
                         break;
@@ -88,92 +92,74 @@ public class DemFireStatisticsServiceImpl extends AbstractCrudService<DemFireSta
                 }
             }
         }
-        IPage<DemFireStatistics> page = new Page<>(pageNum, pageSize);
-        LambdaQueryWrapper<DemFireStatistics> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.select(DemFireStatistics::getBurnedArea, DemFireStatistics::getDirectPropertyLoss, DemFireStatistics::getVictimNumber,
-                        DemFireStatistics::getInjuredNumber, DemFireStatistics::getDeathToll, DemFireStatistics::getFileCase, DemFireStatistics::getFireGrade,
-                        DemFireStatistics::getSubordinateDetachment, DemFireStatistics::getAdministrativeDivision, DemFireStatistics::getFireNumber,
-                        DemFireStatistics::getFireAddress, DemFireStatistics::getFireTime, DemFireStatistics::getId, DemFireStatistics::getTypeId1,
-                        DemFireStatistics::getTypeId2, DemFireStatistics::getTypeId3, DemFireStatistics::getTypeId4, DemFireStatistics::getTypeId5)
+
+        /* ====== 2. 分页查询(带倒序) ====== */
+        Page<DemFireStatistics> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<DemFireStatistics> wrapper = Wrappers.<DemFireStatistics>lambdaQuery()
                 .like(StringUtils.isNotBlank(fireNumber), DemFireStatistics::getFireNumber, fireNumber)
-                .eq(type1 != null && type1 != 0, DemFireStatistics::getTypeId1, type1)
-                .eq(type2 != null && type2 != 0, DemFireStatistics::getTypeId2, type2)
-                .eq(type3 != null && type3 != 0, DemFireStatistics::getTypeId3, type3)
-                .eq(type4 != null && type4 != 0, DemFireStatistics::getTypeId4, type4)
-                .eq(type5 != null && type5 != 0, DemFireStatistics::getTypeId5, type5)
-                .eq(id != null & id != 0, DemFireStatistics::getId, id)
-                .orderByDesc(DemFireStatistics::getId);
-        page = this.page(page, queryWrapper);
-        List<Object> list = new ArrayList<>();
-        if (page.getTotal() > 0) {
-            List<String> fireNumberList = new ArrayList<>();
-            List<Integer> labelIdList = new ArrayList<>();
-            for (int i = 0; i < page.getRecords().size(); i++) {
-                fireNumberList.add(page.getRecords().get(i).getFireNumber());
-            }
-            List<DemFireStatisticsAttach> demFireStatisticsAttaches = new ArrayList<>();
-            if (CollectionUtils.isNotEmpty(fireNumberList)) {
-                demFireStatisticsAttaches = demFireStatisticsAttachService.fireAccidentStatistic(fireNumberList);
-            }
+                .eq(type1 != 0, DemFireStatistics::getTypeId1, type1)
+                .eq(type2 != 0, DemFireStatistics::getTypeId2, type2)
+                .eq(type3 != 0, DemFireStatistics::getTypeId3, type3)
+                .eq(type4 != 0, DemFireStatistics::getTypeId4, type4)
+                .eq(type5 != 0, DemFireStatistics::getTypeId5, type5)
+                .eq(id != null && id != 0, DemFireStatistics::getId, id)
+                .orderByDesc(DemFireStatistics::getFireTime);
+        this.page(page, wrapper);
 
-            List<DemFileLabel> demFileLabels = demFileLabelService.demFileLabelList(null, null, null);
-            for (int i = 0; i < page.getRecords().size(); i++) {
-                Map<String, Object> map = new HashMap<>();
-                map.put("id", page.getRecords().get(i).getId());
-                map.put("burnedArea", page.getRecords().get(i).getBurnedArea());
-                map.put("directPropertyLoss", page.getRecords().get(i).getDirectPropertyLoss());
-                map.put("victimNumber", page.getRecords().get(i).getVictimNumber());
-                map.put("injuredNumber", page.getRecords().get(i).getInjuredNumber());
-                map.put("deathToll", page.getRecords().get(i).getDeathToll());
-                map.put("fileCase", page.getRecords().get(i).getFileCase());
-                map.put("fireGrade", page.getRecords().get(i).getFireGrade());
-                map.put("subordinateDetachment", page.getRecords().get(i).getSubordinateDetachment());
-                map.put("administrativeDivision", page.getRecords().get(i).getAdministrativeDivision());
-                map.put("fireNumber", page.getRecords().get(i).getFireNumber());
-                map.put("fireAddress", page.getRecords().get(i).getFireAddress());
-                map.put("fireTime", page.getRecords().get(i).getFireTime());
-                map.put("typeId1", page.getRecords().get(i).getTypeId1());
-                map.put("typeId2", page.getRecords().get(i).getTypeId2());
-                map.put("typeId3", page.getRecords().get(i).getTypeId3());
-                map.put("typeId4", page.getRecords().get(i).getTypeId4());
-                map.put("typeId5", page.getRecords().get(i).getTypeId5());
-                map.put("typeName1", null);
-                map.put("typeName2", null);
-                map.put("typeName3", null);
-                map.put("typeName4", null);
-                map.put("typeName5", null);
-                map.put("zid", null);
-                map.put("fireCauseType1", null);
-                map.put("fireSiteType1", null);
-                map.put("labelName", null);
-                for (int j = 0; j < demFireStatisticsAttaches.size(); j++) {
-                    if (page.getRecords().get(i).getFireNumber().equals(demFireStatisticsAttaches.get(j).getFireNumber())) {
-                        map.put("zid", demFireStatisticsAttaches.get(j).getId());
-                        map.put("fireCauseType1", demFireStatisticsAttaches.get(j).getFireCauseType1());
-                        map.put("fireSiteType1", demFireStatisticsAttaches.get(j).getFireSiteType1());
-                    }
-                }
-                for (int j = 0; j < demFileLabels.size(); j++) {
-                    if (page.getRecords().get(i).getTypeId1() != null && page.getRecords().get(i).getTypeId1() == demFileLabels.get(j).getId()) {
-                        map.put("typeName1", demFileLabels.get(j).getLabelName());
-                    }
-                    if (page.getRecords().get(i).getTypeId2() != null && page.getRecords().get(i).getTypeId2() == demFileLabels.get(j).getId()) {
-                        map.put("typeName2", demFileLabels.get(j).getLabelName());
-                    }
-                    if (page.getRecords().get(i).getTypeId3() != null && page.getRecords().get(i).getTypeId3() == demFileLabels.get(j).getId()) {
-                        map.put("typeName3", demFileLabels.get(j).getLabelName());
-                    }
-                    if (page.getRecords().get(i).getTypeId4() != null && page.getRecords().get(i).getTypeId4() == demFileLabels.get(j).getId()) {
-                        map.put("typeName4", demFileLabels.get(j).getLabelName());
-                    }
-                    if (page.getRecords().get(i).getTypeId5() != null && page.getRecords().get(i).getTypeId4() == demFileLabels.get(j).getId()) {
-                        map.put("typeName5", demFileLabels.get(j).getLabelName());
-                    }
-                }
-                list.add(map);
-            }
+        /* ====== 3. 组装补充数据 ====== */
+        if (page.getRecords().isEmpty()) {
+            return new CommonPage<>(Collections.emptyList(), page.getTotal(), pageSize, pageNum);
         }
-        return new CommonPage<>(list, page.getTotal(), pageSize, pageNum);
+
+        // 3.1 全部 label 缓存
+        List<DemFileLabel> allLabels = demFileLabelService.list();
+
+        // 3.2 attach 缓存
+        List<String> fireNoList = page.getRecords()
+                .stream()
+                .map(DemFireStatistics::getFireNumber)
+                .collect(Collectors.toList());
+        List<DemFireStatisticsAttach> attachList =
+                demFireStatisticsAttachService.fireAccidentStatistic(fireNoList);
+        Map<String, DemFireStatisticsAttach> attachMap =
+                attachList.stream()
+                        .collect(Collectors.toMap(DemFireStatisticsAttach::getFireNumber,
+                                Function.identity(),
+                                (a, b) -> a));
+
+        // 3.3 label 缓存
+        Map<Integer, String> labelMap =
+                allLabels.stream()
+                        .collect(Collectors.toMap(DemFileLabel::getId, DemFileLabel::getLabelName));
+
+        /* ====== 4. 原位转换 -> DTO,顺序不变 ====== */
+        List<DemFireStatisticsDTO> dtoList = page.getRecords()
+                .stream()
+                .map(po -> {
+                    DemFireStatisticsDTO dto = new DemFireStatisticsDTO();
+                    BeanUtils.copyProperties(po, dto);
+
+                    // attach
+                    DemFireStatisticsAttach att =
+                            attachMap.get(po.getFireNumber());
+                    if (att != null) {
+                        dto.setZid(att.getId());
+                        dto.setFireCauseType1(att.getFireCauseType1());
+                        dto.setFireSiteType1(att.getFireSiteType1());
+                    }
+
+                    // labelName
+                    dto.setTypeName1(labelMap.get(po.getTypeId1()));
+                    dto.setTypeName2(labelMap.get(po.getTypeId2()));
+                    dto.setTypeName3(labelMap.get(po.getTypeId3()));
+                    dto.setTypeName4(labelMap.get(po.getTypeId4()));
+                    dto.setTypeName5(labelMap.get(po.getTypeId5()));
+                    return dto;
+                })
+                .collect(Collectors.toList());
+
+        /* ====== 5. 返回 ====== */
+        return new CommonPage<>(dtoList, page.getTotal(), pageSize, pageNum);
     }
 
     @Override
@@ -523,7 +509,7 @@ public class DemFireStatisticsServiceImpl extends AbstractCrudService<DemFireSta
                         DemFireStatistics::getFireTime, DemFireStatistics::getFireGrade)
                 .like(StringUtils.isNotBlank(fireNumber), DemFireStatistics::getFireNumber, fireNumber)
                 .eq(id != null && id != 0, DemFireStatistics::getId, id)
-                .orderByDesc(DemFireStatistics::getId);
+                .orderByDesc(DemFireStatistics::getFireTime);
         page = this.page(page, queryWrapper);
         if (CollectionUtils.isNotEmpty(page.getRecords())) {
             List<String> fireNumberList = new ArrayList<>();

+ 150 - 150
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/DemInspectListServiceImpl.java

@@ -3,6 +3,7 @@ package com.usky.fire.service.impl;
 import cn.hutool.core.date.DateUnit;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -28,6 +29,7 @@ import com.usky.fire.service.*;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -55,103 +57,102 @@ public class DemInspectListServiceImpl extends AbstractCrudService<DemInspectLis
     private BaseCompanyPersonService baseCompanyPersonService;
 
     @Override
-    public CommonPage<InspectDetailVO> demInspectList(String inspectCode, String companyName, String deviceCode, Integer handlingStatus, Integer pageNum, Integer pageSize){
+    public CommonPage<InspectDetailVO> demInspectList(String inspectCode, String companyName, String deviceCode, Integer handlingStatus, Integer pageNum, Integer pageSize) {
         IPage<DemInspectList> page = new Page<>(pageNum, pageSize);
         List<InspectDetailVO> list = new ArrayList<>();
-        List<BaseCompany> companyIdList = new ArrayList<>();
-        LambdaQueryWrapper<BaseUserCompany> QueryWrapper = Wrappers.lambdaQuery();
-        QueryWrapper.select(BaseUserCompany::getCompanyId)
-                .eq(BaseUserCompany::getUserId, SecurityUtils.getUserId());
-        List<BaseUserCompany> comoanyList = baseUserCompanyService.list(QueryWrapper);
 
-        LambdaQueryWrapper<BaseCompany> QueryWrapperCompany = Wrappers.lambdaQuery();
-        if(StringUtils.isNotBlank(companyName)){
-            QueryWrapperCompany.select(BaseCompany::getCompanyId)
-                    .eq(BaseCompany::getEnable, 0)
-                    .like(BaseCompany::getCompanyName, companyName);
-            companyIdList = baseCompanyService.list(QueryWrapperCompany);
+        LambdaQueryWrapper<DemInspectList> queryWrapper = new LambdaQueryWrapper<>();
+
+        // 使用正确的表名而非别名
+        if (StringUtils.isNotBlank(companyName)) {
+            queryWrapper.exists(
+                    "SELECT 1 FROM base_company bc WHERE dem_inspect_list.company_id = bc.company_id " +
+                            "AND bc.enable = 0 " +
+                            "AND bc.company_name IS NOT NULL " +
+                            "AND bc.company_name != '' " +
+                            "AND bc.company_name LIKE '%" + companyName + "%'"
+            );
+        } else {
+            queryWrapper.exists(
+                    "SELECT 1 FROM base_company bc WHERE dem_inspect_list.company_id = bc.company_id " +
+                            "AND bc.enable = 0 " +
+                            "AND bc.company_name IS NOT NULL " +
+                            "AND bc.company_name != ''"
+            );
         }
 
-        if(CollectionUtils.isNotEmpty(comoanyList)){
-            List<String> companyList = new ArrayList<>();
-            if(CollectionUtils.isNotEmpty(companyIdList)){
-                for(int j=0;j<companyIdList.size();j++){
-                    companyList.add(companyIdList.get(j).getCompanyId());
-                }
-            }
+        queryWrapper.like(StringUtils.isNotBlank(inspectCode), DemInspectList::getInspectCode, inspectCode)
+                .like(StringUtils.isNotBlank(deviceCode), DemInspectList::getDeviceId, deviceCode)
+                .eq(handlingStatus != null, DemInspectList::getHandlingStatus, handlingStatus)
+                .orderByDesc(DemInspectList::getId);
 
-            LambdaQueryWrapper<DemInspectList> QueryWrapper1 = Wrappers.lambdaQuery();
-            if(StringUtils.isNotBlank(companyName)){
-                if(CollectionUtils.isNotEmpty(companyList)){
-                    QueryWrapper1.in(DemInspectList::getCompanyId,companyList)
-                            .like(StringUtils.isNotBlank(inspectCode), DemInspectList::getInspectCode, inspectCode)
-                            .like(StringUtils.isNotBlank(deviceCode), DemInspectList::getDeviceId, deviceCode)
-                            .eq(null!=handlingStatus, DemInspectList::getHandlingStatus, handlingStatus);
-                    QueryWrapper1.orderByDesc(DemInspectList::getId);
-                }else{
-                    companyList.add(null);
-                    QueryWrapper1.like(StringUtils.isNotBlank(inspectCode), DemInspectList::getInspectCode, inspectCode)
-                            .like(StringUtils.isNotBlank(deviceCode), DemInspectList::getDeviceId, deviceCode)
-                            .eq(null!=handlingStatus, DemInspectList::getHandlingStatus, handlingStatus);
-                    QueryWrapper1.orderByDesc(DemInspectList::getId);
-                }
-            }
-            else{
-                QueryWrapper1.like(StringUtils.isNotBlank(inspectCode), DemInspectList::getInspectCode, inspectCode)
-                        .like(StringUtils.isNotBlank(deviceCode), DemInspectList::getDeviceId, deviceCode)
-                        .eq(null!=handlingStatus, DemInspectList::getHandlingStatus, handlingStatus);
-                QueryWrapper1.orderByDesc(DemInspectList::getId);
-            }
-            page = this.page(page, QueryWrapper1);
-            if(page.getTotal() > 0){
-                for(int k=0;k<page.getRecords().size();k++){
-                    InspectDetailVO inspectDetailVO = new InspectDetailVO();
-                    inspectDetailVO.setInspectCode(page.getRecords().get(k).getInspectCode());
-                    inspectDetailVO.setDeviceCode(page.getRecords().get(k).getDeviceId());
-                    //设备名称和安装位置
-                    LambdaQueryWrapper<BaseDevice> QueryWrapperDevice = Wrappers.lambdaQuery();
-                    QueryWrapperDevice.select(BaseDevice::getDeviceCode,BaseDevice::getDeviceName,BaseDevice::getInstallAddress)
-                            .eq(BaseDevice::getDeviceCode, page.getRecords().get(k).getDeviceId());
-                    List<BaseDevice> deviceList = baseDeviceService.list(QueryWrapperDevice);
-                    if(CollectionUtils.isNotEmpty(deviceList)){
-                        inspectDetailVO.setDeviceName(deviceList.get(0).getDeviceName());
-                        inspectDetailVO.setInstallAddress(deviceList.get(0).getInstallAddress());
-                    }
-                    //设备报告内容和报告时间
-                    LambdaQueryWrapper<AlarmFire> QueryWrapperAlarm = Wrappers.lambdaQuery();
-                    QueryWrapperAlarm.select(AlarmFire::getAlarmTime, AlarmFire::getAttributeValue2, AlarmFire::getAttributeValue4)
-                            .eq(AlarmFire::getId, page.getRecords().get(k).getAlarmId());
-                    List<AlarmFire> alarmFireList = alarmFireService.list(QueryWrapperAlarm);
-                    if(CollectionUtils.isNotEmpty(alarmFireList)){
-                        inspectDetailVO.setAlarmTime(alarmFireList.get(0).getAlarmTime());
-                        inspectDetailVO.setDeviceContent(alarmFireList.get(0).getAttributeValue2()+" "+alarmFireList.get(0).getAttributeValue4());
-                    }
-                    LambdaQueryWrapper<BaseCompanyPerson> queryWrapperPerson = Wrappers.lambdaQuery();
-                    queryWrapperPerson.select(BaseCompanyPerson::getCompanyName, BaseCompanyPerson::getDelegateName, BaseCompanyPerson::getDelegatePhone,
-                            BaseCompanyPerson::getFireDutyName, BaseCompanyPerson::getFireDutyPhone,
-                            BaseCompanyPerson::getFireManageName, BaseCompanyPerson::getFireManagePhone)
-                            .in(BaseCompanyPerson::getCompanyId, page.getRecords().get(k).getCompanyId());
-                    List<BaseCompanyPerson> companyPersonList = baseCompanyPersonService.list(queryWrapperPerson);
-                    if(CollectionUtils.isNotEmpty(companyPersonList)){
-                        inspectDetailVO.setCompanyName(companyPersonList.get(0).getCompanyName());
-                        inspectDetailVO.setDelegateName(companyPersonList.get(0).getDelegateName());
-                        inspectDetailVO.setDelegatePhone(companyPersonList.get(0).getDelegatePhone());
-                        inspectDetailVO.setFireDutyName(companyPersonList.get(0).getFireDutyName());
-                        inspectDetailVO.setFireDutyPhone(companyPersonList.get(0).getFireDutyPhone());
-                        inspectDetailVO.setFireManageName(companyPersonList.get(0).getFireManageName());
-                        inspectDetailVO.setFireManagePhone(companyPersonList.get(0).getFireManagePhone());
-                    }
-                    inspectDetailVO.setHandlingStatus(page.getRecords().get(k).getHandlingStatus());
-                    inspectDetailVO.setInspectTime(page.getRecords().get(k).getCreateTime());
-                    list.add(inspectDetailVO);
-                }
+        // 执行分页查询
+        page = this.page(page, queryWrapper);
+
+        // 处理查询结果
+        if (page.getTotal() > 0) {
+            for (DemInspectList record : page.getRecords()) {
+                InspectDetailVO inspectDetailVO = buildInspectDetailVO(record);
+                list.add(inspectDetailVO);
             }
         }
+
         return new CommonPage<>(list, page.getTotal(), pageSize, pageNum);
     }
+    // 提取构建VO的代码到单独方法中
+    private InspectDetailVO buildInspectDetailVO(DemInspectList record) {
+        InspectDetailVO inspectDetailVO = new InspectDetailVO();
+        inspectDetailVO.setInspectCode(record.getInspectCode());
+        inspectDetailVO.setDeviceCode(record.getDeviceId());
+
+        // 设备信息查询
+        LambdaQueryWrapper<BaseDevice> deviceQueryWrapper = Wrappers.lambdaQuery();
+        deviceQueryWrapper.select(BaseDevice::getDeviceCode, BaseDevice::getDeviceName, BaseDevice::getInstallAddress)
+                .eq(BaseDevice::getDeviceCode, record.getDeviceId());
+        List<BaseDevice> deviceList = baseDeviceService.list(deviceQueryWrapper);
+        if (CollectionUtils.isNotEmpty(deviceList)) {
+            inspectDetailVO.setDeviceName(deviceList.get(0).getDeviceName());
+            inspectDetailVO.setInstallAddress(deviceList.get(0).getInstallAddress());
+        }
+
+        // 报警信息查询
+        LambdaQueryWrapper<AlarmFire> alarmQueryWrapper = Wrappers.lambdaQuery();
+        alarmQueryWrapper.select(AlarmFire::getAlarmTime, AlarmFire::getAttributeValue2, AlarmFire::getAttributeValue4)
+                .eq(AlarmFire::getId, record.getAlarmId());
+        List<AlarmFire> alarmFireList = alarmFireService.list(alarmQueryWrapper);
+        if (CollectionUtils.isNotEmpty(alarmFireList)) {
+            inspectDetailVO.setAlarmTime(alarmFireList.get(0).getAlarmTime());
+            inspectDetailVO.setDeviceContent(alarmFireList.get(0).getAttributeValue2() + " " + alarmFireList.get(0).getAttributeValue4());
+        }
+
+        // 公司人员信息查询
+        LambdaQueryWrapper<BaseCompanyPerson> personQueryWrapper = Wrappers.lambdaQuery();
+        personQueryWrapper.select(BaseCompanyPerson::getCompanyName, BaseCompanyPerson::getDelegateName,
+                        BaseCompanyPerson::getDelegatePhone, BaseCompanyPerson::getFireDutyName,
+                        BaseCompanyPerson::getFireDutyPhone, BaseCompanyPerson::getFireManageName,
+                        BaseCompanyPerson::getFireManagePhone)
+                .eq(BaseCompanyPerson::getCompanyId, record.getCompanyId());
+        List<BaseCompanyPerson> companyPersonList = baseCompanyPersonService.list(personQueryWrapper);
+
+        if (CollectionUtils.isNotEmpty(companyPersonList)) {
+            BaseCompanyPerson person = companyPersonList.get(0);
+            inspectDetailVO.setCompanyName(person.getCompanyName());
+            inspectDetailVO.setDelegateName(person.getDelegateName());
+            inspectDetailVO.setDelegatePhone(person.getDelegatePhone());
+            inspectDetailVO.setFireDutyName(person.getFireDutyName());
+            inspectDetailVO.setFireDutyPhone(person.getFireDutyPhone());
+            inspectDetailVO.setFireManageName(person.getFireManageName());
+            inspectDetailVO.setFireManagePhone(person.getFireManagePhone());
+        }
+
+        inspectDetailVO.setHandlingStatus(record.getHandlingStatus());
+        inspectDetailVO.setInspectTime(record.getCreateTime());
+
+        return inspectDetailVO;
+    }
 
     @Override
-    public List<DemInspectExportVO> demInspectListExport(String inspectCode, String companyName, String deviceCode, Integer handlingStatus){
+    public List<DemInspectExportVO> demInspectListExport(String inspectCode, String companyName, String deviceCode, Integer handlingStatus) {
         List<DemInspectExportVO> list = new ArrayList<>();
         List<BaseCompany> companyIdList = new ArrayList<>();
         LambdaQueryWrapper<BaseUserCompany> QueryWrapper = Wrappers.lambdaQuery();
@@ -160,64 +161,63 @@ public class DemInspectListServiceImpl extends AbstractCrudService<DemInspectLis
         List<BaseUserCompany> comoanyList = baseUserCompanyService.list(QueryWrapper);
 
         LambdaQueryWrapper<BaseCompany> QueryWrapperCompany = Wrappers.lambdaQuery();
-        if(StringUtils.isNotBlank(companyName)){
+        if (StringUtils.isNotBlank(companyName)) {
             QueryWrapperCompany.select(BaseCompany::getCompanyId)
                     .eq(BaseCompany::getEnable, 0)
                     .like(BaseCompany::getCompanyName, companyName);
             companyIdList = baseCompanyService.list(QueryWrapperCompany);
         }
 
-        if(CollectionUtils.isNotEmpty(comoanyList)){
+        if (CollectionUtils.isNotEmpty(comoanyList)) {
             List<String> companyList = new ArrayList<>();
-            for(int j=0;j<companyIdList.size();j++){
+            for (int j = 0; j < companyIdList.size(); j++) {
                 companyList.add(companyIdList.get(j).getCompanyId());
             }
 
 
             LambdaQueryWrapper<DemInspectList> QueryWrapper1 = Wrappers.lambdaQuery();
-            if(StringUtils.isNotBlank(companyName)){
-                if(CollectionUtils.isNotEmpty(companyList)){
+            if (StringUtils.isNotBlank(companyName)) {
+                if (CollectionUtils.isNotEmpty(companyList)) {
 
-                }else{
+                } else {
                     companyList.add(null);
                 }
-                QueryWrapper1.in(DemInspectList::getCompanyId,companyList)
+                QueryWrapper1.in(DemInspectList::getCompanyId, companyList)
                         .like(StringUtils.isNotBlank(inspectCode), DemInspectList::getInspectCode, inspectCode)
                         .like(StringUtils.isNotBlank(deviceCode), DemInspectList::getDeviceId, deviceCode)
                         .eq(handlingStatus != null, DemInspectList::getHandlingStatus, handlingStatus);
                 QueryWrapper1.orderByDesc(DemInspectList::getId);
-            }
-            else{
+            } else {
                 QueryWrapper1.like(StringUtils.isNotBlank(inspectCode), DemInspectList::getInspectCode, inspectCode)
                         .like(StringUtils.isNotBlank(deviceCode), DemInspectList::getDeviceId, deviceCode)
                         .eq(handlingStatus != null, DemInspectList::getHandlingStatus, handlingStatus);
                 QueryWrapper1.orderByDesc(DemInspectList::getId).last("limit 1000");
             }
             List<DemInspectList> list1 = this.list(QueryWrapper1);
-            if(CollectionUtils.isNotEmpty(list1)){
-                for(int k=0;k<list1.size();k++){
+            if (CollectionUtils.isNotEmpty(list1)) {
+                for (int k = 0; k < list1.size(); k++) {
                     DemInspectExportVO demInspectExportVO = new DemInspectExportVO();
                     demInspectExportVO.setInspectCode(list1.get(k).getInspectCode());
                     demInspectExportVO.setDeviceCode(list1.get(k).getDeviceId());
-                    //设备名称和安装位置
+                    // 设备名称和安装位置
                     LambdaQueryWrapper<BaseDevice> QueryWrapperDevice = Wrappers.lambdaQuery();
-                    QueryWrapperDevice.select(BaseDevice::getDeviceCode,BaseDevice::getDeviceName,BaseDevice::getInstallAddress)
+                    QueryWrapperDevice.select(BaseDevice::getDeviceCode, BaseDevice::getDeviceName, BaseDevice::getInstallAddress)
                             .eq(BaseDevice::getDeviceCode, list1.get(k).getDeviceId());
                     List<BaseDevice> deviceList = baseDeviceService.list(QueryWrapperDevice);
                     demInspectExportVO.setDeviceName(deviceList.get(0).getDeviceName());
                     demInspectExportVO.setInstallAddress(deviceList.get(0).getInstallAddress());
-                    //设备报告内容和报告时间
+                    // 设备报告内容和报告时间
                     LambdaQueryWrapper<AlarmFire> QueryWrapperAlarm = Wrappers.lambdaQuery();
                     QueryWrapperAlarm.select(AlarmFire::getAlarmTime, AlarmFire::getAttributeValue2, AlarmFire::getAttributeValue4)
                             .eq(AlarmFire::getId, list1.get(k).getAlarmId());
                     List<AlarmFire> alarmFireList = alarmFireService.list(QueryWrapperAlarm);
                     demInspectExportVO.setAlarmTime(alarmFireList.get(0).getAlarmTime());
-                    demInspectExportVO.setDeviceContent(alarmFireList.get(0).getAttributeValue2()+" "+alarmFireList.get(0).getAttributeValue4());
+                    demInspectExportVO.setDeviceContent(alarmFireList.get(0).getAttributeValue2() + " " + alarmFireList.get(0).getAttributeValue4());
 
                     LambdaQueryWrapper<BaseCompanyPerson> queryWrapperPerson = Wrappers.lambdaQuery();
                     queryWrapperPerson.select(BaseCompanyPerson::getCompanyName, BaseCompanyPerson::getDelegateName, BaseCompanyPerson::getDelegatePhone,
-                            BaseCompanyPerson::getFireDutyName, BaseCompanyPerson::getFireDutyPhone,
-                            BaseCompanyPerson::getFireManageName, BaseCompanyPerson::getFireManagePhone)
+                                    BaseCompanyPerson::getFireDutyName, BaseCompanyPerson::getFireDutyPhone,
+                                    BaseCompanyPerson::getFireManageName, BaseCompanyPerson::getFireManagePhone)
                             .in(BaseCompanyPerson::getCompanyId, list1.get(k).getCompanyId());
                     List<BaseCompanyPerson> companyPersonList = baseCompanyPersonService.list(queryWrapperPerson);
                     demInspectExportVO.setCompanyName(companyPersonList.get(0).getCompanyName());
@@ -240,7 +240,7 @@ public class DemInspectListServiceImpl extends AbstractCrudService<DemInspectLis
     }
 
     @Override
-    public CommonPage<InspectManagerVO> inspectManageList(String inspectCode, String deviceCode, Integer handlingStatus, Integer pageNum, Integer pageSize){
+    public CommonPage<InspectManagerVO> inspectManageList(String inspectCode, String deviceCode, Integer handlingStatus, Integer pageNum, Integer pageSize) {
         IPage<DemInspectList> page = new Page<>(pageNum, pageSize);
         List<InspectManagerVO> list = new ArrayList<>();
         LambdaQueryWrapper<BaseUserCompany> QueryWrapper = Wrappers.lambdaQuery();
@@ -248,39 +248,39 @@ public class DemInspectListServiceImpl extends AbstractCrudService<DemInspectLis
                 .eq(BaseUserCompany::getUserId, SecurityUtils.getUserId());
         List<BaseUserCompany> comoanyList = baseUserCompanyService.list(QueryWrapper);
 
-        if(CollectionUtils.isNotEmpty(comoanyList)){
+        if (CollectionUtils.isNotEmpty(comoanyList)) {
             List<String> companyList = new ArrayList<>();
-            for(int i=0;i<comoanyList.size();i++){
+            for (int i = 0; i < comoanyList.size(); i++) {
                 companyList.add(comoanyList.get(i).getCompanyId());
             }
 
             LambdaQueryWrapper<DemInspectList> QueryWrapper1 = Wrappers.lambdaQuery();
-            QueryWrapper1.in(DemInspectList::getCompanyId,companyList)
+            QueryWrapper1.in(DemInspectList::getCompanyId, companyList)
                     .eq(StringUtils.isNotBlank(inspectCode), DemInspectList::getInspectCode, inspectCode)
                     .eq(StringUtils.isNotBlank(deviceCode), DemInspectList::getDeviceId, deviceCode)
                     .eq(handlingStatus != null, DemInspectList::getHandlingStatus, handlingStatus);
             QueryWrapper1.orderByDesc(DemInspectList::getId);
             page = this.page(page, QueryWrapper1);
-            if(page.getTotal() > 0){
-                for(int k=0;k<page.getRecords().size();k++){
+            if (page.getTotal() > 0) {
+                for (int k = 0; k < page.getRecords().size(); k++) {
                     InspectManagerVO inspectManagerVO = new InspectManagerVO();
                     inspectManagerVO.setInspectCode(page.getRecords().get(k).getInspectCode());
                     inspectManagerVO.setInspectTime(page.getRecords().get(k).getCreateTime());
                     inspectManagerVO.setInspectRequiredTime(page.getRecords().get(k).getCreateTime().plusMinutes(30));
                     inspectManagerVO.setCreater(page.getRecords().get(k).getCreator());
                     inspectManagerVO.setDeviceCode(page.getRecords().get(k).getDeviceId());
-                    //设备名称
+                    // 设备名称
                     LambdaQueryWrapper<BaseDevice> QueryWrapperDevice = Wrappers.lambdaQuery();
-                    QueryWrapperDevice.select(BaseDevice::getDeviceCode,BaseDevice::getDeviceName,BaseDevice::getInstallAddress)
+                    QueryWrapperDevice.select(BaseDevice::getDeviceCode, BaseDevice::getDeviceName, BaseDevice::getInstallAddress)
                             .eq(BaseDevice::getDeviceCode, page.getRecords().get(k).getDeviceId());
                     List<BaseDevice> deviceList = baseDeviceService.list(QueryWrapperDevice);
                     inspectManagerVO.setDeviceName(deviceList.get(0).getDeviceName());
-                    //设备报告内容
+                    // 设备报告内容
                     LambdaQueryWrapper<AlarmFire> QueryWrapperAlarm = Wrappers.lambdaQuery();
                     QueryWrapperAlarm.select(AlarmFire::getAlarmTime, AlarmFire::getAttributeValue2, AlarmFire::getAttributeValue4)
                             .eq(AlarmFire::getId, page.getRecords().get(k).getAlarmId());
                     List<AlarmFire> alarmFireList = alarmFireService.list(QueryWrapperAlarm);
-                    inspectManagerVO.setDeviceContent(alarmFireList.get(0).getAttributeValue2()+" "+alarmFireList.get(0).getAttributeValue4());
+                    inspectManagerVO.setDeviceContent(alarmFireList.get(0).getAttributeValue2() + " " + alarmFireList.get(0).getAttributeValue4());
                     inspectManagerVO.setHandlingStatus(page.getRecords().get(k).getHandlingStatus());
                     inspectManagerVO.setHandlingTime(page.getRecords().get(k).getHandlingTime());
                     list.add(inspectManagerVO);
@@ -291,44 +291,44 @@ public class DemInspectListServiceImpl extends AbstractCrudService<DemInspectLis
     }
 
     @Override
-    public Map<String,Object> inspectStatistics(String startDate, String endDate){
+    public Map<String, Object> inspectStatistics(String startDate, String endDate) {
         LambdaQueryWrapper<BaseUserCompany> QueryWrapper = Wrappers.lambdaQuery();
         QueryWrapper.select(BaseUserCompany::getCompanyId)
-                .eq(BaseUserCompany::getUserId,SecurityUtils.getUserId());
+                .eq(BaseUserCompany::getUserId, SecurityUtils.getUserId());
         List<BaseUserCompany> comoanyList = baseUserCompanyService.list(QueryWrapper);
-        int untreated = 0; //待处置
-        int processed = 0; //已处置
-        int current24Processed = 0; //过去24小时处置数
-        int overtimeUntreated = 0; //超时未处置
-        int count = 0; //督察单总数
-        String disposalRate = "0.00%";  //督察单处置率
-        if(CollectionUtils.isNotEmpty(comoanyList)){
+        int untreated = 0; // 待处置
+        int processed = 0; // 已处置
+        int current24Processed = 0; // 过去24小时处置数
+        int overtimeUntreated = 0; // 超时未处置
+        int count = 0; // 督察单总数
+        String disposalRate = "0.00%";  // 督察单处置率
+        if (CollectionUtils.isNotEmpty(comoanyList)) {
             List<String> companyList = new ArrayList<>();
-            for(int i=0;i<comoanyList.size();i++) {
+            for (int i = 0; i < comoanyList.size(); i++) {
                 companyList.add(comoanyList.get(i).getCompanyId());
             }
-                
+
             untreated = this.inspectCount(companyList, 2, startDate, endDate);
             processed = this.inspectCount(companyList, 1, startDate, endDate);
             current24Processed = this.inspectCount(companyList, 1, LocalDateTime.now().minusHours(24).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
             overtimeUntreated = this.inspectCount(companyList, 3, startDate, endDate);
             count = untreated + processed + overtimeUntreated;
-            disposalRate = OnlineMethod.myPercent(processed,count);
+            disposalRate = OnlineMethod.myPercent(processed, count);
         }
         Map<String, Object> map = new HashMap<>();
-        map.put("current24Processed",current24Processed);
-        map.put("processed",processed);
-        map.put("untreated",untreated);
-        map.put("overtimeUntreated",overtimeUntreated);
-        map.put("disposalRate",disposalRate);
+        map.put("current24Processed", current24Processed);
+        map.put("processed", processed);
+        map.put("untreated", untreated);
+        map.put("overtimeUntreated", overtimeUntreated);
+        map.put("disposalRate", disposalRate);
 
         return map;
     }
 
     @Override
-    public Integer inspectCount(List<String> companyIdList, Integer handlingStatus, String startDate, String endDate){
+    public Integer inspectCount(List<String> companyIdList, Integer handlingStatus, String startDate, String endDate) {
         LambdaQueryWrapper<DemInspectList> QueryWrapper = Wrappers.lambdaQuery();
-        if(companyIdList.size() > 0){
+        if (companyIdList.size() > 0) {
             QueryWrapper.in(CollectionUtils.isNotEmpty(companyIdList), DemInspectList::getCompanyId, companyIdList);
         }
         QueryWrapper.eq(handlingStatus != null, DemInspectList::getHandlingStatus, handlingStatus)
@@ -338,15 +338,15 @@ public class DemInspectListServiceImpl extends AbstractCrudService<DemInspectLis
     }
 
     @Override
-    public List<InspectHandleVO> inspectInfo(String inspectCode){
+    public List<InspectHandleVO> inspectInfo(String inspectCode) {
         List<InspectHandleVO> list = new ArrayList<>();
 
         LambdaQueryWrapper<DemInspectList> QueryWrapper = Wrappers.lambdaQuery();
         QueryWrapper.select(DemInspectList::getHandlingTime, DemInspectList::getDeviceStatus, DemInspectList::getHandler, DemInspectList::getHandlerPhone,
-                DemInspectList::getHandlingContent, DemInspectList::getSitePhoto1, DemInspectList::getSitePhoto2, DemInspectList::getSitePhoto3)
+                        DemInspectList::getHandlingContent, DemInspectList::getSitePhoto1, DemInspectList::getSitePhoto2, DemInspectList::getSitePhoto3)
                 .eq(DemInspectList::getInspectCode, inspectCode);
         List<DemInspectList> list1 = this.list(QueryWrapper);
-        if(list1.size() > 0){
+        if (list1.size() > 0) {
             InspectHandleVO inspectHandleVO = new InspectHandleVO();
             inspectHandleVO.setHandlingTime(list1.get(0).getHandlingTime());
             inspectHandleVO.setDeviceStatus(list1.get(0).getDeviceStatus());
@@ -363,11 +363,11 @@ public class DemInspectListServiceImpl extends AbstractCrudService<DemInspectLis
     }
 
     @Override
-    public void updateInspectManage(String inspectCode, String handler, String handlerPhone, Integer deviceStatus, String handlingContent, String sitePhoto1, String sitePhoto2, String sitePhoto3){
+    public void updateInspectManage(String inspectCode, String handler, String handlerPhone, Integer deviceStatus, String handlingContent, String sitePhoto1, String sitePhoto2, String sitePhoto3) {
         LambdaQueryWrapper<DemInspectList> QueryWrapper = Wrappers.lambdaQuery();
         QueryWrapper.eq(DemInspectList::getInspectCode, inspectCode);
         List<DemInspectList> list = this.list(QueryWrapper);
-        if(list.size() > 0){
+        if (list.size() > 0) {
             list.get(0).setHandler(handler);
             list.get(0).setHandlerPhone(handlerPhone);
             list.get(0).setHandlingTime(LocalDateTime.now());
@@ -384,28 +384,28 @@ public class DemInspectListServiceImpl extends AbstractCrudService<DemInspectLis
 
     @Transactional
     @Override
-    //先判断处理状态为未处理的告警,然后再判断告警时间距离当前时间在过去一小时至过去半小时之间的数据
+    // 先判断处理状态为未处理的告警,然后再判断告警时间距离当前时间在过去一小时至过去半小时之间的数据
     public void demInspectAutoTask() {
-        //未处置电子督察单
+        // 未处置电子督察单
         LambdaQueryWrapper<AlarmFire> QueryWrapper = Wrappers.lambdaQuery();
         List<String> alarmTypeList = new ArrayList<>();
         alarmTypeList.add("2");
         alarmTypeList.add("4");
-        QueryWrapper.select(AlarmFire::getDeviceCode,AlarmFire::getId,AlarmFire::getCompanyId)
-                .in(AlarmFire::getAlarmType,alarmTypeList)
+        QueryWrapper.select(AlarmFire::getDeviceCode, AlarmFire::getId, AlarmFire::getCompanyId)
+                .in(AlarmFire::getAlarmType, alarmTypeList)
                 .eq(AlarmFire::getHandlingStatus, 0)
                 .between(AlarmFire::getAlarmTime, LocalDateTime.now().minusMinutes(60).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), LocalDateTime.now().minusMinutes(30).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         List<AlarmFire> list = alarmFireService.list(QueryWrapper);
-        if(CollectionUtils.isNotEmpty(list)){
-            for(int i=0;i<list.size();i++){
+        if (CollectionUtils.isNotEmpty(list)) {
+            for (int i = 0; i < list.size(); i++) {
                 DemInspectList demInspectList = new DemInspectList();
                 UUID uuid = UUID.randomUUID();
                 String uuidStr = uuid.toString();
-                demInspectList.setInspectCode(uuidStr.replaceAll("-",""));
+                demInspectList.setInspectCode(uuidStr.replaceAll("-", ""));
                 demInspectList.setDeviceId(list.get(i).getDeviceCode());
                 demInspectList.setAlarmId(list.get(i).getId());
                 demInspectList.setCompanyId(list.get(i).getCompanyId());
-                //2 待处置
+                // 2 待处置
                 demInspectList.setHandlingStatus(2);
                 demInspectList.setCreator("闵行消防支队");
                 demInspectList.setCreateTime(LocalDateTime.now());
@@ -415,14 +415,14 @@ public class DemInspectListServiceImpl extends AbstractCrudService<DemInspectLis
             }
         }
 
-        //超时未处置电子督察单
+        // 超时未处置电子督察单
         LambdaQueryWrapper<DemInspectList> QueryList = Wrappers.lambdaQuery();
-        QueryList.eq(DemInspectList::getHandlingStatus,2)
-                .lt(DemInspectList::getCreateTime,LocalDateTime.now().minusMinutes(30).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+        QueryList.eq(DemInspectList::getHandlingStatus, 2)
+                .lt(DemInspectList::getCreateTime, LocalDateTime.now().minusMinutes(30).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         List<DemInspectList> list1 = this.list(QueryList);
-        if(CollectionUtils.isNotEmpty(list1)){
-            for(int j=0;j<list1.size();j++){
-                //3 超时未处置
+        if (CollectionUtils.isNotEmpty(list1)) {
+            for (int j = 0; j < list1.size(); j++) {
+                // 3 超时未处置
                 list1.get(j).setHandlingStatus(3);
                 this.updateById(list1.get(j));
             }

+ 35 - 21
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/DemReportInfoServiceImpl.java

@@ -1,6 +1,7 @@
 package com.usky.fire.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -21,6 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -33,14 +35,14 @@ import java.util.*;
 @Service
 public class DemReportInfoServiceImpl extends AbstractCrudService<DemReportInfoMapper, DemReportInfo> implements DemReportInfoService {
     @Override
-    public CommonPage<DemReportInfo> reportInfoList(String companyId,String sourceType,Integer pageNum, Integer pageSize) {
+    public CommonPage<DemReportInfo> reportInfoList(String companyId, String sourceType, Integer pageNum, Integer pageSize) {
         IPage<DemReportInfo> page = new Page<>(pageNum, pageSize);
         LambdaQueryWrapper<DemReportInfo> queryWrapper = Wrappers.lambdaQuery();
-        if ("2".equals(sourceType)){
+        if ("2".equals(sourceType)) {
             queryWrapper.eq(StringUtils.isNotBlank(companyId), DemReportInfo::getCompanyId, companyId)
                     .eq(DemReportInfo::getReportStatus, 1)
                     .orderByDesc(DemReportInfo::getId);
-        }else {
+        } else {
             queryWrapper.eq(StringUtils.isNotBlank(companyId), DemReportInfo::getCompanyId, companyId)
                     .orderByDesc(DemReportInfo::getId);
         }
@@ -53,25 +55,36 @@ public class DemReportInfoServiceImpl extends AbstractCrudService<DemReportInfoM
         List<DemReportInfoVo> list = new ArrayList<>();
         List<CompanyDataVo> companyList = demReportInfoVo.getCompanyList();
         Calendar now = Calendar.getInstance();
+
+        // 处理月份,Calendar.MONTH从0开始,需要+1
+        int year = now.get(Calendar.YEAR);
+        int month = now.get(Calendar.MONTH) + 1;
+        String statisticsTime = year + "-" + (month < 10 ? "0" + month : month);
+
         if (CollectionUtils.isNotEmpty(companyList)) {
-            List<String> companyIdList = new ArrayList<>();
-            for (int i = 0; i < companyList.size(); i++) {
-                companyIdList.add(companyList.get(i).getCompanyId());
-            }
-            List<DemReportInfo> list2 = new ArrayList<>();
-            LambdaQueryWrapper<DemReportInfo> queryWrapper1 = Wrappers.lambdaQuery();
-            queryWrapper1.select(DemReportInfo::getId, DemReportInfo::getCompanyId)
-                    .in(DemReportInfo::getCompanyId, companyIdList)
-                    .eq(DemReportInfo::getStatisticsTime, now.get(Calendar.YEAR)+"-"+now.get(Calendar.MONTH)).groupBy(DemReportInfo::getCompanyId);
-            list2 = this.list(queryWrapper1);
-            for (int i = 0; i < companyList.size(); i++) {
-                for (int j = 0; j < list2.size(); j++) {
-                    if (companyList.get(i).getCompanyId().equals(list2.get(j).getCompanyId())) {
-                        DemReportInfoVo demReportInfoVo1 = new DemReportInfoVo();
-                        demReportInfoVo1.setId(list2.get(j).getId());
-                        demReportInfoVo1.setCompanyName(companyList.get(i).getCompanyName());
-                        demReportInfoVo1.setCompanyId(companyList.get(i).getCompanyId());
-                        list.add(demReportInfoVo1);
+            List<String> companyIdList = companyList.stream()
+                    .map(CompanyDataVo::getCompanyId)
+                    .collect(Collectors.toList());
+
+            QueryWrapper<DemReportInfo> queryWrapper1 = Wrappers.query();
+
+            queryWrapper1.select("company_id", "MAX(id) as id")
+                    .in("company_id", companyIdList)
+                    .eq("statistics_time", statisticsTime)
+                    .groupBy("company_id");
+
+            // 执行查询,MyBatis-Plus会自动将结果映射到DemReportInfo对象的对应字段
+            List<DemReportInfo> list2 = this.list(queryWrapper1);
+
+            for (CompanyDataVo company : companyList) {
+                for (DemReportInfo reportInfo : list2) {
+                    if (company.getCompanyId().equals(reportInfo.getCompanyId())) {
+                        DemReportInfoVo vo = new DemReportInfoVo();
+                        // 这里会拿到MAX(id)的值
+                        vo.setId(reportInfo.getId());
+                        vo.setCompanyName(company.getCompanyName());
+                        vo.setCompanyId(company.getCompanyId());
+                        list.add(vo);
                     }
                 }
             }
@@ -79,6 +92,7 @@ public class DemReportInfoServiceImpl extends AbstractCrudService<DemReportInfoM
         return list;
     }
 
+
     @Transactional
     @Override
     public void propelsReport(DemReportInfoIdVo demReportInfoIdVo) {

+ 23 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/DemFireStatisticsDTO.java

@@ -0,0 +1,23 @@
+package com.usky.fire.service.vo;
+
+import com.usky.fire.domain.DemFireStatistics;
+import lombok.Data;
+
+/**
+ *
+ * @author fyc
+ * @email yuchuan.fu@chinausky.com
+ * @date 2025/9/18
+ */
+@Data
+public class DemFireStatisticsDTO extends DemFireStatistics {
+    private String typeName1;
+    private String typeName2;
+    private String typeName3;
+    private String typeName4;
+    private String typeName5;
+
+    private Integer zid;
+    private String fireCauseType1;
+    private String fireSiteType1;
+}