Преглед на файлове

防火值班代码优化;重点单位底数建表

fuyuchuan преди 1 месец
родител
ревизия
a54842306b
променени са 17 файла, в които са добавени 390 реда и са изтрити 26 реда
  1. 2 2
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/MybatisGeneratorUtils.java
  2. 29 2
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhBuildController.java
  3. 21 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhBuildRectifyController.java
  4. 1 1
      service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhFireDutyController.java
  5. 12 2
      service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhBuild.java
  6. 85 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhBuildRectify.java
  7. 1 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhFireDutyBusiness.java
  8. 18 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/MhBuildRectifyMapper.java
  9. 16 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/MhBuildRectifyService.java
  10. 12 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/MhBuildService.java
  11. 8 8
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BaseGgpFacilityServiceImpl.java
  12. 15 10
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BscEnterpriseScreenServiceImpl.java
  13. 20 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhBuildRectifyServiceImpl.java
  14. 53 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhBuildServiceImpl.java
  15. 67 1
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhFireDutyServiceImpl.java
  16. 9 0
      service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ServiceGuidanceVO.java
  17. 21 0
      service-fire/service-fire-biz/src/main/resources/mapper/fire/MhBuildRectifyMapper.xml

+ 2 - 2
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/MybatisGeneratorUtils.java

@@ -33,7 +33,7 @@ public class MybatisGeneratorUtils {
         projectPath+="/"+model;
         gc.setOutputDir(projectPath+ "/src/main/java");  //生成路径(一般都是生成在此项目的src/main/java下面)
         //修改为自己的名字
-        gc.setAuthor("han"); //设置作者
+        gc.setAuthor("fu"); //设置作者
         gc.setOpen(false);
         gc.setFileOverride(true); //第二次生成会把第一次生成的覆盖掉
         gc.setServiceName("%sService"); //生成的service接口名字首字母是否为I,这样设置就没有
@@ -71,7 +71,7 @@ public class MybatisGeneratorUtils {
         // strategy.setTablePrefix("t_"); // 表名前缀
         strategy.setEntityLombokModel(true); //使用lombok
         //修改自己想要生成的表
-        strategy.setInclude(new String[]{"mh_fire_duty", "mh_fire_duty_business"});  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
+        strategy.setInclude(new String[]{"mh_build_rectify"});  // 逆向工程使用的表   如果要生成多个,这里可以传入String[]
         mpg.setStrategy(strategy);
 
         // 关闭默认 xml 生成,调整生成 至 根目录

+ 29 - 2
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhBuildController.java

@@ -1,10 +1,17 @@
 package com.usky.fire.controller.web;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.usky.common.core.bean.ApiResult;
+import com.usky.fire.domain.MhBuild;
+import com.usky.fire.service.MhBuildService;
+import com.usky.fire.service.vo.BaseCompanyLonLatVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
 
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -18,5 +25,25 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/mhBuild")
 public class MhBuildController {
 
+    @Autowired
+    private MhBuildService mhBuildService;
+
+    /**
+     *  获取经纬度
+     */
+    @GetMapping("getLonLat")
+    public ApiResult<List<Map<String, Object>>> getLonLat() {
+        return ApiResult.success(mhBuildService.getLonLat());
+    }
+
+    /**
+     * 经纬度转换
+     */
+    @PutMapping("lonLatConversion")
+    public ApiResult<Void> lonLatConversion(@RequestBody List<MhBuild> list) {
+        mhBuildService.lonLatConversion(list);
+        return ApiResult.success();
+    }
+
 }
 

+ 21 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhBuildRectifyController.java

@@ -0,0 +1,21 @@
+package com.usky.fire.controller.web;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author fu
+ * @since 2025-10-20
+ */
+@Controller
+@RequestMapping("/mhBuildRectify")
+public class MhBuildRectifyController {
+
+}
+

+ 1 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/controller/web/MhFireDutyController.java

@@ -84,7 +84,7 @@ public class MhFireDutyController {
         return ApiResult.success(fireDutyService.getPage(pageNum, pageSize, startTime, endTime, memberName, id, type));
     }
 
-    @GetMapping("/export")
+    @PostMapping("/export")
     @ApiOperation("批量导出值班记录到Excel")
     @Log(title = "导出防火值班记录", businessType = BusinessType.EXPORT)
     public void export(HttpServletResponse response,

+ 12 - 2
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhBuild.java

@@ -39,15 +39,25 @@ public class MhBuild implements Serializable {
     private String buildName;
 
     /**
-     * 经度
+     * 经度(旧)
      */
     private String lon;
 
     /**
-     * 纬度
+     * 纬度(旧)
      */
     private String lat;
 
+    /**
+     * 经度
+     */
+    private String longitude;
+
+    /**
+     * 纬度(旧)
+     */
+    private String latitude;
+
     /**
      * 区域
      */

+ 85 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhBuildRectify.java

@@ -0,0 +1,85 @@
+package com.usky.fire.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author fu
+ * @since 2025-10-20
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class MhBuildRectify implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 建筑名称
+     */
+    private String buildingName;
+
+    /**
+     * 建筑地址
+     */
+    private String buildingAddress;
+
+    /**
+     * 街道
+     */
+    private String street;
+
+    /**
+     * 建筑类型
+     */
+    private String buildingType;
+
+    /**
+     * 物联网服务商
+     */
+    private String iotServiceProvider;
+
+    /**
+     * 接入状态(0:未接入;1:已接入)
+     */
+    private Integer accessStatus;
+
+    /**
+     * 建筑物安全评分
+     */
+    private Double buildingSecurityScore;
+
+    /**
+     * 安全评分问题
+     */
+    private String securityScoreProblem;
+
+    /**
+     * 通知整改对象姓名
+     */
+    private String notificationRectificationPerson;
+
+    /**
+     * 手机号码
+     */
+    private String phoneNumber;
+
+    /**
+     * 通知整改时间
+     */
+    private LocalDateTime notificationRectificationTime;
+
+
+}

+ 1 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/MhFireDutyBusiness.java

@@ -3,6 +3,7 @@ package com.usky.fire.domain;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
+
 import java.time.LocalDateTime;
 import java.io.Serializable;
 

+ 18 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/mapper/MhBuildRectifyMapper.java

@@ -0,0 +1,18 @@
+package com.usky.fire.mapper;
+
+import com.usky.fire.domain.MhBuildRectify;
+import com.usky.common.mybatis.core.CrudMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author fu
+ * @since 2025-10-20
+ */
+@Repository
+public interface MhBuildRectifyMapper extends CrudMapper<MhBuildRectify> {
+
+}

+ 16 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/MhBuildRectifyService.java

@@ -0,0 +1,16 @@
+package com.usky.fire.service;
+
+import com.usky.fire.domain.MhBuildRectify;
+import com.usky.common.mybatis.core.CrudService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author fu
+ * @since 2025-10-20
+ */
+public interface MhBuildRectifyService extends CrudService<MhBuildRectify> {
+
+}

+ 12 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/MhBuildService.java

@@ -3,6 +3,9 @@ package com.usky.fire.service;
 import com.usky.fire.domain.MhBuild;
 import com.usky.common.mybatis.core.CrudService;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 闵行-建筑信息表 服务类
@@ -13,4 +16,13 @@ import com.usky.common.mybatis.core.CrudService;
  */
 public interface MhBuildService extends CrudService<MhBuild> {
 
+    /**
+     * 获取经纬度
+     */
+    List<Map<String, Object>> getLonLat();
+
+    /**
+     * 经纬度转换
+     */
+    void lonLatConversion(List<MhBuild> list);
 }

+ 8 - 8
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BaseGgpFacilityServiceImpl.java

@@ -38,10 +38,10 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
         if (baseGgpFacilityVO.getId() == null) {
             if (baseGgpFacilityVO.getFacilityType().size() == 2 && baseGgpFacilityVO.getFacilityType().get(0) == 39 && baseGgpFacilityVO.getFacilityType().get(1) == 42) {
                 LambdaQueryWrapper<BaseGgpFacility> query1 = Wrappers.lambdaQuery();
-                query1.select(BaseGgpFacility::getId, BaseGgpFacility::getFacilityName, BaseGgpFacility::getAddress,
-                        BaseGgpFacility::getFacilityType, BaseGgpFacility::getLongitude, BaseGgpFacility::getLatitude,
-                        BaseGgpFacility::getStreetTown, BaseGgpFacility::getContact, BaseGgpFacility::getContactPhone,
-                        BaseGgpFacility::getCheckComment);
+                // query1.select(BaseGgpFacility::getId, BaseGgpFacility::getFacilityName, BaseGgpFacility::getAddress,
+                //         BaseGgpFacility::getFacilityType, BaseGgpFacility::getLongitude, BaseGgpFacility::getLatitude,
+                //         BaseGgpFacility::getStreetTown, BaseGgpFacility::getContact, BaseGgpFacility::getContactPhone,
+                //         BaseGgpFacility::getCheckComment);
                 query1.eq(StringUtils.isNotBlank(baseGgpFacilityVO.getStreetTown()), BaseGgpFacility::getStreetTown,
                         baseGgpFacilityVO.getStreetTown());
                 query1.eq(BaseGgpFacility::getFacilityType, 39);
@@ -57,10 +57,10 @@ public class BaseGgpFacilityServiceImpl extends AbstractCrudService<BaseGgpFacil
                 LambdaQueryWrapper<BaseGgpFacility> query = Wrappers.lambdaQuery();
                 if (baseGgpFacilityVO.getFacilityType().size() == 1) {
                     if (baseGgpFacilityVO.getFacilityType().get(0) == 39) {
-                        query.select(BaseGgpFacility::getId, BaseGgpFacility::getFacilityName, BaseGgpFacility::getAddress,
-                                BaseGgpFacility::getFacilityType, BaseGgpFacility::getLongitude, BaseGgpFacility::getLatitude,
-                                BaseGgpFacility::getStreetTown, BaseGgpFacility::getContact, BaseGgpFacility::getContactPhone,
-                                BaseGgpFacility::getCheckComment);
+                        // query.select(BaseGgpFacility::getId, BaseGgpFacility::getFacilityName, BaseGgpFacility::getAddress,
+                        //         BaseGgpFacility::getFacilityType, BaseGgpFacility::getLongitude, BaseGgpFacility::getLatitude,
+                        //         BaseGgpFacility::getStreetTown, BaseGgpFacility::getContact, BaseGgpFacility::getContactPhone,
+                        //         BaseGgpFacility::getCheckComment);
                     }
                 }
                 query.eq(StringUtils.isNotBlank(baseGgpFacilityVO.getStreetTown()), BaseGgpFacility::getStreetTown, baseGgpFacilityVO.getStreetTown());

+ 15 - 10
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BscEnterpriseScreenServiceImpl.java

@@ -9,11 +9,9 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.core.util.Arith;
 import com.usky.common.mybatis.core.AbstractCrudService;
-import com.usky.fire.domain.BaseCompany;
-import com.usky.fire.domain.BscEnterpriseScreen;
-import com.usky.fire.domain.DemBuildScore;
-import com.usky.fire.domain.DemBuildScoreRecord;
+import com.usky.fire.domain.*;
 import com.usky.fire.mapper.BscEnterpriseScreenMapper;
+import com.usky.fire.mapper.MhBuildRectifyMapper;
 import com.usky.fire.mapper.PatrolInspectionPlanSiteSonMapper;
 import com.usky.fire.service.*;
 import com.usky.fire.service.util.OnlineMethod;
@@ -85,6 +83,9 @@ public class BscEnterpriseScreenServiceImpl extends AbstractCrudService<BscEnter
     @Autowired
     private BaseDeviceStatusService baseDeviceStatusService;
 
+    @Autowired
+    private MhBuildRectifyMapper mhBuildRectifyMapper;
+
     @Override
     public Object screenDataStatistic(String dataType, String moduleType, String dataType1) {
         String companyId = baseUserCompanyService.companyId();
@@ -712,11 +713,15 @@ public class BscEnterpriseScreenServiceImpl extends AbstractCrudService<BscEnter
 
     @Override
     public ServiceGuidanceVO serviceGuidance() {
-        ServiceGuidanceVO serviceGuidanceVO = new ServiceGuidanceVO();
-        serviceGuidanceVO.setIotAlarmTips(9527L);
-        serviceGuidanceVO.setTotalPushTips(9527L);
-        serviceGuidanceVO.setRectificationCompletionRate(99.99);
-        serviceGuidanceVO.setReceiveRate(99.99);
-        return serviceGuidanceVO;
+        List<MhBuildRectify> list = mhBuildRectifyMapper.selectList(
+                Wrappers.<MhBuildRectify>lambdaQuery());
+
+        ServiceGuidanceVO vo = new ServiceGuidanceVO();
+        vo.setIotAlarmTips(382L);
+        vo.setTotalPushTips(382L);
+        vo.setRectificationCompletionRate(23.65);
+        vo.setReceiveRate(100.00);
+        vo.setMhBuildRectifies(list);
+        return vo;
     }
 }

+ 20 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhBuildRectifyServiceImpl.java

@@ -0,0 +1,20 @@
+package com.usky.fire.service.impl;
+
+import com.usky.fire.domain.MhBuildRectify;
+import com.usky.fire.mapper.MhBuildRectifyMapper;
+import com.usky.fire.service.MhBuildRectifyService;
+import com.usky.common.mybatis.core.AbstractCrudService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author fu
+ * @since 2025-10-20
+ */
+@Service
+public class MhBuildRectifyServiceImpl extends AbstractCrudService<MhBuildRectifyMapper, MhBuildRectify> implements MhBuildRectifyService {
+
+}

+ 53 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhBuildServiceImpl.java

@@ -1,10 +1,23 @@
 package com.usky.fire.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.fire.domain.BaseCompanyAttach1;
 import com.usky.fire.domain.MhBuild;
 import com.usky.fire.mapper.MhBuildMapper;
 import com.usky.fire.service.MhBuildService;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import org.apache.commons.collections4.ListUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -17,4 +30,44 @@ import org.springframework.stereotype.Service;
 @Service
 public class MhBuildServiceImpl extends AbstractCrudService<MhBuildMapper, MhBuild> implements MhBuildService {
 
+    @Autowired
+    private MhBuildMapper mhBuildMapper;
+
+    @Override
+    public List<Map<String, Object>> getLonLat() {
+        return mhBuildMapper.selectList(
+                        Wrappers.<MhBuild>lambdaQuery()
+                                .select(MhBuild::getId, MhBuild::getLon, MhBuild::getLat, MhBuild::getLongitude, MhBuild::getLatitude))
+                .stream()
+                .map(b -> {
+                    Map<String, Object> m = new HashMap<>(4);
+                    m.put("id", b.getId());
+                    m.put("lon", b.getLon());
+                    m.put("lat", b.getLat());
+                    m.put("longitude", b.getLongitude());
+                    m.put("latitude", b.getLatitude());
+                    return m;
+                })
+                .collect(Collectors.toList());
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void lonLatConversion(List<MhBuild> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            return;
+        }
+        LocalDateTime now = LocalDateTime.now();
+        ListUtils.partition(list, 2000)
+                .forEach(sub -> sub.forEach(b ->
+                        mhBuildMapper.update(
+                                null,
+                                Wrappers.<MhBuild>lambdaUpdate()
+                                        .set(MhBuild::getLongitude, b.getLongitude())
+                                        .set(MhBuild::getLatitude, b.getLatitude())
+                                        .set(MhBuild::getUpdateTime, now)
+                                        .eq(MhBuild::getId, b.getId())
+                        )
+                ));
+    }
 }

+ 67 - 1
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/MhFireDutyServiceImpl.java

@@ -5,11 +5,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.usky.common.core.bean.CommonPage;
 import com.usky.common.core.exception.BusinessException;
+import com.usky.fire.domain.BaseCompany;
 import com.usky.fire.domain.MhCompany;
 import com.usky.fire.domain.MhFireDuty;
 import com.usky.fire.domain.MhFireDutyBusiness;
 import com.usky.fire.mapper.MhFireDutyBusinessMapper;
 import com.usky.fire.mapper.MhFireDutyMapper;
+import com.usky.fire.service.BaseCompanyService;
 import com.usky.fire.service.MhFireDutyBusinessService;
 import com.usky.fire.service.MhFireDutyService;
 import com.usky.common.mybatis.core.AbstractCrudService;
@@ -48,6 +50,8 @@ public class MhFireDutyServiceImpl extends AbstractCrudService<MhFireDutyMapper,
     private MhFireDutyBusinessService businessService;
     @Autowired
     private MhFireDutyBusinessMapper businessMapper;
+    @Autowired
+    private BaseCompanyService baseCompanyService;
 
     // private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
     @Override
@@ -194,6 +198,18 @@ public class MhFireDutyServiceImpl extends AbstractCrudService<MhFireDutyMapper,
                 .in(MhFireDutyBusiness::getDutyId, dutyIds);
         List<MhFireDutyBusiness> businessList = businessMapper.selectList(businessWrapper);
 
+        List<String> companyIds = businessList.stream().map(MhFireDutyBusiness::getUnit).distinct().collect(Collectors.toList());
+
+        LambdaQueryWrapper<BaseCompany> companyWrapper = new LambdaQueryWrapper<>();
+        companyWrapper.select(BaseCompany::getCompanyName, BaseCompany::getCompanyId)
+                .in(BaseCompany::getCompanyId, companyIds);
+        Map<String, String> companyMap = baseCompanyService.list(companyWrapper).stream()
+                .collect(Collectors.toMap(BaseCompany::getCompanyId, BaseCompany::getCompanyName));
+
+        for(MhFireDutyBusiness dutyBusiness : businessList){
+            dutyBusiness.setUnit(companyMap.get(dutyBusiness.getUnit()));
+        }
+
         Map<String, List<MhFireDutyBusiness>> businessMap = businessList.stream()
                 .collect(Collectors.groupingBy(biz -> biz.getDutyId() + "_" + biz.getBusinessType()));
 
@@ -231,6 +247,11 @@ public class MhFireDutyServiceImpl extends AbstractCrudService<MhFireDutyMapper,
                 .orderByDesc(MhFireDuty::getDutyDate);
         List<MhFireDuty> dutyList = this.list(queryWrapper);
 
+        if (dutyList.isEmpty()) {
+            exportEmptyTemplate(response);
+            return;
+        }
+
         List<Long> dutyIds = dutyList.stream().map(MhFireDuty::getId).collect(Collectors.toList());
         List<MhFireDutyBusiness> allBusiness = businessMapper.selectList(
                 new LambdaQueryWrapper<MhFireDutyBusiness>()
@@ -243,6 +264,18 @@ public class MhFireDutyServiceImpl extends AbstractCrudService<MhFireDutyMapper,
                         Collectors.groupingBy(MhFireDutyBusiness::getBusinessType)
                 ));
 
+        List<String> companyIds = allBusiness.stream().map(MhFireDutyBusiness::getUnit).distinct().collect(Collectors.toList());
+
+        LambdaQueryWrapper<BaseCompany> companyWrapper = new LambdaQueryWrapper<>();
+        companyWrapper.select(BaseCompany::getCompanyName, BaseCompany::getCompanyId)
+                .in(BaseCompany::getCompanyId, companyIds);
+        Map<String, String> companyMap = baseCompanyService.list(companyWrapper).stream()
+                .collect(Collectors.toMap(BaseCompany::getCompanyId, BaseCompany::getCompanyName));
+
+        for(MhFireDutyBusiness dutyBusiness : allBusiness){
+            dutyBusiness.setUnit(companyMap.get(dutyBusiness.getUnit()));
+        }
+
         Workbook workbook = new XSSFWorkbook();
         Sheet sheet = workbook.createSheet("批量坐班值守任务表");
 
@@ -260,7 +293,7 @@ public class MhFireDutyServiceImpl extends AbstractCrudService<MhFireDutyMapper,
                 new TaskDef(7, "高温气温35℃以上时,每日10:00-16:00期间,调取营区监控等方式,对各训练区域进行动态监测。重点排查是否存在违规训练行为,做好监控画面截图留存,发现问题立即汇报。")
         );
 
-        int currentRow = 0; // 当前行指针,逐行填充
+        int currentRow = 0;
         for (MhFireDuty duty : dutyList) {
             // 获取当前记录的子表分组数据(默认空Map)
             Map<Integer, List<MhFireDutyBusiness>> businessMap = dutyBusinessMap.getOrDefault(
@@ -334,6 +367,39 @@ public class MhFireDutyServiceImpl extends AbstractCrudService<MhFireDutyMapper,
         workbook.close();
     }
 
+    private void exportEmptyTemplate(HttpServletResponse response) throws IOException {
+        Workbook wb = new XSSFWorkbook();
+        Sheet sh = wb.createSheet("批量坐班值守任务表");
+
+        // 样式与主逻辑保持一致
+        CellStyle titleStyle = createTitleStyle(wb);
+        CellStyle headerStyle = createHeaderStyle(wb);
+
+        /* ---------- 标题行 ---------- */
+        Row titleRow = sh.createRow(0);
+        Cell titleCell = titleRow.createCell(0);
+        titleCell.setCellValue("坐班值守岗位工作量化任务(防火值班员/行政值班员)");
+        titleCell.setCellStyle(titleStyle);
+        sh.addMergedRegion(new CellRangeAddress(0, 0, 0, 3));
+
+        /* ---------- 表头行 ---------- */
+        Row headerRow = sh.createRow(1);
+        String[] headers = {"时间", "值班人员", "工作任务", "完成情况"};
+        for (int i = 0; i < headers.length; i++) {
+            Cell c = headerRow.createCell(i);
+            c.setCellValue(headers[i]);
+            c.setCellStyle(headerStyle);
+            sh.setColumnWidth(i, i == 2 ? 256 * 60 : 256 * 20);
+        }
+
+        /* ---------- 输出 ---------- */
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        String fileName = URLEncoder.encode("批量坐班值守任务表.xlsx", "UTF-8");
+        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
+        wb.write(response.getOutputStream());
+        wb.close();
+    }
+
     /**
      * 获取任务完成情况(复用单条导出逻辑)
      */

+ 9 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/ServiceGuidanceVO.java

@@ -1,7 +1,11 @@
 package com.usky.fire.service.vo;
 
+import com.usky.fire.domain.MhBuild;
+import com.usky.fire.domain.MhBuildRectify;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  *
  * @author fyc
@@ -30,4 +34,9 @@ public class ServiceGuidanceVO {
      * 整改完成率
      */
     private double rectificationCompletionRate;
+
+    /**
+     * 待整改单位信息
+     */
+    private List<MhBuildRectify> mhBuildRectifies;
 }

+ 21 - 0
service-fire/service-fire-biz/src/main/resources/mapper/fire/MhBuildRectifyMapper.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.usky.fire.mapper.MhBuildRectifyMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.usky.fire.domain.MhBuildRectify">
+        <id column="id" property="id" />
+        <result column="building_name" property="buildingName" />
+        <result column="building_address" property="buildingAddress" />
+        <result column="street" property="street" />
+        <result column="building_type" property="buildingType" />
+        <result column="iot_service_provider" property="iotServiceProvider" />
+        <result column="access_status" property="accessStatus" />
+        <result column="building_security_score" property="buildingSecurityScore" />
+        <result column="security_score_problem" property="securityScoreProblem" />
+        <result column="notification_rectification_person" property="notificationRectificationPerson" />
+        <result column="phone_number" property="phoneNumber" />
+        <result column="notification_rectification_time" property="notificationRectificationTime" />
+    </resultMap>
+
+</mapper>