Browse Source

“巡检分页查询;监控车辆轨迹筛选;指标相关值统计污水处理量;统计报表同比环比计算”

yangjunfeng 1 năm trước cách đây
mục cha
commit
98d8798644

+ 6 - 7
snws-gps/snws-gps-boot/src/main/java/com/tofly/gpsboot/controller/monitor/MonitorCenterController.java

@@ -168,17 +168,16 @@ public class MonitorCenterController {
             deptIdList = departmentClient.getDepartmentPage(monitorDto.getDepartmentId(),"1").getResult()
                     .stream().map(Department::getId).collect(Collectors.toList());
         }
+
+        List<String> commonCars = carBaseinfoService.getCommonCarInfo();
+        List<Long> finalDeptIdList = deptIdList;
         Page<CarBaseinfo> page1 = carBaseinfoService.page(page, Wrappers.<CarBaseinfo>lambdaQuery()
-                        .in(CollUtil.isNotEmpty(deptIdList), CarBaseinfo::getDepartmentId, deptIdList)
                         .eq(monitorDto.getCarId() != null, CarBaseinfo::getId, monitorDto.getCarId())
                         .eq(monitorDto.getUserId() != null, CarBaseinfo::getManager, monitorDto.getUserId())
-        );
+                        .and(wrapper-> wrapper.in(CollUtil.isNotEmpty(finalDeptIdList), CarBaseinfo::getDepartmentId, finalDeptIdList)
+                                .or()
+                                .in(CarBaseinfo::getCarNumber, commonCars)));
         List<CarBaseinfo> records = page1.getRecords();
-        List<String> commonCars = carBaseinfoService.getCommonCarInfo();
-        List<CarBaseinfo> commonCarList = carBaseinfoService.list(Wrappers.<CarBaseinfo>lambdaQuery()
-                .in(CarBaseinfo::getCarNumber, commonCars)
-        );
-        records.addAll(commonCarList);
         records.forEach(car -> {
             //查询es
             EsCarGpsUploadQueryDto dto = new EsCarGpsUploadQueryDto();

+ 14 - 18
snws-gps/snws-gps-boot/src/main/java/com/tofly/gpsboot/service/paln/task/impl/PlanServiceImpl.java

@@ -10,42 +10,36 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
 import com.tofly.api.DepartmentClient;
-import com.tofly.api.UserClent;
 import com.tofly.common.core.util.DateUtil;
 import com.tofly.common.oauth.util.SecurityUtils;
 import com.tofly.gpsboot.common.Constant;
 import com.tofly.gpsboot.common.system.*;
-import com.tofly.gpsboot.service.comm.IAuditService;
-import com.tofly.gpsboot.service.paln.HydrantrecordService;
-import com.tofly.gpsboot.service.paln.LeakRecordService;
-import com.tofly.gpsboot.service.paln.PlantypeService;
-
-import com.tofly.pojo.plan.dto.PlanDto;
-import com.tofly.pojo.plan.vo.*;
 import com.tofly.gpsboot.exception.BusinessException;
 import com.tofly.gpsboot.mapper.plan.PlanMapper;
 import com.tofly.gpsboot.service.comm.IDisposeDateService;
+import com.tofly.gpsboot.service.config.InspecttypeService;
+import com.tofly.gpsboot.service.config.PeriodService;
 import com.tofly.gpsboot.service.mq.IPlanMessageService;
+import com.tofly.gpsboot.service.paln.HydrantrecordService;
+import com.tofly.gpsboot.service.paln.LeakRecordService;
+import com.tofly.gpsboot.service.paln.PlantypeService;
 import com.tofly.gpsboot.service.paln.task.*;
 import com.tofly.gpsboot.service.process.PiperecordService;
 import com.tofly.gpsboot.service.process.PointtempService;
-import com.tofly.gpsboot.service.config.InspecttypeService;
-import com.tofly.gpsboot.service.config.PeriodService;
 import com.tofly.gpsboot.service.process.PressrecordService;
 import com.tofly.gpsboot.service.process.RecordService;
 import com.tofly.gpsboot.service.sign.PdasignService;
 import com.tofly.gpsboot.util.DateTimeUtil;
 import com.tofly.pojo.User;
 import com.tofly.pojo.plan.*;
-import com.tofly.pojo.plan.Record;
-
-import io.swagger.annotations.ApiModelProperty;
+import com.tofly.pojo.plan.dto.PlanDto;
+import com.tofly.pojo.plan.vo.PlanDetailVo;
+import com.tofly.pojo.plan.vo.PlanVo;
+import com.tofly.pojo.plan.vo.PlanchildVo;
+import com.tofly.pojo.plan.vo.RecordVo;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
@@ -53,9 +47,7 @@ import org.springframework.util.StringUtils;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
-import java.time.LocalTime;
 import java.util.*;
-import java.util.concurrent.ThreadPoolExecutor;
 import java.util.stream.Collectors;
 
 
@@ -189,6 +181,10 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
         if (StringUtils.isEmpty(dto.getFlag())) {
             if (userIdList.size() > 0) {
                 dto.setUserIdList(userIdList);
+            } else {
+                userIdList = new HashSet<>();
+                userIdList.add(0L);
+                dto.setUserIdList(userIdList);
             }
         }
         Page infoPageList = baseMapper.getPlanPage(page, dto);

+ 72 - 3
snws-monitor/snws-monitor-boot/src/main/java/com/tofly/monitor/screenDisplay/entity/TfDayStatistics.java

@@ -152,12 +152,36 @@ public class TfDayStatistics extends Model<TfDayStatistics> {
     @ApiModelProperty(value = "污水处理量(m³)")
     @TableField(exist = false)
     private Double sewageWater;
+    /**
+     * 污水处理量(m³)环比
+     */
+    @ApiModelProperty(value = "污水处理量(m³)环比")
+    @TableField(exist = false)
+    private Float sewageWaterMoM;
+    /**
+     * 污水处理量(m³)同比
+     */
+    @ApiModelProperty(value = "污水处理量(m³)同比")
+    @TableField(exist = false)
+    private Float sewageWaterYoY;
     /**
      * 污泥处理量(m³)
      */
     @ApiModelProperty(value = "污泥处理量(m³)")
     @TableField(exist = false)
     private Double sludgeHandle;
+    /**
+     * 污泥处理量(m³)环比
+     */
+    @ApiModelProperty(value = "污泥处理量(m³)环比")
+    @TableField(exist = false)
+    private Float sludgeHandleMoM;
+    /**
+     * 污泥处理量(m³)同比
+     */
+    @ApiModelProperty(value = "污泥处理量(m³)同比")
+    @TableField(exist = false)
+    private Float sludgeHandleYoY;
     /**
      * 污泥含水率(%)
      */
@@ -170,21 +194,66 @@ public class TfDayStatistics extends Model<TfDayStatistics> {
     @ApiModelProperty(value = "耗能(kw·h)")
     @TableField(exist = false)
     private Double energy;
-
+    /**
+     * 耗能(kw·h)环比
+     */
+    @ApiModelProperty(value = "耗能(kw·h)环比")
+    @TableField(exist = false)
+    private Float energyMoM;
+    /**
+     * 耗能(kw·h)同比
+     */
+    @ApiModelProperty(value = "耗能(kw·h)同比")
+    @TableField(exist = false)
+    private Float energyYoY;
     /**
      * 吨水耗电量(kw·h/m³)
      */
     @ApiModelProperty(value = "吨水耗电量(kw·h/m³)")
     @TableField(exist = false)
     private Double energyWater;
-
+    /**
+     * 吨水耗电量(kw·h/m³)环比
+     */
+    @ApiModelProperty(value = "吨水耗电量(kw·h/m³)环比")
+    @TableField(exist = false)
+    private Float energyWaterMoM;
+    /**
+     * 吨水耗电量(kw·h/m³)同比
+     */
+    @ApiModelProperty(value = "吨水耗电量(kw·h/m³)同比")
+    @TableField(exist = false)
+    private Float energyWaterYoY;
     /**
      * 千吨水耗电量(kw·h/km³)
      */
     @ApiModelProperty(value = "千吨水耗电量(kw·h/km³)")
     @TableField(exist = false)
     private Double energyWaterThousand;
-
+    /**
+     * 吨泥耗电量(kw·h/吨)
+     */
+    @ApiModelProperty(value = "吨泥耗电量(kw·h/吨)")
+    @TableField(exist = false)
+    private Double energySludge;
+    /**
+     * 吨泥耗电量(kw·h/m³)环比
+     */
+    @ApiModelProperty(value = "吨泥耗电量(kw·h/m³)环比")
+    @TableField(exist = false)
+    private Float energySludgeMoM;
+    /**
+     * 吨泥耗电量(kw·h/m³)同比
+     */
+    @ApiModelProperty(value = "吨泥耗电量(kw·h/m³)同比")
+    @TableField(exist = false)
+    private Float energySludgeYoY;
+    /**
+     * 千吨泥耗电量(kw·h/千吨)
+     */
+    @ApiModelProperty(value = "千吨泥耗电量(kw·h/千吨)")
+    @TableField(exist = false)
+    private Double energySludgeThousand;
     /**
      * 自定义统计时间
      */

+ 2 - 2
snws-monitor/snws-monitor-boot/src/main/java/com/tofly/monitor/screenDisplay/entity/dto/WisdomDisplayDto.java

@@ -52,10 +52,10 @@ public class WisdomDisplayDto implements Serializable {
     @ApiModelProperty("结束时间 yyyy-MM-dd HH:mm:ss")
     private String endDate;
 
-    @ApiModelProperty("计算指标最大值最小值平均值开始时间")
+    @ApiModelProperty("计算上月/去年开始时间")
     private String startTime;
 
-    @ApiModelProperty("计算指标最大值最小值平均值结束时间")
+    @ApiModelProperty("计算上月/去年结束时间")
     private String endTime;
 
     @ApiModelProperty("开始年 yyyy")

+ 9 - 2
snws-monitor/snws-monitor-boot/src/main/java/com/tofly/monitor/screenDisplay/entity/vo/IndexValCensusVo.java

@@ -1,7 +1,5 @@
 package com.tofly.monitor.screenDisplay.entity.vo;
 
-import com.tofly.common.core.annotation.Excel;
-import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -18,12 +16,21 @@ import java.math.BigDecimal;
 public class IndexValCensusVo implements Serializable {
     private static final long serialVersionUID = 1L;
 
+    @ApiModelProperty(value = "今日污水处理量")
+    private BigDecimal sewageWaterToday;
+
+    @ApiModelProperty(value = "昨日污水处理量")
+    private BigDecimal sewageWaterYesterday;
+
     @ApiModelProperty(value = "上月污水处理量")
     private BigDecimal sewageWaterLastM;
 
     @ApiModelProperty(value = "本月污水处理量")
     private BigDecimal sewageWaterThisM;
 
+    @ApiModelProperty(value = "本季度污水处理量")
+    private BigDecimal sewageWaterQuarter;
+
     @ApiModelProperty(value = "去年污水处理量")
     private BigDecimal sewageWaterLastY;
 

+ 2 - 0
snws-monitor/snws-monitor-boot/src/main/java/com/tofly/monitor/screenDisplay/mapper/CustomDisplayMapper.java

@@ -92,6 +92,8 @@ public interface CustomDisplayMapper {
 
     List<TfDayStatistics> getFillIndexValStcDay(WisdomDisplayDto wisdomDisplayDto);
 
+    Double getFillStcDayTotal(@Param("censusDay") String censusDay, @Param("censusMonth") String censusMonth, @Param("censusQuarter") String censusQuarter, @Param("stationIds") Set<Long> stationIds);
+
     List<TfDayStatistics> getFillIndexValSludgeDay(WisdomDisplayDto wisdomDisplayDto);
 
     List<TfDayStatistics> getFillIndexValEcDay(WisdomDisplayDto wisdomDisplayDto);

+ 139 - 66
snws-monitor/snws-monitor-boot/src/main/java/com/tofly/monitor/screenDisplay/service/impl/CustomDisplayServiceImpl.java

@@ -39,6 +39,7 @@ import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -410,10 +411,26 @@ public class CustomDisplayServiceImpl implements CustomDisplayService {
         }
         IndexValCensusVo vo = new IndexValCensusVo();
         BigDecimal sewageWaterLastM = new BigDecimal(String.valueOf(customDisplayMapper.getIndexValLastM(stationIds).get("sewageWater")));
-        BigDecimal sewageWaterThisM = new BigDecimal(String.valueOf(customDisplayMapper.getIndexValThisM(stationIds).get("sewageWater")));
+        BigDecimal sewageWaterThisM = BigDecimal.valueOf(customDisplayMapper.getFillStcDayTotal(null, DateUtil.format(new Date(), "yyyy-MM"), null, stationIds));
+        BigDecimal sewageWaterToday = BigDecimal.valueOf(customDisplayMapper.getFillStcDayTotal(DateUtil.format(new Date(), "yyyy-MM-dd"), null, null, stationIds));
+        vo.setSewageWaterToday(sewageWaterToday);
+
+        // 获取当前时间的年份和季度
+        LocalDate current = LocalDate.now();
+        int year = current.getYear();
+        int quarter = (current.getMonthValue() - 1) / 3 + 1;
+        BigDecimal sewageWaterQuarter = BigDecimal.valueOf(customDisplayMapper.getFillStcDayTotal(null, null, year + "-" + quarter, stationIds));
+        vo.setSewageWaterQuarter(sewageWaterQuarter);
+
         SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy");
         SimpleDateFormat sdfMonth = new SimpleDateFormat("yyyy-MM");
+        SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd");
         Calendar c = Calendar.getInstance();
+        c.add(Calendar.DATE, -1);
+        String yesterday = sdfDay.format(c.getTime());
+        BigDecimal sewageWaterYesterday = BigDecimal.valueOf(customDisplayMapper.getFillStcDayTotal(yesterday, null, null, stationIds));
+        vo.setSewageWaterYesterday(sewageWaterYesterday);
+        c.add(Calendar.DATE, +1);
         String thisYear = sdfYear.format(c.getTime());
         String thisYearMonth = sdfMonth.format(c.getTime());
         BigDecimal sewageWaterThisY = new BigDecimal(String.valueOf(customDisplayMapper.getIndexValTotal(thisYear, null, stationIds).get("sewageWater")));
@@ -511,6 +528,8 @@ public class CustomDisplayServiceImpl implements CustomDisplayService {
                     info.setSewageWater(0.0);
                     info.setEnergyWater(0.0);
                     info.setEnergyWaterThousand(0.0);
+                    info.setEnergySludge(0.0);
+                    info.setEnergySludgeThousand(0.0);
                     List<TfDayStatistics> dayStatisticsEcFinal = dayStatisticsEc.stream()
                             .filter(e -> DateUtil.parse(e.getScadaTime(),"yyyy-MM-dd").compareTo(DateUtil.parse(info.getScadaTime(),"yyyy-MM-dd")) == 0
                                     && e.getStationId().equals(info.getStationId()))
@@ -539,89 +558,97 @@ public class CustomDisplayServiceImpl implements CustomDisplayService {
                         info.setEnergyWater(energy.divide(cumulativeFlow,4, RoundingMode.HALF_UP).doubleValue());
                         info.setEnergyWaterThousand(energy.divide(cumulativeFlow,7, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(1000)).doubleValue());
                     }
+                    if (info.getSludgeHandle() != null && info.getEnergy() != null && info.getSludgeHandle() != 0) {
+                        BigDecimal energy = BigDecimal.valueOf(info.getEnergy());
+                        BigDecimal sludgeHandle = BigDecimal.valueOf(info.getSludgeHandle());
+                        info.setEnergySludge(energy.divide(sludgeHandle,4, RoundingMode.HALF_UP).doubleValue());
+                        info.setEnergySludgeThousand(energy.divide(sludgeHandle,7, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(1000)).doubleValue());
+                    }
                 });
                 break;
             case "2":// 月
                 list = customDisplayMapper.getIndexValMonth(wis);
                 List<TfDayStatistics> monthStatistics = customDisplayMapper.getFillIndexValMonth(wis);
+                list = getFillData(list, monthStatistics);
                 list.forEach(info -> {
-                    info.setEnergy(0.0);
-                    info.setSludgeHandle(0.0);
-                    info.setSludgeWaterRate(0f);
-                    info.setSewageWater(0.0);
-                    info.setEnergyWater(0.0);
-                    info.setEnergyWaterThousand(0.0);
-                    List<TfDayStatistics> dayStatisticsFinal = monthStatistics.stream()
-                            .filter(e ->DateUtil.parse(e.getScadaTime(),"yyyy-MM").compareTo(DateUtil.parse(info.getScadaTime(),"yyyy-MM")) == 0
-                                    && e.getStationId().equals(info.getStationId()))
-                            .collect(Collectors.toList());
-                    if (CollUtil.isNotEmpty(dayStatisticsFinal)) {
-                        info.setSewageWater(dayStatisticsFinal.get(0).getSewageWater());
-                        info.setSludgeHandle(dayStatisticsFinal.get(0).getSludgeHandle());
-                        info.setEnergy(dayStatisticsFinal.get(0).getEnergy());
-                        info.setSludgeWaterRate(dayStatisticsFinal.get(0).getSludgeWaterRate());
+                    if (StringUtils.isBlank(wis.getStartDate()) || StringUtils.isBlank(wis.getEndDate())) {
+                        return;
                     }
-                    if (info.getSewageWater() != null && info.getEnergy() != null && info.getSewageWater() != 0) {
-                        BigDecimal energy = BigDecimal.valueOf(info.getEnergy());
-                        BigDecimal cumulativeFlow = BigDecimal.valueOf(info.getSewageWater());
-                        info.setEnergyWater(energy.divide(cumulativeFlow.multiply(BigDecimal.valueOf(10000)),4, RoundingMode.HALF_UP).doubleValue());
-                        info.setEnergyWaterThousand(energy.divide(cumulativeFlow.multiply(BigDecimal.valueOf(10000)),7, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(1000)).doubleValue());
+                    // 计算环比
+                    Date startDateMoM = DateUtil.parse(wis.getStartDate(), "yyyy-MM");
+                    Date endDateMoM = DateUtil.parse(wis.getEndDate(), "yyyy-MM");
+                    Calendar calendarMoM = Calendar.getInstance();
+                    calendarMoM.setTime(startDateMoM);
+                    calendarMoM.add(Calendar.MONTH, -1);
+                    wis.setStartDate(DateUtil.format(calendarMoM.getTime(), "yyyy-MM"));
+                    calendarMoM.setTime(endDateMoM);
+                    calendarMoM.add(Calendar.MONTH, -1);
+                    wis.setEndDate(DateUtil.format(calendarMoM.getTime(), "yyyy-MM"));
+                    List<TfDayStatistics> monthStatisticsMoM = customDisplayMapper.getIndexValMonth(wis);
+                    List<TfDayStatistics> monthStatisticsFillMoM = customDisplayMapper.getFillIndexValMonth(wis);
+                    List<TfDayStatistics> monthStatisticsMoMFinal = getFillData(monthStatisticsMoM, monthStatisticsFillMoM);
+                    if (CollUtil.isNotEmpty(monthStatisticsMoMFinal)) {
+                        TfDayStatistics statistics = monthStatisticsMoMFinal.get(0);
+                        info.setSewageWaterMoM(getYoyOrMomRate(BigDecimal.valueOf(info.getSewageWater()), BigDecimal.valueOf(statistics.getSewageWater())));
+                        info.setSludgeHandleMoM(getYoyOrMomRate(BigDecimal.valueOf(info.getSludgeHandle()), BigDecimal.valueOf(statistics.getSludgeHandle())));
+                        info.setEnergyMoM(getYoyOrMomRate(BigDecimal.valueOf(info.getEnergy()), BigDecimal.valueOf(statistics.getEnergy())));
+                        info.setEnergyWaterMoM(getYoyOrMomRate(BigDecimal.valueOf(info.getEnergyWater()), BigDecimal.valueOf(statistics.getEnergyWater())));
+                        info.setEnergySludgeMoM(getYoyOrMomRate(BigDecimal.valueOf(info.getEnergySludge()), BigDecimal.valueOf(statistics.getEnergySludge())));
+                    }
+                    // 计算同比
+                    Date startDateYoY = DateUtil.parse(wis.getStartDate(), "yyyy-MM");
+                    Date endDateYoY = DateUtil.parse(wis.getEndDate(), "yyyy-MM");
+                    Calendar calendarYoY = Calendar.getInstance();
+                    calendarYoY.setTime(startDateYoY);
+                    calendarYoY.add(Calendar.YEAR, -1);
+                    wis.setStartDate(DateUtil.format(calendarYoY.getTime(), "yyyy-MM"));
+                    calendarYoY.setTime(endDateYoY);
+                    calendarYoY.add(Calendar.YEAR, -1);
+                    wis.setEndDate(DateUtil.format(calendarYoY.getTime(), "yyyy-MM"));
+                    List<TfDayStatistics> monthStatisticsYoY = customDisplayMapper.getIndexValMonth(wis);
+                    List<TfDayStatistics> monthStatisticsFillYoY = customDisplayMapper.getFillIndexValMonth(wis);
+                    List<TfDayStatistics> monthStatisticsYoYFinal = getFillData(monthStatisticsYoY, monthStatisticsFillYoY);
+                    if (CollUtil.isNotEmpty(monthStatisticsYoYFinal)) {
+                        TfDayStatistics statistics = monthStatisticsYoYFinal.get(0);
+                        info.setSewageWaterYoY(getYoyOrMomRate(BigDecimal.valueOf(info.getSewageWater()), BigDecimal.valueOf(statistics.getSewageWater())));
+                        info.setSludgeHandleYoY(getYoyOrMomRate(BigDecimal.valueOf(info.getSludgeHandle()), BigDecimal.valueOf(statistics.getSludgeHandle())));
+                        info.setEnergyYoY(getYoyOrMomRate(BigDecimal.valueOf(info.getEnergy()), BigDecimal.valueOf(statistics.getEnergy())));
+                        info.setEnergyWaterYoY(getYoyOrMomRate(BigDecimal.valueOf(info.getEnergyWater()), BigDecimal.valueOf(statistics.getEnergyWater())));
+                        info.setEnergySludgeYoY(getYoyOrMomRate(BigDecimal.valueOf(info.getEnergySludge()), BigDecimal.valueOf(statistics.getEnergySludge())));
                     }
                 });
                 break;
 //            case "3":// 季
 //                list = customDisplayMapper.getIndexValQuarter(wis);
 //                List<TfDayStatistics> quarterStatistics = customDisplayMapper.getFillIndexValQuarter(wis);
-//                list.forEach(info -> {
-//                    info.setEnergy(0.0);
-//                    info.setSludgeHandle(0.0);
-//                    info.setSludgeWaterRate(0f);
-//                    info.setSewageWater(0.0);
-//                    info.setEnergyWater(0.0);
-//                    info.setEnergyWaterThousand(0.0);
-//                    List<TfDayStatistics> dayStatisticsFinal = quarterStatistics.stream()
-//                            .filter(e -> DateUtil.parse(e.getScadaTime(),"yyyy-q").compareTo(DateUtil.parse(info.getScadaTime(),"yyyy-q")) == 0
-//                                    && e.getStationId().equals(info.getStationId()))
-//                            .collect(Collectors.toList());
-//                    if (CollUtil.isNotEmpty(dayStatisticsFinal)) {
-//                        info.setSewageWater(dayStatisticsFinal.get(0).getSewageWater());
-//                        info.setSludgeHandle(dayStatisticsFinal.get(0).getSludgeHandle());
-//                        info.setEnergy(dayStatisticsFinal.get(0).getEnergy());
-//                        info.setSludgeWaterRate(dayStatisticsFinal.get(0).getSludgeWaterRate());
-//                    }
-//                    if (info.getSewageWater() != null && info.getEnergy() != null && info.getSewageWater() != 0) {
-//                        BigDecimal energy = BigDecimal.valueOf(info.getEnergy());
-//                        BigDecimal cumulativeFlow = BigDecimal.valueOf(info.getSewageWater());
-//                        info.setEnergyWater(energy.divide(cumulativeFlow,4, RoundingMode.HALF_UP).doubleValue());
-//                        info.setEnergyWaterThousand(energy.divide(cumulativeFlow,7, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(1000)).doubleValue());
-//                    }
-//                });
-//                break;
             case "4":// 年
                 list = customDisplayMapper.getIndexValYear(wis);
                 List<TfDayStatistics> yearStatistics = customDisplayMapper.getFillIndexValYear(wis);
+                list = getFillData(list, yearStatistics);
                 list.forEach(info -> {
-                    info.setEnergy(0.0);
-                    info.setSludgeHandle(0.0);
-                    info.setSludgeWaterRate(0f);
-                    info.setSewageWater(0.0);
-                    info.setEnergyWater(0.0);
-                    info.setEnergyWaterThousand(0.0);
-                    List<TfDayStatistics> dayStatisticsFinal = yearStatistics.stream()
-                            .filter(e -> DateUtil.parse(e.getScadaTime(),"yyyy").compareTo(DateUtil.parse(info.getScadaTime(),"yyyy")) == 0
-                                    && e.getStationId().equals(info.getStationId()))
-                            .collect(Collectors.toList());
-                    if (CollUtil.isNotEmpty(dayStatisticsFinal)) {
-                        info.setSewageWater(dayStatisticsFinal.get(0).getSewageWater());
-                        info.setSludgeHandle(dayStatisticsFinal.get(0).getSludgeHandle());
-                        info.setEnergy(dayStatisticsFinal.get(0).getEnergy());
-                        info.setSludgeWaterRate(dayStatisticsFinal.get(0).getSludgeWaterRate());
+                    if (StringUtils.isBlank(wis.getStartDate()) || StringUtils.isBlank(wis.getEndDate())) {
+                        return;
                     }
-                    if (info.getSewageWater() != null && info.getEnergy() != null && info.getSewageWater() != 0) {
-                        BigDecimal energy = BigDecimal.valueOf(info.getEnergy());
-                        BigDecimal cumulativeFlow = BigDecimal.valueOf(info.getSewageWater());
-                        info.setEnergyWater(energy.divide(cumulativeFlow.multiply(BigDecimal.valueOf(10000)),4, RoundingMode.HALF_UP).doubleValue());
-                        info.setEnergyWaterThousand(energy.divide(cumulativeFlow.multiply(BigDecimal.valueOf(10000)),7, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(1000)).doubleValue());
+                    // 计算同比
+                    Date startDateYoY = DateUtil.parse(wis.getStartDate(), "yyyy");
+                    Date endDateYoY = DateUtil.parse(wis.getEndDate(), "yyyy");
+                    Calendar calendarYoY = Calendar.getInstance();
+                    calendarYoY.setTime(startDateYoY);
+                    calendarYoY.add(Calendar.YEAR, -1);
+                    wis.setStartDate(DateUtil.format(calendarYoY.getTime(), "yyyy"));
+                    calendarYoY.setTime(endDateYoY);
+                    calendarYoY.add(Calendar.YEAR, -1);
+                    wis.setEndDate(DateUtil.format(calendarYoY.getTime(), "yyyy"));
+                    List<TfDayStatistics> monthStatisticsYoY = customDisplayMapper.getIndexValMonth(wis);
+                    List<TfDayStatistics> monthStatisticsFillYoY = customDisplayMapper.getFillIndexValMonth(wis);
+                    List<TfDayStatistics> monthStatisticsYoYFinal = getFillData(monthStatisticsYoY, monthStatisticsFillYoY);
+                    if (CollUtil.isNotEmpty(monthStatisticsYoYFinal)) {
+                        TfDayStatistics statistics = monthStatisticsYoYFinal.get(0);
+                        info.setSewageWaterYoY(getYoyOrMomRate(BigDecimal.valueOf(info.getSewageWater()), BigDecimal.valueOf(statistics.getSewageWater())));
+                        info.setSludgeHandleYoY(getYoyOrMomRate(BigDecimal.valueOf(info.getSludgeHandle()), BigDecimal.valueOf(statistics.getSludgeHandle())));
+                        info.setEnergyYoY(getYoyOrMomRate(BigDecimal.valueOf(info.getEnergy()), BigDecimal.valueOf(statistics.getEnergy())));
+                        info.setEnergyWaterYoY(getYoyOrMomRate(BigDecimal.valueOf(info.getEnergyWater()), BigDecimal.valueOf(statistics.getEnergyWater())));
+                        info.setEnergySludgeYoY(getYoyOrMomRate(BigDecimal.valueOf(info.getEnergySludge()), BigDecimal.valueOf(statistics.getEnergySludge())));
                     }
                 });
                 break;
@@ -1557,4 +1584,50 @@ public class CustomDisplayServiceImpl implements CustomDisplayService {
         return stationIds;
     }
 
+    /**
+     *
+     * @param list  数据统计列表
+     * @param monthStatistics 填报数据列表
+     * @return
+     * @description 获取数据统计的填报相关数据
+     */
+    public List<TfDayStatistics> getFillData(List<TfDayStatistics> list, List<TfDayStatistics> monthStatistics) {
+        if (CollUtil.isEmpty(list) || CollUtil.isEmpty(monthStatistics)) {
+            return list;
+        }
+        list.forEach(info -> {
+            info.setEnergy(0.0);
+            info.setSludgeHandle(0.0);
+            info.setSludgeWaterRate(0f);
+            info.setSewageWater(0.0);
+            info.setEnergyWater(0.0);
+            info.setEnergyWaterThousand(0.0);
+            info.setEnergySludge(0.0);
+            info.setEnergySludgeThousand(0.0);
+            List<TfDayStatistics> dayStatisticsFinal = monthStatistics.stream()
+                    .filter(e ->DateUtil.parse(e.getScadaTime(),"yyyy-MM").compareTo(DateUtil.parse(info.getScadaTime(),"yyyy-MM")) == 0
+                            && e.getStationId().equals(info.getStationId()))
+                    .collect(Collectors.toList());
+            if (CollUtil.isNotEmpty(dayStatisticsFinal)) {
+                info.setSewageWater(dayStatisticsFinal.get(0).getSewageWater());
+                info.setSludgeHandle(dayStatisticsFinal.get(0).getSludgeHandle());
+                info.setEnergy(dayStatisticsFinal.get(0).getEnergy());
+                info.setSludgeWaterRate(dayStatisticsFinal.get(0).getSludgeWaterRate());
+            }
+            if (info.getSewageWater() != null && info.getEnergy() != null && info.getSewageWater() != 0) {
+                BigDecimal energy = BigDecimal.valueOf(info.getEnergy());
+                BigDecimal cumulativeFlow = BigDecimal.valueOf(info.getSewageWater());
+                info.setEnergyWater(energy.divide(cumulativeFlow.multiply(BigDecimal.valueOf(10000)),4, RoundingMode.HALF_UP).doubleValue());
+                info.setEnergyWaterThousand(energy.divide(cumulativeFlow.multiply(BigDecimal.valueOf(10000)),7, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(1000)).doubleValue());
+            }
+            if (info.getSludgeHandle() != null && info.getEnergy() != null && info.getSludgeHandle() != 0) {
+                BigDecimal energy = BigDecimal.valueOf(info.getEnergy());
+                BigDecimal sludgeHandle = BigDecimal.valueOf(info.getSludgeHandle());
+                info.setEnergySludge(energy.divide(sludgeHandle,4, RoundingMode.HALF_UP).doubleValue());
+                info.setEnergySludgeThousand(energy.divide(sludgeHandle,7, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(1000)).doubleValue());
+            }
+        });
+        return list;
+    }
+
 }

+ 27 - 6
snws-monitor/snws-monitor-boot/src/main/resources/mapper/screenDisplay/CustomDisplayMapper.xml

@@ -1090,19 +1090,40 @@
     </select>
 
     <select id="getFillIndexValStcDay" resultType="com.tofly.monitor.screenDisplay.entity.TfDayStatistics">
-        select  CONVERT(VARCHAR(100), d.RECORD_TIME, 20) scada_Time,
-                f.ID station_Id,
-                ISNULL(d.DAY_OUT_WATER, 0) sewage_Water
-        from tf_fill_stc_w d
-        left join tf_ywpn_monitor_stationsiteinfo_w f on f.ID = d.BELONG_STATION_ID
+        select  CONVERT(VARCHAR(100), RECORD_TIME, 20) scada_Time,
+                BELONG_STATION_ID station_Id,
+                ISNULL(DAY_OUT_WATER, 0) sewage_Water
+        from tf_fill_stc_w
         WHERE
         1=1
         <if test="startDate != null and endDate != null">
-            AND CONVERT(VARCHAR(100), d.RECORD_TIME, 20) between #{startDate} and #{endDate}
+            AND CONVERT(VARCHAR(100), RECORD_TIME, 20) between #{startDate} and #{endDate}
         </if>
         ORDER BY scada_Time
     </select>
 
+    <select id="getFillStcDayTotal" resultType="Double">
+        select  ISNULL(SUM ( convert(decimal(18, 5), DAY_OUT_WATER) ), 0) sewage_Water
+        from tf_fill_stc_w
+        WHERE
+            1=1
+        <if test="censusDay != null and censusDay.trim() != ''">
+            AND CONVERT(VARCHAR(100), RECORD_TIME, 23) = #{censusDay}
+        </if>
+        <if test="censusMonth != null and censusMonth.trim() != ''">
+            AND datename(yyyy,RECORD_TIME) + '-' + datename(m,RECORD_TIME) = #{censusMonth}
+        </if>
+        <if test="censusQuarter != null and censusQuarter.trim() != ''">
+            AND datename(yyyy,RECORD_TIME) + '-' + datename(q,RECORD_TIME) = #{censusQuarter}
+        </if>
+        <if test="stationIds != null">
+            AND BELONG_STATION_ID in
+            <foreach item="item" index="index" collection="stationIds" separator="," open="(" close=")">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
     <select id="getFillIndexValSludgeDay" resultType="com.tofly.monitor.screenDisplay.entity.TfDayStatistics">
         select  CONVERT(VARCHAR(100), b.RECORD_TIME, 20) scada_Time,
                 f.ID station_Id,