Parcourir la source

生成报告数据查询代码

hanzhengyi il y a 2 ans
Parent
commit
14d8be528b

+ 5 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/domain/BaseCompanyAttach1.java

@@ -247,5 +247,10 @@ public class BaseCompanyAttach1 implements Serializable {
      */
     private String construction;
 
+    /**
+     * 产证
+     */
+    private String birthCert;
+
 
 }

+ 10 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/BaseDeviceStatusService.java

@@ -33,4 +33,14 @@ public interface BaseDeviceStatusService extends CrudService<BaseDeviceStatus> {
      */
     int deviceStatusCount(String companyId, Integer deviceStatus);
 
+    /**
+     * 根据设备状态及设备类型查询设备数量
+     *
+     * @param companyId    单位ID
+     * @param deviceStatus 设备状态(0:离线、1:正常、2:故障、3:告警)
+     * @param deviceType 设备状态(0:离线、1:正常、2:故障、3:告警)
+     * @return
+     */
+    int deviceStatusByTypeCount(String companyId, Integer deviceStatus, Integer deviceType);
+
 }

+ 27 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/BaseDeviceStatusServiceImpl.java

@@ -1,15 +1,19 @@
 package com.usky.fire.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.fire.domain.BaseDevice;
 import com.usky.fire.domain.BaseDeviceStatus;
 import com.usky.fire.mapper.BaseDeviceStatusMapper;
+import com.usky.fire.service.BaseDeviceService;
 import com.usky.fire.service.BaseDeviceStatusService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -23,6 +27,9 @@ import java.util.List;
 @Service
 public class BaseDeviceStatusServiceImpl extends AbstractCrudService<BaseDeviceStatusMapper, BaseDeviceStatus> implements BaseDeviceStatusService {
 
+    @Autowired
+    private BaseDeviceService baseDeviceService;
+
     @Override
     public List<BaseDeviceStatus> deviceStatusData(String deviceCode) {
         LambdaQueryWrapper<BaseDeviceStatus> queryWrapper = Wrappers.lambdaQuery();
@@ -40,4 +47,24 @@ public class BaseDeviceStatusServiceImpl extends AbstractCrudService<BaseDeviceS
         return count;
     }
 
+    @Override
+    public int deviceStatusByTypeCount(String companyId, Integer deviceStatus, Integer deviceType) {
+        LambdaQueryWrapper<BaseDevice> queryWrapper2 = Wrappers.lambdaQuery();
+        queryWrapper2.select(BaseDevice::getId, BaseDevice::getDeviceCode)
+                .eq(StringUtils.isNotBlank(companyId),BaseDevice::getCompanyId, companyId)
+                .eq(BaseDevice::getDeviceType, deviceType);
+        List<BaseDevice> list2 = baseDeviceService.list(queryWrapper2);
+        List<String> deviceCodeList = new ArrayList<>();
+        if (CollectionUtils.isNotEmpty(list2)) {
+            for (int j = 0; j < list2.size(); j++) {
+                deviceCodeList.add(list2.get(j).getDeviceCode());
+            }
+        }
+        LambdaQueryWrapper<BaseDeviceStatus> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(deviceStatus != null, BaseDeviceStatus::getDeviceStatus, deviceStatus)
+                .in(BaseDeviceStatus::getDeviceCode, deviceCodeList);
+        int count = this.count(queryWrapper);
+        return count;
+    }
+
 }

+ 137 - 16
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/impl/DemReportDataServiceImpl.java

@@ -1,26 +1,24 @@
 package com.usky.fire.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
-import com.usky.fire.domain.BaseCompany;
-import com.usky.fire.domain.DemReportData;
-import com.usky.fire.domain.DemReportInfo;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.fire.domain.*;
 import com.usky.fire.mapper.DemReportDataMapper;
-import com.usky.fire.service.BaseCompanyService;
-import com.usky.fire.service.DemReportDataService;
+import com.usky.fire.service.*;
 import com.usky.common.mybatis.core.AbstractCrudService;
-import com.usky.fire.service.DemReportInfoService;
 import com.usky.fire.service.config.pdf.MyHeaderFooter;
 import com.usky.fire.service.config.pdf.Watermark;
+import com.usky.fire.service.vo.DemReportDataVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
-import java.util.Calendar;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+
 import com.itextpdf.text.*;
 import com.itextpdf.text.pdf.*;
 import com.itextpdf.text.pdf.draw.DottedLineSeparator;
@@ -28,6 +26,7 @@ import com.itextpdf.text.pdf.draw.LineSeparator;
 
 import java.io.File;
 import java.io.FileOutputStream;
+import java.util.List;
 
 /**
  * <p>
@@ -45,6 +44,12 @@ public class DemReportDataServiceImpl extends AbstractCrudService<DemReportDataM
     @Autowired
     private DemReportInfoService demReportInfoService;
 
+    @Autowired
+    private BaseDeviceService baseDeviceService;
+
+    @Autowired
+    private BaseDeviceStatusService baseDeviceStatusService;
+
     @Override
     public void regularReportData() {
         try {
@@ -56,7 +61,8 @@ public class DemReportDataServiceImpl extends AbstractCrudService<DemReportDataM
                     Document document = new Document(PageSize.A4);// 建立一个Document对象
 
 // 2.建立一个书写器(Writer)与document对象关联
-                    File file = new File("/var/www/usky-file/202303/"+now.get(Calendar.YEAR)+now.get(Calendar.MONTH)+baseCompanies.get(i).getCompanyId()+".pdf");
+                    File file =
+                            new File("/var/www/usky-file/"+now.get(Calendar.YEAR)+"0"+now.get(Calendar.MONTH+1)+"/"+now.get(Calendar.YEAR)+now.get(Calendar.MONTH)+baseCompanies.get(i).getCompanyId()+".pdf");
 //                    File file = new File("D:\\"+now.get(Calendar.YEAR)+now.get(Calendar.MONTH)+baseCompanies.get(i).getCompanyId()+".pdf");
                     file.createNewFile();
                     PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
@@ -64,13 +70,128 @@ public class DemReportDataServiceImpl extends AbstractCrudService<DemReportDataM
                     writer.setPageEvent(new MyHeaderFooter());// 页眉/页脚
                     // 3.打开文档
                     document.open();
-                    document.addTitle("Title@PDF-Java");// 标题
-                    document.addAuthor("Author@umiz");// 作者
-                    document.addSubject("Subject@iText pdf sample");// 主题
-                    document.addKeywords("Keywords@iTextpdf");// 关键字
-                    document.addCreator("Creator@umiz`s");// 创建者
+                    document.addTitle("fire report");// 标题
+                    document.addAuthor("mhzd");// 作者
+//                    document.addSubject("Subject@iText pdf sample");// 主题
+//                    document.addKeywords("Keywords@iTextpdf");// 关键字
+//                    document.addCreator("Creator@umiz`s");// 创建者
+                    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+                    // 上月起始
+                    Calendar lastMonthFirstDateCal = Calendar.getInstance();
+                    lastMonthFirstDateCal.add(Calendar.MONTH, -1);
+                    lastMonthFirstDateCal.set(Calendar.DAY_OF_MONTH, 1);
+                    String lastMonthFirstTime = format.format(lastMonthFirstDateCal.getTime());
+                    // 上月末尾
+                    Calendar lastMonthEndDateCal = Calendar.getInstance();
+                    lastMonthEndDateCal.add(Calendar.MONTH, -1);
+                    lastMonthEndDateCal.set(
+                            Calendar.DAY_OF_MONTH, lastMonthEndDateCal.getActualMaximum(Calendar.DAY_OF_MONTH));
+                    String lastMonthEndTime = format.format(lastMonthEndDateCal.getTime());
+                    int fireDeviceNum = baseDeviceService.deviceCount(baseCompanies.get(i).getCompanyId(),1);
+                    int smokeDeviceNum = baseDeviceService.deviceCount(baseCompanies.get(i).getCompanyId(),3);
+                    int fireDeviceOfflineNum =
+                            baseDeviceStatusService.deviceStatusByTypeCount(baseCompanies.get(i).getCompanyId(),0,1);
+                    int smokeDeviceOfflineNum =
+                            baseDeviceStatusService.deviceStatusByTypeCount(baseCompanies.get(i).getCompanyId(),0,3);
+                    int fireDeviceHitchNum =
+                            baseDeviceStatusService.deviceStatusByTypeCount(baseCompanies.get(i).getCompanyId(),2,1);
+                    int smokeDeviceHitchNum =
+                            baseDeviceStatusService.deviceStatusByTypeCount(baseCompanies.get(i).getCompanyId(),2,3);
+                    int fireAlarmOfflineNum = fireDeviceOfflineNum+smokeDeviceOfflineNum;
+                    int fireAlarmHitchNum = fireDeviceHitchNum+smokeDeviceHitchNum;
+                    int fireAlarmNum = fireDeviceNum+smokeDeviceNum;
+                    double fireOnlineRate = 0;
+                    double fireFaultRate = 0;
+                    if (fireAlarmNum>0){
+                        fireOnlineRate = 1-Math.round(fireAlarmOfflineNum/fireAlarmNum*100)*0.01;
+                        fireFaultRate = Math.round(fireAlarmHitchNum/fireAlarmNum*100)*0.01;
+                    }
+                    LambdaQueryWrapper<BaseDevice> queryWrapper2 = Wrappers.lambdaQuery();
+                    queryWrapper2.select(BaseDevice::getId, BaseDevice::getDeviceCode)
+                            .eq(BaseDevice::getCompanyId, baseCompanies.get(i).getCompanyId())
+                            .in(BaseDevice::getDeviceType, 2,5,6)
+                            .notLike(BaseDevice::getDeviceName, "风机");
+                    List<BaseDevice> list2 = baseDeviceService.list(queryWrapper2);
+                    double waterOnlineRate = 0;
+                    double waterFaultRate = 0;
+                    if (CollectionUtils.isNotEmpty(list2)) {
+                        List<String> deviceCodeList = new ArrayList<>();
+                        for (int j = 0; j < list2.size(); j++) {
+                            deviceCodeList.add(list2.get(j).getDeviceCode());
+                        }
+                        List<BaseDeviceStatus> list3 = new ArrayList<>();
+                        List<BaseDeviceStatus> list3l = new ArrayList<>();
+                        if (CollectionUtils.isNotEmpty(deviceCodeList)) {
+                            LambdaQueryWrapper<BaseDeviceStatus> queryWrapper3 = Wrappers.lambdaQuery();
+                            queryWrapper3.select(BaseDeviceStatus::getId, BaseDeviceStatus::getDeviceCode)
+                                    .in(BaseDeviceStatus::getDeviceCode, deviceCodeList)
+                                    .ne(BaseDeviceStatus::getDeviceStatus,0);
+                            list3 = baseDeviceStatusService.list(queryWrapper3);
+                            waterOnlineRate = Math.round(list3.size()/list2.size()*100)*0.01;
+                            LambdaQueryWrapper<BaseDeviceStatus> queryWrapper3l = Wrappers.lambdaQuery();
+                            queryWrapper3l.select(BaseDeviceStatus::getId, BaseDeviceStatus::getDeviceCode)
+                                    .in(BaseDeviceStatus::getDeviceCode, deviceCodeList)
+                                    .eq(BaseDeviceStatus::getDeviceStatus,2);
+                            list3l = baseDeviceStatusService.list(queryWrapper3l);
+                            waterFaultRate = Math.round(list3l.size()/list2.size()*100)*0.01;
+                        }
+                    }
+                    LambdaQueryWrapper<BaseDevice> queryWrapper4 = Wrappers.lambdaQuery();
+                    queryWrapper4.select(BaseDevice::getId, BaseDevice::getDeviceCode)
+                            .eq(BaseDevice::getCompanyId, baseCompanies.get(i).getCompanyId())
+                            .eq(BaseDevice::getDeviceType, 6)
+                            .like(BaseDevice::getDeviceName, "风机");
+                    List<BaseDevice> list4 = baseDeviceService.list(queryWrapper4);
+                    double smokeOnlineRate = 0;
+                    double smokeFaultRate = 0;
+                    if (CollectionUtils.isNotEmpty(list4)) {
+                        List<String> deviceCodeList = new ArrayList<>();
+                        for (int j = 0; j < list4.size(); j++) {
+                            deviceCodeList.add(list4.get(j).getDeviceCode());
+                        }
+                        List<BaseDeviceStatus> list5 = new ArrayList<>();
+                        List<BaseDeviceStatus> list5l = new ArrayList<>();
+                        if (CollectionUtils.isNotEmpty(deviceCodeList)) {
+                            LambdaQueryWrapper<BaseDeviceStatus> queryWrapper5 = Wrappers.lambdaQuery();
+                            queryWrapper5.select(BaseDeviceStatus::getId, BaseDeviceStatus::getDeviceCode)
+                                    .in(BaseDeviceStatus::getDeviceCode, deviceCodeList)
+                                    .ne(BaseDeviceStatus::getDeviceStatus,0);
+                            list5 = baseDeviceStatusService.list(queryWrapper5);
+                            smokeOnlineRate = Math.round(list5.size()/list4.size())*0.01;
+                            LambdaQueryWrapper<BaseDeviceStatus> queryWrapper5l = Wrappers.lambdaQuery();
+                            queryWrapper5l.select(BaseDeviceStatus::getId, BaseDeviceStatus::getDeviceCode)
+                                    .in(BaseDeviceStatus::getDeviceCode, deviceCodeList)
+                                    .ne(BaseDeviceStatus::getDeviceStatus,2);
+                            list5l = baseDeviceStatusService.list(queryWrapper5l);
+                            smokeFaultRate = Math.round(list5l.size()/list4.size())*0.01;
+                        }
+                    }
+                    int efireDeviceNum = baseDeviceService.deviceCount(baseCompanies.get(i).getCompanyId(),7);
+                    int efireDeviceOfflineNum =
+                            baseDeviceStatusService.deviceStatusByTypeCount(baseCompanies.get(i).getCompanyId(),0,7);
+                    int efireDeviceHitchNum =
+                            baseDeviceStatusService.deviceStatusByTypeCount(baseCompanies.get(i).getCompanyId(),2,7);
+                    double efOnlineRate = 0;
+                    double efFaultRate = 0;
+                    if (efireDeviceNum>0){
+                        efOnlineRate = 1-Math.round(efireDeviceOfflineNum/efireDeviceNum*100)*0.01;
+                        efFaultRate = Math.round(efireDeviceHitchNum/efireDeviceNum*100)*0.01;
+                    }
+                    DemReportDataVo demReportDataVo = new DemReportDataVo();
+                    demReportDataVo.setLastMonthFirstTime(lastMonthFirstTime);
+                    demReportDataVo.setLastMonthEndTime(lastMonthEndTime);
+                    demReportDataVo.setFireOnlineRate(fireOnlineRate);
+                    demReportDataVo.setFireFaultRate(fireFaultRate);
+                    demReportDataVo.setWaterOnlineRate(waterOnlineRate);
+                    demReportDataVo.setWaterFaultRate(waterFaultRate);
+                    demReportDataVo.setSmokeOnlineRate(smokeOnlineRate);
+                    demReportDataVo.setSmokeFaultRate(smokeFaultRate);
+                    demReportDataVo.setEfOnlineRate(efOnlineRate);
+                    demReportDataVo.setEfFaultRate(efFaultRate);
 
 // 4.向文档中添加内容
+                    BaseCompany baseCompany = baseCompanies.get(i);
+
                     this.generatePDF(document,baseCompanies.get(i).getCompanyName());
 
 // 5.关闭文档

+ 217 - 0
service-fire/service-fire-biz/src/main/java/com/usky/fire/service/vo/DemReportDataVo.java

@@ -0,0 +1,217 @@
+package com.usky.fire.service.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.usky.fire.domain.BaseBuild;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author han
+ * @since 2023-03-14
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class DemReportDataVo implements Serializable {
+
+    /**
+     * 单位名称
+     */
+    private String companyName;
+
+    /**
+     * 统计开始时间
+     */
+    private String lastMonthFirstTime;
+
+    /**
+     * 统计结束时间
+     */
+    private String lastMonthEndTime;
+
+    /**
+     * 火灾报警系统在线率
+     */
+    private double fireOnlineRate;
+
+    /**
+     * 火灾报警系统故障率
+     */
+    private double fireFaultRate;
+
+    /**
+     * 火灾报警系统超时未处理数量
+     */
+    private Integer fireUnhandled;
+
+    /**
+     * 消防水系统在线率
+     */
+    private double waterOnlineRate;
+
+    /**
+     * 消防水系统故障率
+     */
+    private double waterFaultRate;
+
+    /**
+     * 消防水系统超时未处理数量
+     */
+    private Integer waterUnhandled;
+
+    /**
+     * 电气火灾系统在线率
+     */
+    private double efOnlineRate;
+
+    /**
+     * 电气火灾系统故障率
+     */
+    private double efFaultRate;
+
+    /**
+     * 电气火灾系统超时未处理数量
+     */
+    private Integer efUnhandled;
+
+    /**
+     * 防排烟系统在线率
+     */
+    private double smokeOnlineRate;
+
+    /**
+     * 防排烟系统故障率
+     */
+    private double smokeFaultRate;
+
+    /**
+     * 防排烟系统超时未处理数量
+     */
+    private Integer smokeUnhandled;
+
+    /**
+     * 组织制度落实状态
+     */
+    private Integer systemStatus;
+
+    /**
+     * 灭火和应急疏散预案
+     */
+    private Integer planStatus;
+
+    /**
+     * 员工消防安全培训
+     */
+    private Integer trainStatus;
+
+    /**
+     * 消防安全管理人
+     */
+    private Integer managerStatus;
+
+    /**
+     * 消防档案
+     */
+    private Integer archivesStatus;
+
+    /**
+     * 消防重点部位
+     */
+    private Integer partsStatus;
+
+    /**
+     * 消控室持证数量
+     */
+    private Integer licenseNum;
+
+    /**
+     * 消防联动控制设备运行情况
+     */
+    private Integer fireLinkageStatus;
+
+    /**
+     * 防火检查、巡查
+     */
+    private Integer fireInspectStatus;
+
+    /**
+     * 消防设施、器材、消防安全标志定期组织维修保养
+     */
+    private Integer maintainStatus;
+
+    /**
+     * 应急演练情况
+     */
+    private Integer emergencyDrillStatus;
+
+    /**
+     * 宣传、培训记录情况
+     */
+    private Integer publicityRecordStatus;
+
+    /**
+     * 微站制度和人员落实
+     */
+    private Integer microStationStatus;
+
+    /**
+     * 和对讲抽查情况
+     */
+    private Integer intercomStatus;
+
+    /**
+     * 日常训练情况
+     */
+    private Integer dayTrainStatus;
+
+    /**
+     * 双随机检查情况近2年内检查隐患平均数
+     */
+    private Integer doubleRandomNum;
+
+    /**
+     * 近3年内处罚情况
+     */
+    private Integer punishNum;
+
+    /**
+     * 近2年内举报投诉情况
+     */
+    private Integer reportComplaintNum;
+
+    /**
+     * 重大隐患挂牌情况
+     */
+    private Integer hangShingleStatus;
+
+    /**
+     * 当年度火灾情况-一般火灾
+     */
+    private Integer generalFireNum;
+
+    /**
+     * 当年度火灾情况-较大及以上火灾
+     */
+    private Integer majorFireNum;
+
+    /**
+     * 当年度火灾情况-影响很大且具有典型意义火灾
+     */
+    private Integer fireDisasterNum;
+
+    /**
+     * 建筑清单
+     */
+    private List<BaseBuild> baseBuildList;
+
+}

+ 1 - 0
service-fire/service-fire-biz/src/main/resources/mapper/fire/BaseCompanyAttach1Mapper.xml

@@ -49,6 +49,7 @@
         <result column="building_height" property="buildingHeight" />
         <result column="building_structure" property="buildingStructure" />
         <result column="construction" property="construction" />
+        <result column="birth_cert" property="birthCert" />
     </resultMap>
 
 </mapper>